o
    ZhA                     @   s   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 deeZG d	d
 d
ZdS )    )AnyDictListOptional)
Embeddingsget_from_dict_or_env)parse)	BaseModel
ConfigDictmodel_validator)SelfGradientEmbeddingsc                   @   s  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
dZeddededefddZedddefddZdee deee  fddZdee deee  fddZdedee fddZdedee fddZdS )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clientZforbid)extrabefore)modevaluesreturnc                 C   s8   t |dd|d< t |dd|d< t |dddd|d< |S )	z?Validate that api key and python package exists in environment.r   ZGRADIENT_ACCESS_TOKENr   ZGRADIENT_WORKSPACE_IDr   ZGRADIENT_API_URLr   )defaultr   )clsr    r   a/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/gradient_ai.pyvalidate_environment:   s   
z'GradientEmbeddings.validate_environmentafterc                 C   sh   zdd l }W n ty   tdw t|jtdk rtd|j| j| j| jd}|j| j	d| _
| S )Nr   zAGradientEmbeddings requires `pip install -U "gradientai>=1.4.0"`.z1.4.0)Zaccess_tokenZworkspace_idhost)Zslug)
gradientaiImportErrorr	   __version__ZGradientr   r   r   Zget_embeddings_modelr   r   )selfr"   Zgradientr   r   r   	post_initN   s$   zGradientEmbeddings.post_inittextsc                 C   s,   dd |D }| j j|dj}dd |D S )zCall out to Gradient's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 S      g | ]}d |iqS inputr   .0textr   r   r   
<listcomp>m       z6GradientEmbeddings.embed_documents.<locals>.<listcomp>inputsc                 S      g | ]}|j qS r   Z	embeddingr,   er   r   r   r.   q       )r   Zembed
embeddingsr%   r'   r1   resultr   r   r   embed_documentsd   s   	z"GradientEmbeddings.embed_documentsc                    s4   dd |D }| j j|dI dH j}dd |D S )zAsync call out to Gradient's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 S   r(   r)   r   r+   r   r   r   r.   |   r/   z7GradientEmbeddings.aembed_documents.<locals>.<listcomp>r0   Nc                 S   r2   r   r3   r4   r   r   r   r.      r6   )r   Zaembedr7   r8   r   r   r   aembed_documentss   s   	z#GradientEmbeddings.aembed_documentsr-   c                 C   s*   | j r| j  d| n|}| |gd S )zCall out to Gradient's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
         r   )r   r:   )r%   r-   queryr   r   r   embed_query   s
   zGradientEmbeddings.embed_queryc                    s6   | j r| j  d| n|}| |gI dH }|d S )zAsync call out to Gradient's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r<   Nr   )r   r;   )r%   r-   r=   r7   r   r   r   aembed_query   s   zGradientEmbeddings.aembed_query)__name__
__module____qualname____doc__str__annotations__r   r   r   r   r   r   r   r   Zmodel_configr   classmethodr   r   r   r&   r   floatr:   r;   r>   r?   r   r   r   r   r      s4   
 c                   @   s   e Zd ZdZdddZdS ) 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.
    r   Nc                 O   s   t d)Nz8Deprecated,TinyAsyncGradientEmbeddingClient was removed.)
ValueError)r%   argskwargsr   r   r   __init__   s   z)TinyAsyncGradientEmbeddingClient.__init__)r   N)r@   rA   rB   rC   rL   r   r   r   r   rH      s    rH   N)typingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr   Zpackaging.versionr	   Zpydanticr
   r   r   Ztyping_extensionsr   __all__r   rH   r   r   r   r   <module>   s     