§
    šŠtjB  ã                   óœ   — 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     úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/baichuan.pyÚvalidate_environmentz+BaichuanTextEmbeddings.validate_environmentK   sd   € õ Ô"Ñ$Ô$ˆØŒ×Òà!U¨4Ô+@×+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   € ÀQÇUÂUÈ7ÐTUÑEVÔEV€ r/   )Úkeyc                 ó:   — g | ]}|                      d g ¦  «        ‘ŒS )Ú	embeddingr<   )r3   Úresults     r-   r5   z1BaichuanTextEmbeddings._embed.<locals>.<listcomp>v   s&   € ÐQÐQÐQ°V�V—Z’Z ¨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  øø€ ð
ð 
ð 
ð 
ð 
å˜1�c %™jœj¨$¬/Ñ:Ô:ð
ñ 
ô 
ˆð ˆØ ð 	ð 	ˆEØ”|×(Ò(Ý °ÀÄÐ'QÐ'Qð )ñ ô ˆHð ×%Ò%Ñ'Ô'Ð'àÔ# sÒ*Ð*Ø—}’}‘”�Ø!ŸXšX f¨bÑ1Ô1�
å$*¨:Ð;VÐ;VÐ$WÑ$WÔ$WÐ!à×$Ò$ØQÐQÐ?PÐQÑQÔQñô ð ð õ 'ð.°8Ô3Gð .ð .ð .ñô ð ð Ðr/   c                 ó,   — |                       |¦  «        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.
        ©rR   )r,   r0   s     r-   Úembed_documentsz&BaichuanTextEmbeddings.embed_documents�   s   € ð �{Š{˜5Ñ!Ô!Ð!r/   Útextc                 óF   — |                       |g¦  «        }|�|d         n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   rT   )r,   rV   rC   s      r-   Úembed_queryz"BaichuanTextEmbeddings.embed_queryŒ   s*   € ð —’˜d˜VÑ$Ô$ˆØ"Ð.ˆv�aŒyˆy°DÐ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 €GˆSÐÐÑØ�eÐ$=ÀWÐMÑMÔM€J�ÐMÐMÑMØ0Ø"' %ØØ'˜Ð);Ð=RÐ(SÑTÔTð#ñ #ô #Ð�ið ð ñ ð RØ€J�ÐÐÑØ2à�:¨tÈ"ÐMÑMÔM€Là€_˜'Ð"Ñ"Ô"ð dð ð ð ñ #Ô"ðð&˜D œIð &¨(°4¸¸U¼Ô3DÔ*Eð &ð &ð &ð &ðP	" T¨#¤Yð 	"°8¸DÀÀeÄÔ<MÔ3Nð 	"ð 	"ð 	"ð 	"ð
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9˜Y¨
ñ t9ô t9ð t9ð t9ð t9r/   