
    Ng                         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
 d dlmZmZ d dlmZ d dlmZ dZd	Zd
Zd                    eede          Z G d de
          ZdS )    )AnyDictListMappingOptionalN)CallbackManagerForLLMRun)LLM)get_from_dict_or_envpre_init)
ConfigDict)enforce_stop_tokensz### Instruction:z### Response:ziBelow is an instruction that describes a task. Write a response that appropriately completes the request.z7{intro}
{instruction_key}
{instruction}
{response_key}
z{instruction})introinstruction_keyinstructionresponse_keyc                   V   e Zd ZU dZdZeed<   	 dZeed<   	 dZ	e
e         ed<   	 dZ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edefd            ZdedefdZ	 	 	 ddede
ee                  de
e         dededefdZdS )MosaicMLa2  MosaicML LLM 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 MosaicML
            endpoint_url = (
                "https://models.hosted-on.mosaicml.hosting/mpt-7b-instruct/v1/predict"
            )
            mosaic_llm = MosaicML(
                endpoint_url=endpoint_url,
                mosaicml_api_token="my-api-key"
            )
    zDhttps://models.hosted-on.mosaicml.hosting/mpt-7b-instruct/v1/predictendpoint_urlFinject_instruction_formatNmodel_kwargsg      ?retry_sleepmosaicml_api_tokenforbid)extravaluesreturnc                 2    t          |dd          }||d<   |S )z?Validate that api key and python package exists in environment.r   MOSAICML_API_TOKEN)r
   )clsr   r   s      ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/mosaicml.pyvalidate_environmentzMosaicML.validate_environmentB   s/     2(*>
 
 (:#$    c                 2    | j         pi }i d| j        id|iS )zGet the identifying parameters.r   r   )r   r   )self_model_kwargss     r    _identifying_paramszMosaicML._identifying_paramsK   s8     )/R
t01
}-
 	
r"   c                     dS )zReturn type of llm.mosaic )r$   s    r    	_llm_typezMosaicML._llm_typeT   s	     xr"   promptc                 J    | j         rt                              |          }|S )zTransform prompt.)r   )r   PROMPT_FOR_GENERATION_FORMATformat)r$   r+   s     r    _transform_promptzMosaicML._transform_promptY   s1    ) 	188" 9  F r"   stoprun_manageris_retrykwargsc                 &   | j         pi }|                     |          }d|gi}|                    |           |                    |           | j         dd}	 t	          j        | j        ||          }	n.# t          j        j        $ r}
t          d|
           d}
~
ww xY w	 |	j
        dk    rP|s7ddl}|                    | j                   |                     |||d	
          S t          d|	j                   |	                                }t#          |t$                    r`g d}|D ]}||v r
||         } n)t          dd                    |           d|           t#          |t(                    r	|d         }n|}nt          d|           |                    |          r|t-          |          d         }n6# t          j        j        $ r}
t          d|
 d|	j                   d}
~
ww xY w|t1          ||          }|S )az  Call out to a MosaicML LLM inference endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = mosaic_llm.invoke("Tell me a joke.")
        inputszapplication/json)AuthorizationzContent-Type)headersjsonz$Error raised by inference endpoint: Ni  r   T)r2   z>Error raised by inference API: rate limit exceeded.
Response: )dataoutputoutputszNo valid key (z, z) in response: zUnexpected response type: zError raised by inference API: z.
Response: )r   r/   updater   requestspostr   
exceptionsRequestException
ValueErrorstatus_codetimesleepr   _calltextr8   
isinstancedictjoinlist
startswithlenJSONDecodeErrorr   )r$   r+   r0   r1   r2   r3   r%   payloadr7   responseerC   parsed_responseoutput_keyskeyoutput_itemrF   s                    r    rE   zMosaicML._calla   s   , )/R''//fX&}%%%v !% 79.
 
	I}T%6gVVVHH"3 	I 	I 	IGAGGHHH	I+	#s** PKKKJJt/000::fdK$:OOO '}' '  
 'mmooO /400 Q;;;&  Co--&5c&: . %.;)?)? . .+. .   k400 '&q>DD&DD !Oo!O!OPPP v&& +CKKMM*"2 	 	 	Q!QQ(-QQ  	 &tT22Ds8   A7 7B"BB"&AG	 *CG	 	G<G77G<)NNF)__name__
__module____qualname____doc__r   str__annotations__r   boolr   r   rH   r   floatr   r   model_configr   r   r!   propertyr   r   r&   r*   r/   r   r   rE   r)   r"   r    r   r      s         ( 	O #    &+t+++C#'L(4.'''1KE(,,,,:  L $ 4    X 
WS#X%6 
 
 
 X
 3    X      %):>Z ZZ tCy!Z 67	Z
 Z Z 
Z Z Z Z Z Zr"   r   )typingr   r   r   r   r   r=   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   pydanticr   langchain_community.llms.utilsr   INSTRUCTION_KEYRESPONSE_KEYINTRO_BLURBr.   r-   r   r)   r"   r    <module>rh      s   5 5 5 5 5 5 5 5 5 5 5 5 5 5  = = = = = = 3 3 3 3 3 3 ? ? ? ? ? ? ? ?       > > > > > >$A   F
#	   	 ^ ^ ^ ^ ^s ^ ^ ^ ^ ^r"   