U
    h5                     @   sv   d dl mZmZmZmZ d dlmZ d dlmZm	Z	 d dl
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)	BaseModelroot_validatorget_from_dict_or_env)parse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	< G d
d dZeddeedddZedddeedddZee eee  dddZee eee  dddZeee dddZeee d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clientc                   @   s   e Zd ZdZdS )zGradientEmbeddings.ConfigZforbidN)__name__
__module____qualname__extra r   r   N/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/gradient_ai.pyConfig5   s   r   T)pre)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   r   r   validate_environment8   s"        
z'GradientEmbeddings.validate_environmentF)r   Zskip_on_failurec                 C   sx   zdd l }W n tk
r(   tdY nX t|jtdk rDtd|j|d |d |d d}|j|d d	|d
< |S )Nr   zAGradientEmbeddings requires `pip install -U "gradientai>=1.4.0"`.z1.4.0r   r   r   )Zaccess_tokenZworkspace_idhostr   )Zslugr   )
gradientaiImportErrorr   __version__ZGradientZget_embeddings_model)r   r   r"   Zgradientr   r   r   	post_initK   s"    
zGradientEmbeddings.post_init)textsr   c                 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   s   g | ]}d |iqS inputr   .0textr   r   r   
<listcomp>j   s     z6GradientEmbeddings.embed_documents.<locals>.<listcomp>inputsc                 S   s   g | ]
}|j qS r   Z	embeddingr*   er   r   r   r,   n   s     )r   embed
embeddingsselfr&   r.   resultr   r   r   embed_documentsa   s    	z"GradientEmbeddings.embed_documentsc                    s2   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   s   g | ]}d |iqS r'   r   r)   r   r   r   r,   y   s     z7GradientEmbeddings.aembed_documents.<locals>.<listcomp>r-   Nc                 S   s   g | ]
}|j qS r   r/   r0   r   r   r   r,   }   s     )r   Zaembedr3   r4   r   r   r   aembed_documentsp   s    	z#GradientEmbeddings.aembed_documents)r+   r   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   r7   )r5   r+   queryr   r   r   embed_query   s
    zGradientEmbeddings.embed_queryc                    s4   | 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.
        r9   Nr   )r   r8   )r5   r+   r:   r3   r   r   r   aembed_query   s    zGradientEmbeddings.aembed_query)r   r   r   __doc__str__annotations__r   r   r   r   r   r   r   r   r   r   r    r%   r   floatr7   r8   r;   r<   r   r   r   r   r      s    

c                   @   s   e Zd ZdZd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.
    N)r   c                 O   s   t dd S )Nz8Deprecated,TinyAsyncGradientEmbeddingClient was removed.)
ValueError)r5   argskwargsr   r   r   __init__   s    z)TinyAsyncGradientEmbeddingClient.__init__)r   r   r   r=   rE   r   r   r   r   rA      s   rA   N)typingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   r   Zlangchain_core.utilsr
   Zpackaging.versionr   __all__r   rA   r   r   r   r   <module>   s    