a
    bg                     @   s   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jeededZG d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})ZintroZinstruction_keyinstructionZresponse_keyc                   @   s   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dZeeedddZeeeef dddZeedddZeedddZdee
ee  e
e eeedd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_tokenZforbid)extra)valuesreturnc                 C   s   t |dd}||d< |S )z?Validate that api key and python package exists in environment.r   ZMOSAICML_API_TOKEN)r	   )clsr   r    r   o/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/mosaicml.pyvalidate_environmentB   s
    zMosaicML.validate_environment)r   c                 C   s    | j pi }i d| jid|iS )zGet the identifying parameters.r   r   )r   r   )self_model_kwargsr   r   r   _identifying_paramsK   s    
zMosaicML._identifying_paramsc                 C   s   dS )zReturn type of llm.Zmosaicr   )r   r   r   r   	_llm_typeT   s    zMosaicML._llm_type)promptr   c                 C   s   | j rtj|d}|S )zTransform prompt.)r   )r   PROMPT_FOR_GENERATION_FORMATformat)r   r   r   r   r   _transform_promptY   s
    zMosaicML._transform_prompt)r   stoprun_manageris_retrykwargsr   c              
   K   s  | j pi }| |}d|gi}|| || | j dd}ztj| j||d}	W n6 tjjy }
 zt	d|
 W Y d}
~
n
d}
~
0 0 z|	j
dkr|sddl}|| j | j|||d	d
W S t	d|	j |	 }t|trHg d}|D ]}||v r|| } q,qt	dd| d| t|trB|d }n|}nt	d| ||rr|t|d }W n@ tjjy }
 z"t	d|
 d|	j W Y d}
~
n
d}
~
0 0 |durt||}|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)r%   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textr*   
isinstancedictjoinlist
startswithlenJSONDecodeErrorr   )r   r   r#   r$   r%   r&   r   payloadr)   responseer5   Zparsed_responseZoutput_keyskeyZoutput_itemr8   r   r   r   r7   a   s`    




$



zMosaicML._call)NNF)__name__
__module____qualname____doc__r   str__annotations__r   boolr   r   r:   r   floatr   r   Zmodel_configr
   r   r   propertyr   r   r   r   r"   r   r   r7   r   r   r   r   r      s8   

   
r   )typingr   r   r   r   r   r/   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.utilsr	   r
   Zpydanticr   Zlangchain_community.llms.utilsr   ZINSTRUCTION_KEYZRESPONSE_KEYZINTRO_BLURBr!   r    r   r   r   r   r   <module>   s"   