a
    bg                     @  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ddZdddd d!Zd"d#d$d%d&Zdddd'd(Zd"d#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_namespacesr   )valuesreturnc                 C  s   t t|dddd|d< t t|dddd|d< zddl}i |d	i d
|d
 i}|d  dkrv|d  |d< |d  dkr|d  |d< |d dur|d dkr|d |d< |jf i ||d< W n ty   tdY n0 |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   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	   qianfangetZget_secret_valueZ	EmbeddingImportError)clsr!   r$   paramsr    r    /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/baidu_qianfan_endpoint.pyvalidate_environmentV   sF    	

z.QianfanEmbeddingsEndpoint.validate_environmentzList[float])textr"   c                 C  s   |  |g}|d S Nr   )embed_documents)selfr+   respr    r    r)   embed_query   s    z%QianfanEmbeddingsEndpoint.embed_queryz	List[str]zList[List[float]])textsr"   c                   sd    fddt dt jD }g }|D ]4} jjf 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                   s   g | ]}|| j   qS r    r   .0ir.   r1   r    r)   
<listcomp>   s   z=QianfanEmbeddingsEndpoint.embed_documents.<locals>.<listcomp>r   r1   c                 S  s   g | ]}|d  qS )	embeddingr    )r4   resr    r    r)   r7          data)rangelenr   r   dor   extend)r.   r1   text_in_chunkslstchunkr/   r    r6   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                   sp    fddt dt jD }g }|D ]@} jjf d|i jI d H }|d D ]}||d g qTq*|S )Nc                   s   g | ]}|| j   qS r    r2   r3   r6   r    r)   r7      s   z>QianfanEmbeddingsEndpoint.aembed_documents.<locals>.<listcomp>r   r1   r;   r8   )r<   r=   r   r   Zador   r?   )r.   r1   r@   rA   rB   r/   r9   r    r6   r)   rC      s    z*QianfanEmbeddingsEndpoint.aembed_documents)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   dictr   r   r   Zmodel_configr
   r*   r0   r-   rD   rC   r    r    r    r)   r      s    
#
<r   )
__future__r   loggingtypingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr   r	   r
   Zpydanticr   r   r   r   	getLoggerrE   loggerr   r    r    r    r)   <module>   s   
