
    7|h                         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y)    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                   T   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y)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                 h    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     c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/ernie.pyvalidate_environmentz$ErnieEmbeddings.validate_environment$   s[    #7$&68R$
  %9%
 !
 )=!!)
$%
     jsonc                     | j                    d}t        j                  | dddid| j                  i|      }|j	                         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   s_    ""##RS 	 }}j& 2 #D$5$56
 yy{r#   c           	      N   | j                   5  t        j                  d       | j                   d}t	        j
                  |dddd| j                  | j                  d      }t        |j                         j                  d            | _        d d d        y # 1 sw Y   y xY w)	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    ZZ 	ELL23#2233CDH==$60
 #7!%!5!5%)%=%=D !$DIIKOON$C DD	E 	E 	Es   BBB$textsc                 H   | j                   s| j                          t        dt        |      | j                        D cg c]  }|||| j                  z     }}g }|D ]  }| j                  d|D cg c]  }| c}i      }|j                  d      rT|j                  d      dk(  r2| j                          | j                  d|D cg c]  }| c}i      }nt        d|       |j                  |d   D cg c]  }|d   	 c}        |S c c}w c c}w c c}w c c}w )zEmbed search docs.

        Args:
            texts: The list of texts to embed

        Returns:
            List[List[float]]: List of embeddings, one for each text.
        r   input
error_codeo   Error from Ernie: data	embedding)	r   r;   rangelenr   r/   r:   
ValueErrorextend)r,   r<   itext_in_chunkslstchunktextr.   s           r!   embed_documentszErnieEmbeddings.embed_documentsU   s#      002 1c%j$//:
 !a$//)*
 
 # 	?E??Gu-Etd-E#FGDxx%88L)S088:??Gu5Mtd5M+NOD$'9$%@AAJJV=1+=>	? 

 .F 6N >s   D1	D	D9D
rL   c                 (   | j                   s| j                          | j                  d|gi      }|j                  d      rG|j                  d      dk(  r%| j                          | j                  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.
        r>   r?   r@   rA   rB   r   rC   )r   r;   r/   r:   rF   )r,   rL   r.   s      r!   embed_queryzErnieEmbeddings.embed_queryq   s       002$0188L!xx%,446$'89 #5dV!<==F|A{++r#   c                 L   K   t        d| j                  |       d{   S 7 w)zAsynchronous Embed query text.

        Args:
            text: The text to embed.

        Returns:
            List[float]: Embeddings for the text.
        N)r   rO   )r,   rL   s     r!   aembed_queryzErnieEmbeddings.aembed_query   s#      %T4+;+;TBBBBs   $"$c                    K   t        j                  |D cg c]  }| j                  |       c}  d{   }t        |      S c c}w 7 w)zAsynchronous Embed search docs.

        Args:
            texts: The list of texts to embed

        Returns:
            List[List[float]]: List of embeddings, one for each text.
        N)asynciogatherrQ   list)r,   r<   rL   results       r!   aembed_documentsz ErnieEmbeddings.aembed_documents   sB      ~~E'RD(9(9$(?'RSSF| (SSs   AAAA
A)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   floatrM   rO   rQ   rW   r   r#   r!   r   r      s   
 2$(NHSM(%)OXc]))-#-"&L(3-&J-J-INNE26L$ 4   v $ E$T#Y 4U3D 8, ,U ,*
Cs 
CtE{ 
CDI $tE{:K r#   r   )rS   loggingr^   typingr   r   r   r*   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.runnables.configr   langchain_core.utilsr	   r
   pydanticr   r   	getLoggerrX   r7   r   r   r#   r!   <module>rl      sc       ' '  6 0 ; ? *			8	$ 
JJi J	Jr#   