§
    šŠtjÉ  ã                   óÄ   — 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/CA-Chatbot/venv/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ˆà×'Ò'¨Ñ/Ô/ˆà˜f˜XÐ&ˆØ�Š�}Ñ%Ô%Ð%Ø�Š�vÑÔÐð !%Ô 7Ð9Ø.ð
ð 
ˆð	IÝ”} TÔ%6ÀÈgÐVÑVÔVˆHˆHøÝÔ"Ô3ð 	Ið 	Ið 	IÝÐGÀAÐGÐGÑHÔHÐHøøøøð	Iøøøð+	ØÔ# sÒ*Ð*Øð PØ�K�K�Kà—J’J˜tÔ/Ñ0Ô0Ð0àŸ:š: f¨d°KÈ$˜:ÑOÔOÐOå ð'Ø”}ð'ð 'ñô ð ð
 'Ÿmšm™oœoˆOõ ˜/­4Ñ0Ô0ð QØ;Ð;Ð;�Ø&ð ð �CØ˜oÐ-Ð-Ø&5°cÔ&:˜Ø˜ð .õ %ð.¨¯ª°;Ñ)?Ô)?ð .ð .Ø+ð.ð .ñô ð õ ˜k­4Ñ0Ô0ð 'Ø& qœ>�D�Dà&�D�Då Ð!O¸oÐ!OÐ!OÑPÔPÐPð �Š˜vÑ&Ô&ð +Ø�C ™KœK˜M˜MÔ*�øøåÔ"Ô2ð 	ð 	ð 	ÝØQ°!ÐQÐQÀ(Ä-ÐQÐQñô ð øøøøð	øøøð ÐÝ& t¨TÑ2Ô2ˆDØˆ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ðð ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð ð˜3ð ð ð ñ „Xðð¨ð °ð ð ð ð ð %)Ø:>ØðZð ZàðZð �t˜C”yÔ!ð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"   