
    7|h                         d dl Z 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
mZ  ej                  e      Z G d de
e      Zy)    N)AnyList)
Embeddings)	BaseModel
ConfigDictc                        e Zd ZU dZ	 dZeed<   	 dZeed<   	 dZeed<    e	dd	      Z
d
ef fdZdedee   fdZdee   deee      fdZdedee   fdZdedededefdZ xZS )OVHCloudEmbeddingsz+
    OVHcloud AI Endpoints Embeddings.
     access_token
model_namekeplerregionforbid )extraprotected_namespaceskwargsc                     t        |   di | | j                  dk(  rt        d      | j                  dk(  rt        d      | j
                  dk(  rt        d      y )Nr
   z1Access token is required for OVHCloud embeddings.z/Model name is required for OVHCloud embeddings.z+Region is required for OVHCloud embeddings.r   )super__init__r   
ValueErrorr   r   )selfr   	__class__s     f/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/ovhcloud.pyr   zOVHCloudEmbeddings.__init__   sb    "6""PQQ??b NOO;;"JKK     textreturnc                 (    | j                  d|d      S )zGenerate embeddings from OVHCLOUD AIE.
        Args:
            text (str): The text to embed.
        Returns:
            List[float]: Embeddings for the text.
        z
text/plaintext2vec)_send_request_to_ai_endpointsr   r   s     r   _generate_embeddingz&OVHCloudEmbeddings._generate_embedding&   s     11,jQQr   textsc                 N    | j                  dt        j                  |      d      S )zEmbed a list of documents.
        Args:
           texts (List[str]): The list of texts to embed.

        Returns:
           List[List[float]]: List of embeddings, one for each input text.

        zapplication/jsonbatch_text2vec)r    jsondumps)r   r#   s     r   embed_documentsz"OVHCloudEmbeddings.embed_documents0   s(     11

5 13C
 	
r   c                 $    | j                  |      S )zEmbed a single query text.
        Args:
            text (str): The text to embed.
        Returns:
            List[float]: Embeddings for the text.
        )r"   r!   s     r   embed_queryzOVHCloudEmbeddings.embed_query>   s     ''--r   contentTypepayloadroutec                 X   |d| j                    d}t        j                         }	 |j                  d| j                   d| j
                   d| ||      }|j                  dk7  r|j                  dk(  rY	 t        |j                  j                  d	d
            }t        j                  d|       |d
kD  rt        j                  |       	 |j                  dk(  r	 t        d      	 t        dj                  |j                  |j                               |j#                         S )a*  Send a HTTPS request to OVHcloud AI Endpoints
        Args:
            contentType (str): The content type of the request, application/json or text/plain.
            payload (str): The payload of the request.
            route (str): The route of the request, batch_text2vec or text2vec.
        zBearer )zcontent-typeAuthorizationzhttps://z.endpoints.z.ai.cloud.ovh.net/api/)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   )r   requestssessionpostr   r   r3   intr0   getloggerinfotimesleepr   formatr   r&   )r   r+   r,   r-   r0   r5   response
reset_times           r   r    z0OVHCloudEmbeddings._send_request_to_ai_endpointsG   s7    (&t'8'8&9:

 ""$||t/{4;;-,UG5   $ H ##s*''3.=!$X%5%5%9%9:KQ%O!PJKK JJW!A~

:. Q ''3.>$%IJJ9 LSS$,$8$8x}} T  
 ==?"r   )__name__
__module____qualname____doc__r   str__annotations__r   r   r   model_configr   r   r   floatr"   r(   r*   r    __classcell__)r   s   @r   r	   r	      s     .L#EJ'FCH2FLL LR RU R
T#Y 
4U3D 
. .U .,#,#),,#58,#	,#r   r	   )r&   loggingr;   typingr   r   r4   langchain_core.embeddingsr   pydanticr   r   	getLoggerr@   r9   r	   r   r   r   <module>rN      s<         0 *			8	$f#J f#r   