
    dhU                         % S SK JrJrJr  S SKrS SKJr  S SKJr  S SK	J
r
JrJrJrJr  S SKJr  S SKJr  Sr\\S	'    " S
 S\
\5      rg)    )AnyListOptionalN)
Embeddings)secret_from_env)	BaseModel
ConfigDictField	SecretStrmodel_validator)RequestException)Selfz)https://api.baichuan-ai.com/v1/embeddingsBAICHUAN_API_URLc                      \ rS rSr% SrSr\\S'   \" SSS9r	\
\S'    \" S	\" S
S/5      S9r\\S'    Sr\\S'    \" SSS9r\" SS9S\4S j5       rS\\
   S\\\\         4S jrS\\
   S\\\\         4S jrS\
S\\\      4S jrSrg)BaichuanTextEmbeddings"   at  Baichuan Text Embedding models.

Setup:
    To use, you should set the environment variable ``BAICHUAN_API_KEY`` to
    your API key or pass it as a named parameter to the constructor.

    .. code-block:: bash

        export BAICHUAN_API_KEY="your-api-key"

Instantiate:
    .. code-block:: python

        from langchain_community.embeddings import BaichuanTextEmbeddings

        embeddings = BaichuanTextEmbeddings()

Embed:
    .. code-block:: python

        # embed the documents
        vectors = embeddings.embed_documents([text1, text2, ...])

        # embed the query
        vectors = embeddings.embed_query(text)
NsessionzBaichuan-Text-Embeddingmodel)defaultalias
model_nameapi_keyBAICHUAN_API_KEYBAICHUAN_AUTH_TOKEN)r   default_factorybaichuan_api_key   
chunk_sizeT )populate_by_nameprotected_namespacesafter)modereturnc                     [         R                  " 5       nUR                  R                  SU R                  R                  5        3SSS.5        Xl        U $ )z/Validate that auth token exists in environment.zBearer identityzapplication/json)AuthorizationzAccept-EncodingzContent-type)requestsSessionheadersupdater   get_secret_valuer   )selfr   s     _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/baichuan.pyvalidate_environment+BaichuanTextEmbeddings.validate_environmentK   sU     ""$#*4+@+@+Q+Q+S*T!U#- 2	
     textsc           
      *   [        S[        U5      U R                  5       Vs/ sH  nXX R                  -    PM     nn/ nU H  nU R                  R	                  [
        XPR                  S.S9nUR                  5         UR                  S:X  a_  UR                  5       nUR                  S/ 5      n[        US S9n	UR                  U	 V
s/ sH  oR                  S/ 5      PM     sn
5        M  [        S	UR                   S
35      e   U$ s  snf s  sn
f )zInternal method to call Baichuan Embedding API and return embeddings.

Args:
    texts: A list of texts to embed.

Returns:
    A list of list of floats representing the embeddings, or None if an
    error occurs.
r   )inputr   )json   datac                 &    U R                  SS5      $ )Nindexr   )get)es    r.   <lambda>/BaichuanTextEmbeddings._embed.<locals>.<lambda>s   s    QUU7TUEVr1   )key	embeddingzError: Received status code z from `BaichuanEmbedding` API)rangelenr   r   postr   r   raise_for_statusstatus_coder5   r:   sortedextendr   )r-   r2   ichunk_textsembed_resultschunkresponseresp
embeddingssorted_embeddingsresults              r.   _embedBaichuanTextEmbeddings._embedY   s"    1c%j$//:
: a//)*: 	 
  E||(( 'Q ) H %%'##s*}}!XXfb1
$*:;V$W!$$?PQ?PVZZR0?PQ '283G3G2H I. . ' !. 9
& Rs   DD
c                 $    U R                  U5      $ )zPublic method to get embeddings for a list of documents.

Args:
    texts: The list of texts to embed.

Returns:
    A list of embeddings, one for each text, or None if an error occurs.
rP   )r-   r2   s     r.   embed_documents&BaichuanTextEmbeddings.embed_documents   s     {{5!!r1   textc                 :    U R                  U/5      nUb  US   $ S$ )zPublic method to get embedding for a single query text.

Args:
    text: The text to embed.

Returns:
    Embeddings for the text, or None if an error occurs.
Nr   rS   )r-   rV   rO   s      r.   embed_query"BaichuanTextEmbeddings.embed_query   s(     dV$".vay8D8r1   )r   )__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r
   r   strr   r   r   r   intr	   model_configr   r   r/   r   r   floatrP   rT   rX   __static_attributes__r   r1   r.   r   r   "   s    6 GS$=WMJM0"'');=R(ST#i  RJ2t"ML'"d  #&DI &(4U3D*E &P	"T#Y 	"8De<M3N 	"
9 
9e(= 
9r1   r   )typingr   r   r   r(   langchain_core.embeddingsr   langchain_core.utilsr   pydanticr   r	   r
   r   r   r   typing_extensionsr   r   r`   r_   r   r   r1   r.   <module>rj      sC    & &  0  & "C # C t9Y
 t9r1   