
    7|h                         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y)    )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            	          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 y)"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      }|j                  d      }	 ddl}|d   }|j                  |||      |d<   |j	                  |||      |d	<   |S # t
        $ r t        d
      w xY w)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         d/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/cohere.pyvalidate_environmentz%CohereEmbeddings.validate_environment8   s     .$&6
 !**%67	 .K%}}''  -  F8
 &,%7%7'' &8 &F>"   	? 	s   7A A.kwargsc                 l     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   sC    1$2B2BC		/ 	/ 	/ 
	/ !*6**r9   c                 l     t         j                        }|dt        dt        f fd       } |di |S )r1   r/   r"   c                  X   K    j                   j                  di |  d {   S 7 wr3   )r   r5   r6   s    r-   r8   z=CohereEmbeddings.aembed_with_retry.<locals>._embed_with_retryd   s)     0**00:6::::s    *(*r4   r:   r;   s   `   r-   aembed_with_retryz"CohereEmbeddings.aembed_with_retry`   sC    1$2B2BC		;c 	;c 	; 
	; !*6**r9   
input_typetextsrB   c          	          | j                  | j                  ||| j                        j                  }|D cg c]  }t	        t        t        |             c}S c c}w N)r   rC   rB   r   )r=   r   r   
embeddingslistmapfloatr7   rC   rB   rF   es        r-   r5   zCohereEmbeddings.embedj   sX     ****!]]	 + 

 * 	 .88S]#888s    Ac          	         K   | j                  | j                  ||| j                         d {   j                  }|D cg c]  }t	        t        t        |             c}S 7 5c c}w wrE   )r@   r   r   rF   rG   rH   rI   rJ   s        r-   aembedzCohereEmbeddings.aembedu   sh      ((jj%	 )   * 	 .88S]#88 9s!   -A,A%A, A'"A,'A,c                 (    | j                  |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                 D   K   | j                  |d       d{   S 7 w)zAsync call out to Cohere's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        rO   rA   NrM   rQ   s     r-   aembed_documentsz!CohereEmbeddings.aembed_documents   s"      [[3D[EEEEs     textc                 0    | j                  |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   rP   r7   rV   s     r-   embed_queryzCohereEmbeddings.embed_query   s     zz4&^z<Q??r9   c                 L   K   | j                  |gd       d{   d   S 7 w)zAsync call out to Cohere's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        rX   rA   Nr   rT   rY   s     r-   aembed_queryzCohereEmbeddings.aembed_query   s(      kk4&^kDDaHHDs   $"$)!__name__
__module____qualname____doc__r   r   __annotations__r   r   strr   r   r   r   intr   rI   r   r   model_configr   classmethodr   r.   r=   r@   r   r5   rM   rR   rU   rZ   r\   r4   r9   r-   r   r      s     FCL#%E3%"Hhsm"X$(NHSM(K<'+OXe_+8!J!<L (#$ 3   $8+ + ++# +# + @D	9#Y	9/7}	9	d5k		9 @D9#Y9/7}9	d5k	9	?T#Y 	?4U3D 	?	FDI 	F$tE{:K 	F	@ 	@U 	@	Is 	ItE{ 	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>rl      sN    , , 6 0 5 ; ; C 
:
\Iy* \I
\Ir9   