
    NgT                         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mZ d dlmZmZmZ d dlmZmZ d dlmZmZ dZd	Z G d
 de          Z G d dee          ZdS )    )AnyDictListMappingOptionalN)
Embeddings)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDict	SecretStr)HTTPAdapterRetry)NotRequired	TypedDict   z$https://api.embaas.io/v1/embeddings/c                   J    e Zd ZU dZeed<   ee         ed<   ee         ed<   dS )EmbaasEmbeddingsPayloadz&Payload for the Embaas embeddings API.modeltextsinstructionN)__name__
__module____qualname____doc__str__annotations__r   r        a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/embaas.pyr   r      sB         00JJJ9S!!!!!!r    r   c                      e Zd ZU dZdZeed<   	 dZee         ed<   	 e	Z
eed<   	 dZee         ed<   	 dZee         ed	<   	 d
Zee         ed<    ed          Zededefd            Zedeeef         fd            Zdee         defdZdedeee                  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 )EmbaasEmbeddingsa  Embaas's embedding service.

    To use, you should have the
    environment variable ``EMBAAS_API_KEY`` set with your API key, or pass
    it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            # initialize with default model and instruction
            from langchain_community.embeddings import EmbaasEmbeddings
            emb = EmbaasEmbeddings()

            # initialize with custom model and instruction
            from langchain_community.embeddings import EmbaasEmbeddings
            emb_model = "instructor-large"
            emb_inst = "Represent the Wikipedia document for retrieval"
            emb = EmbaasEmbeddings(
                model=emb_model,
                instruction=emb_inst
            )
    ze5-large-v2r   Nr   api_urlembaas_api_key   max_retries   timeoutforbid)extravaluesreturnc                 L    t          t          |dd                    }||d<   |S )z?Validate that api key and python package exists in environment.r%   EMBAAS_API_KEY)r	   r
   )clsr,   r%   s      r!   validate_environmentz%EmbaasEmbeddings.validate_environment?   s6     / )9;KLL
 
 $2 r    c                      | j         | j        dS )zGet the identifying params.r   r   r3   )selfs    r!   _identifying_paramsz$EmbaasEmbeddings._identifying_paramsH   s     D4DEEEr    r   c                 T    t          || j                  }| j        r
| j        |d<   |S )z&Generates payload for the API request.)r   r   r   )r   r   r   )r4   r   payloads      r!   _generate_payloadz"EmbaasEmbeddings._generate_payloadM   s3    )TZHHH 	6%)%5GM"r    r7   c                    d| j                                          dd}t          j                    }t	          | j        ddgd          }|                    dt          |	                     |                    d
t          |	                     |                    | j	        ||| j
                  }|                                }d |d         D             }|S )z;Sends a request to the Embaas API and handles the response.zBearer zapplication/json)AuthorizationzContent-Typeg      ?POSTT)totalbackoff_factorallowed_methodsraise_on_statuszhttp://)r'   zhttps://)headersjsonr)   c                     g | ]
}|d          S )	embeddingr   ).0items     r!   
<listcomp>z4EmbaasEmbeddings._handle_request.<locals>.<listcomp>m   s    LLLDd;'LLLr    data)r%   get_secret_valuerequestsSessionr   r'   mountr   postr$   r)   rA   )r4   r7   r@   sessionretriesresponseparsed_response
embeddingss           r!   _handle_requestz EmbaasEmbeddings._handle_requestT   s     Pt':'K'K'M'MOO.
 

 "$$"#H 	
 
 
 	i!A!A!ABBBj+'"B"B"BCCC<<LL	   
 
 #--//LLOF4KLLL
r    c                 F   |                      |          }	 |                     |          S # t          j        j        $ r`}|j        |j        j        st          d|           |j                                        }d|v rt          d|d                     d}~ww xY w)z)Generate embeddings using the Embaas API.Nz'Error raised by embaas embeddings API: messagez1Validation Error raised by embaas embeddings API:)	r8   rR   rI   
exceptionsRequestExceptionrO   text
ValueErrorrA   )r4   r   r7   erP   s        r!   _generate_embeddingsz%EmbaasEmbeddings._generate_embeddingsq   s    ((//	''000"3 
	 
	 
	z!! !N1!N!NOOOjoo//OO++ 4&y14 4   
	s   , B  ABB c                      fdt          dt                    t                    D             } fd|D             }d |D             S )zGet embeddings for a list of texts.

        Args:
            texts: The list of texts to get embeddings for.

        Returns:
            List of embeddings, one for each text.
        c                 4    g | ]}||t           z            S r   )MAX_BATCH_SIZE)rD   ir   s     r!   rF   z4EmbaasEmbeddings.embed_documents.<locals>.<listcomp>   s5     
 
 
./E!a.(()
 
 
r    r   c                 :    g | ]}                     |          S r   )rZ   )rD   batchr4   s     r!   rF   z4EmbaasEmbeddings.embed_documents.<locals>.<listcomp>   s'    LLL5d//66LLLr    c                     g | ]	}|D ]}|
S r   r   )rD   r`   rC   s      r!   rF   z4EmbaasEmbeddings.embed_documents.<locals>.<listcomp>   s%    IIIe5IIi	IIIIr    )rangelenr]   )r4   r   batchesrQ   s   ``  r!   embed_documentsz EmbaasEmbeddings.embed_documents   sn    
 
 
 
38CJJ3W3W
 
 
 MLLLGLLL
IIzIIIIr    rW   c                 :    |                      |g          d         S )zGet embeddings for a single text.

        Args:
            text: The text to get embeddings for.

        Returns:
            List of embeddings.
        r   )re   )r4   rW   s     r!   embed_queryzEmbaasEmbeddings.embed_query   s     ##TF++A..r    )!r   r   r   r   r   r   r   r   r   EMBAAS_API_URLr$   r%   r   r'   intr)   r   model_configr   r   r1   propertyr   r   r5   r   r   r8   floatrR   rZ   re   rg   r   r    r!   r#   r#      s         . E3(!%K#%%%:!GS!!!0*.NHY'...,!"K#"""$GXc]:  L $ 4    X FWS#X%6 F F F XFtCy 5L    '> 4UCT    :$s) T%[8I    "JT#Y J4U3D J J J J 	/ 	/U 	/ 	/ 	/ 	/ 	/ 	/r    r#   )typingr   r   r   r   r   rI   langchain_core.embeddingsr   langchain_core.utilsr	   r
   r   pydanticr   r   r   requests.adaptersr   r   typing_extensionsr   r   r]   rh   r   r#   r   r    r!   <module>rs      s,   5 5 5 5 5 5 5 5 5 5 5 5 5 5  0 0 0 0 0 0 V V V V V V V V V V 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 7" " " " "i " " "D/ D/ D/ D/ D/y* D/ D/ D/ D/ D/r    