§
    æ˜ºh5)  ã                   óÚ  — d dl Z d dlZd dlZd dlZ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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 d dlm Z m!Z!m"Z" d dl#m$Z$m%Z%m&Z& d d	l'm(Z(m)Z)m*Z*  ej+        e,¦  «        Z-d
Z.dZ/dede0fd„Z1dee2ef         defd„Z3dee2ef         dee         defd„Z4de%de2dee2ef         de2fd„Z5dee2ef         de"fd„Z6 G d„ de¦  «        Z7dS )é    N)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚType)Úurlparse)ÚCallbackManagerForLLMRun)ÚBaseChatModelÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚHumanMessageÚHumanMessageChunk)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚFieldÚ	SecretStrÚroot_validator)Úconvert_to_secret_strÚget_from_dict_or_envÚget_pydantic_field_namesz!https://hunyuan.cloud.tencent.comz/hyllm/v1/chat/completionsÚ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   Ú	TypeError)r   Úmessage_dicts     úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/hunyuan.pyÚ_convert_message_to_dictr*   (   sŠ   € å�'�;Ñ'Ô'ð 7Ø '¤¸¼ÐIÐIˆˆÝ	�G�\Ñ	*Ô	*ð 7Ø &°7´?ÐCÐCˆˆÝ	�G�YÑ	'Ô	'ð 7Ø +¸¼ÐHÐHˆˆåÐ5¨GÐ5Ð5Ñ6Ô6Ð6àÐó    Ú_dictc                 óÐ   — | d         }|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"   s     r)   Ú_convert_dict_to_messager2   6   sq   € Ø�Œ=€DØˆv‚~€~Ý E¨)Ô$4Ð5Ñ5Ô5Ð5Ø	�Ò	Ð	Ý §¢¨9°bÑ!9Ô!9Ð!?¸RÐ@Ñ@Ô@Ð@å 5¨Ô#3¸$Ð?Ñ?Ô?Ð?r+   Ú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#   r/   r$   r.   r%   r0   )r1   r   r   r   )r,   r3   r"   r#   s       r)   Ú_convert_delta_to_message_chunkr5   @   s¯   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐ.Ñ.Ô.Ð.Ø	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-r+   Ú
secret_keyÚurlÚpayloadc                 óÄ  — t          |                     ¦   «         ¦  «        }t          |¦  «        }|j        |j        z   dz   }|D ]€}||         }t          |t          ¦  «        st          |t          ¦  «        rt          j	        |d¬¦  «        }nt          |t          ¦  «        rd|z  }||z   dz   t          |¦  «        z   dz   }Œ�|d d…         }t          j        |                      ¦   «                              d¦  «        |                     d¦  «        t           j        ¬	¦  «                             ¦   «         }t'          j        |¦  «                             d¦  «        S )
Nú?)ú,ú:)Ú
separatorsz%gú=ú&éÿÿÿÿzutf-8)ÚkeyÚmsgÚ	digestmod)ÚsortedÚkeysr
   ÚnetlocÚpathr&   ÚlistÚdictÚjsonÚdumpsÚfloatÚstrÚhmacÚnewÚget_secret_valueÚencodeÚhashlibÚsha1ÚdigestÚbase64Ú	b64encodeÚdecode)	r6   r7   r8   Úsorted_keysÚurl_infoÚsign_strrA   ÚvalueÚhmacstrs	            r)   Ú
_signaturer]   R   sD  € Ý˜Ÿš™œÑ(Ô(€Kå˜‰}Œ}€HàŒ ¤Ñ.°Ñ4€Hàð ;ð ;ˆØ˜”ˆå�e�TÑ"Ô"ð 	!¥j°½Ñ&=Ô&=ð 	!Ý”J˜u°Ð<Ñ<Ô<ˆEˆEÝ˜�uÑ%Ô%ð 	!Ø˜5‘LˆEà˜c‘> CÑ'­#¨e©*¬*Ñ4°sÑ:ˆˆà˜˜˜Œ}€HåŒhØ×'Ò'Ñ)Ô)×0Ò0°Ñ9Ô9Ø�OŠO˜GÑ$Ô$Ý”,ðñ ô ÷ ‚f�h„hð	 õ Ô˜GÑ$Ô$×+Ò+¨GÑ4Ô4Ð4r+   Úresponsec                 óÆ   — g }| d         D ]:}t          |d         ¦  «        }|                     t          |¬¦  «        ¦  «         Œ;| d         }d|i}t          ||¬¦  «        S )NÚchoicesÚmessages©r   ÚusageÚtoken_usage)ÚgenerationsÚ
llm_output)r2   Úappendr   r   )r^   re   Úchoicer   rd   rf   s         r)   Ú_create_chat_resultri   n   sv   € Ø€KØ˜9Ô%ð <ð <ˆÝ*¨6°*Ô+=Ñ>Ô>ˆØ×Ò�>°'Ð:Ñ:Ô:Ñ;Ô;Ð;Ð;à˜7Ô#€KØ Ð-€JÝ +¸*ÐEÑEÔEÐEr+   c                   ó$  — e Zd ZU dZedeeef         fd„¦   «         Zedefd„¦   «         Z	 e
e¬¦  «        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d<   	 dZeed<   	 dZee         ed<   	 dZeed<   	 dZeed<   	  e
e¬¦  «        Zeeef         ed<   	  G d„ d¦  «        Z ed¬¦  «        deeef         deeef         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*j+        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ð
ð 
ð 	
r+   c                 ó   — dS )NTrs   rt   s    r)   Úlc_serializablezChatHunyuan.lc_serializable‡   s   € àˆtr+   )ÚdefaultÚhunyuan_api_baseNrp   rq   rr   FÚ	streamingé<   Úrequest_timeoutÚquery_idg      ð?ÚtemperatureÚtop_p)Údefault_factoryÚmodel_kwargsc                   ó   — e Zd ZdZdZdS )úChatHunyuan.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úallow_population_by_field_namers   r+   r)   ÚConfigr„   ¢   s   € € € € € Ø5Ð5à)-Ð&Ð&Ð&r+   rŠ   T)ÚpreÚ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.r‚   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   r1   rH   Ú
ValueErrorÚloggerÚwarningÚpopÚintersectionrE   )ÚclsrŒ   Ú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ñô ð ð
 %+§J¢J¨zÑ$:Ô$:��jÑ!øà7×DÒDÀUÇZÂZÁ\Ä\ÑRÔRÐØð 	ÝðTÐ2ð Tð Tð Tñô ð ð
 "'ˆˆ~ÑØˆr+   c                 óÌ   — t          |ddt          ¦  «        |d<   t          |dd¦  «        |d<   t          |dd¦  «        |d<   t          t          |dd¦  «        ¦  «        |d<   |S )	Nrz   ÚHUNYUAN_API_BASErp   rm   rq   rn   rr   ro   )r   ÚDEFAULT_API_BASEr   )r“   rŒ   s     r)   Úvalidate_environmentz ChatHunyuan.validate_environmentÁ   s—   € å%9ØØØÝñ	&
ô &
ˆÐ!Ñ"õ $8ØØØñ$
ô $
ˆÐÑ õ
 ';ØØØñ'
ô '
ˆÐ"Ñ#õ
 (=Ý ØØ$Ø$ñô ñ(
ô (
ˆÐ#Ñ$ð ˆr+   c                 óp   — | j         | j        | j        | j        dœ}| j        �
| j        |d<   i |¥| j        ¥S )z3Get the default parameters for calling Hunyuan API.)Úapp_idÚ	secret_idr   r€   Nr~   )rp   rq   r   r€   r~   r‚   )ru   Únormal_paramss     r)   Ú_default_paramszChatHunyuan._default_paramsÝ   sP   € ð Ô)ØÔ/ØÔ+Ø”Zð	
ð 
ˆð Œ=Ð$Ø(,¬ˆM˜*Ñ%à5�-Ð5 4Ô#4Ð5Ð5r+   ra   ÚstopÚrun_managerÚkwargsc                 óÞ   — | j         r  | j        d|||dœ|¤Ž}t          |¦  «        S  | j        |fi |¤Ž}|                     ¦   «         }d|v rt          d|› �¦  «        ‚t          |¦  «        S )N)ra   r¢   r£   Úerrorú!Error from Hunyuan api response: rs   )r{   Ú_streamr   Ú_chatrJ   rŽ   ri   )ru   ra   r¢   r£   r¤   Ústream_iterÚresr^   s           r)   Ú	_generatezChatHunyuan._generateì   s    € ð Œ>ð 	5Ø&˜$œ,ð Ø!¨¸+ðð ØIOðð ˆKõ (¨Ñ4Ô4Ð4àˆdŒj˜Ð,Ð, VÐ,Ð,ˆà—8’8‘:”:ˆà�hÐÐÝÐKÀÐKÐKÑLÔLÐLå" 8Ñ,Ô,Ð,r+   c              +   ób  K  —  | j         |fi |¤Ž}t          }|                     ¦   «         D ]‚}t          j        |¦  «        }d|v rt          d|› �¦  «        ‚|d         D ]M}	t          |	d         |¦  «        }|j        }t          |¬¦  «        V — |r| 	                    |j
        ¦  «         ŒNŒƒd S )Nr¦   r§   r`   Údeltarb   )r©   r   Ú
iter_linesrJ   ÚloadsrŽ   r5   Ú	__class__r   Úon_llm_new_tokenr#   )
ru   ra   r¢   r£   r¤   r«   Údefault_chunk_classÚchunkr^   rh   s
             r)   r¨   zChatHunyuan._stream  sõ   è è € ð ˆdŒj˜Ð,Ð, VÐ,Ð,ˆå,ÐØ—^’^Ñ%Ô%ð 	@ð 	@ˆEÝ”z %Ñ(Ô(ˆHØ˜(Ð"Ð"Ý Ð!OÀXÐ!OÐ!OÑPÔPÐPà" 9Ô-ð @ð @�Ý7Ø˜7”OÐ%8ñô �ð ',¤oÐ#Ý)°%Ð8Ñ8Ô8Ð8Ð8Ð8Øð @Ø×0Ò0°´Ñ?Ô?Ð?øð@ð	@ð 	@r+   c           
      óâ  — | j         €t          d¦  «        ‚i | j        ¥|¥}|                     di ¦  «        }|                     dt	          t          j        ¦   «         ¦  «        ¦  «        }|                     d|dz   ¦  «        }||d„ |D ¦   «         dœ|¥}| j        rd|d	<   | j        t          z   }t          j
        || j        d
t          | j         ||¬¦  «        dœ|¥|| j        ¬¦  «        }	|	S )NzHunyuan secret key is not set.ÚheadersÚ	timestampÚexpiredi€Q c                 ó,   — g | ]}t          |¦  «        ‘ŒS rs   )r*   )Ú.0Úms     r)   ú
<listcomp>z%ChatHunyuan._chat.<locals>.<listcomp>'  s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGr+   )r·   r¸   ra   é   Ústreamzapplication/json)r6   r7   r8   )zContent-TypeÚAuthorization)r7   Útimeoutr¶   rJ   r¾   )rr   rŽ   r¡   r‘   ÚintÚtimer{   rz   ÚDEFAULT_PATHÚrequestsÚpostr}   r]   )
ru   ra   r¤   Ú
parametersr¶   r·   r¸   r8   r7   r«   s
             r)   r©   zChatHunyuan._chat  s-  € ØÔ"Ð*ÝÐ=Ñ>Ô>Ð>à7˜Ô,Ð7°Ð7ˆ
à—.’. ¨BÑ/Ô/ˆØ—N’N ;µµD´I±K´KÑ0@Ô0@ÑAÔAˆ	Ø—.’. ¨I¸Ñ,DÑEÔEˆð #ØØGÐG¸hÐGÑGÔGð
ð 
ð ð	
ˆð Œ>ð 	"Ø !ˆG�HÑàÔ#¥lÑ2ˆåŒmØØÔ(à 2Ý!+Ø#Ô6¸CÈð"ñ "ô "ðð ð
 ðð Ø”>ð
ñ 
ô 
ˆð ˆ
r+   c                 ó   — dS )Nzhunyuan-chatrs   rt   s    r)   Ú	_llm_typezChatHunyuan._llm_type?  s   € àˆ~r+   )NN).r…   r†   r‡   rˆ   Úpropertyr   rM   rv   Úboolrx   r   r›   rz   Ú__annotations__rp   r   rÁ   rq   rr   r   r{   r}   r~   r   rL   r€   rI   r‚   r   rŠ   r   r˜   rœ   r¡   r   r   r   r   r¬   r   r   r¨   rÄ   ÚResponser©   rÈ   rs   r+   r)   rk   rk   y   sz  € € € € € € ðð ð
 ð
˜D  c œNð 
ð 
ð 
ñ „Xð
ð ð ð ð ð ñ „Xðð "˜EÐ*:Ð;Ñ;Ô;Ð�cÐ;Ð;Ñ;Ø"Ø$(€N�H˜S”MÐ(Ð(Ñ(ØØ'+Ð�x ”}Ð+Ð+Ñ+ØØ.2Ð˜ Ô+Ð2Ð2Ñ2ØØ€IˆtÐÐÑØ/Ø€O�SÐÐÑØEà"€Hˆh�sŒmÐ"Ð"Ñ"Ø&Ø€K�ÐÐÑØ+Ø€Eˆ5ÐÐÑØ'à#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>ØQð.ð .ð .ð .ð .ñ .ô .ð .ð
 €^˜ÐÑÔð  c¨3 h¤ð °D¸¸c¸´Nð ð ð ñ Ôðð2 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð6 ð6  c¨3 h¤ð 6ð 6ð 6ñ „Xð6ð" %)Ø:>ð	-ð -à�{Ô#ð-ð �t˜C”yÔ!ð-ð Ð6Ô7ð	-ð
 ð-ð 
ð-ð -ð -ð -ð2 %)Ø:>ð	@ð @à�{Ô#ð@ð �t˜C”yÔ!ð@ð Ð6Ô7ð	@ð
 ð@ð 
Ð%Ô	&ð@ð @ð @ð @ð0#˜d ;Ô/ð #¸3ð #À8ÔCTð #ð #ð #ð #ðJ ð˜3ð ð ð ñ „Xðð ð r+   rk   )8rU   rR   rN   rJ   ÚloggingrÂ   Útypingr   r   r   r   r   r   r	   Úurllib.parser
   rÄ   Úlangchain_core.callbacksr   Ú*langchain_core.language_models.chat_modelsr   r   Úlangchain_core.messagesr   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.utilsr   r   r   Ú	getLoggerr…   r�   r›   rÃ   rI   r*   rM   r2   r5   r]   ri   rk   rs   r+   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Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€à6Ð Ø+€ð kð °dð ð ð ð ð@ G¨C°¨HÔ$5ð @¸+ð @ð @ð @ð @ð.Ø�3˜�8Ôð.Ø-1Ð2BÔ-Cð.àð.ð .ð .ð .ð$5˜9ð 5¨3ð 5¸¸cÀ3¸h¼ð 5ÈCð 5ð 5ð 5ð 5ð8F '¨#¨s¨(Ô"3ð F¸
ð Fð Fð Fð FðHð Hð Hð Hð H�-ñ Hô Hð Hð Hð Hr+   