a
    bgA                     @   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eedddZedd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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   x/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/gradient_ai.pyvalidate_environment:   s    
z'GradientEmbeddings.validate_environmentafterr   c                 C   sl   zdd l }W n ty&   tdY n0 t|jtdk rBt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)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>m       z6GradientEmbeddings.embed_documents.<locals>.<listcomp>inputsc                 S   s   g | ]
}|j qS r   Z	embeddingr,   er   r   r   r.   q   r/   )r   Zembed
embeddingsr&   r(   r1   resultr   r   r   embed_documentsd   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.   |   r/   z7GradientEmbeddings.aembed_documents.<locals>.<listcomp>r0   Nc                 S   s   g | ]
}|j qS r   r2   r3   r   r   r   r.      r/   )r   Zaembedr5   r6   r   r   r   aembed_documentss   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   r8   )r&   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.
        r:   Nr   )r   r9   )r&   r-   r;   r5   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   floatr8   r9   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.
    Nr!   c                 O   s   t dd S )Nz8Deprecated,TinyAsyncGradientEmbeddingClient was removed.)
ValueError)r&   argskwargsr   r   r   __init__   s    z)TinyAsyncGradientEmbeddingClient.__init__)r>   r?   r@   rA   rJ   r   r   r   r   rF      s   rF   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   rF   r   r   r   r   <module>   s    