
    NgU                         U 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
mZmZmZmZ d dlmZ d dlmZ dZeed	<    G d
 de
e          ZdS )    )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                      e Zd ZU dZdZeed<    edd          Ze	ed<   	  ed e
d	d
g                    Zeed<   	 dZeed<   	  edd          Z ed          defd            Zdee	         deeee                           fdZdee	         deeee                           fdZde	deee                  fdZdS )BaichuanTextEmbeddingsa  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                     t          j                    }|j                            d| j                                         ddd           || _        | S )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     c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/baichuan.pyvalidate_environmentz+BaichuanTextEmbeddings.validate_environmentK   sd     "$$!U4+@+Q+Q+S+S!U!U#- 2 	
 	
 	
     textsc                      fdt          dt                     j                  D             }g }|D ]} j                            t
          | j        d          }|                                 |j        dk    r\|	                                }|
                    dg           }t          |d           }|                    d	 |D                        t          d
|j         d          |S )a  Internal 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.
        c                 4    g | ]}||j         z            S r   )r   ).0ir,   r0   s     r-   
<listcomp>z1BaichuanTextEmbeddings._embed.<locals>.<listcomp>c   s:     
 
 
 !a$/))*
 
 
r/   r   )inputr   )json   datac                 .    |                      dd          S )Nindexr   get)es    r-   <lambda>z/BaichuanTextEmbeddings._embed.<locals>.<lambda>s   s    QUU7TUEVEV r/   )keyc                 :    g | ]}|                     d g           S )	embeddingr<   )r3   results     r-   r5   z1BaichuanTextEmbeddings._embed.<locals>.<listcomp>v   s&    QQQVVZZR00QQQr/   zError: Received status code z from `BaichuanEmbedding` API)rangelenr   r   postr   r   raise_for_statusstatus_coder7   r=   sortedextendr   )	r,   r0   chunk_textsembed_resultschunkresponseresp
embeddingssorted_embeddingss	   ``       r-   _embedzBaichuanTextEmbeddings._embedY   sC   
 
 
 
 
1c%jj$/::
 
 
   	 	E|(( 'Q'Q )  H %%'''#s**}}!XXfb11
$*:;V;V$W$W$W!$$QQ?PQQQ    '.83G . . .   r/   c                 ,    |                      |          S )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.
        rR   )r,   r0   s     r-   embed_documentsz&BaichuanTextEmbeddings.embed_documents   s     {{5!!!r/   textc                 F    |                      |g          }||d         nd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   rT   )r,   rV   rC   s      r-   embed_queryz"BaichuanTextEmbeddings.embed_query   s*     dV$$".vayyD8r/   )__name__
__module____qualname____doc__r   r   __annotations__r
   r   strr   r   r   r   intr	   model_configr   r   r.   r   r   floatrR   rU   rX   r   r/   r-   r   r   "   s         6 GSe$=WMMMJMMM0"'%');=R(STT# # #i    RJ2:t"MMML_'"""d    #"&DI &(4U3D*E & & & &P	"T#Y 	"8De<M3N 	" 	" 	" 	"
9 
9e(= 
9 
9 
9 
9 
9 
9r/   r   )typingr   r   r   r'   langchain_core.embeddingsr   langchain_core.utilsr   pydanticr   r	   r
   r   r   r   typing_extensionsr   r   r^   r]   r   r   r/   r-   <module>rg      s   & & & & & & & & & & &  0 0 0 0 0 0                   & % % % % % " " " " " "C # C C C t9 t9 t9 t9 t9Y
 t9 t9 t9 t9 t9r/   