
    Ng                         d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ  eddd	
           G d dee                      ZdS )    )AnyDictListOptional)
deprecated)
Embeddings)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validator)_create_retry_decoratorz0.0.30z1.0z!langchain_cohere.CohereEmbeddings)sinceremovalalternative_importc            	       f   e Zd ZU dZdZeed<   	 dZeed<   	 dZe	ed<   	 dZ
ee	         ed<   	 dZee	         ed<   d	Zeed
<   	 dZee         ed<   	 dZe	ed<   	  ed          Z ed          ededefd                        ZdedefdZdedefdZdddee	         dee	         deee                  fdZdddee	         dee	         deee                  fdZdee	         deee                  fdZdee	         deee                  fdZde	dee         fd Zde	dee         fd!Z dS )"CohereEmbeddingsa  Cohere embedding models.

    To use, you should have the ``cohere`` python package installed, and the
    environment variable ``COHERE_API_KEY`` set with your API key or pass it
    as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import CohereEmbeddings
            cohere = CohereEmbeddings(
                model="embed-english-light-v3.0",
                cohere_api_key="my-api-key"
            )
    Nclientasync_clientzembed-english-v2.0modeltruncatecohere_api_key   max_retriesrequest_timeout	langchain
user_agentforbid)extrabefore)modevaluesreturnc                    t          |dd          }|                    d          }	 ddl}|d         }|                    |||          |d<   |                    |||          |d	<   n# t
          $ r t          d
          w xY w|S )z?Validate that api key and python package exists in environment.r   COHERE_API_KEYr   r   Nr   )timeoutclient_namer   r   zTCould not import cohere python package. Please install it with `pip install cohere`.)r	   getcohereClientAsyncClientImportError)clsr!   r   r   r(   r&   s         a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/cohere.pyvalidate_environmentz%CohereEmbeddings.validate_environment8   s     .$&6
 
 !**%677	MMM .K%}}''  -    F8
 &,%7%7'' &8 & &F>""
  	 	 	?  	
 s   AA+ +Bkwargsc                 t     t           j                  }|dt          dt          f fd            } |di |S )%Use tenacity to retry the embed call.r/   r"   c                  (     j         j        di | S N )r   embedr/   selfs    r-   _embed_with_retryz<CohereEmbeddings.embed_with_retry.<locals>._embed_with_retryZ   s    $4;$..v...    r4   r   r   r   r7   r/   retry_decoratorr8   s   `   r-   embed_with_retryz!CohereEmbeddings.embed_with_retryV   sb    1$2BCC		/ 	/ 	/ 	/ 	/ 	/ 	/ 
	/ ! **6***r9   c                 t     t           j                  }|dt          dt          f fd            } |di |S )r1   r/   r"   c                  8   K    j         j        di |  d {V S r3   )r   r5   r6   s    r-   r8   z=CohereEmbeddings.aembed_with_retry.<locals>._embed_with_retryd   s5      0*0::6:::::::::r9   r4   r:   r;   s   `   r-   aembed_with_retryz"CohereEmbeddings.aembed_with_retry`   sb    1$2BCC		;c 	;c 	; 	; 	; 	; 	; 
	; ! **6***r9   
input_typetextsrB   c                j    |                      | j        ||| j                  j        }d |D             S )Nr   rC   rB   r   c                 R    g | ]$}t          t          t          |                    %S r4   listmapfloat.0es     r-   
<listcomp>z*CohereEmbeddings.embed.<locals>.<listcomp>s   (    888S]]##888r9   )r=   r   r   
embeddingsr7   rC   rB   rP   s       r-   r5   zCohereEmbeddings.embedj   sL     ***!]	 + 
 

  	 98Z8888r9   c                z   K   |                      | j        ||| j                   d {V j        }d |D             S )NrE   c                 R    g | ]$}t          t          t          |                    %S r4   rG   rK   s     r-   rN   z+CohereEmbeddings.aembed.<locals>.<listcomp>   rO   r9   )r@   r   r   rP   rQ   s       r-   aembedzCohereEmbeddings.aembedu   sn       ((j%	 )          	 98Z8888r9   c                 0    |                      |d          S )zEmbed a list of document texts.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        search_documentrA   r5   r7   rC   s     r-   embed_documentsz CohereEmbeddings.embed_documents   s     zz%,=z>>>r9   c                 @   K   |                      |d           d{V S )zAsync call out to Cohere's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        rV   rA   NrT   rX   s     r-   aembed_documentsz!CohereEmbeddings.aembed_documents   s1       [[3D[EEEEEEEEEr9   textc                 >    |                      |gd          d         S )zCall out to Cohere's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        search_queryrA   r   rW   r7   r]   s     r-   embed_queryzCohereEmbeddings.embed_query   s!     zz4&^z<<Q??r9   c                 N   K   |                      |gd           d{V d         S )zAsync call out to Cohere's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r_   rA   Nr   r[   r`   s     r-   aembed_queryzCohereEmbeddings.aembed_query   s7       kk4&^kDDDDDDDDaHHr9   )!__name__
__module____qualname____doc__r   r   __annotations__r   r   strr   r   r   r   intr   rJ   r   r   model_configr   classmethodr   r.   r=   r@   r   r5   rT   rY   r\   ra   rc   r4   r9   r-   r   r      s           FCL#%E3%%%"Hhsm"""X$(NHSM(((K<'+OXe_+++8!J!!!<:  L _(###$ 3    [ $#8+ + + + + ++# +# + + + + @D	9 	9 	9#Y	9/7}	9	d5k		9 	9 	9 	9 @D9 9 9#Y9/7}9	d5k	9 9 9 9	?T#Y 	?4U3D 	? 	? 	? 	?	FDI 	F$tE{:K 	F 	F 	F 	F	@ 	@U 	@ 	@ 	@ 	@	Is 	ItE{ 	I 	I 	I 	I 	I 	Ir9   r   N)typingr   r   r   r   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.utilsr	   pydanticr
   r   r   langchain_community.llms.coherer   r   r4   r9   r-   <module>rs      s   , , , , , , , , , , , , 6 6 6 6 6 6 0 0 0 0 0 0 5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ; C C C C C C 
:  
\I \I \I \I \Iy* \I \I 
\I \I \Ir9   