
    Ng                        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       q/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/baidu_qianfan_endpoint.pyvalidate_environmentz.QianfanEmbeddingsEndpoint.validate_environmentV   s   .  5 	   
  
|  5 	   
  
|	NNN**]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2J2J%+J%7z"0w0::6::F8 	 	 	(  	
 s   CD D.textList[float]c                >    |                      |g          }|d         S Nr   )embed_documents)selfr6   resps      r4   embed_queryz%QianfanEmbeddingsEndpoint.embed_query   s     ##TF++Aw    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AS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    
 
 
 
 
1c%jj$/::
 
 
 # 	C 	CE!4;>CCC1BCCDJJAAD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      
 
 
 
 
1c%jj$/::
 
 
 # 	/ 	/E(JJuJ8IJJJJJJJJD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 ',eD	&J&J&JJJJJJ$&+eD&M&M&MJMMMM'J2 5...E....
 HKF"'%"="="=K====@ $)5#>#>#>L>>>>8:2666L: : : 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>   