§
    šŠtjt  ã                   ó  — 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 j        e¦  «        Zd
edefd„Z e
dd¬¦  «         G d„ de¦  «        ¦   «         Z dS )é    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œ}nRt          | t          ¦  «        rd| j        dœ}n2t          | t
          ¦  «        rd| j        dœ}nt          d| › �¦  «        ‚|S )N)ÚroleÚcontentÚuserÚ	assistantzGot unknown type )Ú
isinstancer   r   r   r   r   Ú
ValueError)r   Úmessage_dicts     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/ernie.pyÚ_convert_message_to_dictr      sŠ   € Ý�'�;Ñ'Ô'ð 8Ø '¤¸¼ÐIÐIˆˆÝ	�G�\Ñ	*Ô	*ð 8Ø &°7´?ÐCÐCˆˆÝ	�G�YÑ	'Ô	'ð 8Ø +¸¼ÐHÐHˆˆåÐ6¨WÐ6Ð6Ñ7Ô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)dS )&Ú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                 ó€   — 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   sl   € õ $8ØÐ$Ð&6Ð8Rñ$
ô $
ˆÐÑ õ %9ØØØñ%
ô %
ˆÐ Ñ!õ
 )=ØØ!Ø!ñ)
ô )
ˆÐ$Ñ%ð
 ˆr    Úpayloadc           
      ó
  — | 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|¬¦  «        }|                     ¦   «         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È   € ØÔ)ÐTÐTÐTˆà+Ø&Ø*Ø,Ø",Ø%Ø+Ø -Ø -ð

ð 

ˆð Œ?˜kÐ)Ð)ØÐ>Ð> ¨D¬OÔ <Ð>Ð>ˆCˆCåÐH°t´ÐHÐHÑIÔIÐIåŒ}ØØÔ(àÐ 2ðð # DÔ$5Ð6Øð
ñ 
ô 
ˆð �yŠy‰{Œ{Ðr    c           
      óR  — | j         5  t                               d¦  «         | j        › d�}t	          j        |ddddœd| j        | j        dœ¬¦  «        }t          | 	                    ¦   «          
                    d	¦  «        ¦  «        | _        d d d ¦  «         d S # 1 swxY w Y   d S )
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ð 	Eð 	EÝ�LŠLÐ2Ñ3Ô3Ð3Ø#Ô2ÐDÐDÐDˆHÝ”=ØØà$6Ø0ðð ð
 #7Ø!%Ô!5Ø%)Ô%=ðð ðñ ô ˆDõ !$ D§I¢I¡K¤K§O¢O°NÑ$CÔ$CÑ DÔ DˆDÔð!	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð 	Eð 	Es   ˆBBÂB Â#B ÚmessagesÚstopÚrun_managerÚkwargsc                 óJ  — | j         rt          d¦  «        ‚| j        s|                      ¦   «          d„ |D ¦   «         | j        | j        | j        | j        dœ|¥}t           	                    d|› �¦  «         |  
                    |¦  «        }|                     d¦  «        ro|                     d¦  «        dk    rDt           	                    d¦  «         |                      ¦   «          |  
                    |¦  «        }nt          d|› �¦  «        ‚|                      |¦  «        S )	Nz)`streaming` option currently unsupported.c                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r   )Ú.0Úms     r   ú
<listcomp>z*ErnieBotChat._generate.<locals>.<listcomp>¾   s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGr    )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/   r0   r2   r+   r]   r^   rT   r`   Ú_create_chat_result)rO   rb   rc   rd   re   r<   rS   s          r   Ú	_generatezErnieBotChat._generate±   s5  € ð Œ>ð 	JÝÐHÑIÔIÐIàÔ ð 	3Ø×0Ò0Ñ2Ô2Ð2àGÐG¸hÐGÑGÔGØ”ZØÔ+Ø!Ô/Ø”kð
ð 
ð ð
ˆõ 	�ŠÐ:°Ð:Ð:Ñ;Ô;Ð;Ø�zŠz˜'Ñ"Ô"ˆØ�8Š8�LÑ!Ô!ð 	OØ�xŠx˜Ñ%Ô%¨Ò,Ð,Ý—’Ð?Ñ@Ô@Ð@Ø×4Ò4Ñ6Ô6Ð6Ø—z’z 'Ñ*Ô*��å Ð!MÀtÐ!MÐ!MÑNÔNÐNØ×'Ò'¨Ñ-Ô-Ð-r    Úresponsec                 ó(  — d|v r&dt          |                     di ¦  «        ¦  «        i}ni }t          t          |                     dd¦  «        i |¥¬¦  «        ¬¦  «        g}|                     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   rp   ru   rx   rw   ry   s         r   rn   z ErnieBotChat._create_chat_resultÐ   s·   € Ø˜hÐ&Ð&à¥ h§l¢l°?ÀBÑ&GÔ&GÑ!HÔ!Hð!ÐÐð !#ÐåÝ!Ø$ŸLšL¨°2Ñ6Ô6Ø&;Ð):Ð&;ðñ ô ðñ ô ð
ˆð —l’l 7¨BÑ/Ô/ˆØ%0ÀÄÐPÐPˆ
Ý k¸jÐIÑIÔIÐIr    c                 ó   — dS )Nzernie-bot-chatrh   )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;   Úobjectrz   rT   ra   r   r   r	   r   ro   r   rn   Úpropertyr|   rh   r    r   r$   r$   "   sk  € € € € € € ð
$ð $ð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ÑÔ€Eà€_˜(Ð#Ñ#Ô#Øð¨$ð °3ð ð ð ñ „[ñ $Ô#ðð ˜Vð ¨ð ð ð ð ð:Eð Eð Eð Eð, %)Ø:>ð	.ð .à�{Ô#ð.ð �t˜C”yÔ!ð.ð Ð6Ô7ð	.ð
 ð.ð 
ð.ð .ð .ð .ð>J¨G°C¸°HÔ,=ð JÀ*ð Jð Jð Jð Jð& ð ˜3ð  ð  ð  ñ „Xð ð  ð  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   Ú	getLoggerr}   r]   rz   r   r$   rh   r    r   ú<module>r”      s•  ðØ €€€Ø Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ø DÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø $Ð $Ð $Ð $Ð $Ð $à	ˆÔ	˜8Ñ	$Ô	$€ð	 kð 	°dð 	ð 	ð 	ð 	ð €Ø
ØEðñ ô ð ð  ð  ð  ð  �=ñ  ô  ñ	ô ð ð  ð  r    