Ë
    µŒjò)  ã                  ó4  — 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
 ddlmZmZ ddlmZ ddlmZ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 dd
lmZ ddl m!Z!  ejD                  e#«      Z$dd„Z%dd„Z& G d„ de!e«      Z'	 	 	 	 	 	 dd„Z(dd„Z)dd„Z*dd„Z+dd„Z,y)z%Wrapper around YandexGPT chat models.é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptionalÚcast)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	AIMessageÚBaseMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚ
ChatResult)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponential)Úenforce_stop_tokens)Ú_BaseYandexGPTc                ó   — | |dœS )N©ÚroleÚtext© r   s     úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/yandex.pyÚ_parse_messager    "   s   € Ø $Ñ'Ð'ó    c                óP  — g }| D ]ž  }t        t        |j                  «      }t        |t        «      r|j                  t        d|«      «       t        |t        «      r|j                  t        d|«      «       t        |t        «      sŒ„|j                  t        d|«      «       Œ  |S )z`Parse a sequence of messages into history.

    Returns:
        A list of parsed messages.
    ÚuserÚ	assistantÚsystem)	r	   ÚstrÚcontentÚ
isinstancer   Úappendr    r   r   )ÚhistoryÚchat_historyÚmessager'   s       r   Ú_parse_chat_historyr-   &   sˆ   € ð €LÛˆÜ”s˜GŸO™OÓ,ˆÜ�gœ|Ô,Ø×Ñ¤¨v°wÓ ?Ô@Ü�gœyÔ)Ø×Ñ¤¨{¸GÓ DÔEÜ�gœ}Õ-Ø×Ñ¤¨x¸Ó AÕBð ð Ðr!   c                  óP   — e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zy)ÚChatYandexGPTaD  YandexGPT large language models.

    There are two authentication options for the service account
    with the ``ai.languageModels.user`` role:
        - You can specify the token in a constructor parameter `iam_token`
        or in an environment variable `YC_IAM_TOKEN`.
        - You can specify the key in a constructor parameter `api_key`
        or in an environment variable `YC_API_KEY`.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatYandexGPT
            chat_model = ChatYandexGPT(iam_token="t1.9eu...")

    Nc                ó‚   — t        | |¬«      }|€|nt        ||«      }t        |¬«      }t        t	        |¬«      g¬«      S )aÎ  Generate next turn in the conversation.
        Args:
            messages: The history of the conversation as a list of messages.
            stop: The list of stop words (optional).
            run_manager: The CallbackManager for LLM run, it's not used at the moment.

        Returns:
            The ChatResult that contains outputs generated by the model.

        Raises:
            ValueError: if the last message in the list is not from human.
        ©Úmessages©r'   ©r,   ©Úgenerations)Úcompletion_with_retryr   r   r   r   ©Úselfr2   ÚstopÚrun_managerÚkwargsr   r,   s          r   Ú	_generatezChatYandexGPT._generateJ   s@   € ô& % T°HÔ=ˆØ�|‰tÔ)<¸TÀ4Ó)HˆÜ DÔ)ˆÜ¤~¸gÔ'FÐ&GÔHÐHr!   c              ‹  óž   K  — t        | |¬«      ƒ d{  –—† }|€|nt        ||«      }t        |¬«      }t        t	        |¬«      g¬«      S 7 Œ7­w)aß  Async method to generate next turn in the conversation.

        Args:
            messages: The history of the conversation as a list of messages.
            stop: The list of stop words (optional).
            run_manager: The CallbackManager for LLM run, it's not used at the moment.

        Returns:
            The ChatResult that contains outputs generated by the model.

        Raises:
            ValueError: if the last message in the list is not from human.
        r1   Nr3   r4   r5   )Úacompletion_with_retryr   r   r   r   r8   s          r   Ú
_ageneratezChatYandexGPT._agenerateb   sM   è ø€ ô( ,¨D¸8ÔD×DˆØ�|‰tÔ)<¸TÀ4Ó)HˆÜ DÔ)ˆÜ¤~¸gÔ'FÐ&GÔHÐHð Eús   ‚A“A”8A)NN)
r2   úList[BaseMessage]r:   úOptional[List[str]]r;   z"Optional[CallbackManagerForLLMRun]r<   r   Úreturnr   )
r2   rA   r:   rB   r;   z'Optional[AsyncCallbackManagerForLLMRun]r<   r   rC   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   r@   r   r!   r   r/   r/   8   s�   „ ñð( %)Ø:>ð	Ià#ðIð "ðIð 8ð	Ið
 ðIð 
óIð6 %)Ø?Cð	Ià#ðIð "ðIð =ð	Ið
 ðIð 
ôIr!   r/   c                ó¨  — 	 dd l }ddlm}m} 	 ddlm}m} ddlm} ddl	m
} |st!        d«      ‚t#        |«      }
|j%                  «       }|j'                  | j(                  |«      } || j*                   | || j,                  ¬«       || j.                  ¬«      ¬	«      |
D �cg c]
  } |di |¤Ž‘Œ c}¬
«      } ||«      }|j1                  || j2                  ¬«      }t5        |«      d   j6                  d   j8                  j:                  S # t        $ r ddlm}m} ddlm} ddlm
} Y �Œw xY w# t        $ r}	t        d«      |	‚d }	~	ww xY wc c}w )Nr   ©ÚDoubleValueÚ
Int64Value©ÚCompletionOptionsÚMessage)ÚCompletionRequest)ÚTextGenerationServiceStubúkPlease install YandexCloud SDK  with `pip install yandexcloud`             or upgrade it to recent version.ú:You should provide at least one message to start the chat!©Úvalue©ÚtemperatureÚ
max_tokens©Ú	model_uriÚcompletion_optionsr2   ©Úmetadatar   )ÚgrpcÚgoogle.protobuf.wrappers_pb2rJ   rK   Ú4yandex.cloud.ai.foundation_models.v1.text_common_pb2rM   rN   ÚPyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2rO   ÚUyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2_grpcrP   ÚModuleNotFoundErrorÚ:yandex.cloud.ai.foundation_models.v1.foundation_models_pb2ÚByandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2ÚGyandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2_grpcÚImportErrorÚ
ValueErrorr-   Ússl_channel_credentialsÚsecure_channelÚurlrY   rV   rW   Ú
CompletionÚgrpc_metadataÚlistÚalternativesr,   r   )r9   r2   r]   rJ   rK   rM   rN   rO   rP   ÚeÚmessage_historyÚchannel_credentialsÚchannelr,   ÚrequestÚstubÚress                    r   Ú_make_requestrv   |   sM  € ðÛßHð	÷õõñ& ÜÐUÓVÐVÜ)¨(Ó3€OØ×6Ñ6Ó8ÐØ×!Ñ! $§(¡(Ð,?Ó@€GÙØ—.‘.Ù,Ù#¨$×*:Ñ*:Ô;Ù!¨¯©Ô8ô
ñ 5DÓD±O¨‘'Ñ$˜GÓ$°OÑDô€Gñ % WÓ-€DØ
�/‰/˜'¨D×,>Ñ,>ˆ/Ó
?€CÜ�‹9�Q‰<×$Ñ$ QÑ'×/Ñ/×4Ñ4Ð4øô? #ò 
	÷õ÷ð ð
	ûô ò Üð.ó
ð ð	ûðüò  Es:   ‚D2 �D Â#EÄD/Ä+D2 Ä.D/Ä/D2 Ä2	EÄ;EÅEc              ƒ  ó&  K  — 	 dd l }dd l}ddlm}m} 	 ddlm}m} ddlm	}m
}	 ddlm}
 ddlm} ddlm} |st-        d	«      ‚t/        |«      }d
}|j1                  «       }|j2                  j5                  | j6                  |«      4 ƒd {  –—† } || j8                   | || j:                  ¬«       || j<                  ¬«      ¬«      |D �cg c]
  } |di |¤Ž‘Œ c}¬«      } |
|«      }|j?                  || j@                  ¬«      ƒ d {  –—† }|j2                  j5                  ||«      4 ƒd {  –—† } ||«      }|jB                  s^|jE                  d«      ƒ d {  –—†   ||jF                  ¬«      }|jI                  || j@                  ¬«      ƒ d {  –—† }|jB                  sŒ^d d d «      ƒd {  –—†   |	«       }|jJ                  jM                  |«       |jN                  d   jP                  jR                  cd d d «      ƒd {  –—†  S # t        $ r ddlm}m} ddlm	}m
}	 ddlm}
 Y �Œw xY w# t*        $ r}t+        d«      |‚d }~ww xY w7 �ŒÅc c}w 7 �ŒM7 �Œ+7 �Œ7 ŒË7 Œ°# 1 ƒd {  –—†7  sw Y   ŒÀxY w7 Œr# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr   rI   rL   )rO   ÚCompletionResponse)ÚTextGenerationAsyncServiceStub)ÚGetOperationRequest)ÚOperationServiceStubrQ   rR   z"operation.api.cloud.yandex.net:443rS   rU   rX   r[   é   )Úoperation_idr   )*Úasyncior]   r^   rJ   rK   r_   rM   rN   r`   rO   rx   ra   ry   rb   rc   rd   re   Ú,yandex.cloud.operation.operation_service_pb2rz   Ú1yandex.cloud.operation.operation_service_pb2_grpcr{   rf   rg   r-   rh   Úaiori   rj   rY   rV   rW   rk   rl   ÚdoneÚsleepÚidÚGetÚresponseÚUnpackrn   r,   r   )r9   r2   r~   r]   rJ   rK   rM   rN   rO   rx   ry   rz   r{   ro   rp   Úoperation_api_urlrq   rr   r,   rs   rt   Ú	operationÚoperation_channelÚoperation_stubÚoperation_requestÚcompletion_responses                             r   Ú_amake_requestrŽ   ±   sb  è ø€ ð&ÛãßHð	÷÷õõ 	Uõ	
ñ ÜÐUÓVÐVÜ)¨(Ó3€OØ<ÐØ×6Ñ6Ó8ÐØ�x‰x×&Ñ& t§x¡xÐ1D×EÔEÈÙ#Ø—n‘nÙ0Ù'¨d×.>Ñ.>Ô?Ù%¨D¯O©OÔ<ô ñ 9HÓH¹¨W‘gÑ( Ó(¸ÑHô
ˆñ .¨gÓ6ˆØŸ/™/¨'¸D×<NÑ<N˜/ÓO×Oˆ	Ø—8‘8×*Ñ*ØÐ2÷
ô 
àÙ1Ð2CÓDˆNØ—n’nØ—m‘m AÓ&×&Ð&Ù$7ÀYÇ\Á\Ô$RÐ!Ø"0×"4Ñ"4Ø%Ø!×/Ñ/ð #5ó #÷ �	ð  —n“n÷	
÷ 
ñ 1Ó2ÐØ×Ñ×!Ñ!Ð"5Ô6Ø"×/Ñ/°Ñ2×:Ñ:×?Ñ?÷3 F×EÑEøô5 #ò 	÷÷÷ð ð	ûô  ò Üð.ó
ð ð	ûðúð Fûò Ið Pùð
ùð
 'ùðøð
ø÷ 
÷ 
ñ 
úð Fø×E×EÑEüs  ‚J„H3 •H «H3 ·AJÂIÂJÂ=I<ÃIÃ0I<ÄIÄ$I<Ä0IÄ1I<Ä4)I%ÅIÅ7I%ÆI!ÆI%Æ'I<Æ2I#Æ3AI<Ç;JÈI:ÈJÈH0È,H3 È/H0È0H3 È3	IÈ<IÉIÉJÉI<ÉI<ÉI%É!I%É#I<É%I7	É+I.É,I7	É3I<É:JÉ<JÊJÊJÊ
Jc           
     óÒ   — ddl m} | j                  }d}t        dt	        | j
                  «      t        d||¬«      t        |«      t        t        t        j                  «      ¬«      S )Nr   )ÚRpcErroré<   Tr|   )Ú
multiplierÚminÚmax)Úreraiser:   Úwaitr   Úbefore_sleep)r]   r�   Úsleep_intervalr   r   Úmax_retriesr   r   r   ÚloggerÚloggingÚWARNING)Úllmr�   Úmin_secondsÚmax_secondss       r   Ú_create_retry_decoratorr    ú   sS   € Ýà×$Ñ$€KØ€KÜØÜ §¡Ó0Ü¨°ÀÔMÜ&¨Ó2Ü%¤f¬g¯o©oÓ>ôð r!   c                ó@   ‡ — t        ‰ «      }|dˆ fd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.c                 ó   •— t        ‰fi | ¤ŽS ©N)rv   ©Ú_kwargsr�   s    €r   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry  s   ø€ ä˜SÑ, GÑ,Ð,r!   ©r¥   r   rC   r   r   ©r    ©r�   r<   Úretry_decoratorr¦   s   `   r   r7   r7     s/   ø€ ä-¨cÓ2€Oàô-ó ð-ñ "Ñ+ FÑ+Ð+r!   c              ‹  ó\   ‡ K  — t        ‰ «      }|dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)z0Use tenacity to retry the async completion call.c               ›  ó8   •K  — t        ‰fi | ¤Žƒ d {  –—† S 7 Œ­wr£   )rŽ   r¤   s    €r   r¦   z6acompletion_with_retry.<locals>._completion_with_retry  s   øè ø€ ä# CÑ3¨7Ñ3×3Ð3Ð3ús   ƒ“”Nr§   r   r¨   r©   s   `   r   r?   r?     s9   øè ø€ ä-¨cÓ2€Oàô4ó ð4ñ (Ñ1¨&Ñ1×1Ð1Ð1ús   ƒ",¥*¦,)r   r&   r   r&   rC   r   )r*   rA   rC   zList[Dict[str, str]])r9   r/   r2   rA   rC   r&   )r�   r/   rC   zCallable[[Any], Any])r�   r/   r<   r   rC   r   )-rG   Ú
__future__r   r›   Útypingr   r   r   r   r   r	   Úlangchain_core.callbacksr
   r   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   Úlangchain_core.outputsr   r   Útenacityr   r   r   r   r   Úlangchain_community.llms.utilsr   Úlangchain_community.llms.yandexr   Ú	getLoggerrD   rš   r    r-   r/   rv   rŽ   r    r7   r?   r   r!   r   Ú<module>r·      s¦   ðÙ +å "ã ß <× <÷õ E÷ó ÷ >÷õ õ ?Ý :à	ˆ×	Ñ	˜8Ó	$€ó(óô$AI�N Mô AIðH25Ø
ð25àð25ð 	ó25ójF@óRó,ô2r!   