§
    æ˜ºh^  ã                   ó¶   — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZ  e j        e¦  «        Zd	Z G d
„ de	¦  «        ZdS )é    N)ÚAnyÚDictÚListÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)Ú
GenerationÚ	LLMResult)ÚExtraÚroot_validator)Úget_from_dict_or_env)Úenforce_stop_tokensz8https://clarifai.com/openai/chat-completion/models/GPT-4c                   ód  — e Zd ZU dZdZee         ed<   	 dZee         ed<   	 dZ	ee         ed<   	 dZ
ee         ed<   	 dZee         ed<   	 dZee         ed<   	 d	Zeed
<    G d„ d¦  «        Z e¦   «         dedefd„¦   «         Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Zedefd„¦   «         Z	 	 	 ddedeee                  dee         deeeef                  dedefd„Z	 	 	 ddee         deee                  dee         deeeef                  dedefd„ZdS )ÚClarifaia2  Clarifai large language models.

    To use, you should have an account on the Clarifai platform,
    the ``clarifai`` python package installed, and the
    environment variable ``CLARIFAI_PAT`` set with your PAT key,
    or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms import Clarifai
            clarifai_llm = Clarifai(user_id=USER_ID, app_id=APP_ID, model_id=MODEL_ID)
                             (or)
            clarifai_llm = Clarifai(model_url=EXAMPLE_URL)
    NÚ	model_urlÚmodel_idÚmodel_version_idÚapp_idÚuser_idÚpatzhttps://api.clarifai.comÚapi_basec                   ó    — e Zd ZdZej        ZdS )úClarifai.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úi/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/clarifai.pyÚConfigr   1   s   € € € € € Ø5Ð5à”ˆˆˆr!   r#   ÚvaluesÚreturnc                 óP  — t          |dd¦  «        |d<   |                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|�|�t          d¦  «        ‚|€|€t          d	¦  «        ‚|€|�|�|€t          d
¦  «        ‚|S )zuValidate that we have all required info to access Clarifai
        platform and python package exists in environment.r   ÚCLARIFAI_PATr   r   r   r   Nz6Please provide either model_url or model_id, not both.z,Please provide one of model_url or model_id.z$Please provide a user_id and app_id.)r   ÚgetÚ
ValueError)Úclsr$   r   r   r   r   s         r"   Úvalidate_environmentzClarifai.validate_environment6   s¹   € õ -¨V°U¸NÑKÔKˆˆu‰Ø—*’*˜YÑ'Ô'ˆØ—’˜HÑ%Ô%ˆØ—:’:˜jÑ)Ô)ˆØ—J’J˜{Ñ+Ô+ˆ	àÐ  XÐ%9ÝÐUÑVÔVÐVàÐ Ð!1ÝÐKÑLÔLÐLàÐ Ð!5Øˆ & .Ý Ð!GÑHÔHÐHàˆr!   c                 ó   — i S )z4Get the default parameters for calling Clarifai API.r    ©Úselfs    r"   Ú_default_paramszClarifai._default_paramsL   s	   € ð ˆ	r!   c                 ó<   — i | j         | j        | j        | j        dœ¥S )zGet the identifying parameters.©r   r   r   r   r1   r-   s    r"   Ú_identifying_paramszClarifai._identifying_paramsQ   s/   € ð
à!œ^Øœ<Øœ+Ø œMð	ð ð
ð 	
r!   c                 ó   — dS )zReturn type of llm.Úclarifair    r-   s    r"   Ú	_llm_typezClarifai._llm_type]   s	   € ð ˆzr!   ÚpromptÚstopÚrun_managerÚinference_paramsÚkwargsc                 ó   — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w| j        �| j        }| j        � || j        |¬¦  «        }n || j        | j        | j        |¬¦  «        }	 |€i x}n| |                     t          |d¦  «        d|¬	¦  «        }	|	j
        d         j        j        j        }
|�t          |
|¦  «        }
n4# t          $ r'}t                                d
|› �¦  «         Y d}~nd}~ww xY w|
S )aw  Call out to Clarfai's PostModelOutputs 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 = clarifai_llm("Tell me a joke.")
        r   ©ÚModelúXCould not import clarifai python package. Please install it with `pip install clarifai`.N©Úurlr   ©r   r   r   r   zutf-8Útext)Ú
input_typer9   úPredict failed, exception: )Úclarifai.client.modelr=   ÚImportErrorr   r   r   r   r   Úpredict_by_bytesÚbytesÚoutputsÚdatarB   Úrawr   Ú	ExceptionÚloggerÚerror)r.   r6   r7   r8   r9   r:   r=   r   Ú_model_initÚpredict_responserB   Úes               r"   Ú_callzClarifai._callb   sn  € ð.	Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	ð 	ð 	ÝðAñô ð ð	øøøð
 Œ8ÐØ”(ˆCØŒ>Ð%Ø˜% D¤N¸Ð<Ñ<Ô<ˆKˆKà˜%ØœØœØ”{Øð	ñ ô ˆKð	<Ø(8Ð(@ Ð#ÐÐÐFVøØ*×;Ò;Ý�f˜gÑ&Ô&Ø!Ø!1ð  <ñ  ô  Ðð
 $Ô+¨AÔ.Ô3Ô8Ô<ˆDØÐÝ*¨4°Ñ6Ô6�øøåð 	<ð 	<ð 	<Ý�LŠLÐ:°qÐ:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð ˆs!   ‚	 ‰#Á-AC
 Ã

C;ÃC6Ã6C;Úpromptsc                 ó$  ‡— 	 ddl m} ddlm} n# t          $ r t	          d¦  «        ‚w xY w| j        �| j        }| j        � || j        |¬¦  «        }	n || j        | j        | j	        |¬¦  «        }	g }
d} ||¬	¦  «        Š	 t          dt          |¦  «        |¦  «        D ]I}||||z   …         }ˆfd
„t          |¦  «        D ¦   «         }|€i x}n| |	                     ||¬¦  «        }ŒJ|j        D ]Y}|� t          |j        j        j        |¦  «        }n|j        j        j        }|
                     t)          |¬¦  «        g¦  «         ŒZn4# t*          $ r'}t,                               d|› �¦  «         Y d}~nd}~ww xY wt1          |
¬¦  «        S )z*Run the LLM on the given prompt and input.r   )ÚInputsr<   r>   Nr?   rA   é    )r   c                 ó^   •— g | ])\  }}‰                      t          |¦  «        |¬ ¦  «        ‘Œ*S ))Úinput_idÚraw_text)Úget_text_inputÚstr)Ú.0ÚidÚinpÚ	input_objs      €r"   ú
<listcomp>z&Clarifai._generate.<locals>.<listcomp>À   sF   ø€ ð ð ð á˜˜Cð ×,Ò,µc¸"±g´gÈÐ,ÑLÔLðð ð r!   )Úinputsr9   )rB   rD   )Úgenerations)Úclarifai.client.inputrU   rE   r=   rF   r   r   r   r   r   ÚrangeÚlenÚ	enumerateÚpredictrI   r   rJ   rB   rK   Úappendr	   rL   rM   rN   r
   )r.   rS   r7   r8   r9   r:   rU   r=   r   rO   rb   Ú
batch_sizeÚiÚbatchÚinput_batchrP   ÚoutputrB   rQ   r_   s                      @r"   Ú	_generatezClarifai._generate›   sE  ø€ ð	Ø4Ð4Ð4Ð4Ð4Ð4Ø3Ð3Ð3Ð3Ð3Ð3Ð3øÝð 	ð 	ð 	ÝðAñô ð ð	øøøð
 Œ8ÐØ”(ˆCØŒ>Ð%Ø˜% D¤N¸Ð<Ñ<Ô<ˆKˆKà˜%ØœØœØ”{Øð	ñ ô ˆKð ˆØˆ
Ø�F˜s�O‘O”Oˆ	ð	<Ý˜1�c '™lœl¨JÑ7Ô7ð ð �Ø  A¨
¡NÐ 2Ô3�ðð ð ð å#,¨UÑ#3Ô#3ðñ ô �ð &Ð-ð )+Ð*Ð$Ð$Ø3CøØ#.×#6Ò#6Ø&Ð9Ið $7ñ $ô $Ð Ð ð +Ô2ð <ð <�ØÐ#Ý.¨v¬{Ô/?Ô/CÀTÑJÔJ�D�Dà!œ;Ô+Ô/�Dà×"Ò"¥J°DÐ$9Ñ$9Ô$9Ð#:Ñ;Ô;Ð;Ð;ð<øõ ð 	<ð 	<ð 	<Ý�LŠLÐ:°qÐ:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøõ  [Ð1Ñ1Ô1Ð1s!   ƒ �*ÂC	E Å
E?ÅE:Å:E?)NNN)r   r   r   r   r   r   r[   Ú__annotations__r   r   r   r   r   r   r#   r   r   r+   Úpropertyr   r/   r2   r5   r   r   rR   r
   rn   r    r!   r"   r   r      sš  € € € € € € ðð ð   $€Iˆx˜Œ}Ð#Ð#Ñ#ØØ"€Hˆh�sŒmÐ"Ð"Ñ"ØØ&*Ð�h˜s”mÐ*Ð*Ñ*Ø"Ø €FˆH�SŒMÐ Ð Ñ Ø)Ø!€GˆX�cŒ]Ð!Ð!Ñ!Ø"Ø€Cˆ�#ŒÐÐÑØ0Ø.€HˆcÐ.Ð.Ñ.ðð ð ð ð ñ ô ð ð
 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð* ð  c¨3 h¤ð ð ð ñ „Xðð ð	
 T¨#¨s¨(¤^ð 	
ð 	
ð 	
ñ „Xð	
ð ð˜3ð ð ð ñ „Xðð %)Ø:>Ø59ð7ð 7àð7ð �t˜C”yÔ!ð7ð Ð6Ô7ð	7ð
 # 4¨¨S¨¤>Ô2ð7ð ð7ð 
ð7ð 7ð 7ð 7ðx %)Ø:>Ø59ð;2ð ;2à�c”ð;2ð �t˜C”yÔ!ð;2ð Ð6Ô7ð	;2ð
 # 4¨¨S¨¤>Ô2ð;2ð ð;2ð 
ð;2ð ;2ð ;2ð ;2ð ;2ð ;2r!   r   )ÚloggingÚtypingr   r   r   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr	   r
   Úlangchain_core.pydantic_v1r   r   Úlangchain_core.utilsr   Úlangchain_community.llms.utilsr   Ú	getLoggerr   rM   ÚEXAMPLE_URLr   r    r!   r"   ú<module>r{      s  ðØ €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à >Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ð I€ðD2ð D2ð D2ð D2ð D2ˆsñ D2ô D2ð D2ð D2ð D2r!   