
    7|hU                         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y)    )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y)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                  j                  d| j                  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     f/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/baichuan.pyvalidate_environmentz+BaichuanTextEmbeddings.validate_environmentK   sW     ""$#*4+@+@+Q+Q+S*T!U#- 2	
     textsc           
      0   t        dt        |      | j                        D cg c]  }|||| j                  z     }}g }|D ]  }| j                  j	                  t
        || j                  d      }|j                          |j                  dk(  r`|j                         }|j                  dg       }t        |d       }	|j                  |	D 
cg c]  }
|
j                  dg        c}
       t        d	|j                   d
       |S c c}w c c}
w )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.
        r   )inputr   )json   datac                 &    | j                  dd      S )Nindexr   )get)es    r-   <lambda>z/BaichuanTextEmbeddings._embed.<locals>.<lambda>s   s    QUU7TUEV r/   )key	embeddingzError: Received status code z from `BaichuanEmbedding` API)rangelenr   r   postr   r   raise_for_statusstatus_coder3   r8   sortedextendr   )r,   r0   ichunk_textsembed_resultschunkresponseresp
embeddingssorted_embeddingsresults              r-   _embedzBaichuanTextEmbeddings._embedY   s&    1c%j$//:
 !a$//)*
 
   	E||(( 'Q ) H %%'##s*}}!XXfb1
$*:;V$W!$$?PQVVZZR0Q '283G3G2H I. . '	. 9
& Rs   DD
c                 $    | j                  |      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.
        rM   )r,   r0   s     r-   embed_documentsz&BaichuanTextEmbeddings.embed_documents   s     {{5!!r/   textc                 8    | j                  |g      }||d   S 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   rO   )r,   rQ   rL   s      r-   embed_queryz"BaichuanTextEmbeddings.embed_query   s(     dV$".vay8D8r/   )__name__
__module____qualname____doc__r   r   __annotations__r
   r   strr   r   r   r   intr	   model_configr   r   r.   r   r   floatrM   rP   rS   r   r/   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(= 
9r/   r   )typingr   r   r   r'   langchain_core.embeddingsr   langchain_core.utilsr   pydanticr   r	   r
   r   r   r   typing_extensionsr   r   rY   rX   r   r   r/   r-   <module>rb      sC    & &  0  & "C # C t9Y
 t9r/   