
    7|hT                         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y)    )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                   <    e Zd ZU dZeed<   ee   ed<   ee   ed<   y)EmbaasEmbeddingsPayloadz&Payload for the Embaas embeddings API.modeltextsinstructionN)__name__
__module____qualname____doc__str__annotations__r   r        d/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/embaas.pyr   r      s    0J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 y)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                 <    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?   s.     / )9;KL
 $2 r    c                 4    | j                   | j                  dS )zGet the identifying params.r   r   r3   )selfs    r!   _identifying_paramsz$EmbaasEmbeddings._identifying_paramsH   s     D4D4DEEr    r   c                 j    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   s0    )TZZH%)%5%5GM"r    r7   c                    d| j                   j                          dd}t        j                         }t	        | j
                  ddgd      }|j                  dt        |	             |j                  d
t        |	             |j                  | j                  ||| j                        }|j                         }|d   D cg c]  }|d   	 }}|S c c}w )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)   data	embedding)r%   get_secret_valuerequestsSessionr   r'   mountr   postr$   r)   rA   )	r4   r7   r@   sessionretriesresponseparsed_responseitem
embeddingss	            r!   _handle_requestz EmbaasEmbeddings._handle_requestT   s      't':':'K'K'M&NO.

 ""$""#H 	
 	i!ABj+'"BC<<LLLL	   
 #--/4CF4KLDd;'L
L Ms   Cc                 R   | j                  |      }	 | j                  |      S # t        j                  j                  $ re}|j
                  |j
                  j                  st        d|       |j
                  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   rO   rE   
exceptionsRequestExceptionrK   text
ValueErrorrA   )r4   r   r7   erL   s        r!   _generate_embeddingsz%EmbaasEmbeddings._generate_embeddingsq   s    ((/	''00""33 
	zz! #J1#!NOOjjoo/OO+ G&y124  
	s   $ B&A B!!B&c                     t        dt        |      t              D cg c]  }|||t        z     }}|D cg c]  }| j                  |       }}|D cg c]  }|D ]  }|  c}}S c c}w c c}w c c}}w )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.
        r   )rangelenMAX_BATCH_SIZErW   )r4   r   ibatchesbatchrN   rC   s          r!   embed_documentsz EmbaasEmbeddings.embed_documents   s     49CJ3W
./E!a.()
 
 ELL5d//6L
L'1Ie5Ii	I	II
 MIs   A)A.A3rT   c                 ,    | j                  |g      d   S )zGet embeddings for a single text.

        Args:
            text: The text to get embeddings for.

        Returns:
            List of embeddings.
        r   )r_   )r4   rT   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   floatrO   rW   r_   ra   r   r    r!   r#   r#      sJ   . E3(!%K#%:!GS!0*.NHY'.,!"K#"$GXc]L $ 4   FWS#X%6 F FtCy 5L '> 4UCT :$s) T%[8I "JT#Y J4U3D J 	/ 	/U 	/r    r#   )typingr   r   r   r   r   rE   langchain_core.embeddingsr   langchain_core.utilsr	   r
   r   pydanticr   r   r   requests.adaptersr   r   typing_extensionsr   r   r[   rb   r   r#   r   r    r!   <module>rm      sK    5 5  0 V V 5 5 0 4 7"i "D/y* D/r    