Ë
    µŒj­  ã                  ó¤   — 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y)	é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrc                  ó   — 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y)"Ú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_namespacesc                óæ  — t        t        |ddd¬«      «      |d<   t        t        |ddd¬«      «      |d<   	 ddl}i |j                  d	i «      ¥d
|d
   i¥}|d   j	                  «       dk7  r|d   j	                  «       |d<   |d   j	                  «       dk7  r|d   j	                  «       |d<   |d   �|d   dk7  r|d   |d<    |j
                  di |¤Ž|d<   |S # t        $ r t        d«      ‚w xY w)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)ÚclsÚvaluesr+   Úparamss       ú/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/baidu_qianfan_endpoint.pyÚvalidate_environmentz.QianfanEmbeddingsEndpoint.validate_environmentV   sB  € ô.  5Ü ØØØØô	ó 
ˆˆ|Ñô  5Ü ØØØØô	ó 
ˆˆ|Ñð	ÛðØ—*‘*˜]¨BÓ/ðà˜ ™ñˆFð �lÑ#×4Ñ4Ó6¸"Ò<Ø% lÑ3×DÑDÓF��t‘Ø�lÑ#×4Ñ4Ó6¸"Ò<Ø% lÑ3×DÑDÓF��t‘Ø�jÑ!Ð-°&¸Ñ2DÈÒ2JØ%+¨JÑ%7��zÑ"Ø0˜w×0Ñ0Ñ:°6Ñ:ˆF�8Ñð ˆøô ò 	Üð(óð ð	ús   ¸B!C ÃC0c                ó0   — | j                  |g«      }|d   S ©Nr   )Úembed_documents)ÚselfÚtextÚresps      r3   Úembed_queryz%QianfanEmbeddingsEndpoint.embed_query“   s   € Ø×#Ñ# T FÓ+ˆØ�A‰wˆó    c                ó@  — t        dt        |«      | j                  «      D �cg c]  }|||| j                  z    ‘Œ }}g }|D ]O  } | j                  j                  dd|i| j
                  ¤Ž}|j                  |d   D �cg c]  }|d   ‘Œ	 c}«       ŒQ |S c c}w c c}w )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.
        r   ÚtextsÚdataÚ	embeddingr$   )ÚrangeÚlenr   r    Údor#   Úextend©r8   r>   ÚiÚtext_in_chunksÚlstÚchunkr:   Úress           r3   r7   z)QianfanEmbeddingsEndpoint.embed_documents—   s®   € ô ˜1œc %›j¨$¯/©/Ô:ó
á:�ð �!�a˜$Ÿ/™/Ñ)Ò*Ø:ð 	ð 
ð ˆÛ#ˆEØ!�4—;‘;—>‘>ÑC¨ÐC°×1BÑ1BÑCˆDØ�J‰J°D¸²LÓA±L¨S˜˜KÓ(°LÑAÕBð $ð ˆ
ùò
ùò Bs   £BÁ?B
c              ƒ  óL   K  — | j                  |g«      ƒ d {  –—† }|d   S 7 Œ	­wr6   )Úaembed_documents)r8   r9   Ú
embeddingss      r3   Úaembed_queryz&QianfanEmbeddingsEndpoint.aembed_query¬   s*   è ø€ Ø×0Ñ0°$°Ó8×8ˆ
Ø˜!‰}Ðð 9ús   ‚$˜"™
$c              ƒ  óF  K  — t        dt        |«      | j                  «      D �cg c]  }|||| j                  z    ‘Œ }}g }|D ]Q  } | j                  j                  dd|i| j
                  ¤Žƒ d {  –—† }|d   D ]  }|j                  |d   g«       Œ ŒS |S c c}w 7 Œ,­w)Nr   r>   r?   r@   r$   )rA   rB   r   r    Úador#   rD   rE   s           r3   rL   z*QianfanEmbeddingsEndpoint.aembed_documents°   s³   è ø€ ô ˜1œc %›j¨$¯/©/Ô:ó
á:�ð �!�a˜$Ÿ/™/Ñ)Ò*Ø:ð 	ð 
ð ˆÛ#ˆEØ(˜Ÿ™Ÿ™ÑJ¨uÐJ¸×8IÑ8IÑJ×JˆDØ˜F”|�Ø—
‘
˜C Ñ,Ð-Õ.ñ $ð $ð ˆ
ùò
ð Kús   ‚#B!¥B¾4B!Á2BÁ3-B!)r1   r   Úreturnr   )r9   r   rQ   zList[float])r>   z	List[str]rQ   zList[List[float]])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   r   r   r    Údictr"   r#   r   Úmodel_configr   r4   r;   r7   rN   rL   r$   r<   r3   r   r      sË   … ñ!ñF ',°DÀ	Ô&J€JÐ#ÓJØ$á&+°DÀÔ&M€JÐ#ÓMØ'à€J�ÓØ2á ¨Ô.€Eˆ=Ó.ð
ð €HˆcÓØKà€FˆCÓØá"'¸Ô"=€K�Ó=ð@ñ $)¸Ô#>€L�.Ó>Ø8á°2Ô6€Làò:ó ð:óxóó*ô
r<   r   )Ú
__future__r   ÚloggingÚtypingr   r   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr	   r
   r   Úpydanticr   r   r   r   Ú	getLoggerrR   Úloggerr   r$   r<   r3   Ú<module>ra      sB   ðÝ "ã ß ,Ó ,å 0ß VÑ Vß <Ó <à	ˆ×	Ñ	˜8Ó	$€ôm 	¨:õ mr<   