U
    ™ÀÂhJ  ã                   @   s`   d dl Z d dlZd dlmZmZ d dlZd dlmZ d dlm	Z	 e  
e¡ZG dd„ de	eƒZdS )é    N)ÚAnyÚList)Ú
Embeddings)Ú	BaseModelc                       sž   e Zd ZU dZdZeed< dZeed< dZeed< G dd„ dƒZ	e
d	œ‡ fd
d„Zeee dœdd„Zee eee  dœdd„Zeee dœdd„Z‡  ZS )ÚOVHCloudEmbeddingsz+
    OVHcloud AI Endpoints Embeddings.
    Ú Úaccess_tokenÚ
model_nameZkeplerÚregionc                   @   s   e Zd ZdZdS )zOVHCloudEmbeddings.ConfigZforbidN)Ú__name__Ú
__module__Ú__qualname__Úextra© r   r   úK/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/ovhcloud.pyÚConfig   s   r   )Úkwargsc                    sH   t ƒ jf |Ž | jdkr tdƒ‚| jdkr2tdƒ‚| jdkrDtdƒ‚d S )Nr   z1Access token is required for OVHCloud embeddings.z/Model name is required for OVHCloud embeddings.z+Region is required for OVHCloud embeddings.)ÚsuperÚ__init__r   Ú
ValueErrorr	   r
   )Úselfr   ©Ú	__class__r   r   r      s    


zOVHCloudEmbeddings.__init__)ÚtextÚreturnc                 C   s¶   dd| j › dœ}t ¡ }|jd| j› d| j› d||d}|jdkr®|jd	kr†t|j 	d
d¡ƒ}t
 d|¡ |dkrt |¡ qnq|jdkr˜tdƒ‚tdj|j|jdƒ‚| ¡ S )z«Generate embeddings from OVHCLOUD AIE.
        Args:
            text (str): The text to embed.
        Returns:
            List[float]: Embeddings for the text.
        z
text/plainzBearer )zcontent-typeÚAuthorizationzhttps://z.endpoints.z.ai.cloud.ovh.net/api/text2vec)ÚheadersÚdataéÈ   i­  zRateLimit-Resetr   z(Rate limit exceeded. Waiting %d seconds.i‘  z"Unauthorized, retry with new tokenz6Request failed with status code: {status_code}, {text})Ústatus_coder   N)r   ÚrequestsÚsessionÚpostr	   r
   r   Úintr   ÚgetÚloggerÚinfoÚtimeÚsleepr   Úformatr   Újson)r   r   r   r!   ÚresponseZ
reset_timer   r   r   Ú_generate_embedding&   s4    
þý



 ÿÿz&OVHCloudEmbeddings._generate_embedding)Útextsr   c                    s   ‡ fdd„|D ƒS )zÜCreate a retry decorator for PremAIEmbeddings.
        Args:
           texts (List[str]): The list of texts to embed.

        Returns:
           List[List[float]]: List of embeddings, one for each input text.
        c                    s   g | ]}ˆ   |¡‘qS r   ©r,   )Ú.0r   ©r   r   r   Ú
<listcomp>W   s     z6OVHCloudEmbeddings.embed_documents.<locals>.<listcomp>r   )r   r-   r   r0   r   Úembed_documentsO   s    z"OVHCloudEmbeddings.embed_documentsc                 C   s
   |   |¡S )zŸEmbed a single query text.
        Args:
            text (str): The text to embed.
        Returns:
            List[float]: Embeddings for the text.
        r.   )r   r   r   r   r   Úembed_queryY   s    zOVHCloudEmbeddings.embed_query)r   r   r   Ú__doc__r   ÚstrÚ__annotations__r	   r
   r   r   r   r   Úfloatr,   r2   r3   Ú__classcell__r   r   r   r   r      s   
	)
r   )Úloggingr'   Útypingr   r   r    Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   Ú	getLoggerr   r%   r   r   r   r   r   Ú<module>   s   
