Ë
    µŒj8-  ã                  óz  — d Z ddlm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mZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ dd	lmZmZmZ dd
lmZm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z& erddl'm(Z)  ejT                  e+«      Z, G d„ de-«      Z.	 	 	 	 	 	 dd„Z/	 	 	 	 	 	 dd„Z0	 	 	 	 dd„Z1dd„Z2dd„Z3dd„Z4 G d„ dee«      Z5y)z&Wrapper around Google's PaLM Chat API.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptionalÚcast)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	AIMessageÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚ
ChatResult)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú	BaseModelÚ	SecretStr)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialc                  ó   — e Zd ZdZy)ÚChatGooglePalmErrorz!Error with the `Google PaLM` API.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úu/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/google_palm.pyr    r    (   s   „ Ú+r&   r    c                óT   — |€| S |D ]  }| j                  |«      }|dk7  sŒ| d| } Œ  | S )z0Truncates text at the earliest stop token found.Néÿÿÿÿ)Úfind)ÚtextÚstopÚ
stop_tokenÚstop_token_idxs       r'   Ú_truncate_at_stop_tokensr/   ,   sA   € ð
 €|Øˆãˆ
ØŸ™ :Ó.ˆØ˜RÓØ˜˜Ð(‰Dð ð €Kr&   c           
     ó  — | j                   st        d«      ‚g }| j                   D ]Î  }|j                  d«      }|€t        d|› �«      ‚t        |j                  dd«      |«      }|€t        d|› �«      ‚|dk(  r'|j	                  t        |t        |¬«      ¬	«      «       Œ||d
k(  r'|j	                  t        |t        |¬«      ¬	«      «       Œ¨|j	                  t        |t        ||¬«      ¬	«      «       ŒÐ t        |¬«      S )z9Converts a PaLM API response into a LangChain ChatResult.z.ChatResponse must have at least one candidate.Úauthorz"ChatResponse must have an author: ÚcontentÚ z"ChatResponse must have a content: Úai)r2   )r+   ÚmessageÚhuman)Úroler2   )Úgenerations)
Ú
candidatesr    Úgetr/   Úappendr   r   r   r   r   )Úresponser,   r8   Ú	candidater1   r2   s         r'   Ú_response_to_resultr>   ;   s  € ð
 ×ÒÜ!Ð"RÓSÐSà(*€KØ×(Ô(ˆ	Ø—‘˜xÓ(ˆØˆ>Ü%Ð(JÈ9È+Ð&VÓWÐWä*¨9¯=©=¸ÀBÓ+GÈÓNˆØˆ?Ü%Ð(JÈ9È+Ð&VÓWÐWà�TŠ>Ø×ÑÜ G´YÀwÔ5OÔPõð �wÒØ×ÑÜØ Ü(°Ô9ôõð ×ÑÜØ Ü'¨V¸WÔEôõð+ )ô8  +Ô.Ð.r&   c                óÔ  — ddl m} d}g }g }t        t        | «      «      }|�r(|j	                  d«      \  }}t        |t        «      r,|dk7  rt        d«      ‚t        t        |j                  «      }�nÔt        |t        «      r³|j                  r§|rt        d«      ‚|j	                  d«      \  }}	t        |	t        «      rk|	j                  r_|j                  |j                  j!                  d|j                  ¬«      |j                  j!                  d|	j                  ¬«      g«       �nt        d	«      ‚t        |t        «      r|j                  rt        d
«      ‚t        |t        «      r7|j#                  |j                  j!                  d|j                  ¬«      «       n£t        |t        «      r7|j#                  |j                  j!                  d|j                  ¬«      «       n\t        |t$        «      rA|j#                  |j                  j!                  |j&                  |j                  ¬«      «       nt        d«      ‚|r�Œ(|j                  j)                  |||¬«      S )zNConverts a list of LangChain messages into a PaLM API MessagePrompt structure.r   Nr3   z+System message must be first input message.z1Message examples must come before other messages.r6   )r1   r2   r4   zNHuman example message must be immediately followed by an  AI example response.zKAI example message must be immediately preceded by a Human example message.z<Messages without an explicit role not supported by PaLM API.)ÚcontextÚexamplesÚmessages)Úgoogle.generativeaiÚgenerativeaiÚlistÚ	enumerateÚpopÚ
isinstancer   r    r
   Ústrr2   r   Úexampler   ÚextendÚtypesÚMessageDictr;   r   r7   ÚMessagePromptDict)
Úinput_messagesÚgenair@   rA   rB   Ú	remainingÚindexÚinput_messageÚ_Únext_input_messages
             r'   Ú_messages_to_prompt_dictrV   c   s5  € õ (à€GØ.0€HØ.0€Hä”Y˜~Ó.Ó/€Iâ
Ø(Ÿ}™}¨QÓ/Ñˆˆ}ä�m¤]Ô3Ø˜ŠzÜ)Ð*WÓXÐXÜœ3 × 5Ñ 5Ó6ŠGÜ˜¤|Ô4¸×9NÒ9NÙÜ)ØGóð ð %.§M¡M°!Ó$4Ñ!ˆAÐ!ÜÐ,¬iÔ8Ð=O×=WÒ=WØ—‘àŸ™×/Ñ/Ø#*°M×4IÑ4Ið 0ó ð Ÿ™×/Ñ/Ø#'Ð1C×1KÑ1Kð 0ó ð	ö	ô *ð,óð ô ˜¤yÔ1°m×6KÒ6KÜ%ð#óð ô ˜¤yÔ1Ø�O‰OØ—‘×'Ñ'¨t¸]×=RÑ=RÐ'ÓSõô ˜¤|Ô4Ø�O‰OØ—‘×'Ñ'¨wÀ×@UÑ@UÐ'ÓVõô ˜¤{Ô3Ø�O‰OØ—‘×'Ñ'Ø(×-Ñ-°}×7LÑ7Lð (ó õô &ØNóð óc ðj �;‰;×(Ñ(ØØØð )ó ð r&   c            
     ó’  — ddl } d}d}d}d}t        dt        |«      t        |||¬«      t	        | j
                  j                  j                  «      t	        | j
                  j                  j                  «      z  t	        | j
                  j                  j                  «      z  t        t        t        j                  «      ¬	«      S )
zKReturns a tenacity retry decorator, preconfigured to handle PaLM exceptionsr   Né   é   é<   é
   T)Ú
multiplierÚminÚmax)Úreraiser,   Úwaitr   Úbefore_sleep)Úgoogle.api_core.exceptionsr   r   r   r   Úapi_coreÚ
exceptionsÚResourceExhaustedÚServiceUnavailableÚGoogleAPIErrorr   ÚloggerÚloggingÚWARNING)Úgoogler\   Úmin_secondsÚmax_secondsÚmax_retriess        r'   Ú_create_retry_decoratorro   «   s¡   € ã%à€JØ€KØ€KØ€KäØÜ Ó,Ü¨¸È+ÔVä# F§O¡O×$>Ñ$>×$PÑ$PÓQÜ% f§o¡o×&@Ñ&@×&SÑ&SÓTñUä% f§o¡o×&@Ñ&@×&OÑ&OÓPñQô &¤f¬g¯o©oÓ>ô
ð 
r&   ÚChatGooglePalmc                ó>   ‡ — t        «       }|dˆ fd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.c                 ó<   •—  ‰j                   j                  di | ¤ŽS ©Nr%   )ÚclientÚchat©ÚkwargsÚllms    €r'   Ú_chat_with_retryz)chat_with_retry.<locals>._chat_with_retryÅ   s   ø€ àˆs�z‰z�‰Ñ( Ñ(Ð(r&   ©rw   r   Úreturnr   r%   ©ro   )rx   rw   Úretry_decoratorry   s   `   r'   Úchat_with_retryr~   Á   s-   ø€ ä-Ó/€Oàô)ó ð)ñ Ñ%˜fÑ%Ð%r&   c              ‹  óZ   ‡ K  — t        «       }|dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)z0Use tenacity to retry the async completion call.c               ›  óX   •K  —  ‰j                   j                  di | ¤Žƒ d {  –—† S 7 Œ­wrs   )rt   Ú
chat_asyncrv   s    €r'   Ú_achat_with_retryz+achat_with_retry.<locals>._achat_with_retryÐ   s)   øè ø€ ð +�S—Z‘Z×*Ñ*Ñ4¨VÑ4×4Ð4Ð4ús   ƒ *£(¤*Nrz   r%   r|   )rx   rw   r}   r‚   s   `   r'   Úachat_with_retryrƒ   Ì   s7   øè ø€ ä-Ó/€Oàô5ó ð5ñ #Ñ, VÑ,×,Ð,Ð,ús   ƒ!+¤)¥+c                  ó&  — e Zd ZU dZded<   dZded<   	 dZded	<   dZd
ed<   	 dZd
ed<   	 dZ	ded<   	 dZ
ded<   	 edd„«       Zedd„«       Zedd„«       Zedd„«       Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 d d„Zed!d„«       Zed"d„«       Zy)#rp   aÐ  `Google PaLM` Chat models API.

    To use you must have the google.generativeai Python package installed and
    either:

        1. The ``GOOGLE_API_KEY`` environment variable set with your API key, or
        2. Pass your API key using the google_api_key kwarg to the ChatGoogle
           constructor.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatGooglePalm
            chat = ChatGooglePalm()

    r   rt   zmodels/chat-bison-001rI   Ú
model_nameNzOptional[SecretStr]Úgoogle_api_keyzOptional[float]ÚtemperatureÚtop_pzOptional[int]Útop_krY   ÚintÚnc                ó
   — ddiS )Nr†   ÚGOOGLE_API_KEYr%   ©Úselfs    r'   Ú
lc_secretszChatGooglePalm.lc_secretsû   s   € à Ð"2Ð3Ð3r&   c                 ó   — y)NTr%   rŽ   s    r'   Úis_lc_serializablez!ChatGooglePalm.is_lc_serializableÿ   s   € àr&   c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚchat_modelsÚgoogle_palmr%   )Úclss    r'   Úget_lc_namespacezChatGooglePalm.get_lc_namespace  s
   € ò ;Ð:r&   c                ó”  — t        t        |dd«      «      }	 ddlm}  |j                  |j                  «       ¬«       ||d<   |d   �%d|d   cxk  rd	k  st        d
«      ‚ t        d
«      ‚|d   �%d|d   cxk  rd	k  st        d«      ‚ t        d«      ‚|d   �|d   dk  rt        d«      ‚|S # t        $ r t        d«      ‚w xY w)zGValidate api key, python package exists, temperature, top_p, and top_k.r†   r�   r   N)Úapi_keyzmCould not import google.generativeai python package. Please install it with `pip install google-generativeai`rt   r‡   rY   z+temperature must be in the range [0.0, 1.0]rˆ   z%top_p must be in the range [0.0, 1.0]r‰   ztop_k must be positive)	r   r   rC   rD   Ú	configureÚget_secret_valueÚImportErrorr    Ú
ValueError)r—   Úvaluesr†   rP   s       r'   Úvalidate_environmentz#ChatGooglePalm.validate_environment  s  € ô /Ü  Ð)9Ð;KÓLó
ˆð	Ý/àˆE�O‰O N×$CÑ$CÓ$EÕFð !ˆˆxÑà�-Ñ Ð,°Q¸&ÀÑ:OÔ5TÐSTÒ5TÜÐJÓKÐKð 6UÜÐJÓKÐKà�'‰?Ð&¨q°F¸7±OÔ/HÀqÒ/HÜÐDÓEÐEð 0IÜÐDÓEÐEà�'‰?Ð&¨6°'©?¸aÒ+?ÜÐ5Ó6Ð6àˆøô# ò 	Ü%ðKóð ð	ús   ˜'B2 Â2Cc           
     óº   — t        |«      }t        | f| j                  || j                  | j                  | j
                  | j                  dœ|¤Ž}t        ||«      S ©N)ÚmodelÚpromptr‡   rˆ   r‰   Úcandidate_count)rV   r~   r…   r‡   rˆ   r‰   r‹   r>   ©r�   rB   r,   Úrun_managerrw   r¤   r<   s          r'   Ú	_generatezChatGooglePalm._generate%  sa   € ô *¨(Ó3ˆä-<Øð	.
à—/‘/ØØ×(Ñ(Ø—*‘*Ø—*‘*Ø ŸF™Fñ	.
ð ñ	.
ˆô # 8¨TÓ2Ð2r&   c           	   ‹  óÔ   K  — t        |«      }t        | | j                  || j                  | j                  | j
                  | j                  ¬«      ƒ d {  –—† }t        ||«      S 7 Œ­wr¢   )rV   rƒ   r…   r‡   rˆ   r‰   r‹   r>   r¦   s          r'   Ú
_ageneratezChatGooglePalm._agenerate;  s`   è ø€ ô *¨(Ó3ˆä3CØØ—/‘/ØØ×(Ñ(Ø—*‘*Ø—*‘*Ø ŸF™Fô4
÷ .
ˆô # 8¨TÓ2Ð2ð.
ús   ‚AA(ÁA&ÁA(c                óv   — | j                   | j                  | j                  | j                  | j                  dœS )zGet the identifying parameters.©r…   r‡   rˆ   r‰   r‹   r¬   rŽ   s    r'   Ú_identifying_paramsz"ChatGooglePalm._identifying_paramsP  s3   € ð Ÿ/™/Ø×+Ñ+Ø—Z‘ZØ—Z‘ZØ—‘ñ
ð 	
r&   c                 ó   — y)Nzgoogle-palm-chatr%   rŽ   s    r'   Ú	_llm_typezChatGooglePalm._llm_type[  s   € à!r&   )r{   zDict[str, str])r{   Úbool)r{   z	List[str])rŸ   r   r{   r   )NN)
rB   úList[BaseMessage]r,   úOptional[List[str]]r§   z"Optional[CallbackManagerForLLMRun]rw   r   r{   r   )
rB   r±   r,   r²   r§   z'Optional[AsyncCallbackManagerForLLMRun]rw   r   r{   r   )r{   zDict[str, Any])r{   rI   )r!   r"   r#   r$   Ú__annotations__r…   r†   r‡   rˆ   r‰   r‹   Úpropertyr�   Úclassmethodr’   r˜   r   r    r¨   rª   r­   r¯   r%   r&   r'   rp   rp   Ø   sU  … ñð" ƒKØ-€J�Ó-ØØ*.€NÐ'Ó.Ø#'€K�Ó'ðà!€Eˆ?Ó!ðXà€Eˆ=Óðà€A€sƒJðIð ò4ó ð4ð òó ðð ò;ó ð;ð òó ðð> %)Ø:>ð	3à#ð3ð "ð3ð 8ð	3ð
 ð3ð 
ó3ð2 %)Ø?Cð	3à#ð3ð "ð3ð =ð	3ð
 ð3ð 
ó3ð* ò
ó ð
ð ò"ó ñ"r&   )r+   rI   r,   r²   r{   rI   )r<   zgenai.types.ChatResponser,   r²   r{   r   )rO   r±   r{   zgenai.types.MessagePromptDict)r{   zCallable[[Any], Any])rx   rp   rw   r   r{   r   )6r$   Ú
__future__r   ri   Útypingr   r   r   r   r   r	   r
   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   r   Úlangchain_core.outputsr   r   Úlangchain_core.utilsr   r   r   Úpydanticr   r   Útenacityr   r   r   r   r   rC   rD   rP   Ú	getLoggerr!   rh   Ú	Exceptionr    r/   r>   rV   ro   r~   rƒ   rp   r%   r&   r'   Ú<module>rÁ      sä   ðÙ ,å "ã ß K× KÑ K÷õ E÷õ ÷÷ WÑ Vß )÷õ ñ Ý'à	ˆ×	Ñ	˜8Ó	$€ô,˜)ô ,ðØ
ðà
ðð 	óð%/Ø&ð%/à
ð%/ð ó%/ðPEØ%ðEà"óEóPó,&ó	-ôE"�] Iõ E"r&   