Ë
    µŒjU  ã                   ó”   — 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     úq/var/www/html/Fitness-lenito-AI-main/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   € ÀQÇUÁUÈ7ÐTUÔEVr/   )Ú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*  € ô ˜1œc %›j¨$¯/©/Ô:ó
á:�ð �!�a˜$Ÿ/™/Ñ)Ò*Ø:ð 	ð 
ð ˆÛ ˆEØ—|‘|×(Ñ(Ü °ÀÇÁÑ'Qð )ó ˆHð ×%Ñ%Ô'à×#Ñ# sÒ*Ø—}‘}“�Ø!ŸX™X f¨bÓ1�
ä$*¨:Ñ;VÔ$WÐ!à×$Ñ$Ù?PÓQÑ?P°V�V—Z‘Z ¨RÕ0Ð?PÑQõô 'Ø2°8×3GÑ3GÐ2Hð I.ð .óð ð' !ð. Ðùò9
ùò& Rs   £DÃD
c                 ó$   — | j                  |«      S )zâPublic 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 )zÇPublic 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(   € ð —‘˜d˜VÓ$ˆØ"Ð.ˆv�a‰yÐ8°DÐ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 €GˆSÓÙÐ$=ÀWÔM€J�ÓMØ0Ù"'ØÙ'Ð);Ð=RÐ(SÓTô#Ð�ió ð RØ€J�ÓØ2á¨tÈ"ÔM€Lá˜'Ô"ð dò ó #ðð&˜D ™Ið &¨(°4¸¸U¹Ñ3DÑ*Eó &ðP	" T¨#¡Yð 	"°8¸DÀÀeÁÑ<MÑ3Nó 	"ð
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9˜Y¨
õ t9r/   