
    Ng                         d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ  ej        e          Z e	dd	
           G d dee                      ZdS )    N)DictListOptional)
deprecated)
Embeddings)run_in_executor)get_from_dict_or_envpre_init)	BaseModel
ConfigDictz0.0.13z8langchain_community.embeddings.QianfanEmbeddingsEndpoint)sincealternativec                      e Zd ZU dZdZee         ed<   dZee         ed<   dZ	ee         ed<   dZ
ee         ed<   dZeed<   d	Zeed
<    ej                    Z ed          Zededefd            ZdedefdZddZdee         deee                  fdZdedee         fdZdedee         fdZdee         deee                  fdZdS )ErnieEmbeddingsz'`Ernie Embeddings V1` embedding models.Nernie_api_baseernie_client_idernie_client_secretaccess_token   
chunk_sizezErnieBot-Embedding-V1
model_name )protected_namespacesvaluesreturnc                     t          |ddd          |d<   t          |dd          |d<   t          |dd          |d<   |S )Nr   ERNIE_API_BASEzhttps://aip.baidubce.comr   ERNIE_CLIENT_IDr   ERNIE_CLIENT_SECRET)r	   )clsr   s     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/ernie.pyvalidate_environmentz$ErnieEmbeddings.validate_environment$   sj    #7$&68R$
 $
  %9%
 %
 !
 )=!!)
 )
$%
     jsonc                     | j          d}t          j        | dddid| j        i|          }|                                S )Nz//rpc/2.0/ai_custom/v1/wenxinworkshop/embeddingsz/embedding-v1Content-Typeapplication/jsonr   )headersparamsr$   )r   requestspostr   r$   )selfr$   base_urlresps       r!   
_embeddingzErnieEmbeddings._embedding5   se    "SSS 	 }&&& 2 #D$56
 
 
 yy{{r#   c           	      P   | j         5  t                              d           | j         d}t	          j        |dddd| j        | j        d          }t          |	                                
                    d                    | _        d d d            d S # 1 swxY w Y   d S )	NzRefreshing access tokenz/oauth/2.0/tokenr'   )r&   Acceptclient_credentials)
grant_type	client_idclient_secret)r(   r)   r   )_lockloggerdebugr   r*   r+   r   r   strr$   getr   )r,   r-   r.   s      r!   _refresh_access_token_with_lockz/ErnieEmbeddings._refresh_access_token_with_lockC   s   Z 	E 	ELL2333#2DDDH=$60 
 #7!%!5%)%=   D !$DIIKKOON$C$C D DD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   BBB"Btextsc                 &     j         s                                   fdt          dt                     j                  D             }g }|D ]}                     dd |D             i          }|                    d          ra|                    d          dk    r6                                                       dd |D             i          }nt          d|           |                    d	 |d
         D                        |S )zEmbed search docs.

        Args:
            texts: The list of texts to embed

        Returns:
            List[List[float]]: List of embeddings, one for each text.
        c                 4    g | ]}||j         z            S r   )r   ).0ir,   r<   s     r!   
<listcomp>z3ErnieEmbeddings.embed_documents.<locals>.<listcomp>a   s:     
 
 
 !a$/))*
 
 
r#   r   inputc                     g | ]}|S r   r   r?   texts     r!   rA   z3ErnieEmbeddings.embed_documents.<locals>.<listcomp>g   s    -E-E-Etd-E-E-Er#   
error_codeo   c                     g | ]}|S r   r   rD   s     r!   rA   z3ErnieEmbeddings.embed_documents.<locals>.<listcomp>k   s    5M5M5Mtd5M5M5Mr#   Error from Ernie: c                     g | ]
}|d          S )	embeddingr   )r?   r@   s     r!   rA   z3ErnieEmbeddings.embed_documents.<locals>.<listcomp>n   s    ===1+===r#   data)	r   r;   rangelenr   r/   r:   
ValueErrorextend)r,   r<   text_in_chunkslstchunkr.   s   ``    r!   embed_documentszErnieEmbeddings.embed_documentsU   sH      	300222
 
 
 
 
1c%jj$/::
 
 
 # 	? 	?E??G-E-Eu-E-E-E#FGGDxx%% B88L))S0088:::??G5M5Mu5M5M5M+NOODD$%@$%@%@AAAJJ==V===>>>>
r#   rE   c                 j   | j         s|                                  |                     d|gi          }|                    d          rX|                    d          dk    r-|                                  |                     d|gi          }nt	          d|           |d         d         d         S )zEmbed query text.

        Args:
            text: The text to embed.

        Returns:
            List[float]: Embeddings for the text.
        rB   rF   rG   rI   rL   r   rK   )r   r;   r/   r:   rO   )r,   rE   r.   s      r!   embed_queryzErnieEmbeddings.embed_queryq   s       	300222$01188L!! 	>xx%%,,44666$'899 !<d!<!<===F|A{++r#   c                 >   K   t          d| j        |           d{V S )zAsynchronous Embed query text.

        Args:
            text: The text to embed.

        Returns:
            List[float]: Embeddings for the text.
        N)r   rV   )r,   rE   s     r!   aembed_queryzErnieEmbeddings.aembed_query   s/       %T4+;TBBBBBBBBBr#   c                 f    K   t          j         fd|D               d{V }t          |          S )zAsynchronous Embed search docs.

        Args:
            texts: The list of texts to embed

        Returns:
            List[List[float]]: List of embeddings, one for each text.
        c                 :    g | ]}                     |          S r   )rX   )r?   rE   r,   s     r!   rA   z4ErnieEmbeddings.aembed_documents.<locals>.<listcomp>   s'    'R'R'RD(9(9$(?(?'R'R'Rr#   N)asynciogatherlist)r,   r<   results   `  r!   aembed_documentsz ErnieEmbeddings.aembed_documents   sH       ~'R'R'R'RE'R'R'RSSSSSSSF||r#   )r   N) __name__
__module____qualname____doc__r   r   r9   __annotations__r   r   r   r   intr   	threadingLockr6   r   model_configr
   r   r"   objectdictr/   r;   r   floatrT   rV   rX   r_   r   r#   r!   r   r      s        
 21$(NHSM(((%)OXc]))))-#---"&L(3-&&&J-J---INE:2666L$ 4    X v $    E E E E$T#Y 4U3D    8, ,U , , , ,*
Cs 
CtE{ 
C 
C 
C 
CDI $tE{:K      r#   r   )r[   loggingrf   typingr   r   r   r*   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.runnables.configr   langchain_core.utilsr	   r
   pydanticr   r   	getLoggerr`   r7   r   r   r#   r!   <module>rt      s(         ' ' ' ' ' ' ' ' ' '  6 6 6 6 6 6 0 0 0 0 0 0 ; ; ; ; ; ; ? ? ? ? ? ? ? ? * * * * * * * *		8	$	$ 
J  J J J J Ji J J	 J J Jr#   