
    dhT                         S SK JrJrJrJrJr  S SKrS SKJr  S SK	J
r
JrJr  S SKJrJrJr  S SKJrJr  S SKJrJr  SrS	r " S
 S\5      r " S S\\5      rg)    )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                   D    \ rS rSr% Sr\\S'   \\   \S'   \\   \S'   Sr	g)EmbaasEmbeddingsPayload   z&Payload for the Embaas embeddings API.modeltextsinstruction N)
__name__
__module____qualname____firstlineno____doc__str__annotations__r   r   __static_attributes__r       ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/embaas.pyr   r      s    0J9S!!r#   r   c                   p   \ rS rSr% SrSr\\S'    Sr\	\   \S'    \
r\\S'    Sr\	\   \S'    S	r\	\   \S
'    Sr\	\   \S'   \" SS9r\S\S\4S j5       r\S\\\4   4S j5       rS\\   S\4S jrS\S\\\      4S jrS\\   S\\\      4S jrS\\   S\\\      4S jr S\S\\   4S jr!Sr"g)EmbaasEmbeddings   a  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                 :    [        [        USS5      5      nX!S'   U$ )z?Validate that api key and python package exists in environment.r)   EMBAAS_API_KEY)r	   r
   )clsr0   r)   s      r$   validate_environment%EmbaasEmbeddings.validate_environment?   s,     / )9;KL
 $2 r#   c                 4    U R                   U R                  S.$ )zGet the identifying params.r   r   r8   )selfs    r$   _identifying_params$EmbaasEmbeddings._identifying_paramsH   s     D4D4DEEr#   r   c                 l    [        XR                  S9nU R                  (       a  U R                  US'   U$ )z&Generates payload for the API request.)r   r   r   )r   r   r   )r9   r   payloads      r$   _generate_payload"EmbaasEmbeddings._generate_payloadM   s.    )ZZH%)%5%5GM"r#   r=   c                    SU R                   R                  5        3SS.n[        R                  " 5       n[	        U R
                  SS/SS9nUR                  S[        US	95        UR                  S
[        US	95        UR                  U R                  UUU R                  S9nUR                  5       nUS    Vs/ sH  owS   PM	     nnU$ s  snf )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-   rH   )	r9   r=   rG   sessionretriesresponseparsed_responseitem
embeddingss	            r$   _handle_request EmbaasEmbeddings._handle_requestT   s      't':':'K'K'M&NO.

 ""$""#H 	
 	i!ABj+'"BC<<LLLL	   
 #--/4CF4KL4KD;'4K
L Ms   <Cc                 d   U R                  U5      n U R                  U5      $ ! [        R                  R                   am  nUR
                  b  UR
                  R                  (       d  [        SU 35      eUR
                  R                  5       nSU;   a  [        SUS    35      ee SnAff = f)z)Generate embeddings using the Embaas API.Nz'Error raised by embaas embeddings API: messagez1Validation Error raised by embaas embeddings API:)	r>   rV   rL   
exceptionsRequestExceptionrR   text
ValueErrorrH   )r9   r   r=   erS   s        r$   _generate_embeddings%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                     [        S[        U5      [        5       Vs/ sH  o!X"[        -    PM     nnU Vs/ sH  o@R                  U5      PM     nnU VVs/ sH  oD H  ofPM     M     snn$ s  snf s  snf s  snnf )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_SIZEr_   )r9   r   ibatchesbatchrU   rJ   s          r$   embed_documents EmbaasEmbeddings.embed_documents   s     49CJ3W
3Wa!.()3W 	 
 ELLG5//6G
L'1Ize5i	5	zII
 MIs   A,A1A6r\   c                 ,    U R                  U/5      S   $ )zuGet embeddings for a single text.

Args:
    text: The text to get embeddings for.

Returns:
    List of embeddings.
r   )rh   )r9   r\   s     r$   embed_queryEmbaasEmbeddings.embed_query   s     ##TF+A..r#   r   )#r   r   r   r   r   r   r    r!   r   r   EMBAAS_API_URLr(   r)   r   r+   intr-   r   model_configr   r   r5   propertyr   r   r:   r   r   r>   floatrV   r_   rh   rk   r"   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   rL   langchain_core.embeddingsr   langchain_core.utilsr	   r
   r   pydanticr   r   r   requests.adaptersr   r   typing_extensionsr   r   rd   rm   r   r&   r   r#   r$   <module>rx      sK    5 5  0 V V 5 5 0 4 7"i "D/y* D/r#   