
    Ng                     x    d dl mZmZmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZmZ  G d dee	          ZdS )    )AnyDictListMappingOptionalTupleN)
Embeddingsget_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc            	          e Zd ZU dZd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<    ed          Z ed          ededefd                        Zedeeef         fd            Z	 ddeeeef                  d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 )MosaicMLInstructorEmbeddingsaa  MosaicML embedding service.

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

    Example:
        .. code-block:: python

            from langchain_community.llms import MosaicMLInstructorEmbeddings
            endpoint_url = (
                "https://models.hosted-on.mosaicml.hosting/instructor-large/v1/predict"
            )
            mosaic_llm = MosaicMLInstructorEmbeddings(
                endpoint_url=endpoint_url,
                mosaicml_api_token="my-api-key"
            )
    zBhttps://models.hosted-on.mosaicml.hosting/instructor-xl/v1/predictendpoint_urlz&Represent the document for retrieval: embed_instructionz<Represent the question for retrieving supporting documents: query_instructiong      ?retry_sleepNmosaicml_api_tokenforbid)extrabefore)modevaluesreturnc                 2    t          |dd          }||d<   |S )z?Validate that api key and python package exists in environment.r   MOSAICML_API_TOKENr
   )clsr   r   s      c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/mosaicml.pyvalidate_environmentz1MosaicMLInstructorEmbeddings.validate_environment0   s/     2(*>
 
 (:#$    c                     d| j         iS )zGet the identifying parameters.r   )r   )selfs    r   _identifying_paramsz0MosaicMLInstructorEmbeddings._identifying_params:   s      122r!   Finputis_retryc                    d|i}| j          dd}	 t          j        | j        ||          }n.# t          j        j        $ r}t          d|           d }~ww xY w	 |j        dk    rN|s5dd l}|	                    | j
                   |                     |d	          S t          d
|j                   |                                }t          |t                    r`g d}	|	D ]}
|
|v r
||
         } nt          d|           t          |t                     rt          |d         t                     r|}n|g}nt          d|           n6# t          j        j        $ r}t          d| d|j                   d }~ww xY w|S )Ninputszapplication/json)AuthorizationzContent-Type)headersjsonz$Error raised by inference endpoint: i  r   T)r&   z>Error raised by inference API: rate limit exceeded.
Response: )dataoutputoutputsz#No key data or output in response: zUnexpected response type: zError raised by inference API: z.
Response: )r   requestspostr   
exceptionsRequestException
ValueErrorstatus_codetimesleepr   _embedtextr+   
isinstancedictlistJSONDecodeError)r#   r%   r&   payloadr*   responseer5   parsed_responseoutput_keyskeyoutput_item
embeddingss                r   r7   z#MosaicMLInstructorEmbeddings._embed?   s     U# !% 79.
 
	I}T%6gVVVHH"3 	I 	I 	IGAGGHHH	I'	#s** =KKKJJt/000;;ut;<<< '}' '  
 'mmooO /400 Q;;;&  Co--&5c&: . %OoOO   k400 /ZAPT5U5U /!,JJ"-JJ !Oo!O!OPPP"2 	 	 	Q!QQ(-QQ  	
 s5   . AAAAE B2E F&F  Ftextsc                 N      fd|D             }                      |          }|S )zEmbed documents using a MosaicML deployed instructor embedding model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 "    g | ]}j         |fS  )r   ).0r8   r#   s     r   
<listcomp>z@MosaicMLInstructorEmbeddings.embed_documents.<locals>.<listcomp>   s!    NNNd4d;NNNr!   )r7   )r#   rE   instruction_pairsrD   s   `   r   embed_documentsz,MosaicMLInstructorEmbeddings.embed_documents{   s8     ONNNNNN[[!233
r!   r8   c                 P    | j         |f}|                     |g          d         }|S )zEmbed a query using a MosaicML deployed instructor embedding model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )r   r7   )r#   r8   instruction_pair	embeddings       r   embed_queryz(MosaicMLInstructorEmbeddings.embed_query   s2     !2D9KK!1 233A6	r!   )F)__name__
__module____qualname____doc__r   str__annotations__r   r   r   floatr   r   r   model_configr   classmethodr   r   r    propertyr   r$   r   r   boolr7   rL   rP   rH   r!   r   r   r   	   s         ( 	M #    EsEEE.F s    /KE(,,,,:  L _(###$ 3    [ $# 3WS#X%6 3 3 3 X3
 >C: :%S/*:6::	d5k	: : : :xT#Y 4U3D     U      r!   r   )typingr   r   r   r   r   r   r/   langchain_core.embeddingsr	   langchain_core.utilsr   pydanticr   r   r   r   rH   r!   r   <module>r`      s    < < < < < < < < < < < < < < < <  0 0 0 0 0 0 5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ;J J J J J9j J J J J Jr!   