o
    Zh+                     @   sr   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mZ d dlmZ G dd deeZdS )	    )AnyDictListOptional)
Embeddings)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDictField	SecretStr)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< 	 ed	d
ZededefddZe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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modelZforbid)extra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   \/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/edenai.pyvalidate_environment$   s   
z%EdenAiEmbeddings.validate_environmentc                  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textsc                 C   s  d}ddd| j   |  d}|| jd}| jdur$| j| ji|d< t|d}|j||d	}|jd
kr=td|j |jdkrJt	d|j
 |jdkr[td|j d|j
 | }|| j }|ddkrx|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   	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_embeddings2   sB   





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:   )r4   r   r   r   r   embed_documents]   s   

z EdenAiEmbeddings.embed_documentsr0   c                 C   s   |  |gd S )zEmbed a query using EdenAI.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   r;   )r4   r0   r   r   r   embed_queryi   s   	zEdenAiEmbeddings.embed_query)__name__
__module____qualname____doc__r   r   r   r   __annotations__r   strr   r   Zmodel_configr	   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.utilsr   r   r	   Zpydanticr
   r   r   r   Z&langchain_community.utilities.requestsr   r   r   r   r   r   <module>   s    