Ë
    µŒjt  ã                   ó   — d dl Z d dlZd dlmZmZmZmZmZ d dl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mZ d dlmZmZ d dlmZ d d	lmZ  e j6                  e«      Zd
edefd„Z e
dd¬«       G d„ de«      «       Z y)é    N)ÚAnyÚDictÚListÚMappingÚOptional)Ú
deprecated)ÚCallbackManagerForLLMRun)ÚBaseChatModel)Ú	AIMessageÚBaseMessageÚChatMessageÚHumanMessage)ÚChatGenerationÚ
ChatResult©Úget_from_dict_or_env)Úmodel_validatorÚmessageÚreturnc                 óø   — t        | t        «      r| j                  | j                  dœ}|S t        | t        «      rd| j                  dœ}|S t        | t
        «      rd| j                  dœ}|S t        d| › �«      ‚)N)ÚroleÚcontentÚuserÚ	assistantzGot unknown type )Ú
isinstancer   r   r   r   r   Ú
ValueError)r   Úmessage_dicts     úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/ernie.pyÚ_convert_message_to_dictr      s   € Ü�'œ;Ô'Ø '§¡¸¿¹ÑIˆð Ðô 
�Gœ\Ô	*Ø &°7·?±?ÑCˆð
 Ðô	 
�GœYÔ	'Ø +¸¿¹ÑHˆð Ðô Ð,¨W¨IÐ6Ó7Ð7ó    z0.0.13z3langchain_community.chat_models.QianfanChatEndpoint)ÚsinceÚalternativec                   óÎ  — 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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<    ej,                  «       Z ed¬«      ededefd„«       «       Zdedefd„Zd$d„Z 	 	 d%de!e"   dee!e      dee#   dede$f
d „Z%d!e&eef   de$fd"„Z'e(defd#„«       Z)y)&ÚErnieBotChata#  `ERNIE-Bot` large language model.

    ERNIE-Bot is a large language model developed by Baidu,
    covering a huge amount of Chinese data.

    To use, you should have the `ernie_client_id` and `ernie_client_secret` set,
    or set the environment variable `ERNIE_CLIENT_ID` and `ERNIE_CLIENT_SECRET`.

    Note:
    access_token will be automatically generated based on client_id and client_secret,
    and will be regenerated after expiration (30 days).

    Default model is `ERNIE-Bot-turbo`,
    currently supported models are `ERNIE-Bot-turbo`, `ERNIE-Bot`, `ERNIE-Bot-8K`,
    `ERNIE-Bot-4`, `ERNIE-Bot-turbo-AI`.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ErnieBotChat
            chat = ErnieBotChat(model_name='ERNIE-Bot')


    Deprecated Note:
    Please use `QianfanChatEndpoint` instead of this class.
    `QianfanChatEndpoint` is a more suitable choice for production.

    Always test your code after changing to `QianfanChatEndpoint`.

    Example of `QianfanChatEndpoint`:
        .. code-block:: python

            from langchain_community.chat_models import QianfanChatEndpoint
            qianfan_chat = QianfanChatEndpoint(model="ERNIE-Bot",
                endpoint="your_endpoint", qianfan_ak="your_ak", qianfan_sk="your_sk")

    NÚernie_api_baseÚernie_client_idÚernie_client_secretÚaccess_tokenúERNIE-Bot-turboÚ
model_nameÚsystemé<   Úrequest_timeoutFÚ	streaminggš™™™™™é?Útop_pgffffffî?Útemperatureé   Úpenalty_scoreÚbefore)ÚmodeÚvaluesr   c                 óh   — t        |ddd«      |d<   t        |dd«      |d<   t        |dd«      |d<   |S )Nr%   ÚERNIE_API_BASEzhttps://aip.baidubce.comr&   ÚERNIE_CLIENT_IDr'   ÚERNIE_CLIENT_SECRETr   )Úclsr5   s     r   Úvalidate_environmentz!ErnieBotChat.validate_environmento   s]   € ô $8ØÐ$Ð&6Ð8Ró$
ˆÐÑ ô %9ØØØó%
ˆÐ Ñ!ô
 )=ØØ!Ø!ó)
ˆÐ$Ñ%ð
 ˆr    Úpayloadc           
      ó2  — | j                   › d�}dddddddd	d
dœ	}| j                  |v r|› d|| j                     › �}nt        d| j                  › �«      ‚t        j                  || j
                  ddid| j                  i|¬«      }|j                  «       S )Nz)/rpc/2.0/ai_custom/v1/wenxinworkshop/chatz
eb-instantÚcompletionsÚernie_bot_8kÚcompletions_proÚai_apaasÚ
bloomz_7b1Ú
llama_2_7bÚllama_2_13bÚllama_2_70b)	r)   z	ERNIE-BotzERNIE-Bot-8KzERNIE-Bot-4zERNIE-Bot-turbo-AIz	BLOOMZ-7BzLlama-2-7b-chatzLlama-2-13b-chatzLlama-2-70b-chatÚ/zGot unknown model_name úContent-Typeúapplication/jsonr(   )ÚtimeoutÚheadersÚparamsÚjson)r%   r*   r   ÚrequestsÚpostr-   r(   rL   )Úselfr<   Úbase_urlÚmodel_pathsÚurlÚresps         r   Ú_chatzErnieBotChat._chat�   s¾   € Ø×)Ñ)Ð*Ð*SÐTˆà+Ø&Ø*Ø,Ø",Ø%Ø+Ø -Ø -ñ

ˆð �?‰?˜kÑ)Ø�J˜a ¨D¯O©OÑ <Ð=Ð>‰CäÐ6°t·±Ð6GÐHÓIÐIä�}‰}ØØ×(Ñ(àÐ 2ðð # D×$5Ñ$5Ð6Øô
ˆð �y‰y‹{Ðr    c           
      óP  — | j                   5  t        j                  d«       | j                  › d�}t	        j
                  |ddddœd| j                  | j                  dœ¬«      }t        |j                  «       j                  d	«      «      | _        d d d «       y # 1 sw Y   y xY w)
NzRefreshing access tokenz/oauth/2.0/tokené
   rH   )rG   ÚAcceptÚclient_credentials)Ú
grant_typeÚ	client_idÚclient_secret)rI   rJ   rK   r(   )Ú_lockÚloggerÚdebugr%   rM   rN   r&   r'   ÚstrrL   Úgetr(   )rO   rP   rS   s      r   Ú_refresh_access_token_with_lockz,ErnieBotChat._refresh_access_token_with_lockž   s�   € Ø�Z‹ZÜ�L‰LÐ2Ô3Ø#×2Ñ2Ð3Ð3CÐDˆHÜ—=‘=ØØà$6Ø0ñð
 #7Ø!%×!5Ñ!5Ø%)×%=Ñ%=ñôˆDô !$ D§I¡I£K§O¡O°NÓ$CÓ DˆDÔ÷! �Z‰Zús   �BBÂB%ÚmessagesÚstopÚrun_managerÚkwargsc                 óL  — | j                   rt        d«      ‚| j                  s| j                  «        |D �cg c]  }t	        |«      ‘Œ c}| j
                  | j                  | j                  | j                  dœ|¥}t        j                  d|› �«       | j                  |«      }|j                  d«      rY|j                  d«      dk(  r7t        j                  d«       | j                  «        | j                  |«      }nt        d|› �«      ‚| j                  |«      S c c}w )Nz)`streaming` option currently unsupported.)rb   r/   r0   r2   r+   zPayload for ernie api is Ú
error_codeéo   z access_token expired, refresh itz#Error from ErnieChat api response: )r.   r   r(   ra   r   r/   r0   r2   r+   r]   r^   rT   r`   Ú_create_chat_result)rO   rb   rc   rd   re   Úmr<   rS   s           r   Ú	_generatezErnieBotChat._generate±   s  € ð �>Š>ÜÐHÓIÐIà× Ò Ø×0Ñ0Ô2á>FÓG¹h¸Ô1°!Õ4¸hÑGØ—Z‘ZØ×+Ñ+Ø!×/Ñ/Ø—k‘kñ
ð ð
ˆô 	�‰Ð0°°	Ð:Ô;Ø�z‰z˜'Ó"ˆØ�8‰8�LÔ!Ø�x‰x˜Ó%¨Ò,Ü—‘Ð?Ô@Ø×4Ñ4Ô6Ø—z‘z 'Ó*‘ä Ð#FÀtÀfÐ!MÓNÐNØ×'Ñ'¨Ó-Ð-ùò! Hs   ¸D!Úresponsec                 óú   — d|v rdt        |j                  di «      «      i}ni }t        t        |j                  dd«      i |¥¬«      ¬«      g}|j                  di «      }|| j                  dœ}t        ||¬«      S )	NÚfunction_callÚresultÚ )r   Úadditional_kwargs)r   Úusage)Útoken_usager*   )ÚgenerationsÚ
llm_output)Údictr`   r   r   r*   r   )rO   rl   rq   rt   rs   ru   s         r   ri   z ErnieBotChat._create_chat_resultÐ   sŠ   € Ø˜hÑ&à¤ h§l¡l°?ÀBÓ&GÓ!Hð!Ñð !#ÐäÜ!Ø$ŸL™L¨°2Ó6Ø&;Ð):Ð&;ôôð
ˆð —l‘l 7¨BÓ/ˆØ%0ÀÇÁÑPˆ
Ü k¸jÔIÐIr    c                  ó   — y)Nzernie-bot-chat© )rO   s    r   Ú	_llm_typezErnieBotChat._llm_typeã   s   € àr    )r   N)NN)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r   r_   Ú__annotations__r&   r'   r(   r*   r+   r-   Úintr.   Úboolr/   Úfloatr0   r2   Ú	threadingÚLockr\   r   Úclassmethodr   r   r;   Úobjectrv   rT   ra   r   r   r	   r   rk   r   ri   Úpropertyry   rx   r    r   r$   r$   "   s¥  … ñ
$ðL %)€N�H˜S‘MÓ(Ø,à%)€O�X˜c‘]Ó)Ø%à)-Ð˜ #™Ó-Ø)à"&€L�(˜3‘-Ó&ð7ð (€J�Ó'ð<ð !€FˆH�S‰MÓ ð@ð &(€O�X˜c‘]Ó'Ø0à %€Iˆx˜‰~Ó%Ø,à €Eˆ8�E‰?Ó Ø#'€K�˜%‘Ó'Ø%&€M�8˜E‘?Ó&àˆI�N‰NÓ€Eá˜(Ô#Øð¨$ð °3ò ó ó $ðð ˜Vð ¨ó ó:Eð, %)Ø:>ñ	.à�{Ñ#ð.ð �t˜C‘yÑ!ð.ð Ð6Ñ7ð	.ð
 ð.ð 
ó.ð>J¨G°C¸°HÑ,=ð JÀ*ó Jð& ð ˜3ò  ó ñ r    r$   )!Úloggingr‚   Útypingr   r   r   r   r   rM   Úlangchain_core._api.deprecationr   Úlangchain_core.callbacksr	   Ú*langchain_core.language_models.chat_modelsr
   Úlangchain_core.messagesr   r   r   r   Úlangchain_core.outputsr   r   Úlangchain_core.utilsr   Úpydanticr   Ú	getLoggerrz   r]   rv   r   r$   rx   r    r   Ú<module>r‘      s€   ðÛ Û ß 5Õ 5ã Ý 6Ý =Ý D÷ó ÷ >Ý 5Ý $à	ˆ×	Ñ	˜8Ó	$€ð	 kð 	°dó 	ñ Ø
ØEôô �=ó  ó	ñ r    