Ë
    µŒj°:  ã                   óê   — 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 j6                  e«      Z ed	d
d¬«       G d„ de«      «       Zy)é    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+„Z3y)/Ú
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                  ó   — y)NF© )Úclss    úm/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/watsonxllm.pyÚis_lc_serializablezWatsonxLLM.is_lc_serializablef   s   € àó    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|j                  dd«      j                  «       v rt        t        |dd«      «      |d<   �nD|d   sKdt        j
                  vr9|d	   s4d
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 r3t        t        |d	d
«      «      |d	<   t        t        |dd«      «      |d<   nI|d   sdt        j
                  v r2t        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   j                  «       nd|d   r|d   j                  «       nd|d   r|d   j                  «       nd|d	   r|d	   j                  «       nd|d   r|d   j                  «       nd|d   r|d   j                  «       nd|d   r|d   j                  «       nddœ}|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}} ||d   |d   ||d   |d   |d   |d   ¬«      }||d<   |S c c}}w # t        $ r t        d«      ‚w xY w)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%   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?   r@   ÚkeyÚvalueÚcredentials_without_none_valuer)   s           r0   Úvalidate_environmentzWatsonxLLM.validate_environmentu   s5  € ô .Ü  ¨°Ó>ó
ˆˆu‰ð ˜fŸj™j¨°Ó3×DÑDÓFÑFÜ4Ü$ V¨XÐ7GÓHó ˆF�8Óð
 ˜7’OØ#¬2¯:©:Ñ5Ø˜zÒ*Ø&¬b¯j©jÑ8Ø˜xÒ(Ø$¬B¯J©JÑ6ä ð-óð ð ˜’ O´r·z±zÑ$AÜ"7Ü(¨°¸/ÓJó#��w’ð ˜
Ò#Ð'9¼R¿Z¹ZÑ'GÜ%:Ü(¨°Ð=OÓPó&��zÑ"ô &;Ü(¨°Ð=OÓPó&��zÒ"ð ˜Ò!Ð%5¼¿¹Ñ%CÜ#8Ü(¨°Ð;KÓLó$��xÑ ô &;Ü(¨°Ð=OÓPó&��zÑ"ð ˜-Ò(Ð,AÌÏÉÑ,SÜ(=Ü(¨°Ð@UÓVó)��}Ñ%ð1	ÝGð <BÀ%º=�v˜e‘}×5Ñ5Ô7Èdà;AÀ(Ò;K�F˜8Ñ$×5Ñ5Ô7ÐQUð ;AÀº/�F˜7‘O×4Ñ4Ô6Ètð ˜jÒ)ð ˜:Ñ&×7Ñ7Ô9àð ˜jÒ)ð ˜:Ñ&×7Ñ7Ô9àð ˜mÒ,ð ˜=Ñ)×:Ñ:Ô<àð =CÀ9Ò<M�F˜9Ñ%×6Ñ6Ô8ÐSWñ1ˆKð8 .9×->Ñ->Ô-@ô.Ù-@™z˜s EÀEÑDU��U‘
Ð-@ð +ñ .ñ +Ø 
Ñ+Ø$ _Ñ5Ø:Ø˜hÑ'Ø! ,Ñ/Ø 
Ñ+Ø˜hÑ'ôˆMð '4ˆF�?Ñ#ð ˆùó).øô ò 	ÜðGóð ð	ús%   ÆCJ( É'
J"É2J"É7)J( Ê"J( Ê(J=c                 óv   — | j                   | j                  | j                  | j                  | j                  dœS )zGet the identifying parameters.©r   r   r&   r   r   rN   r:   s    r0   Ú_identifying_paramszWatsonxLLM._identifying_paramsÛ   s3   € ð Ÿ™Ø!×/Ñ/Ø—k‘kØŸ/™/ØŸ™ñ
ð 	
r2   c                  ó   — y)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 ]4  }|j	                  d«      }|sŒ| |d|d   «      z  }| |d	|d   «      z  }Œ6 ||dœS )
Nr   )Úgenerated_token_countÚinput_token_countrI   Úresultr,   c                 ó.   — |j                  | d«      xs dS )Nr   )rA   )rI   rV   s     r0   Úget_count_valuez8WatsonxLLM._extract_token_usage.<locals>.get_count_valueõ   s   € Ø—:‘:˜c 1Ó%Ò*¨Ð*r2   ÚresultsrU   rT   )Ústrr   r   ÚintrA   )rR   rU   rT   rX   ÚresrY   s         r0   Ú_extract_token_usagezWatsonxLLM._extract_token_usageë   s¥   € ð ÐØ-.ÀQÑGÐGàÐØ !Ðð	+¤ð 	+¬d´3¼°8©nð 	+Äó 	+ó ˆCØ—g‘g˜iÓ(ˆGÚØ!¡_Ð5HÈ'ÐRSÉ*Ó%UÑUÐ!Ø%©Ø+¨W°Q©Zó*ñ Ñ%ð	 ð &;Ø!2ñ
ð 	
r2   Ústopc                 óL   — | j                   ri | j                   ¥ni }|�||d<   |S )NÚstop_sequences)r&   )r;   r^   r&   s      r0   Ú_get_chat_paramszWatsonxLLM._get_chat_params  s-   € Ø48·K²K  D§K¡K¡ÀRˆØÐØ'+ˆFÐ#Ñ$Øˆr2   c                 ó:  — g }|D ]]  }|j                  d«      }|sŒ|d   j                  d«      }t        |d   j                  d«      d|i¬«      }|j                  |g«       Œ_ | j                  |«      }|| j                  | j
                  dœ}t        ||¬«      S )	z2Create the LLMResult from the choices and prompts.rY   r   Ústop_reasonÚgenerated_textÚfinish_reason©ÚtextÚgeneration_info)Útoken_usager   r   ©ÚgenerationsÚ
llm_output)rA   r   Úappendr]   r   r   r   )	r;   rR   rk   r\   rY   re   ÚgenÚfinal_token_usagerl   s	            r0   Ú_create_llm_resultzWatsonxLLM._create_llm_result  s¥   € àˆÛˆCØ—g‘g˜iÓ(ˆGÚØ '¨¡
§¡¨}Ó =�Ü Ø  ™Ÿ™Ð(8Ó9Ø%4°mÐ$Dô�ð ×"Ñ" C 5Õ)ð ð !×5Ñ5°hÓ?Ðà,ØŸ™Ø!×/Ñ/ñ
ˆ
ô
  [¸ZÔHÐHr2   Ústream_responsec           	      óÀ   — |d   st        d¬«      S t        |d   d   d   t        |d   d   j                  dd«      | j                  | j                  dœ¬	«      ¬
«      S )z0Convert a stream response to a generation chunk.rY   r   ©rg   r   rd   rc   N)r   r   )re   rl   rf   )r   ÚdictrA   r   r   )r;   rq   s     r0   Ú$_stream_response_to_generation_chunkz/WatsonxLLM._stream_response_to_generation_chunk  sn   € ð
 ˜yÒ)Ü"¨Ô+Ð+ÜØ  Ñ+¨AÑ.Ð/?Ñ@Ü Ø-¨iÑ8¸Ñ;×?Ñ?ÀÈtÓTà $§¡Ø%)×%7Ñ%7ñôô	
ð 		
r2   ÚpromptÚrun_managerÚkwargsc                 óh   —  | 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")
        )Úpromptsr^   rw   r   r.   )Ú	_generaterk   rg   )r;   rv   r^   rw   rx   rV   s         r0   Ú_callzWatsonxLLM._call1  sH   € ð&  �—‘ð 
Ø�H 4°[ñ
ØDJñ
ˆð ×!Ñ! !Ñ$ QÑ'×,Ñ,Ð,r2   rz   Ústreamc                 óö  — | j                  |¬«      }|�|n| j                  }|r¨t        |«      dkD  rt        d|› �«      ‚t	        d¬«      } | j
                  |d   f||dœ|¤Ž}	|	D ]  }
|€|
}Œ||
z  }Œ |€J ‚t        |j                  t        «      r*|j                  j                  d«      }t        |gg|¬	«      S t        |gg¬
«      S | j                  j                  ||¬«      }| 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"])
        ©r^   é   z6WatsonxLLM currently only supports single prompt, got r   rs   r   )r^   rw   rl   rj   )rk   )rv   r&   )ra   r(   ÚlenrE   r   Ú_streamÚ
isinstancerh   rt   Úpopr   r)   Úgeneraterp   )r;   rz   r^   rw   r}   rx   r&   Úshould_streamÚ
generationÚstream_iterÚchunkrl   rR   s                r0   r{   zWatsonxLLM._generateI  s#  € ð( ×&Ñ&¨DÐ&Ó1ˆØ"(Ð"4™¸$¿.¹.ˆÙÜ�7‹|˜aÒÜ ØLÈWÈIÐVóð ô )¨bÔ1ˆJØ&˜$Ÿ,™,Ø˜‘
ðØ!%°;ñØBHñˆKó %�ØÐ%Ø!&‘Jà %Ñ'‘Jð	 %ð
 Ð)Ð)Ð)Ü˜*×4Ñ4´dÔ;Ø'×7Ñ7×;Ñ;¸LÓI�
Ü ¨z¨l¨^È
ÔSÐSÜ¨:¨,¨Ô8Ð8à×)Ñ)×2Ñ2¸'È&Ð2ÓQˆHØ×*Ñ*¨8Ó4Ð4r2   c              +   óÞ   K  — | j                  |¬«      }| j                  j                  |d|¬«      D ]6  }| j                  |«      }|r|j	                  |j
                  |¬«       |–— Œ8 y­w)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)rv   Úraw_responser&   )r‰   N)ra   r)   Úgenerate_text_streamru   Úon_llm_new_tokenrg   )r;   rv   r^   rw   rx   r&   Ústream_respr‰   s           r0   r‚   zWatsonxLLM._streamv  st   è ø€ ð* ×&Ñ&¨DÐ&Ó1ˆØ×-Ñ-×BÑBØ¨°Vð Cö 
ˆKð ×=Ñ=¸kÓJˆEáØ×,Ñ,¨U¯Z©Z¸uÐ,ÔEØ‹Kñ
ùs   ‚A+A-)N)NN)NNN)4Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rZ   Ú__annotations__r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   rt   r'   r	   Úboolr(   r)   r   r   Úmodel_configÚclassmethodr1   Úpropertyr   r<   r   rL   r   rO   rQ   Ústaticmethodr   r]   ra   r   rp   r   ru   r   r|   r{   r   r‚   r.   r2   r0   r   r      sK  … ñð> €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ò 
ó ð
ð ðc¨$ð c°4ò có ðcðJ ð
 W¨S°#¨XÑ%6ò 
ó ð
ð ð ˜3ò  ó ð ð à37ñ
Ø˜4  S¨# X¡Ñ/Ñ0ð
à	ˆc�3ˆh‰ò
ó ð
ñ2 X¨d°3©iÑ%8ð ÀDÈÈcÈÁNó ðI¨4°©:ð I¸)ó Ið(
à˜c 3˜h™ð
ð 
ó
ð* %)Ø:>ñ	-àð-ð �t˜C‘yÑ!ð-ð Ð6Ñ7ð	-ð
 ð-ð 
ó-ð6 %)Ø:>Ø!%ñ+5à�c‘ð+5ð �t˜C‘yÑ!ð+5ð Ð6Ñ7ð	+5ð
 ˜‘ð+5ð ð+5ð 
ó+5ð` %)Ø:>ñ	àðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
�/Ñ	"ôr2   r   )ÚloggingrC   Ú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£      si   ðÛ Û 	ß F× FÑ Få 6Ý =Ý 7ß IÑ Iß VÑ Vß *à	ˆ×	Ñ	˜8Ó	$€ñ Ø
˜EÐ6PôôA�ó AóñAr2   