
    dhD&                     n   S SK r S SKrS SKJrJrJrJrJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJ r J!r!  S SK"J#r#J$r$J%r%J&r&  \RN                  " \(5      r)S	\S
\*4S jr+S\\,\4   S
\4S jr-S\\,\4   S\	\   S
\4S jr.S\\,\4   S
\4S jr/ " S S\5      r0g)    N)AnyDictIteratorListMappingOptionalType)CallbackManagerForLLMRun)BaseChatModelgenerate_from_stream)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkHumanMessageHumanMessageChunkSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)convert_to_secret_strget_from_dict_or_envget_pydantic_field_namespre_init)
ConfigDictField	SecretStrmodel_validatormessagereturnc                 b   [        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$ [        U [        5      (       a  SU R                  S.nU$ [        SU  35      e)N)RoleContentsystemuser	assistantzGot unknown type )
isinstancer   rolecontentr   r   r   	TypeError)r!   message_dicts     _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/hunyuan.py_convert_message_to_dictr/   !   s    ';'' 'I  
G]	+	+ (W__E  
G\	*	* &7??C  
GY	'	' +H  +G9566    _dictc                     U S   nUS:X  a"  [        U R                  SS5      =(       d    SS9$ US:X  a  [        U S   S9$ US:X  a"  [        U R                  SS5      =(       d    SS9$ [	        U S   US9$ )	Nr$   r&   r%    r+   r'   r(   r+   r*   )r   getr   r   r   )r1   r*   s     r.   _convert_dict_to_messager7   1   sz    =DxUYYy"%=%CDD	E)$455		9b!9!?R@@5#3$??r0   default_classc                     U R                  S5      nU R                  S5      =(       d    SnUS:X  d
  U[        :X  a	  [        US9$ US:X  d
  U[        :X  a	  [        US9$ U(       d
  U[        :X  a	  [        X2S9$ U" US9$ )Nr$   r%   r3   r'   r4   r(   r5   )r6   r   r   r   )r1   r8   r*   r+   s       r.   _convert_delta_to_message_chunkr:   =   sz     99VDii	"(bGv~*;; 11		 ?g..	"22;;W--r0   responsec                     / nU S    H@  n[        US   5      nU R                  SS5      Ul        UR                  [	        US95        MB     U S   nSU0n[        XS9$ )	NChoicesMessageIdr3   r!   Usagetoken_usage)generations
llm_output)r7   r6   idappendr   r   )r;   rC   choicer!   rB   rD   s         r.   _create_chat_resultrH   M   sk    K9%*6)+<=\\$+
>':; &
 7#K-J+EEr0   c                   `   \ rS rSr% Sr\S\\\4   4S j5       r\S\	4S j5       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9r\\\4   \S'    \" SS9r\ " SS9\!S\\\4   S\4S j5       5       r"\#S\S\4S j5       r$\S\\\4   4S j5       r%  S(S\&\'   S \\&\      S!\\(   S"\S\)4
S# jjr*  S(S\&\'   S \\&\      S!\\(   S"\S\+\,   4
S$ jjr-S\&\'   S"\S\4S% jr.\S\4S& j5       r/S'r0g))ChatHunyuanY   zwTencent Hunyuan chat models API by Tencent.

For more information, see https://cloud.tencent.com/document/product/1729
r"   c                     SSSS.$ )NHUNYUAN_APP_IDHUNYUAN_SECRET_IDHUNYUAN_SECRET_KEY)hunyuan_app_idhunyuan_secret_idhunyuan_secret_key selfs    r.   
lc_secretsChatHunyuan.lc_secrets_   s     /!4"6
 	
r0   c                     g)NTrS   rT   s    r.   lc_serializableChatHunyuan.lc_serializableg   s    r0   NrP   rQ   rR   F	streaming<   request_timeoutg      ?temperaturetop_pzhunyuan-litemodelstream_moderationTenable_enhancement)default_factorymodel_kwargs)populate_by_namebefore)modevaluesc           
      p   [        U 5      nUR                  S0 5      n[        U5       HP  nXC;   a  [        SU S35      eXB;  d  M  [        R                  SU SU SU S35        UR                  U5      X4'   MR     UR                  UR                  5       5      nU(       a  [        SU S	35      eX1S'   U$ )
z>Build extra kwargs from additional params that were passed in.rd   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   r6   list
ValueErrorloggerwarningpopintersectionkeys)clsrh   all_required_field_namesextra
field_nameinvalid_model_kwargss         r.   build_extraChatHunyuan.build_extra   s     $<C#@ 

>2.v,J" 6*5E!FGG9!* .L !))34JN
 %+JJz$:! '  8DDUZZ\R23 4S T 
 "'~r0   c                 x    [        USS5      US'   [        USS5      US'   [        [        USS5      5      US'   U$ )NrP   rM   rQ   rN   rR   rO   )r   r   )rq   rh   s     r.   validate_environment ChatHunyuan.validate_environment   s`    #7$
 
 ';'
"#
 (= $$(
#$ r0   c                     U R                   U R                  U R                  U R                  U R                  U R
                  S.n0 UEU R                  E$ )z3Get the default parameters for calling Hunyuan API.)TemperatureTopPModelStreamStreamModerationEnableEnhancement)r^   r_   r`   r[   ra   rb   rd   )rU   normal_paramss     r.   _default_paramsChatHunyuan._default_params   sS      ++JJZZnn $ 6 6!%!8!8
 6-54#4#455r0   messagesstoprun_managerkwargsc                     U R                   (       a   U R                  " SXUS.UD6n[        U5      $ U R                  " U40 UD6n[	        [
        R                  " UR                  5       5      5      $ )N)r   r   r   rS   )r[   _streamr   _chatrH   jsonloadsto_json_string)rU   r   r   r   r   stream_iterress          r.   	_generateChatHunyuan._generate   sh     >>,, !+IOK (44jj,V,"4::c.@.@.B#CDDr0   c              +     #    U R                   " U40 UD6n[        nU H  nUR                  SS5      n[        U5      S:X  a  M&  [        R
                  " U5      nSU;   a  [        SU 35      eUS    Hc  n	[        U	S   U5      nUR                  SS5      Ul        UR                  n[        US	9n
U(       a  UR                  UR                  U
S
9  U
v   Me     M     g 7f)Ndatar3   r   errorz!Error from Hunyuan api response: r=   Deltar?   r@   )chunk)r   r   r6   lenr   r   rk   r:   rE   	__class__r   on_llm_new_tokenr+   )rU   r   r   r   r   r   default_chunk_classr   r;   rG   cg_chunks              r.   r   ChatHunyuan._stream   s      jj,V,,EIIfb)E5zQzz%(H(" #DXJ!OPP"9-77O%8 $<<b1&+oo#.u=00h0O . s   CCc                    U R                   c  [        S5      e SSKJn  SSKJnJn  0 U R                  EUEnUR                  U R                  [        U R                   R                  5       5      5      nUR                  US5      nUR                  5       n	SU V
s/ sH  n
[        U
5      PM     sn
0UEnU	R!                  ["        R$                  " U5      5        UR'                  U	5      nU$ ! [         a    [        S5      ef = fs  sn
f )NzHunyuan secret key is not set.r   )
credential)hunyuan_clientmodelszkCould not import tencentcloud python package. Please install it with `pip install tencentcloud-sdk-python`.r3   Messages)rR   rk   tencentcloud.commonr   tencentcloud.hunyuan.v20230901r   r   ImportErrorr   
CredentialrQ   strget_secret_valueHunyuanClientChatCompletionsRequestr/   from_json_stringr   dumpsChatCompletions)rU   r   r   r   r   r   
parameterscredclientreqmparamsresps                r.   r   ChatHunyuan._chat   s   ""*=>>	6M 8,,77
$$""C(?(?(P(P(R$S
  --dB7++-hGh1!4hG

 	TZZ/0%%c*%  	P 	 Hs   C. D.Dc                     g)Nzhunyuan-chatrS   rT   s    r.   	_llm_typeChatHunyuan._llm_type  s    r0   rS   )NN)1__name__
__module____qualname____firstlineno____doc__propertyr   r   rV   boolrY   rP   r   int__annotations__rQ   rR   r   r[   r]   r^   floatr_   r`   ra   rb   r   dictrd   r   r   model_configr    classmethodrv   r   ry   r   r   r   r
   r   r   r   r   r   r   r   __static_attributes__rS   r0   r.   rJ   rJ   Y   si   
 
DcN 
 
    %)NHSM('+x}+.2+2It/OSEK+E5'E3
 $t#F##4#(#>L$sCx.>QL (#c3h C   $2 $ 4  ( 
6c3h 
6 
6 %):>	E{#E tCy!E 67	E
 E 
E& %):>	{# tCy! 67	
  
%	&:d;/ 3 3 6 3  r0   rJ   )1r   loggingtypingr   r   r   r   r   r   r	   langchain_core.callbacksr
   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr   r   r   r   pydanticr   r   r   r    	getLoggerr   rl   r   r/   r   r7   r:   rH   rJ   rS   r0   r.   <module>r      s      E E E =
 
 
 S R  C B			8	$k d  	@GCH$5 	@+ 	@.38.-12B-C.. 	F'#s("3 	F
 	F- r0   