a
    bgU                     @   s   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 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                   @   s   e Zd ZU dZdZeed< edddZe	ed< ede
d	d
gdZeed< dZeed< edddZeddedddZee	 eeee   dddZee	 eeee   dddZe	eee  dd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_nameZapi_keyZBAICHUAN_API_KEYZBAICHUAN_AUTH_TOKEN)r   default_factorybaichuan_api_key   
chunk_sizeT )Zpopulate_by_nameZprotected_namespacesafter)mode)returnc                 C   s2   t  }|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   Zget_secret_valuer   )selfr   r   r   u/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/baichuan.pyvalidate_environmentK   s    z+BaichuanTextEmbeddings.validate_environment)textsr   c           	         s    fddt dt jD }g }|D ]z} jjt| jdd}|  |jdkr|	 }|
dg }t|dd	 d
}|dd |D  q*td|j dq*|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                    s   g | ]}|| j   qS r   )r   ).0ir#   r&   r   r$   
<listcomp>c   s   z1BaichuanTextEmbeddings._embed.<locals>.<listcomp>r   )inputr   )json   datac                 S   s   |  ddS )Nindexr   get)er   r   r$   <lambda>s       z/BaichuanTextEmbeddings._embed.<locals>.<lambda>)keyc                 S   s   g | ]}| d g qS )Z	embeddingr0   )r'   resultr   r   r$   r*   v   r4   zError: Received status code z from `BaichuanEmbedding` API)rangelenr   r   postr   r   raise_for_statusstatus_coder,   r1   sortedextendr   )	r#   r&   Zchunk_textsZembed_resultschunkresponserespZ
embeddingsZsorted_embeddingsr   r)   r$   _embedY   s(    

zBaichuanTextEmbeddings._embedc                 C   s
   |  |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.
        rA   r)   r   r   r$   embed_documents   s    	z&BaichuanTextEmbeddings.embed_documents)textr   c                 C   s    |  |g}|dur|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   rB   )r#   rD   r6   r   r   r$   embed_query   s    	z"BaichuanTextEmbeddings.embed_query)__name__
__module____qualname____doc__r   r   __annotations__r	   r   strr   r   r
   r   intr   Zmodel_configr   r   r%   r   r   floatrA   rC   rE   r   r   r   r$   r   "   s   

 ( r   )typingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr   Zpydanticr   r   r	   r
   r   r   Ztyping_extensionsr   r   rK   rJ   r   r   r   r   r$   <module>   s   