U
    h                     @   sn   d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ G dd deeZdS )	    )AnyDictListOptional)
Embeddings)	BaseModelField	SecretStr)convert_to_secret_strget_from_dict_or_envpre_init)Requestsc                   @   s   e Zd ZU dZedddZee ed< dZ	e
ed< dZee
 ed< G d	d
 d
ZeeedddZ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dS )EdenAiEmbeddingsz~EdenAI embedding.
    environment variable ``EDENAI_API_KEY`` set with your API key, or pass
    it as a named parameter.
    NzEdenAI API Token)descriptionedenai_api_keyZopenaiprovidermodelc                   @   s   e Zd ZdZdS )zEdenAiEmbeddings.ConfigZforbidN)__name__
__module____qualname__extra r   r   I/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/edenai.pyConfig   s   r   )valuesreturnc                 C   s   t t|dd|d< |S )z,Validate that api key exists in environment.r   ZEDENAI_API_KEY)r
   r   )clsr   r   r   r   validate_environment"   s    
z%EdenAiEmbeddings.validate_environment)r   c                  C   s   ddl m}  d|  S )Nr   __version__z
langchain/)Zlangchain_communityr   r   r   r   r   get_user_agent*   s    zEdenAiEmbeddings.get_user_agent)textsr   c                 C   s$  d}ddd| j   |  d}|| jd}| jdk	rH| j| ji|d< t|d}|j||d	}|jd
kr|td|j n>|jdkrt	d|j
 n"|jdkrtd|j d|j
 | }|| j }|ddkr|di d}	t|	g }
|| j d D ]}|d }|
| q|
S )z$Compute embeddings using EdenAi api.z)https://api.edenai.run/v2/text/embeddingszapplication/jsonzBearer )acceptzcontent-typeauthorizationz
User-Agent)r!   Z	providersNsettings)headers)urldatai  zEdenAI Server: Error i  z$EdenAI received an invalid payload:    z3EdenAI returned an unexpected response with status z: statusZfailerrormessageitems	embedding)r   Zget_secret_valuer    r   r   r   poststatus_code	Exception
ValueErrortextjsongetappend)selfr!   r&   r%   payloadrequestresponsetempZprovider_responseerr_msgZ
embeddingsZ
embed_itemr-   r   r   r   _generate_embeddings0   s:    





z%EdenAiEmbeddings._generate_embeddingsc                 C   s
   |  |S )zEmbed a list of documents using EdenAI.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r<   )r6   r!   r   r   r   embed_documents[   s    
z EdenAiEmbeddings.embed_documents)r2   r   c                 C   s   |  |gd S )zEmbed a query using EdenAI.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   r=   )r6   r2   r   r   r   embed_queryg   s    	zEdenAiEmbeddings.embed_query)r   r   r   __doc__r   r   r   r	   __annotations__r   strr   r   r   r   r   staticmethodr    r   floatr<   r>   r?   r   r   r   r   r      s   
+r   N)typingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   r   r	   Zlangchain_core.utilsr
   r   r   Z&langchain_community.utilities.requestsr   r   r   r   r   r   <module>   s
   