
    NgP                     |    d dl mZmZmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZmZ dZdZ G d d	ee          ZdS )
    )AnyDictListMappingOptionalN)
Embeddings)get_from_dict_or_envpre_init)	BaseModel
ConfigDictz#sentence-transformers/clip-ViT-B-32i   c                      e Zd ZU dZeZeed<   	 dZe	ed<   	 dZ
eed<   	 dZeed<   	 d	Zee         ed
<   	 d	Zee         ed<   	 eZeed<   	  edd          Zededefd            Zedeeef         fd            Zdee         deee                  fdZdee         deee                  fdZdedee         fdZ d	S )DeepInfraEmbeddingsa  Deep Infra's embedding inference service.

    To use, you should have the
    environment variable ``DEEPINFRA_API_TOKEN`` set with your API token, or pass
    it as a named parameter to the constructor.
    There are multiple embeddings models available,
    see https://deepinfra.com/models?type=embeddings.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import DeepInfraEmbeddings
            deepinfra_emb = DeepInfraEmbeddings(
                model_id="sentence-transformers/clip-ViT-B-32",
                deepinfra_api_token="my-api-key"
            )
            r1 = deepinfra_emb.embed_documents(
                [
                    "Alpha is the first letter of Greek alphabet",
                    "Beta is the second letter of Greek alphabet",
                ]
            )
            r2 = deepinfra_emb.embed_query(
                "What is the second letter of Greek alphabet"
            )

    model_idF	normalizez	passage: embed_instructionzquery: query_instructionNmodel_kwargsdeepinfra_api_token
batch_sizeforbid )extraprotected_namespacesvaluesreturnc                 2    t          |dd          }||d<   |S )z?Validate that api key and python package exists in environment.r   DEEPINFRA_API_TOKEN)r	   )clsr   r   s      d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/deepinfra.pyvalidate_environmentz(DeepInfraEmbeddings.validate_environment;   s/     3)+@
 
 )<$%    c                     d| j         iS )zGet the identifying parameters.r   )r   )selfs    r   _identifying_paramsz'DeepInfraEmbeddings._identifying_paramsD   s     DM**r!   inputc                    | j         pi }d| j         dd}	 t          j        d| j         ||| j        d|          }n.# t          j        j        $ r}t          d|           d }~ww xY w|j	        dk    rt          d	|j	        d
|j
                  	 |                                }|d         }n6# t          j        j        $ r}t          d| d|j
                   d }~ww xY w|S )Nzbearer zapplication/json)AuthorizationzContent-Typez'https://api.deepinfra.com/v1/inference/)inputsr   )headersjsonz$Error raised by inference endpoint:    z)Error raised by inference API HTTP code: z, 
embeddingszError raised by inference API: z.
Response: )r   r   requestspostr   r   
exceptionsRequestException
ValueErrorstatus_codetextr*   JSONDecodeError)r#   r%   _model_kwargsr)   resetr,   s           r   _embedzDeepInfraEmbeddings._embedI   sY   )/R Bt'?AA.
 

	I-I$-II %DNTTmT  CC
 "3 	I 	I 	IGAGGHHH	I ?c!!*???CHH.  	

A<JJ"2 	 	 	L!LL#(LL  	
 s/   )A A-A((A-B8 8C+C&&C+textsc                      g } fd|D              fdt          dt                     j                  D             }|D ]}|                     |          z  }|S )aQ  Embed documents using a Deep Infra deployed embedding model.
        For larger batches, the input list of texts is chunked into smaller
        batches to avoid exceeding the maximum request size.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 &    g | ]}j          | S r   )r   ).0r3   r#   s     r   
<listcomp>z7DeepInfraEmbeddings.embed_documents.<locals>.<listcomp>v   s'    QQQ4 6>>>QQQr!   c                 4    g | ]}||j         z            S r   )r   )r=   iinstruction_pairsr#   s     r   r>   z7DeepInfraEmbeddings.embed_documents.<locals>.<listcomp>x   s:     
 
 
 a!do"556
 
 
r!   r   )rangelenr   r9   )r#   r:   r,   chunkschunkrA   s   `    @r   embed_documentsz#DeepInfraEmbeddings.embed_documentsi   s     
QQQQ5QQQ
 
 
 
 
1c"344doFF
 
 
  	- 	-E$++e,,,JJr!   r3   c                 T    | j          | }|                     |g          d         }|S )zEmbed a query using a Deep Infra deployed embedding model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r   r9   )r#   r3   instruction_pair	embeddings       r   embed_queryzDeepInfraEmbeddings.embed_query   s8     #4<d<<KK!1 233A6	r!   )!__name__
__module____qualname____doc__DEFAULT_MODEL_IDr   str__annotations__r   boolr   r   r   r   dictr   MAX_BATCH_SIZEr   intr   model_configr
   r   r    propertyr   r   r$   r   floatr9   rF   rJ   r   r!   r   r   r      s         8 %Hc$$$"It6(s(((.&s&&&.#'L(4.'''")-#---D$J$$$,:H2FFFL$ 4    X +WS#X%6 + + + X+DI $tE{*;    @T#Y 4U3D    0 U      r!   r   )typingr   r   r   r   r   r-   langchain_core.embeddingsr   langchain_core.utilsr	   r
   pydanticr   r   rO   rT   r   r   r!   r   <module>r]      s    5 5 5 5 5 5 5 5 5 5 5 5 5 5  0 0 0 0 0 0 ? ? ? ? ? ? ? ? * * * * * * * *8 @ @ @ @ @)Z @ @ @ @ @r!   