
    NgD&                        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j'        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          Z0dS )    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                 4   t          | t                    r| j        | j        d}nrt          | t                    rd| j        d}nRt          | t
                    rd| j        d}n2t          | t                    rd| j        d}nt          d|            |S )N)RoleContentsystemuser	assistantzGot unknown type )
isinstancer   rolecontentr   r   r   	TypeError)r!   message_dicts     c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/hunyuan.py_convert_message_to_dictr/   !   s    ';'' 	7 'II	G]	+	+ 7 (W_EE	G\	*	* 7 &7?CC	GY	'	' 7 +HH5G55666    _dictc                 (   | d         }|dk    r&t          |                     dd          pd          S |dk    rt          | d                   S |dk    r&t          |                     dd          p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   s    =DxUYYy"%=%=%CDDDD	E)$45555			9b!9!9!?R@@@@5#3$????r0   default_classc                 2   |                      d          }|                      d          p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11			 ? ?g....	 ."222d;;;;}W----r0   responsec                     g }| d         D ]U}t          |d                   }|                     dd          |_        |                    t	          |                     V| 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   s    K9% < <*6)+<==\\$++
>':::;;;;7#K-J+*EEEEr0   c                      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.dS )'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                     dS )NTrR   rS   s    r.   lc_serializablezChatHunyuan.lc_serializableg   s    tr0   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          |           }|                    di           }t          |          D ]Y}||v rt          d| d          ||vr<t                              d| d| d| d           |                    |          ||<   Z|                    |                                          }|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   s4    $<C#@#@ 

>2..v,, 		; 		;JU"" !F*!F!F!FGGG!999N* N NN N)3N N N  
 %+JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~r0   c                     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   st    #7$
 $
 
 ';'
 '
"#
 (= $$ (
 (
#$ r0   c                 f    | 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   sF      +JZn $ 6!%!8
 
 6-54#455r0   messagesstoprun_managerkwargsc                     | j         r  | j        d|||d|}t          |          S  | j        |fi |}t	          t          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   s     > 	5&$, !+ IO K (444dj,,V,,"4:c.@.@.B.B#C#CDDDr0   c              +     K    | j         |fi |}t          }|D ]}|                    dd          }t          |          dk    r,t	          j        |          }d|v rt          d|           |d         D ]l}	t          |	d         |          }|                    dd          |_        |j	        }t          |	          }
|r|                    |j        |

           |
V  md S )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&      dj,,V,,, 	 	EIIfb))E5zzQz%((H("" !OX!O!OPPP"9- 	 	77O%8  $<<b11&+o#.u=== P00h0OOO		 	r0   c                    | j         t          d          	 ddlm} ddlm}m} n# t          $ r t          d          w xY wi | j        |}|	                    | j
        t          | j                                                             }|                    |d          }|                                }	dd |D             i|}
|	                    t!          j        |
                     |                    |	          }|S )	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   Messagesc                 ,    g | ]}t          |          S rR   )r/   ).0ms     r.   
<listcomp>z%ChatHunyuan._chat.<locals>.<listcomp>  s!    GGG1!44GGGr0   )rQ   rh   tencentcloud.commonr   tencentcloud.hunyuan.v20230901r   r   ImportErrorr~   
CredentialrP   strget_secret_valueHunyuanClientChatCompletionsRequestfrom_json_stringr   dumpsChatCompletions)rT   r   r   r   r   r   
parameterscredclientreqparamsresps               r.   r   zChatHunyuan._chat   sJ   "*=>>>	666666MMMMMMMMM 	 	 	P  	 8,77
$$"C(?(P(P(R(R$S$S
 
  --dB77++--GGhGGG

 	TZ//000%%c**s	   ' Ac                     dS )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   sf         
 
DcN 
 
 
 X
     X %)NHSM((('+x}+++.2+222It/OSEK+E5'E3
 $t###F####4#(5#>#>#>L$sCx.>>>Q:  L _(###c3h C    [ $#2 $ 4    X( 
6c3h 
6 
6 
6 X
6 %):>	E E{#E tCy!E 67	E
 E 
E E E E& %):>	 {# tCy! 67	
  
%	&   :d;/ 3 3    6 3    X  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 E E E E E E E E E E E E E E E = = = = = =       
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 S R R R R R R R R R            C B B B B B B B B B B B		8	$	$k d     	@GCH$5 	@+ 	@ 	@ 	@ 	@.38.-12B-C.. . . . 	F'#s("3 	F
 	F 	F 	F 	F    -     r0   