
    dh                     p    S SK JrJrJrJrJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJrJrJr   " S S\\	5      rg)    )AnyDictListMappingOptionalTupleN)
Embeddingsget_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc            	       >   \ rS rSr% SrSr\\S'    Sr\\S'    Sr	\\S'    S	r
\\S
'    Sr\\   \S'   \" SS9r\" SS9\S\S\4S j5       5       r\S\\\4   4S j5       r SS\\\\4      S\S\\\      4S jjrS\\   S\\\      4S jrS\S\\   4S jrSrg)MosaicMLInstructorEmbeddings	   a)  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                 (    [        USS5      nX!S'   U$ )z?Validate that api key and python package exists in environment.r   MOSAICML_API_TOKENr
   )clsr   r   s      _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/mosaicml.pyvalidate_environment1MosaicMLInstructorEmbeddings.validate_environment0   s(     2(*>
 (:#$    c                     SU R                   0$ )zGet the identifying parameters.r   )r   )selfs    r    _identifying_params0MosaicMLInstructorEmbeddings._identifying_params:   s      1 122r#   inputis_retryc                 2   SU0nU R                    SS.n [        R                  " U R                  XCS9n UR                  S:X  aN  U(       d/  SS KnUR                  U R                  5        U R                  USS	9$ [        S
UR                   35      eUR                  5       n[        U[        5      (       a]  / SQn	U	 H  n
X;   d  M
  X   n  O   [        SU 35      e[        U[         5      (       a  [        US   [         5      (       a  UnU$ U/n U$ [        SU 35      e! [        R                  R
                   a  n[        SU 35      eS nAff = f! [        R                  R"                   a   n[        SU SUR                   35      eS nAff = f)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er8   parsed_responseoutput_keyskeyoutput_item
embeddingss                r    r:   #MosaicMLInstructorEmbeddings._embed?   s    U# !% 7 78.
	I}}T%6%6VH'	##s*JJt//0;;ut;<< U}}o' 
 'mmoO /400;&C-&5&: '
 %=o=NO  k400ZAPT5U5U!,J  #.J  !#=o=N!OPPK ""33 	ICA3GHH	IN ""22 	1!M(--Q 	sI   D$ AE <A	E 	AE E E $EEEF6FFtextsc                 j    U Vs/ sH  o R                   U4PM     nnU R                  U5      nU$ s  snf )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.
)r   r:   )r%   rI   r;   instruction_pairsrG   s        r    embed_documents,MosaicMLInstructorEmbeddings.embed_documents{   s?     INN44d;N[[!23
 Os   0r;   c                 L    U R                   U4nU R                  U/5      S   nU$ )zEmbed a query using a MosaicML deployed instructor embedding model.

Args:
    text: The text to embed.

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