
    7|hA                         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 dgZ G d dee      Z G d	 d
      Zy)    )AnyDictListOptional)
Embeddingsget_from_dict_or_env)parse)	BaseModel
ConfigDictmodel_validator)SelfGradientEmbeddingsc                   X   e Zd ZU 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 ed      d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)r   a  Gradient.ai Embedding models.

    GradientLLM is a class to interact with Embedding Models on gradient.ai

    To use, set the environment variable ``GRADIENT_ACCESS_TOKEN`` with your
    API token and ``GRADIENT_WORKSPACE_ID`` for your gradient workspace,
    or alternatively provide them as keywords to the constructor of this class.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import GradientEmbeddings
            GradientEmbeddings(
                model="bge-large",
                gradient_workspace_id="12345614fc0_workspace",
                gradient_access_token="gradientai-access_token",
            )
    modelNgradient_workspace_idgradient_access_tokenhttps://api.gradient.ai/apigradient_api_urlquery_prompt_for_retrievalclientforbid)extrabefore)modevaluesreturnc                 j    t        |dd      |d<   t        |dd      |d<   t        |ddd      |d<   |S )	z?Validate that api key and python package exists in environment.r   GRADIENT_ACCESS_TOKENr   GRADIENT_WORKSPACE_IDr   GRADIENT_API_URLr   )defaultr   )clsr   s     i/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/gradient_ai.pyvalidate_environmentz'GradientEmbeddings.validate_environment:   s]    
 +?+-D+
&' +?+-D+
&' &:1	&
!"     afterc                 >   	 dd l }t        |j                        t        d      k  rt        d      |j	                  | j
                  | j                  | j                        }|j                  | j                        | _
        | S # t        $ r t        d      w xY w)Nr   zAGradientEmbeddings requires `pip install -U "gradientai>=1.4.0"`.z1.4.0)access_tokenworkspace_idhost)slug)
gradientaiImportErrorr
   __version__Gradientr   r   r   get_embeddings_modelr   r   )selfr-   gradients      r$   	post_initzGradientEmbeddings.post_initN   s    	 ''(5>9S  &&3333&& ' 

 333D!  	S 	s   B Btextsc                     |D cg c]  }d|i }}| j                   j                  |      j                  }|D cg c]  }|j                   c}S c c}w c c}w )zCall out to Gradient's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        inputinputs)r   embed
embeddings	embeddingr2   r5   textr9   resultes         r$   embed_documentsz"GradientEmbeddings.embed_documentsd   sW     /44d7D/44""&"1<<%+,,,	 5 -s
   AAc                    K   |D cg c]  }d|i }}| j                   j                  |       d{   j                  }|D cg c]  }|j                   c}S c c}w 7 -c c}w w)zAsync call out to Gradient's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r7   r8   N)r   aembedr;   r<   r=   s         r$   aembed_documentsz#GradientEmbeddings.aembed_documentss   s_      /44d7D/44**&*99EE%+,,,	 59,s+   A(A!A(A!A(A#	A(#A(r>   c                 j    | j                   r| j                    d| n|}| j                  |g      d   S )zCall out to Gradient's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
         r   )r   rA   )r2   r>   querys      r$   embed_queryzGradientEmbeddings.embed_query   sF     .. ../q7 	
 ##UG,Q//r&   c                    K   | j                   r| j                    d| n|}| j                  |g       d{   }|d   S 7 	w)zAsync call out to Gradient's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        rF   Nr   )r   rD   )r2   r>   rG   r;   s       r$   aembed_queryzGradientEmbeddings.aembed_query   sV      .. ../q7 	
  00%99
!} :s   5AA
A)__name__
__module____qualname____doc__str__annotations__r   r   r   r   r   r   r   r   model_configr   classmethodr   r%   r   r4   r   floatrA   rD   rH   rJ    r&   r$   r   r      s2   & J&+/8C=/*+/8C=/
 :c9044FC L (#$ 3   $$ '"4  #*-T#Y -4U3D --DI -$tE{:K -0 0U 0 s tE{ r&   c                       e Zd ZdZddZy) TinyAsyncGradientEmbeddingClientzDeprecated, TinyAsyncGradientEmbeddingClient was removed.

    This class is just for backwards compatibility with older versions
    of langchain_community.
    It might be entirely removed in the future.
    Nc                     t        d      )Nz8Deprecated,TinyAsyncGradientEmbeddingClient was removed.)
ValueError)r2   argskwargss      r$   __init__z)TinyAsyncGradientEmbeddingClient.__init__   s    STTr&   )r   N)rK   rL   rM   rN   r[   rT   r&   r$   rV   rV      s    Ur&   rV   N)typingr   r   r   r   langchain_core.embeddingsr   langchain_core.utilsr	   packaging.versionr
   pydanticr   r   r   typing_extensionsr   __all__r   rV   rT   r&   r$   <module>rc      sB    , , 0 5 # ; ; "
 UJ Up	U 	Ur&   