
    7|hD&                     f   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z&  ejN                  e(      Z)d	ed
e*fdZ+dee,ef   d
efdZ-dee,ef   de	e   d
efdZ.dee,ef   d
efdZ/ G d de      Z0y)    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                 :   t        | t              r| j                  | j                  d}|S t        | t              rd| j                  d}|S t        | t
              rd| j                  d}|S t        | t              rd| j                  d}|S t        d|        )N)RoleContentsystemuser	assistantzGot unknown type )
isinstancer   rolecontentr   r   r   	TypeError)r!   message_dicts     f/var/www/html/test/engine/venv/lib/python3.12/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                     | d   }|dk(  r t        | j                  dd      xs d      S |dk(  rt        | d         S |dk(  r t        | j                  dd      xs d      S t	        | d   |      S )	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                     | j                  d      }| j                  d      xs d}|dk(  s	|t        k(  rt        |      S |dk(  s	|t        k(  rt        |      S |s	|t        k(  rt        ||      S  ||      S )Nr$   r%   r3   r'   r4   r(   r5   )r6   r   r   r   )r1   r8   r*   r+   s       r.   _convert_delta_to_message_chunkr:   =   s|     99VDii	"(bGv~*;; 11		 ?g..	"22d;;W--r0   responsec                     g }| d   D ]B  }t        |d         }| j                  dd      |_        |j                  t	        |             D | d   }d|i}t        ||      S )	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   sr    K9% <*6)+<=\\$+
>':;<
 7#K-J+*EEr0   c                   T   e Zd ZU dZedeeef   fd       Zedefd       Z	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d<   	 dZeed<   	 dZeed<   	 dZeed<   	 d	Zeed<   	 dZeed<   	  ee      Zeeef   ed<   	  ed      Z ed      e deeef   defd              Z!e"dedefd       Z#edeeef   fd       Z$	 	 d&de%e&   dee%e      d ee'   d!ede(f
d"Z)	 	 d&de%e&   dee%e      d ee'   d!ede*e+   f
d#Z,de%e&   d!edefd$Z-edefd%       Z.y)'ChatHunyuanzTencent Hunyuan chat models API by Tencent.

    For more information, see https://cloud.tencent.com/document/product/1729
    r"   c                     ddddS )NHUNYUAN_APP_IDHUNYUAN_SECRET_IDHUNYUAN_SECRET_KEY)hunyuan_app_idhunyuan_secret_idhunyuan_secret_key selfs    r.   
lc_secretszChatHunyuan.lc_secrets_   s     /!4"6
 	
r0   c                      y)NTrR   rS   s    r.   lc_serializablezChatHunyuan.lc_serializableg   s    r0   NrO   rP   rQ   F	streaming<   request_timeoutg      ?temperaturetop_pzhunyuan-litemodelstream_moderationTenable_enhancement)default_factorymodel_kwargs)populate_by_namebefore)modevaluesc           
      `   t        |       }|j                  di       }t        |      D ]M  }||v rt        d| d      ||vst        j                  d| d| d| d       |j                  |      ||<   O |j                  |j                               }|rt        d| d	      ||d<   |S )
z>Build extra kwargs from additional params that were passed in.ra   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)clsre   all_required_field_namesextra
field_nameinvalid_model_kwargss         r.   build_extrazChatHunyuan.build_extra   s     $<C#@ 

>2.v, 		;JU" 6*5E!FGG!99!* .L !))34JN
 %+JJz$:j!		;  8DDUZZ\R23 4S T 
 "'~r0   c                 x    t        |dd      |d<   t        |dd      |d<   t        t        |dd            |d<   |S )NrO   rL   rP   rM   rQ   rN   )r   r   )rn   re   s     r.   validate_environmentz ChatHunyuan.validate_environment   s`    #7$
 
 ';'
"#
 (= $$(
#$ r0   c                     | j                   | j                  | j                  | j                  | j                  | j
                  d}i || j                  S )z3Get the default parameters for calling Hunyuan API.)TemperatureTopPModelStreamStreamModerationEnableEnhancement)r[   r\   r]   rX   r^   r_   ra   )rT   normal_paramss     r.   _default_paramszChatHunyuan._default_params   sS      ++JJZZnn $ 6 6!%!8!8
 6-54#4#455r0   messagesstoprun_managerkwargsc                     | j                   r! | j                  d|||d|}t        |      S  | j                  |fi |}t	        t        j                  |j                                     S )N)r   r   r   rR   )rX   _streamr   _chatrH   jsonloadsto_json_string)rT   r   r   r   r   stream_iterress          r.   	_generatezChatHunyuan._generate   sn     >>&$,, !+IOK (44djj,V,"4::c.@.@.B#CDDr0   c              +     K    | j                   |fi |}t        }|D ]  }|j                  dd      }t        |      dk(  r$t	        j
                  |      }d|v rt        d|       |d   D ]c  }	t        |	d   |      }|j                  dd      |_        |j                  }t        |	      }
|r|j                  |j                  |

       |
 e  y w)Ndatar3   r   errorz!Error from Hunyuan api response: r=   Deltar?   r@   )chunk)r   r   r6   lenr   r   rh   r:   rE   	__class__r   on_llm_new_tokenr+   )rT   r   r   r   r   r   default_chunk_classr   r;   rG   cg_chunks              r.   r   zChatHunyuan._stream   s      djj,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                    | j                   t        d      	 ddlm} ddlm}m} i | j                  |}|j                  | j                  t        | j                   j                                     }|j                  |d      }|j                         }	d|D 
cg c]  }
t        |
       c}
i|}|	j!                  t#        j$                  |             |j'                  |	      }|S # t        $ r t        d      w xY wc c}
w )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)rQ   rh   tencentcloud.commonr   tencentcloud.hunyuan.v20230901r   r   ImportErrorr~   
CredentialrP   strget_secret_valueHunyuanClientChatCompletionsRequestr/   from_json_stringr   dumpsChatCompletions)rT   r   r   r   r   r   
parameterscredclientreqmparamsresps                r.   r   zChatHunyuan._chat   s	   ""*=>>	6M 8,,77
$$""C(?(?(P(P(R$S
  --dB7++-hG1!4G

 	TZZ/0%%c*%  	P 	 Hs   C* D*C?c                      y)Nzhunyuan-chatrR   rS   s    r.   	_llm_typezChatHunyuan._llm_type  s    r0   )NN)/__name__
__module____qualname____doc__propertyr   r   rU   boolrW   rO   r   int__annotations__rP   rQ   r   rX   rZ   r[   floatr\   r]   r^   r_   r   dictra   r   r   model_configr    classmethodrs   r   ru   r~   r   r   r
   r   r   r   r   r   r   r   rR   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   ri   r   r/   r   r7   r:   rH   rJ   rR   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   