§
    æ˜ºhc'  ã                   óš  — 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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
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!dee-ef         de0de-fd„Z1 G d„ de¦  «        Z2dS )é    N)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚType)Ú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://api.baichuan-ai.com/v1Ú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     úp/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/baichuan.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_messager1   2   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$   r/   )r0   r   r   r   )r+   r2   r!   r"   s       r(   Ú_convert_delta_to_message_chunkr4   <   s¯   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐ.Ñ.Ô.Ð.Ø	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-r*   Ú
secret_keyÚpayloadÚ	timestampc                 ó  — |                       ¦   «         t          j        |¦  «        z   t          |¦  «        z   }t	          j        ¦   «         }|                     |                     d¦  «        ¦  «         |                     ¦   «         S )Nzutf-8)	Úget_secret_valueÚjsonÚdumpsÚstrÚhashlibÚmd5ÚupdateÚencodeÚ	hexdigest)r5   r6   r7   Ú	input_strr>   s        r(   Ú
_signaturerC   M   sf   € Ø×+Ò+Ñ-Ô-µ´
¸7Ñ0CÔ0CÑCÅcÈ)ÁnÄnÑT€IÝ
Œ+‰-Œ-€CØ‡J‚Jˆy×Ò Ñ(Ô(Ñ)Ô)Ð)Ø�=Š=‰?Œ?Ðr*   c                   ó2  — 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d<   	 dZeed<   	 dZ	 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<   	  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-d'e.eef         de&fd(„Z/edefd)„¦   «         Z0dS )+ÚChatBaichuanzŠBaichuan chat models API by Baichuan Intelligent Technology.

    For more information, see https://platform.baichuan-ai.com/docs/api
    r   c                 ó   — dddœS )NÚBAICHUAN_API_KEYÚBAICHUAN_SECRET_KEY)Úbaichuan_api_keyÚbaichuan_secret_key© ©Úselfs    r(   Ú
lc_secretszChatBaichuan.lc_secretsZ   s   € ð !3Ø#8ð
ð 
ð 	
r*   c                 ó   — dS )NTrK   rL   s    r(   Úlc_serializablezChatBaichuan.lc_serializablea   s   € àˆtr*   )ÚdefaultÚbaichuan_api_baseNrI   rJ   FÚ	streamingé<   Úrequest_timeoutzBaichuan2-53Bg333333Ó?Útemperatureé   Útop_kg333333ë?Útop_pÚwith_search_enhance)Údefault_factoryÚmodel_kwargsc                   ó   — e Zd ZdZdZdS )úChatBaichuan.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úallow_population_by_field_namerK   r*   r(   ÚConfigr^   }   s   € € € € € Ø5Ð5à)-Ð&Ð&Ð&r*   rd   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   r0   ÚlistÚ
ValueErrorÚloggerÚwarningÚpopÚintersectionÚkeys)Úclsrf   Úall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         r(   Úbuild_extrazChatBaichuan.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          t          |dd¦  «        ¦  «        |d<   t          t          |dd¦  «        ¦  «        |d<   |S )NrR   ÚBAICHUAN_API_BASErI   rG   rJ   rH   )r   ÚDEFAULT_API_BASEr   )ro   rf   s     r(   Úvalidate_environmentz!ChatBaichuan.validate_environmentœ   s„   € å&:ØØØÝñ	'
ô '
ˆÐ"Ñ#õ &;Ý ØØ"Ø"ñô ñ&
ô &
ˆÐ!Ñ"õ )>Ý ØØ%Ø%ñô ñ)
ô )
ˆÐ$Ñ%ð ˆr*   c                 óZ   — | j         | j        | j        | j        | j        dœ}i |¥| j        ¥S )z4Get the default parameters for calling Baichuan API.)ÚmodelrV   rY   rX   rZ   )rz   rV   rY   rX   rZ   r\   )rM   Únormal_paramss     r(   Ú_default_paramszChatBaichuan._default_paramsµ   s@   € ð ”ZØÔ+Ø”ZØ”ZØ#'Ô#;ð
ð 
ˆð 6�-Ð5 4Ô#4Ð5Ð5r*   ÚmessagesÚstopÚrun_managerÚkwargsc                 ó  — | j         r  | j        d|||dœ|¤Ž}t          |¦  «        S  | j        |fi |¤Ž}|                     ¦   «         }|                     d¦  «        dk    rt          d|› �¦  «        ‚|                      |¦  «        S )N)r}   r~   r   Úcoder   ú"Error from Baichuan api response: rK   )rS   Ú_streamr   Ú_chatr:   r0   ri   Ú_create_chat_result)rM   r}   r~   r   r€   Ústream_iterÚresÚresponses           r(   Ú	_generatezChatBaichuan._generateÂ   s²   € ð Œ>ð 	5Ø&˜$œ,ð Ø!¨¸+ðð ØIOðð ˆKõ (¨Ñ4Ô4Ð4àˆdŒj˜Ð,Ð, VÐ,Ð,ˆà—8’8‘:”:ˆà�<Š<˜ÑÔ 1Ò$Ð$ÝÐLÀ(ÐLÐLÑMÔMÐMà×'Ò'¨Ñ1Ô1Ð1r*   c              +   óÄ  K  —  | j         |fi |¤Ž}t          }|                     ¦   «         D ]³}t          j        |¦  «        }|                     d¦  «        dk    rt          d|› �¦  «        ‚|                     d¦  «        }	|	                     d¦  «        D ]G}
t          |
|¦  «        }|j        }t          |¬¦  «        V — |r| 
                    |j        ¦  «         ŒHŒ´d S )Nr‚   r   rƒ   Údatar}   ©r   )r…   r   Ú
iter_linesr:   Úloadsr0   ri   r4   Ú	__class__r   Úon_llm_new_tokenr"   )rM   r}   r~   r   r€   rˆ   Údefault_chunk_classÚchunkr‰   rŒ   Úms              r(   r„   zChatBaichuan._streamØ   s  è è € ð ˆdŒj˜Ð,Ð, VÐ,Ð,ˆå,ÐØ—^’^Ñ%Ô%ð 	@ð 	@ˆEÝ”z %Ñ(Ô(ˆHØ�|Š|˜FÑ#Ô# qÒ(Ð(Ý Ð!PÀhÐ!PÐ!PÑQÔQÐQà—<’< Ñ'Ô'ˆDØ—X’X˜jÑ)Ô)ð @ð @�Ý7¸Ð;NÑOÔO�Ø&+¤oÐ#Ý)°%Ð8Ñ8Ô8Ð8Ð8Ð8Øð @Ø×0Ò0°´Ñ?Ô?Ð?øð@ð	@ð 	@r*   c                 ó  — | j         €t          d¦  «        ‚i | j        ¥|¥}|                     d¦  «        }|                     di ¦  «        }|d„ |D ¦   «         |dœ}t	          t          j        ¦   «         ¦  «        }| j        }| j        r|› d�}|› d�}d}	| j        r| j         	                    ¦   «         }	t          j        || j        d	d
|	› �t          |¦  «        t          | j         ||¬¦  «        ddœ|¥|| j        ¬¦  «        }
|
S )NzBaichuan secret key is not set.rz   Úheadersc                 ó,   — g | ]}t          |¦  «        ‘ŒS rK   )r)   )Ú.0r”   s     r(   ú
<listcomp>z&ChatBaichuan._chat.<locals>.<listcomp>ú   s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGr*   )rz   r}   Ú
parametersz/streamz/chatr.   zapplication/jsonzBearer )r5   r6   r7   ÚMD5)zContent-TypeÚAuthorizationzX-BC-TimestampzX-BC-SignaturezX-BC-Sign-Algo)ÚurlÚtimeoutr–   r:   Ústream)rJ   ri   r|   rl   ÚintÚtimerR   rS   rI   r9   ÚrequestsÚpostrU   r<   rC   )rM   r}   r€   rš   rz   r–   r6   r7   r�   Úapi_keyrˆ   s              r(   r…   zChatBaichuan._chatï   sT  € ØÔ#Ð+ÝÐ>Ñ?Ô?Ð?à7˜Ô,Ð7°Ð7ˆ
à—’˜wÑ'Ô'ˆØ—.’. ¨BÑ/Ô/ˆð ØGÐG¸hÐGÑGÔGØ$ð
ð 
ˆõ �œ	™œÑ$Ô$ˆ	àÔ$ˆØŒ>ð 	"Ø�/�/�/ˆCØˆmˆmˆmˆàˆØÔ ð 	?ØÔ+×<Ò<Ñ>Ô>ˆGåŒmØØÔ(à 2Ø!4¨7Ð!4Ð!4Ý"% i¡.¤.Ý",Ø#Ô7Ø#Ø'ð#ñ #ô #ð
 #(ðð ð ðð Ø”>ð!
ñ 
ô 
ˆð$ ˆ
r*   r‰   c                 óÖ   — g }|d         d         D ]6}t          |¦  «        }t          |¬¦  «        }|                     |¦  «         Œ7|d         }|| j        dœ}t	          ||¬¦  «        S )NrŒ   r}   r�   Úusage)Útoken_usagerz   )ÚgenerationsÚ
llm_output)r1   r   Úappendrz   r   )rM   r‰   r¨   r”   r   Úgenr§   r©   s           r(   r†   z ChatBaichuan._create_chat_result  s€   € ØˆØ˜&Ô! *Ô-ð 	$ð 	$ˆAÝ.¨qÑ1Ô1ˆGÝ ¨Ð1Ñ1Ô1ˆCØ×Ò˜sÑ#Ô#Ð#Ð#à˜wÔ'ˆØ%0¸4¼:ÐFÐFˆ
Ý k¸jÐIÑIÔIÐIr*   c                 ó   — dS )Nzbaichuan-chatrK   rL   s    r(   Ú	_llm_typezChatBaichuan._llm_type(  s   € àˆr*   )NN)1r_   r`   ra   rb   Úpropertyr   r<   rN   ÚboolrP   r   rw   rR   Ú__annotations__rI   r   r   rJ   rS   rU   r    rz   rV   ÚfloatrX   rY   rZ   Údictr\   r   rd   r   rt   rx   r|   r   r   r
   r   rŠ   r   r   r„   r¢   ÚResponser…   r   r†   r­   rK   r*   r(   rE   rE   T   sª  € € € € € € ðð ð
 ð
˜D  c œNð 
ð 
ð 
ñ „Xð
ð ð ð ð ð ñ „Xðð #˜UÐ+;Ð<Ñ<Ô<Ð�sÐ<Ð<Ñ<Ø#Ø,0Ð�h˜yÔ)Ð0Ð0Ñ0ØØ/3Ð˜ )Ô,Ð3Ð3Ñ3ØØ€IˆtÐÐÑØ/Ø€O�SÐÐÑØ0à€EØ=Ø€K�ÐÐÑØ+Ø€Eˆ3€N€N�NØ.Ø€Eˆ5ÐÐÑØ'Ø %Ð˜Ð%Ð%Ñ%Ø:Ø#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>ØQð.ð .ð .ð .ð .ñ .ô .ð .ð
 €^˜ÐÑÔð  c¨3 h¤ð °D¸¸c¸´Nð ð ð ñ Ôðð2 €^ÑÔð¨$ð °4ð ð ð ñ Ôðð0 ð
6  c¨3 h¤ð 
6ð 
6ð 
6ñ „Xð
6ð %)Ø:>ð	2ð 2à�{Ô#ð2ð �t˜C”yÔ!ð2ð Ð6Ô7ð	2ð
 ð2ð 
ð2ð 2ð 2ð 2ð2 %)Ø:>ð	@ð @à�{Ô#ð@ð �t˜C”yÔ!ð@ð Ð6Ô7ð	@ð
 ð@ð 
Ð%Ô	&ð@ð @ð @ð @ð.,˜d ;Ô/ð ,¸3ð ,À8ÔCTð ,ð ,ð ,ð ,ð\	J¨G°C¸°HÔ,=ð 	JÀ*ð 	Jð 	Jð 	Jð 	Jð ð˜3ð ð ð ñ „Xðð ð r*   rE   )3r=   r:   Úloggingr¡   Útypingr   r   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   Úlangchain_core.outputsr   r   r   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.utilsr   r   r   Ú	getLoggerr_   rj   rw   r²   r)   r<   r1   r4   r    rC   rE   rK   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Ñ	$Ô	$€à3Ð ð kð °dð ð ð ð ð@ G¨C°¨HÔ$5ð @¸+ð @ð @ð @ð @ð.Ø�3˜�8Ôð.Ø-1Ð2BÔ-Cð.àð.ð .ð .ð .ð"˜9ð ¨t°C¸°H¬~ð È#ð ÐRUð ð ð ð ðVð Vð Vð Vð V�=ñ Vô Vð Vð Vð Vr*   