o
    Zh                     @  s   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eZG d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                   @  s   e Zd ZU dZedddZded< 	 edddZded< 	 d	Zd
ed< 	 eddZ	ded< 	 dZ
ded< 	 dZded< 	 eedZded< 	 eedZded< 	 eddZed,ddZd-d!d"Zd.d&d'Zd-d(d)Zd.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)
    NZapi_key)defaultaliaszOptional[SecretStr]
qianfan_akZ
secret_key
qianfan_sk   int
chunk_sizer   zOptional[str]model strendpointr   client)default_factoryzDict[str, Any]init_kwargsmodel_kwargs )Zprotected_namespacesvaluesr   returnc                 C  s   t t|dddd|d< t t|dddd|d< zQddl}i |d	i d
|d
 i}|d  dkr;|d  |d< |d  dkrK|d  |d< |d dur]|d dkr]|d |d< |jdi ||d< W |S  tyt   td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   Z
QIANFAN_AKr   r   r   Z
QIANFAN_SKr   Nr   r   Zakskr   r   zGqianfan package not found, please install it with `pip install qianfan`r    )r   r	   qianfangetZget_secret_valueZ	EmbeddingImportError)clsr!   r$   paramsr    r    l/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/baidu_qianfan_endpoint.pyvalidate_environmentV   sH   	
z.QianfanEmbeddingsEndpoint.validate_environmenttextList[float]c                 C  s   |  |g}|d S Nr   )embed_documents)selfr+   respr    r    r)   embed_query   s   z%QianfanEmbeddingsEndpoint.embed_querytexts	List[str]List[List[float]]c                   sd    fddt dt jD }g }|D ]} jjdd|i j}|dd |d D  q|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                      g | ]}|| j   qS r    r   .0ir/   r2   r    r)   
<listcomp>       z=QianfanEmbeddingsEndpoint.embed_documents.<locals>.<listcomp>r   r2   c                 S  s   g | ]}|d  qS )	embeddingr    )r8   resr    r    r)   r;      s    dataNr    )rangelenr   r   dor   extend)r/   r2   text_in_chunkslstchunkr0   r    r:   r)   r.      s   z)QianfanEmbeddingsEndpoint.embed_documentsc                   s   |  |gI d H }|d S r-   )aembed_documents)r/   r+   Z
embeddingsr    r    r)   aembed_query   s   z&QianfanEmbeddingsEndpoint.aembed_queryc                   sr    fddt dt jD }g }|D ] } jjdd|i jI d H }|d D ]
}||d g q+q|S )Nc                   r5   r    r6   r7   r:   r    r)   r;      r<   z>QianfanEmbeddingsEndpoint.aembed_documents.<locals>.<listcomp>r   r2   r?   r=   r    )r@   rA   r   r   Zador   rC   )r/   r2   rD   rE   rF   r0   r>   r    r:   r)   rG      s   z*QianfanEmbeddingsEndpoint.aembed_documents)r!   r   r"   r   )r+   r   r"   r,   )r2   r3   r"   r4   )__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   dictr   r   r   Zmodel_configr
   r*   r1   r.   rH   rG   r    r    r    r)   r      s2   
 #

<

r   )
__future__r   loggingtypingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr   r	   r
   Zpydanticr   r   r   r   	getLoggerrI   loggerr   r    r    r    r)   <module>   s    
