§
    šŠtj°:  ã                   óú   — d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZmZ  e j        e¦  «        Z ed	d
d¬¦  «         G d„ de¦  «        ¦   «         ZdS )é    N)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚUnion)Ú
deprecated)ÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚGenerationChunkÚ	LLMResult)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú
ConfigDictÚ	SecretStrz0.0.18z1.0zlangchain_ibm.WatsonxLLM)ÚsinceÚremovalÚalternative_importc                   ó  — e Zd ZU dZdZeed<   	 dZeed<   	 dZeed<   	 dZ	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         ed<   	 dZee         ed<   	 dZee         ed<   	 dZeeef         ed<   	 dZeed<   	 dZeed<    ed¬¦  «        Zedefd„¦   «         Zede eef         f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&e'	 d,dee(e eef                           de eef         fd„¦   «         Z)d,dee(e                  de eef         fd „Z*de(e         de+fd!„Z,d"e eef         de-fd#„Z.	 	 d-d$edee(e                  d%ee/         d&edef
d'„Z0	 	 	 d.d(e(e         dee(e                  d%ee/         d)ee         d&ede+fd*„Z1	 	 d-d$edee(e                  d%ee/         d&ede2e-         f
d+„Z3dS )/Ú
WatsonxLLMa-  
    IBM watsonx.ai large language models.

    To use, you should have ``ibm_watsonx_ai`` python package installed,
    and the environment variable ``WATSONX_APIKEY`` set with your API key, or pass
    it as a named parameter to the constructor.


    Example:
        .. code-block:: python

            from ibm_watsonx_ai.metanames import GenTextParamsMetaNames
            parameters = {
                GenTextParamsMetaNames.DECODING_METHOD: "sample",
                GenTextParamsMetaNames.MAX_NEW_TOKENS: 100,
                GenTextParamsMetaNames.MIN_NEW_TOKENS: 1,
                GenTextParamsMetaNames.TEMPERATURE: 0.5,
                GenTextParamsMetaNames.TOP_K: 50,
                GenTextParamsMetaNames.TOP_P: 1,
            }

            from langchain_community.llms import WatsonxLLM
            watsonx_llm = WatsonxLLM(
                model_id="google/flan-ul2",
                url="https://us-south.ml.cloud.ibm.com",
                apikey="*****",
                project_id="*****",
                params=parameters,
            )
    Ú Úmodel_idÚdeployment_idÚ
project_idÚspace_idNÚurlÚapikeyÚtokenÚpasswordÚusernameÚinstance_idÚversionÚparamsÚverifyFÚ	streamingÚwatsonx_modelÚforbid)ÚextraÚreturnc                 ó   — dS )NF© )Úclss    úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/watsonxllm.pyÚis_lc_serializablezWatsonxLLM.is_lc_serializablef   s   € àˆuó    c                 ó   — dddddddœS )NÚWATSONX_URLÚWATSONX_APIKEYÚWATSONX_TOKENÚWATSONX_PASSWORDÚWATSONX_USERNAMEÚWATSONX_INSTANCE_ID)r   r    r!   r"   r#   r$   r.   ©Úselfs    r0   Ú
lc_secretszWatsonxLLM.lc_secretsj   s%   € ð !Ø&Ø$Ø*Ø*Ø0ð
ð 
ð 	
r2   Úvaluesc           
      ó°  — t          t          |dd¦  «        ¦  «        |d<   d|                     dd¦  «                             ¦   «         v r#t          t          |dd¦  «        ¦  «        |d<   �nq|d         sIdt          j        vr;|d	         s3d
t          j        vr%|d         sdt          j        vrt          d¦  «        ‚|d         sdt          j        v r"t          t          |dd¦  «        ¦  «        |d<   n±|d	         sd
t          j        v rCt          t          |d	d
¦  «        ¦  «        |d	<   t          t          |dd¦  «        ¦  «        |d<   nX|d         sdt          j        v rBt          t          |dd¦  «        ¦  «        |d<   t          t          |dd¦  «        ¦  «        |d<   |d         rdt          j        vr!t          t          |dd¦  «        ¦  «        |d<   	 ddlm} |d         r|d                              ¦   «         nd|d         r|d                              ¦   «         nd|d         r|d                              ¦   «         nd|d	         r|d	                              ¦   «         nd|d         r|d                              ¦   «         nd|d         r|d                              ¦   «         nd|d         r|d                              ¦   «         nddœ}d„ | 	                    ¦   «         D ¦   «         } ||d         |d         ||d         |d         |d         |d         ¬¦  «        }||d<   n# t          $ r t          d¦  «        ‚w xY w|S )zCValidate that credentials and python package exists in environment.r   r4   zcloud.ibm.comr   r    r5   r!   r6   r"   r7   zÙDid not find 'token', 'password' or 'apikey', please add an environment variable `WATSONX_TOKEN`, 'WATSONX_PASSWORD' or 'WATSONX_APIKEY' which contains it, or pass 'token', 'password' or 'apikey' as a named parameter.r#   r8   r$   r9   r   )ÚModelInferenceNr%   )r   r    r!   r"   r#   r$   r%   c                 ó   — i | ]
\  }}|®||“ŒS ©Nr.   )Ú.0ÚkeyÚvalues      r0   ú
<dictcomp>z3WatsonxLLM.validate_environment.<locals>.<dictcomp>Å   s*   € ð .ð .ð .Ù)˜s EÀEÐDU��UÐDUÐDUÐDUr2   r   r   r&   r   r   r'   )r   r   Úcredentialsr&   r   r   r'   r)   zdCould not import ibm_watsonx_ai python package. Please install it with `pip install ibm_watsonx_ai`.)r   r   ÚgetÚget_secret_valueÚosÚenvironÚ
ValueErrorÚ ibm_watsonx_ai.foundation_modelsr?   ÚitemsÚImportError)r/   r=   r?   rF   Úcredentials_without_none_valuer)   s         r0   Úvalidate_environmentzWatsonxLLM.validate_environmentu   s  € õ .Ý  ¨°Ñ>Ô>ñ
ô 
ˆˆu‰ð ˜fŸjšj¨°Ñ3Ô3×DÒDÑFÔFÐFÐFÝ4Ý$ V¨XÐ7GÑHÔHñ ô  ˆF�8ÑÑð
 ˜7”Oð!à#­2¬:Ð5Ð5Ø˜zÔ*ð 6à&­b¬jÐ8Ð8Ø˜xÔ(ð 9à$­B¬JÐ6Ð6å ð-ñô ð ð ˜”ð  Oµr´zÐ$AÐ$AÝ"7Ý(¨°¸/ÑJÔJñ#ô #��w‘�ð ˜
Ô#ð Ð'9½R¼ZÐ'GÐ'GÝ%:Ý(¨°Ð=OÑPÔPñ&ô &��zÑ"õ &;Ý(¨°Ð=OÑPÔPñ&ô &��zÑ"Ð"ð ˜Ô!ð Ð%5½¼Ð%CÐ%CÝ#8Ý(¨°Ð;KÑLÔLñ$ô $��xÑ õ &;Ý(¨°Ð=OÑPÔPñ&ô &��zÑ"ð ˜-Ô(ð Ð,AÍÌÐ,SÐ,SÝ(=Ý(¨°Ð@UÑVÔVñ)ô )��}Ñ%ð1	ØGÐGÐGÐGÐGÐGð <BÀ%¼=ÐR�v˜e”}×5Ò5Ñ7Ô7Ð7Èdà;AÀ(Ô;KÐU�F˜8Ô$×5Ò5Ñ7Ô7Ð7ÐQUð ;AÀ¼/ÐS�F˜7”O×4Ò4Ñ6Ô6Ð6Ètð ˜jÔ)ð�F˜:Ô&×7Ò7Ñ9Ô9Ð9àð ˜jÔ)ð�F˜:Ô&×7Ò7Ñ9Ô9Ð9àð ˜mÔ,ð�F˜=Ô)×:Ò:Ñ<Ô<Ð<àð =CÀ9Ô<MÐW�F˜9Ô%×6Ò6Ñ8Ô8Ð8ÐSWð1ð ˆKð6.ð .Ø-8×->Ò->Ñ-@Ô-@ð.ñ .ô .Ð*ð +˜NØ 
Ô+Ø$ _Ô5Ø:Ø˜hÔ'Ø! ,Ô/Ø 
Ô+Ø˜hÔ'ðñ ô ˆMð '4ˆF�?Ñ#Ð#øåð 	ð 	ð 	ÝðGñô ð ð	øøøð
 ˆs   Ç!EL9 Ì9Mc                 óD   — | j         | j        | j        | j        | j        dœS )zGet the identifying parameters.©r   r   r&   r   r   rR   r:   s    r0   Ú_identifying_paramszWatsonxLLM._identifying_paramsÛ   s-   € ð œØ!Ô/Ø”kØœ/Øœð
ð 
ð 	
r2   c                 ó   — dS )zReturn type of llm.zIBM watsonx.air.   r:   s    r0   Ú	_llm_typezWatsonxLLM._llm_typeæ   s
   € ð  Ðr2   Úresponsec                 ó  — | €dddœS d}d}dt           dt          t           t          f         dt          fd„}| D ]C}|                     d¦  «        }|r*| |d|d         ¦  «        z  }| |d	|d         ¦  «        z  }ŒD||dœS )
Nr   )Úgenerated_token_countÚinput_token_countrC   Úresultr,   c                 ó2   — |                      | d¦  «        pdS )Nr   )rG   )rC   rZ   s     r0   Úget_count_valuez8WatsonxLLM._extract_token_usage.<locals>.get_count_valueõ   s   € Ø—:’:˜c 1Ñ%Ô%Ð*¨Ð*r2   ÚresultsrY   rX   )Ústrr   r   ÚintrG   )rV   rY   rX   r\   Úresr]   s         r0   Ú_extract_token_usagezWatsonxLLM._extract_token_usageë   sÖ   € ð ÐØ-.ÀQÐGÐGÐGàÐØ !Ðð	+¥ð 	+­dµ3½°8¬nð 	+Åð 	+ð 	+ð 	+ð 	+ð ð 	ð 	ˆCØ—g’g˜iÑ(Ô(ˆGØð Ø! _ _Ð5HÈ'ÐRSÌ*Ñ%UÔ%UÑUÐ!Ø%¨¨Ø+¨W°Q¬Zñ*ô *ñ Ð%øð
 &;Ø!2ð
ð 
ð 	
r2   Ústopc                 ó8   — | j         r	i | j         ¥ni }|�||d<   |S )NÚstop_sequences)r&   )r;   rb   r&   s      r0   Ú_get_chat_paramszWatsonxLLM._get_chat_params  s.   € Ø48´KÐ!G  D¤K  ÀRˆØÐØ'+ˆFÐ#Ñ$Øˆr2   c                 ód  — g }|D ]v}|                      d¦  «        }|r]|d                               d¦  «        }t          |d                               d¦  «        d|i¬¦  «        }|                     |g¦  «         Œw|                      |¦  «        }|| j        | j        dœ}t          ||¬¦  «        S )	z2Create the LLMResult from the choices and prompts.r]   r   Ústop_reasonÚgenerated_textÚfinish_reason©ÚtextÚgeneration_info)Útoken_usager   r   ©ÚgenerationsÚ
llm_output)rG   r   Úappendra   r   r   r   )	r;   rV   ro   r`   r]   ri   ÚgenÚfinal_token_usagerp   s	            r0   Ú_create_llm_resultzWatsonxLLM._create_llm_result  sÐ   € àˆØð 	*ð 	*ˆCØ—g’g˜iÑ(Ô(ˆGØð *Ø '¨¤
§¢¨}Ñ =Ô =�Ý Ø  œŸšÐ(8Ñ9Ô9Ø%4°mÐ$Dðñ ô �ð ×"Ò" C 5Ñ)Ô)Ð)øØ ×5Ò5°hÑ?Ô?Ðà,ØœØ!Ô/ð
ð 
ˆ
õ
  [¸ZÐHÑHÔHÐHr2   Ústream_responsec           	      óð   — |d         st          d¬¦  «        S t          |d         d         d         t          |d         d                              dd¦  «        | j        | j        dœ¬	¦  «        ¬
¦  «        S )z0Convert a stream response to a generation chunk.r]   r   ©rk   r   rh   rg   N)r   r   )ri   rp   rj   )r   ÚdictrG   r   r   )r;   ru   s     r0   Ú$_stream_response_to_generation_chunkz/WatsonxLLM._stream_response_to_generation_chunk  s�   € ð
 ˜yÔ)ð 	,Ý"¨Ð+Ñ+Ô+Ð+ÝØ  Ô+¨AÔ.Ð/?Ô@Ý Ø-¨iÔ8¸Ô;×?Ò?ÀÈtÑTÔTà $¤Ø%)Ô%7ðð ðñ ô ð	
ñ 	
ô 	
ð 		
r2   ÚpromptÚrun_managerÚkwargsc                 óV   —  | j         d|g||dœ|¤Ž}|j        d         d         j        S )a¬  Call the IBM watsonx.ai inference endpoint.
        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.
            run_manager: Optional callback manager.
        Returns:
            The string generated by the model.
        Example:
            .. code-block:: python

                response = watsonx_llm.invoke("What is a molecule")
        )Úpromptsrb   r{   r   r.   )Ú	_generatero   rk   )r;   rz   rb   r{   r|   rZ   s         r0   Ú_callzWatsonxLLM._call1  sJ   € ð&  �”ð 
Ø�H 4°[ð
ð 
ØDJð
ð 
ˆð Ô! !Ô$ QÔ'Ô,Ð,r2   r~   Ústreamc                 ó  — |                       |¬¦  «        }|�|n| j        }|r¸t          |¦  «        dk    rt          d|› �¦  «        ‚t	          d¬¦  «        } | j        |d         f||dœ|¤Ž}	|	D ]}
|€|
}Œ||
z  }Œ|€J ‚t          |j        t          ¦  «        r-|j         	                    d	¦  «        }t          |gg|¬
¦  «        S t          |gg¬¦  «        S | j                             ||¬¦  «        }|                      |¦  «        S )aÙ  Call the IBM watsonx.ai inference endpoint which then generate the response.
        Args:
            prompts: List of strings (prompts) to pass into the model.
            stop: Optional list of stop words to use when generating.
            run_manager: Optional callback manager.
        Returns:
            The full LLMResult output.
        Example:
            .. code-block:: python

                response = watsonx_llm.generate(["What is a molecule"])
        ©rb   Né   z6WatsonxLLM currently only supports single prompt, got r   rw   r   )rb   r{   rp   rn   )ro   )rz   r&   )re   r(   ÚlenrK   r   Ú_streamÚ
isinstancerl   rx   Úpopr   r)   Úgeneratert   )r;   r~   rb   r{   r�   r|   r&   Úshould_streamÚ
generationÚstream_iterÚchunkrp   rV   s                r0   r   zWatsonxLLM._generateI  s`  € ð( ×&Ò&¨DÐ&Ñ1Ô1ˆØ"(Ð"4˜˜¸$¼.ˆØð 	5Ý�7‰|Œ|˜aÒÐÝ ØVÈWÐVÐVñô ð õ )¨bÐ1Ñ1Ô1ˆJØ&˜$œ,Ø˜”
ðØ!%°;ðð ØBHðð ˆKð %ð (ð (�ØÐ%Ø!&�J�Jà %Ñ'�J�JØÐ)Ð)Ð)Ý˜*Ô4µdÑ;Ô;ð TØ'Ô7×;Ò;¸LÑIÔI�
Ý ¨z¨l¨^È
ÐSÑSÔSÐSÝ¨:¨,¨Ð8Ñ8Ô8Ð8àÔ)×2Ò2¸'È&Ð2ÑQÔQˆHØ×*Ò*¨8Ñ4Ô4Ð4r2   c              +   óä   K  — |                       |¬¦  «        }| j                             |d|¬¦  «        D ]9}|                      |¦  «        }|r|                     |j        |¬¦  «         |V — Œ:dS )a4  Call the IBM watsonx.ai inference endpoint which then streams the response.
        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.
            run_manager: Optional callback manager.
        Returns:
            The iterator which yields generation chunks.
        Example:
            .. code-block:: python

                response = watsonx_llm.stream("What is a molecule")
                for chunk in response:
                    print(chunk, end='')  # noqa: T201
        rƒ   T)rz   Úraw_responser&   )r�   N)re   r)   Úgenerate_text_streamry   Úon_llm_new_tokenrk   )r;   rz   rb   r{   r|   r&   Ústream_respr�   s           r0   r†   zWatsonxLLM._streamv  s›   è è € ð* ×&Ò&¨DÐ&Ñ1Ô1ˆØÔ-×BÒBØ¨°Vð Cñ 
ô 
ð 	ð 	ˆKð ×=Ò=¸kÑJÔJˆEàð FØ×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEØˆKˆKˆKˆKð	ð 	r2   rA   )NN)NNN)4Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r^   Ú__annotations__r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   rx   r'   r	   Úboolr(   r)   r   r   Úmodel_configÚclassmethodr1   Úpropertyr   r<   r   rP   r   rS   rU   Ústaticmethodr   ra   re   r   rt   r   ry   r   r€   r   r   r†   r.   r2   r0   r   r      sŠ  € € € € € € ðð ð> €HˆcÐÐÑØà€M�3ÐÐÑØ(à€J�ÐÐÑØ*à€HˆcÐÐÑØ(à#€Cˆ�)Ô	Ð#Ð#Ñ#Ø1à"&€FˆH�YÔÐ&Ð&Ñ&Ø4à!%€Eˆ8�IÔÐ%Ð%Ñ%Ø3à$(€Hˆh�yÔ!Ð(Ð(Ñ(Ø6à$(€Hˆh�yÔ!Ð(Ð(Ñ(Ø6à'+€K�˜)Ô$Ð+Ð+Ñ+Ø9à#'€GˆX�iÔ Ð'Ð'Ñ'Ø5à!€FˆH�TŒNÐ!Ð!Ñ!Ø;à!€FˆE�#�t�)ÔÐ!Ð!Ñ!ð0ð €IˆtÐÐÑØ1à€M�3ÐÐÑà�:Øðñ ô €Lð ð 4ð ð ð ñ „[ðð ð
˜D  c œNð 
ð 
ð 
ñ „Xð
ð ðc¨$ð c°4ð cð cð cñ „XðcðJ ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð ð ˜3ð  ð  ð  ñ „Xð ð à37ð
ð 
Ø˜4  S¨# X¤Ô/Ô0ð
à	ˆc�3ˆhŒð
ð 
ð 
ñ „\ð
ð2ð  X¨d°3¬iÔ%8ð ÀDÈÈcÈÄNð ð ð ð ðI¨4°¬:ð I¸)ð Ið Ið Ið Ið(
à˜c 3˜hœð
ð 
ð
ð 
ð 
ð 
ð* %)Ø:>ð	-ð -àð-ð �t˜C”yÔ!ð-ð Ð6Ô7ð	-ð
 ð-ð 
ð-ð -ð -ð -ð6 %)Ø:>Ø!%ð+5ð +5à�c”ð+5ð �t˜C”yÔ!ð+5ð Ð6Ô7ð	+5ð
 ˜”ð+5ð ð+5ð 
ð+5ð +5ð +5ð +5ð` %)Ø:>ð	ð àðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
�/Ô	"ðð ð ð ð ð r2   r   )ÚloggingrI   Útypingr   r   r   r   r   r   r	   Úlangchain_core._api.deprecationr
   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   r   r   Úpydanticr   r   Ú	getLoggerr“   Úloggerr   r.   r2   r0   ú<module>r§      sO  ðØ €€€Ø 	€	€	€	Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à	ˆÔ	˜8Ñ	$Ô	$€ð €Ø
˜EÐ6Pðñ ô ðAð Að Að Að A�ñ Aô Añô ðAð Að Ar2   