
    dht                         S SK r S SKrS SKJrJrJrJrJr  S SKrS SK	J
r
  S SKJr  S SKJr  S SKJrJrJrJr  S SKJrJr  S SKJr  S S	KJr  \ R6                  " \5      rS
\S\4S jr\
" SSS9 " S S\5      5       r g)    N)AnyDictListMappingOptional)
deprecated)CallbackManagerForLLMRun)BaseChatModel)	AIMessageBaseMessageChatMessageHumanMessage)ChatGeneration
ChatResultget_from_dict_or_env)model_validatormessagereturnc                    [        U [        5      (       a  U R                  U R                  S.nU$ [        U [        5      (       a  SU R                  S.nU$ [        U [
        5      (       a  SU R                  S.nU$ [        SU  35      e)N)rolecontentuser	assistantzGot unknown type )
isinstancer   r   r   r   r   
ValueError)r   message_dicts     ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/ernie.py_convert_message_to_dictr      s    ';'' 'I  
G\	*	* &7??C
 	 
GY	'	' +H  ,WI677    z0.0.13z3langchain_community.chat_models.QianfanChatEndpoint)sincealternativec                      \ rS rSr% SrSr\\   \S'    Sr	\\   \S'    Sr
\\   \S'    Sr\\   \S'    Sr\\S	'    Sr\\   \S
'    Sr\\   \S'    Sr\\   \S'    Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   \R.                  " 5       r\" SS9\S\S\4S j5       5       rS\S\4S jr S&S jr!  S'S\"\#   S\\"\      S\\$   S \S\%4
S! jjr&S"\'\\4   S\%4S# jr(\)S\4S$ j5       r*S%r+g)(ErnieBotChat"   a  `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    [        USSS5      US'   [        USS5      US'   [        USS5      US'   U$ )Nr&   ERNIE_API_BASEzhttps://aip.baidubce.comr'   ERNIE_CLIENT_IDr(   ERNIE_CLIENT_SECRETr   )clsr6   s     r   validate_environment!ErnieBotChat.validate_environmento   s]     $8$&68R$
  %9%
 !
 )=!!)
$%
 r    payloadc           
      0   U R                    S3nSSSSSSSS	S
S.	nU R                  U;   a  U SX0R                      3nO[        SU R                   35      e[        R                  " UU R
                  SS0SU R                  0US9nUR                  5       $ )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)   rN   )selfr>   base_urlmodel_pathsurlresps         r   _chatErnieBotChat._chat   s    ))**ST+&*,",%+ - -

 ??k)JaOO <=>C6t6GHII}}(( 2 #D$5$56
 yy{r    c           
      V   U R                      [        R                  S5        U R                   S3n[        R
                  " USSSS.SU R                  U R                  S.S9n[        UR                  5       R                  S	5      5      U l        S S S 5        g ! , (       d  f       g = f)
NzRefreshing access tokenz/oauth/2.0/token
   rJ   )rI   Acceptclient_credentials)
grant_type	client_idclient_secret)rK   rL   rM   r)   )_lockloggerdebugr&   rO   rP   r'   r(   strrN   getr)   )rQ   rR   rU   s      r   _refresh_access_token_with_lock,ErnieBotChat._refresh_access_token_with_lock   s    ZZLL23#2233CDH==$60
 #7!%!5!5%)%=%=D !$DIIKOON$C DD! ZZs   BB
B(messagesstoprun_managerkwargsc                 p   U R                   (       a  [        S5      eU R                  (       d  U R                  5         U Vs/ sH  n[	        U5      PM     snU R
                  U R                  U R                  U R                  S.UEn[        R                  SU 35        U R                  U5      nUR                  S5      (       aZ  UR                  S5      S:X  a7  [        R                  S5        U R                  5         U R                  U5      nO[        SU 35      eU R                  U5      $ s  snf )Nz)`streaming` option currently unsupported.)rf   r0   r1   r3   r,   zPayload for ernie api is 
error_codeo   z access_token expired, refresh itz#Error from ErnieChat api response: )r/   r   r)   rd   r   r0   r1   r3   r,   r`   ra   rV   rc   _create_chat_result)rQ   rf   rg   rh   ri   mr>   rU   s           r   	_generateErnieBotChat._generate   s
    >>HII  002>FGh1!4hGZZ++!//kk
 
 	0	:;zz'"88L!!xx%,?@446zz'* #Ftf!MNN''--! Hs   D3responsec                     SU;   a  S[        UR                  S0 5      5      0nO0 n[        [        UR                  SS5      0 UES9S9/nUR                  S0 5      nX@R                  S.n[        X5S9$ )	Nfunction_callresult )r   additional_kwargs)r   usage)token_usager+   )generations
llm_output)dictrc   r   r   r+   r   )rQ   rq   rv   ry   rx   rz   s         r   rm    ErnieBotChat._create_chat_result   s    h&hll?B&G!H! !#!$LL26&;):&;
 ll7B/%0P
kIIr    c                     g)Nzernie-bot-chat )rQ   s    r   	_llm_typeErnieBotChat._llm_type   s    r    )r)   )r   N)NN),__name__
__module____qualname____firstlineno____doc__r&   r   rb   __annotations__r'   r(   r)   r+   r,   r.   intr/   boolr0   floatr1   r3   	threadingLockr_   r   classmethodr   r   r<   objectr{   rV   rd   r   r   r	   r   ro   r   rm   propertyr   __static_attributes__r~   r    r   r$   r$   "   s   
$L %)NHSM(,%)OXc])%)-#-)"&L(3-&7 (J'< !FHSM @ &(OXc]'0 %Ix~%, E8E? #'K%'%&M8E?&NNE(#$ 3   $ V  :E, %):>	.{#. tCy!. 67	.
 . 
.>JGCH,= J* J&  3    r    r$   )!loggingr   typingr   r   r   r   r   rO   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`   r{   r   r$   r~   r    r   <module>r      s~      5 5  6 = D  > 5 $			8	$	k 	d 	 
E =  	 r    