§
    šŠtj­  ã                  ó¨   — d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZmZmZ  ej        e¦  «        Z G d„ dee	¦  «        ZdS )	é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrc                  óL  — e Zd ZU dZ edd¬¦  «        Zded<   	  edd¬¦  «        Zded<   	 d	Zd
ed<   	  ed¬¦  «        Z	ded<   	 dZ
ded<   	 dZded<   	  ee¬¦  «        Zded<   	  ee¬¦  «        Zded<   	  ed¬¦  «        Zed'd„¦   «         Zd(d „Zd)d$„Zd(d%„Zd)d&„ZdS )*ÚQianfanEmbeddingsEndpointaæ  Baidu Qianfan Embeddings embedding models.

    Setup:
        To use, you should have the ``qianfan`` python package installed, and set
        environment variables ``QIANFAN_AK``, ``QIANFAN_SK``.

        .. code-block:: bash

            pip install qianfan
            export QIANFAN_AK="your-api-key"
            export QIANFAN_SK="your-secret_key"

    Instantiate:
        .. code-block:: python

            from langchain_community.embeddings import QianfanEmbeddingsEndpoint

            embeddings = QianfanEmbeddingsEndpoint()

     Embed:
        .. code-block:: python

            # embed the documents
            vectors = embeddings.embed_documents([text1, text2, ...])

            # embed the query
            vectors = embeddings.embed_query(text)

            # embed the documents with async
            vectors = await embeddings.aembed_documents([text1, text2, ...])

            # embed the query with async
            vectors = await embeddings.aembed_query(text)
    NÚapi_key)ÚdefaultÚaliaszOptional[SecretStr]Ú
qianfan_akÚ
secret_keyÚ
qianfan_ské   ÚintÚ
chunk_size©r   zOptional[str]ÚmodelÚ ÚstrÚendpointr   Úclient)Údefault_factoryzDict[str, Any]Úinit_kwargsÚmodel_kwargs© )Úprotected_namespacesÚvaluesr   Úreturnc                óf  — t          t          |ddd¬¦  «        ¦  «        |d<   t          t          |ddd¬¦  «        ¦  «        |d<   	 ddl}i |                     d	i ¦  «        ¥d
|d
         i¥}|d                              ¦   «         dk    r|d                              ¦   «         |d<   |d                              ¦   «         dk    r|d                              ¦   «         |d<   |d         �|d         dk    r|d         |d<    |j        di |¤Ž|d<   n# t          $ r t          d¦  «        ‚w xY w|S )a3  
        Validate whether qianfan_ak and qianfan_sk in the environment variables or
        configuration file are available or not.

        init qianfan embedding client with `ak`, `sk`, `model`, `endpoint`

        Args:

            values: a dictionary containing configuration information, must include the
            fields of qianfan_ak and qianfan_sk
        Returns:

            a dictionary containing configuration information. If qianfan_ak and
            qianfan_sk are not provided in the environment variables or configuration
            file,the original values will be returned; otherwise, values containing
            qianfan_ak and qianfan_sk will be returned.
        Raises:

            ValueError: qianfan package not found, please install it with `pip install
            qianfan`
        r   Ú
QIANFAN_AKr   r   r   Ú
QIANFAN_SKr   Nr"   r   ÚakÚskr   r    zGqianfan package not found, please install it with `pip install qianfan`r$   )r	   r
   ÚqianfanÚgetÚget_secret_valueÚ	EmbeddingÚImportError)Úclsr&   r-   Úparamss       ús/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/baidu_qianfan_endpoint.pyÚvalidate_environmentz.QianfanEmbeddingsEndpoint.validate_environmentV   s˜  € õ.  5Ý ØØØØð	ñ ô ñ 
ô  
ˆˆ|Ñõ  5Ý ØØØØð	ñ ô ñ 
ô  
ˆˆ|Ñð	ØˆNˆNˆNðØ—*’*˜]¨BÑ/Ô/ðà˜ œðð ˆFð �lÔ#×4Ò4Ñ6Ô6¸"Ò<Ð<Ø% lÔ3×DÒDÑFÔF��t‘Ø�lÔ#×4Ò4Ñ6Ô6¸"Ò<Ð<Ø% lÔ3×DÒDÑFÔF��t‘Ø�jÔ!Ð-°&¸Ô2DÈÒ2JÐ2JØ%+¨JÔ%7��zÑ"Ø0˜wÔ0Ð:Ð:°6Ð:Ð:ˆF�8ÑÐøÝð 	ð 	ð 	Ýð(ñô ð ð	øøøð
 ˆs   ÁCD ÄD.ÚtextúList[float]c                ó>   — |                       |g¦  «        }|d         S ©Nr   )Úembed_documents)Úselfr6   Úresps      r4   Úembed_queryz%QianfanEmbeddingsEndpoint.embed_query“   s    € Ø×#Ò# T FÑ+Ô+ˆØ�AŒwˆó    Útextsú	List[str]úList[List[float]]c                óô   ‡ ‡— ˆ ˆfd„t          dt          ‰¦  «        ‰ j        ¦  «        D ¦   «         }g }|D ]@} ‰ j        j        dd|i‰ j        ¤Ž}|                     d„ |d         D ¦   «         ¦  «         ŒA|S )a_  
        Embeds a list of text documents using the AutoVOT algorithm.

        Args:
            texts (List[str]): A list of text documents to embed.

        Returns:
            List[List[float]]: A list of embeddings for each document in the input list.
                            Each embedding is represented as a list of float values.
        c                ó4   •— g | ]}‰||‰j         z   …         ‘ŒS r$   ©r   ©Ú.0Úir;   r?   s     €€r4   ú
<listcomp>z=QianfanEmbeddingsEndpoint.embed_documents.<locals>.<listcomp>¢   ó:   ø€ ð 
ð 
ð 
àð �!�a˜$œ/Ñ)Ð)Ô*ð
ð 
ð 
r>   r   r?   c                ó   — g | ]
}|d          ‘ŒS )Ú	embeddingr$   )rF   Úress     r4   rH   z=QianfanEmbeddingsEndpoint.embed_documents.<locals>.<listcomp>©   s   € ÐAÐAÐA¨S˜˜KÔ(ÐAÐAÐAr>   Údatar$   )ÚrangeÚlenr   r    Údor#   Úextend)r;   r?   Útext_in_chunksÚlstÚchunkr<   s   ``    r4   r:   z)QianfanEmbeddingsEndpoint.embed_documents—   s«   øø€ ð
ð 
ð 
ð 
ð 
å˜1�c %™jœj¨$¬/Ñ:Ô:ð
ñ 
ô 
ˆð ˆØ#ð 	Cð 	CˆEØ!�4”;”>ÐCÐC¨ÐC°Ô1BÐCÐCˆDØ�JŠJÐAÐA°D¸´LÐAÑAÔAÑBÔBÐBÐBØˆ
r>   c              ƒ  óN   K  — |                       |g¦  «        ƒ d {V —†}|d         S r9   )Úaembed_documents)r;   r6   Ú
embeddingss      r4   Úaembed_queryz&QianfanEmbeddingsEndpoint.aembed_query¬   s7   è è € Ø×0Ò0°$°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆ
Ø˜!Œ}Ðr>   c              ƒ  ó  ‡ ‡K  — ˆ ˆfd„t          dt          ‰¦  «        ‰ j        ¦  «        D ¦   «         }g }|D ]H} ‰ j        j        dd|i‰ j        ¤Žƒ d {V —†}|d         D ]}|                     |d         g¦  «         ŒŒI|S )Nc                ó4   •— g | ]}‰||‰j         z   …         ‘ŒS r$   rD   rE   s     €€r4   rH   z>QianfanEmbeddingsEndpoint.aembed_documents.<locals>.<listcomp>±   rI   r>   r   r?   rM   rK   r$   )rN   rO   r   r    Úador#   rQ   )r;   r?   rR   rS   rT   r<   rL   s   ``     r4   rV   z*QianfanEmbeddingsEndpoint.aembed_documents°   sÌ   øøè è € ð
ð 
ð 
ð 
ð 
å˜1�c %™jœj¨$¬/Ñ:Ô:ð
ñ 
ô 
ˆð ˆØ#ð 	/ð 	/ˆEØ(˜œœÐJÐJ¨uÐJ¸Ô8IÐJÐJÐJÐJÐJÐJÐJÐJˆDØ˜F”|ð /ð /�Ø—
’
˜C Ô,Ð-Ñ.Ô.Ð.Ð.ð/àˆ
r>   )r&   r   r'   r   )r6   r   r'   r7   )r?   r@   r'   rA   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   r   r   r    Údictr"   r#   r   Úmodel_configr   r5   r=   r:   rX   rV   r$   r>   r4   r   r      s’  € € € € € € ð!ð !ðF ', e°DÀ	Ð&JÑ&JÔ&J€JÐJÐJÐJÑJØ$à&+ e°DÀÐ&MÑ&MÔ&M€JÐMÐMÐMÑMØ'à€JÐÐÐÑØ2à ˜5¨Ð.Ñ.Ô.€EÐ.Ð.Ð.Ñ.ð
ð €HÐÐÐÑØKà€FÐÐÐÑØà"' %¸Ð"=Ñ"=Ô"=€KÐ=Ð=Ð=Ñ=ð@ð $) 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>Ø8à�:°2Ð6Ñ6Ô6€Làð:ð :ð :ñ „Xð:ðxð ð ð ðð ð ð ð*ð ð ð ð
ð 
ð 
ð 
ð 
ð 
r>   r   )Ú
__future__r   ÚloggingÚtypingr   r   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr	   r
   r   Úpydanticr   r   r   r   Ú	getLoggerr\   Úloggerr   r$   r>   r4   ú<module>rk      sê   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à	ˆÔ	˜8Ñ	$Ô	$€ðmð mð mð mð m 	¨:ñ mô mð mð mð mr>   