§
    šŠtjõD  ã                  ój  — d Z ddlmZ ddlZddlmZmZ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 ddlmZ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 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.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5  ej6        e7¦  «        Z8 G d„ de¦  «        Z9d d„Z:d!d„Z;d"d„Z<d#d„Z=d$d„Z>dS )%zChatYuan2 wrapper.é    )ÚannotationsN)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptionalÚTupleÚTypeÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚFunctionMessageÚHumanMessageÚHumanMessageChunkÚSystemMessageÚSystemMessageChunk)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úget_from_dict_or_envÚget_pydantic_field_namesÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚmodel_validator)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialc                  óÖ  — e Zd ZU dZdZded<    edd¬¦  «        Zded<    edd	¬
¦  «        Zded<   	  ee	¬¦  «        Z
ded<   	  edd¬
¦  «        Zded<   	  edd¬
¦  «        Zded<   	  edd¬
¦  «        Zded<   	 dZded<   	 dZded<   	 dZd ed!<   	 d"Zd#ed$<   	 d%Zd&ed'<   	  ed(gd)¬
¦  «        Zd*ed+<   	 d,Zd ed-<   	 d.Zd&ed/<   	  ed¬0¦  «        ZedVd3„¦   «         ZedWd4„¦   «         Z ed5¬6¦  «        edXd8„¦   «         ¦   «         ZedYd:„¦   «         ZedWd;„¦   «         Z dZd=„Z!d[dA„Z"	 	 d\d]dG„Z#	 	 d\d^dI„Z$d_dK„Z%d`dN„Z&	 	 d\dadQ„Z'	 	 d\dbdR„Z(edcdT„¦   «         Z)edddU„¦   «         Z*dS )eÚ	ChatYuan2a;  `Yuan2.0` Chat models API.

    To use, you should have the ``openai-python`` package installed, if package
    not installed, using ```pip install openai``` to install it. The
    environment variable ``YUAN2_API_KEY`` set to your API key, if not set,
    everyone can access apis.

    Any parameters that are valid to be passed to the openai.create call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatYuan2

            chat = ChatYuan2()
    Nr   ÚclientT)ÚdefaultÚexcludeÚasync_clientÚyuan2Úmodel)r1   ÚaliasÚstrÚ
model_name)Údefault_factoryúDict[str, Any]Úmodel_kwargsÚEMPTYÚapi_keyzOptional[str]Úyuan2_api_keyzhttp://127.0.0.1:8000/v1Úbase_urlÚyuan2_api_baseÚtimeoutz+Optional[Union[float, Tuple[float, float]]]Úrequest_timeouté   ÚintÚmax_retriesFÚboolÚ	streamingzOptional[int]Ú
max_tokensg      ð?ÚfloatÚtemperaturegÍÌÌÌÌÌì?zOptional[float]Útop_pz<eod>Ústop_sequencesúOptional[List[str]]Ústopé@   Úrepeat_last_ngáz®Gáò?Úrepeat_penalty)Úpopulate_by_nameÚreturnúDict[str, str]c                ó
   — ddiS )Nr>   ÚYUAN2_API_KEY© ©Úselfs    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/yuan2.pyÚ
lc_secretszChatYuan2.lc_secrets�   s   € à Ð1Ð1ó    c                óN   — i }| j         r
| j         |d<   | j        r
| j        |d<   |S )Nr@   r>   )r@   r>   )rY   Ú
attributess     rZ   Úlc_attributeszChatYuan2.lc_attributes…   s>   € à%'ˆ
àÔð 	?Ø+/Ô+>ˆJÐ'Ñ(àÔð 	=Ø*.Ô*<ˆJ�Ñ'àÐr\   Ú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.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#   ÚgetÚlistÚ
ValueErrorÚloggerÚwarningÚpopÚintersectionÚkeys)Úclsrb   Úall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         rZ   Úbuild_extrazChatYuan2.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\   r   c                ón  — t          |dd¦  «        |d<   	 ddl}n# t          $ r t          d¦  «        ‚w xY w|d         |d         |d         |d         d	œ}|                     d
¦  «        s |j        di |¤Žj        j        |d
<   |                     d¦  «        s |j        di |¤Žj        j        |d<   |S )z?Validate that api key and python package exists in environment.r>   rV   r   NzTCould not import openai python package. Please install it with `pip install openai`.r@   rB   rE   )r=   r?   rA   rE   r0   r3   rW   )r"   ÚopenaiÚImportErrorrd   ÚOpenAIÚchatÚcompletionsÚAsyncOpenAI)rl   rb   rs   Úclient_paramss       rZ   Úvalidate_environmentzChatYuan2.validate_environment¬   s  € õ #7Ø�O _ñ#
ô #
ˆˆÑð	ØˆMˆMˆMˆMøåð 	ð 	ð 	Ýð?ñô ð ð	øøøð ˜oÔ.ØÐ/Ô0ØÐ/Ô0Ø! -Ô0ð	
ð 
ˆð �zŠz˜(Ñ#Ô#ð 	OØ,˜vœ}Ð=Ð=¨}Ð=Ð=ÔBÔNˆF�8ÑØ�zŠz˜.Ñ)Ô)ð 	Ø%7 VÔ%7ð &ð &Øð&ð &ä”;ð �>Ñ"ð ˆs   – ›5c                óŽ   — | j         | j        | j        | j        dœ| j        ¥}| j        �
| j        |d<   | j        �
| j        |d<   |S )z1Get the default parameters for calling yuan2 API.)r5   ÚstreamrJ   rK   NrH   rB   )r8   rG   rJ   rK   r;   rH   rB   )rY   Úparamss     rZ   Ú_default_paramszChatYuan2._default_paramsÌ   sd   € ð ”_Ø”nØÔ+Ø”Zð	
ð 
ð
 Ôð
ˆð Œ?Ð&Ø#'¤?ˆF�<Ñ ØÔÐ+Ø(,Ô(<ˆFÐ$Ñ%Øˆr\   Úkwargsc                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.r   r   rS   c                 ó(   •—  ‰j         j        di | ¤ŽS ©NrW   )r0   Úcreate)r   rY   s    €rZ   Ú_completion_with_retryz?ChatYuan2.completion_with_retry.<locals>._completion_with_retryà   s   ø€ à%�4”;Ô%Ð/Ð/¨Ð/Ð/Ð/r\   ©r   r   rS   r   rW   ©Ú_create_retry_decorator)rY   r   Úretry_decoratorr„   s   `   rZ   Úcompletion_with_retryzChatYuan2.completion_with_retryÜ   sQ   ø€ å1°$Ñ7Ô7ˆà	ð	0ð 	0ð 	0ð 	0ð 	0ñ 
Œð	0ð &Ð%Ð/Ð/¨Ð/Ð/Ð/r\   Úllm_outputsúList[Optional[dict]]Údictc                óü   — i }t                                dt          |¦  «        › d|› �¦  «         |D ]A}|€Œ|d         }|                     ¦   «         D ]\  }}||v r||xx         |z  cc<   Œ|||<   Œ ŒB|| j        dœS )Nztype(llm_outputs): z; llm_outputs: Útoken_usage©rŽ   r8   )rg   ÚdebugÚtypeÚitemsr8   )rY   rŠ   Úoverall_token_usageÚoutputrŽ   ÚkÚvs          rZ   Ú_combine_llm_outputszChatYuan2._combine_llm_outputsæ   sË   € Ø$&ÐÝ�ŠØQ¥$ {Ñ"3Ô"3ÐQÐQÀKÐQÐQñ	
ô 	
ð 	
ð "ð 		/ð 		/ˆFØˆ~àØ  Ô/ˆKØ#×)Ò)Ñ+Ô+ð /ð /‘��1ØÐ+Ð+Ð+Ø'¨Ð*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ð*à-.Ð'¨Ñ*Ð*ð	/ð
  3À$Ä/ÐRÐRÐRr\   ÚmessagesúList[BaseMessage]Úrun_managerú"Optional[CallbackManagerForLLMRun]úIterator[ChatGenerationChunk]c              +  óv  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥}t          } | j        dd|i|¤ŽD ]ü}t          |t          ¦  «        s|                     ¦   «         }t          |d         ¦  «        dk    rŒE|d         d         }	t          |	d         |¦  «        }|	                     d¦  «        }
|
�t	          |
¬¦  «        nd }|j	        }t          ||¬	¦  «        }|rLt          |j        t          ¦  «        r|j        nt          |j        ¦  «        }|                     ||¬
¦  «         |V — Œýd S )Nr|   Tr˜   Úchoicesr   ÚdeltaÚfinish_reason©r    ©ÚmessageÚgeneration_info©ÚchunkrW   )Ú_create_message_dictsr   r‰   Ú
isinstancerŒ   Ú
model_dumpÚlenÚ_convert_delta_to_message_chunkrd   Ú	__class__r    Úcontentr7   Úon_llm_new_token©rY   r˜   rN   rš   r   Úmessage_dictsr}   Údefault_chunk_classr¦   Úchoicer    r¤   Úcg_chunkÚtokens                 rZ   Ú_streamzChatYuan2._stream÷   sŒ  è è € ð !%× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆå6DÐØ/�TÔ/ÐQÐQ¸ÐQÈ&ÐQÐQð 	ð 	ˆEÝ˜e¥TÑ*Ô*ð +Ø×(Ò(Ñ*Ô*�Ý�5˜Ô#Ñ$Ô$¨Ò)Ð)ØØ˜9Ô% aÔ(ˆFÝ3Ø�w”Ð!4ñô ˆEð #ŸJšJ Ñ7Ô7ˆMà5BÐ5N• =Ð1Ñ1Ô1Ð1ÐTXð ð #(¤/ÐÝ*ØØ /ðñ ô ˆHð ð Dõ " %¤-µÑ5Ô5ð,�E”M�Må˜Uœ]Ñ+Ô+ð ð
 ×,Ò,¨U¸(Ð,ÑCÔCÐCØˆNˆNˆNˆNð3	ð 	r\   r!   c                óÖ   — | j         r  | j        d|||dœ|¤Ž}t          |¦  «        S |                      ||¦  «        \  }}i |¥|¥} | j        dd|i|¤Ž}|                      |¦  «        S ©N)r˜   rN   rš   r˜   rW   )rG   rµ   r   r§   r‰   Ú_create_chat_result©	rY   r˜   rN   rš   r   Ústream_iterr°   r}   Úresponses	            rZ   Ú	_generatezChatYuan2._generate  s¤   € ð Œ>ð 	5Ø&˜$œ,ð Ø!¨¸+ðð ØIOðð ˆKõ (¨Ñ4Ô4Ð4à $× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ%�FÐ%˜fÐ%ˆØ-�4Ô-ÐOÐO°}ÐOÈÐOÐOˆØ×'Ò'¨Ñ1Ô1Ð1r\   ú+Tuple[List[Dict[str, Any]], Dict[str, Any]]c                ó~   — t          | j        ¦  «        }|�d|v rt          d¦  «        ‚||d<   d„ |D ¦   «         }||fS )NrN   z2`stop` found in both the input and default params.c                ó,   — g | ]}t          |¦  «        ‘ŒS rW   )Ú_convert_message_to_dict)Ú.0Úms     rZ   ú
<listcomp>z3ChatYuan2._create_message_dicts.<locals>.<listcomp>7  s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGr\   )rŒ   Ú_invocation_paramsrf   )rY   r˜   rN   r}   r°   s        rZ   r§   zChatYuan2._create_message_dicts/  s[   € õ �dÔ-Ñ.Ô.ˆØÐØ˜ÐÐÝ Ð!UÑVÔVÐVØ!ˆF�6‰NØGÐG¸hÐGÑGÔGˆØ˜fÐ$Ð$r\   r»   úUnion[dict, BaseModel]c                óæ  — g }t                                dt          |¦  «        › d|› �¦  «         t          |t          ¦  «        s|                     ¦   «         }|d         D ]b}t          |d         ¦  «        }t	          |d         ¬¦  «        }d|v r|d         |d<   t          ||¬¦  «        }|                     |¦  «         Œc|                     d	i ¦  «        | j	        d
œ}t          ||¬¦  «        S )Nztype(response): z; response: rž   r£   r    r¡   Úlogprobsr¢   Úusager�   )ÚgenerationsÚ
llm_output)rg   r�   r‘   r¨   rŒ   Ú_convert_dict_to_messager   Úappendrd   r8   r!   )rY   r»   rÉ   Úresr£   r¤   ÚgenrÊ   s           rZ   r¸   zChatYuan2._create_chat_result:  s  € ØˆÝ�ŠÐN­¨X©¬ÐNÐNÀHÐNÐNÑOÔOÐOÝ˜(¥DÑ)Ô)ð 	'Ø—}’}‘”ˆHØ˜IÔ&ð 		$ð 		$ˆCÝ.¨s°9¬~Ñ>Ô>ˆGÝ"°°_Ô1EÐFÑFÔFˆOØ˜SÐ Ð Ø.1°*¬o� 
Ñ+Ý ØØ /ðñ ô ˆCð ×Ò˜sÑ#Ô#Ð#Ð#à#Ÿ<š<¨°Ñ4Ô4Øœ/ð
ð 
ˆ
õ  k¸jÐIÑIÔIÐIr\   ú'Optional[AsyncCallbackManagerForLLMRun]ú"AsyncIterator[ChatGenerationChunk]c               óž  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥}t          }t          | fd|i|¤Žƒ d {V —†2 3 d {V —†}t          |t          ¦  «        s|                     ¦   «         }t          |d         ¦  «        dk    rŒJ|d         d         }	t          |	d         |¦  «        }|	                     d¦  «        }
|
�t	          |
¬¦  «        nd }|j	        }t          ||¬	¦  «        }|rRt          |j        t          ¦  «        r|j        nt          |j        ¦  «        }|                     ||¬
¦  «        ƒ d {V —† |W V — �Œ
6 d S )Nr|   Tr˜   rž   r   rŸ   r    r¡   r¢   r¥   )r§   r   Úacompletion_with_retryr¨   rŒ   r©   rª   r«   rd   r¬   r    r­   r7   r®   r¯   s                 rZ   Ú_astreamzChatYuan2._astreamO  sè  è è € ð !%× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆå6DÐÝ!7Øð"
ð "
Ø(ð"
Ø,2ð"
ð "
ð 
ð 
ð 
ð 
ð 
ð 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	�%õ ˜e¥TÑ*Ô*ð +Ø×(Ò(Ñ*Ô*�Ý�5˜Ô#Ñ$Ô$¨Ò)Ð)ØØ˜9Ô% aÔ(ˆFÝ3Ø�w”Ð!4ñô ˆEð #ŸJšJ Ñ7Ô7ˆMà5BÐ5N• =Ð1Ñ1Ô1Ð1ÐTXð ð #(¤/ÐÝ*ØØ /ðñ ô ˆHð ð Jõ " %¤-µÑ5Ô5ð,�E”M�Må˜Uœ]Ñ+Ô+ð ð
 "×2Ò2°5ÀÐ2ÑIÔIÐIÐIÐIÐIÐIÐIÐIØˆNˆNˆNˆN‰Nð7
ð 
ð 
s   ÁEc              ‹  óò   K  — | j         r& | j        d|||dœ|¤Ž}t          |¦  «        ƒ d {V —†S |                      ||¦  «        \  }}i |¥|¥}t	          | fd|i|¤Žƒ d {V —†}|                      |¦  «        S r·   )rG   rÓ   r   r§   rÒ   r¸   r¹   s	            rZ   Ú
_ageneratezChatYuan2._ageneratew  sÊ   è è € ð Œ>ð 	<Ø'˜$œ-ð Ø!¨¸+ðð ØIOðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à $× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ%�FÐ%˜fÐ%ˆÝ/°ÐWÐW¸}ÐWÐPVÐWÐWÐWÐWÐWÐWÐWÐWˆØ×'Ò'¨Ñ1Ô1Ð1r\   úMapping[str, Any]c                ó*   — d| j         i}i |¥| j        ¥S )z,Get the parameters used to invoke the model.r5   )r8   r~   )rY   Úyuan2_credss     rZ   rÄ   zChatYuan2._invocation_params‰  s'   € ð �T”_ð'
ˆð 7�+Ð6 Ô!5Ð6Ð6r\   c                ó   — dS )zReturn type of chat model.z
chat-yuan2rW   rX   s    rZ   Ú	_llm_typezChatYuan2._llm_type‘  s	   € ð ˆ|r\   )rS   rT   )rS   r:   )rb   r:   rS   r   )rb   r   rS   r   r…   )rŠ   r‹   rS   rŒ   )NN)
r˜   r™   rN   rM   rš   r›   r   r   rS   rœ   )
r˜   r™   rN   rM   rš   r›   r   r   rS   r!   )r˜   r™   rN   rM   rS   r½   )r»   rÅ   rS   r!   )
r˜   r™   rN   rM   rš   rÏ   r   r   rS   rÐ   )
r˜   r™   rN   rM   rš   rÏ   r   r   rS   r!   )rS   rÖ   )rS   r7   )+Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   Ú__annotations__r'   r3   r8   rŒ   r;   r>   r@   rB   rE   rG   rH   rJ   rK   rN   rP   rQ   r&   Úmodel_configÚpropertyr[   r_   r(   Úclassmethodrq   r$   rz   r~   r‰   r—   rµ   r¼   r§   r¸   rÓ   rÕ   rÄ   rÚ   rW   r\   rZ   r/   r/   <   sÈ  € € € € € € ðð ð$ €FÐÐÐÑØ˜ d°DÐ9Ñ9Ô9€LÐ9Ð9Ð9Ñ9à�e G°7Ð;Ñ;Ô;€JÐ;Ð;Ð;Ñ;Øà#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVà#( 5°À	Ð#JÑ#JÔ#J€MÐJÐJÐJÑJØNà$) EØ*°*ð%ñ %ô %€Nð ð ð ñ ð KàCHÀ5Ø˜IðDñ Dô D€Oð ð ð ñ ð Pà€KÐÐÐÑØ<à€IÐÐÐÑØ/à $€JÐ$Ð$Ð$Ñ$Ø/à€KÐÐÐÑØ+à €EÐ Ð Ð Ñ Ø.à % ¨w¨iÐ?OÐ PÑ PÔ P€DÐPÐPÐPÑPØ@à#%€MÐ%Ð%Ð%Ñ%Øà&*€NÐ*Ð*Ð*Ñ*Ø2à�:Øðñ ô €Lð ð2ð 2ð 2ñ „Xð2ð ð	ð 	ð 	ñ „Xð	ð €_˜(Ð#Ñ#Ô#Øðð ð ñ „[ñ $Ô#ðð2 ðð ð ñ „Xðð> ðð ð ñ „Xðð0ð 0ð 0ð 0ðSð Sð Sð Sð( %)Ø:>ð	$ð $ð $ð $ð $ðR %)Ø:>ð	2ð 2ð 2ð 2ð 2ð$	%ð 	%ð 	%ð 	%ðJð Jð Jð Jð0 %)Ø?Cð	&ð &ð &ð &ð &ðV %)Ø?Cð	2ð 2ð 2ð 2ð 2ð$ ð7ð 7ð 7ñ „Xð7ð ðð ð ñ „Xðð ð r\   r/   ÚllmrS   úCallable[[Any], Any]c           
     ó„  — dd l }d}d}t          dt          | j        ¦  «        t	          d||¬¦  «        t          |j        ¦  «        t          |j        ¦  «        z  t          |j        ¦  «        z  t          |j	        ¦  «        z  t          |j
        ¦  «        z  t          t          t          j        ¦  «        ¬¦  «        S )Nr   é   é<   T)Ú
multiplierÚminÚmax)ÚreraiserN   Úwaitr*   Úbefore_sleep)rs   r*   r,   rE   r-   r+   ÚAPITimeoutErrorÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚInternalServerErrorr)   rg   ÚloggingÚWARNING)rã   rs   Úmin_secondsÚmax_secondss       rZ   r‡   r‡   —  sÀ   € Ø€M€M€Mà€KØ€Kõ ØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMå# FÔ$:Ñ;Ô;Ý% f¤oÑ6Ô6ñ7å% fÔ&?Ñ@Ô@ñAõ & fÔ&;Ñ<Ô<ñ=õ & fÔ&@ÑAÔAñ	Bõ &¥f­g¬oÑ>Ô>ðñ ô ð r\   r   r   c              ‹  ó^   ‡ K  — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤Žƒ d{V —†S )z0Use tenacity to retry the async completion call.r   r   rS   c               ›  ó8   •K  —  ‰j         j        di | ¤Žƒ d {V —†S r‚   )r3   rƒ   )r   rã   s    €rZ   r„   z6acompletion_with_retry.<locals>._completion_with_retry±  s7   øè è € ð -�SÔ%Ô,Ð6Ð6¨vÐ6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6r\   Nr…   rW   r†   )rã   r   rˆ   r„   s   `   rZ   rÒ   rÒ   ­  sg   øè è € å-¨cÑ2Ô2€Oàð7ð 7ð 7ð 7ð 7ñ „_ð7ð (Ð'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r\   Ú_dictrÖ   Údefault_classúType[BaseMessageChunk]r   c                ót  — |                       d¦  «        }|                       d¦  «        pd}|dk    s|t          k    rt          |¬¦  «        S |dk    s|t          k    rt          |¬¦  «        S |dk    s|t          k    rt          |¬¦  «        S |s|t          k    rt	          ||¬¦  «        S  ||¬¦  «        S )	NÚroler­   Ú Úuser©r­   Ú	assistantÚsystem©r­   rý   )rd   r   r   r   r   )rù   rú   rý   r­   s       rZ   r«   r«   ¹  sÖ   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐ.Ñ.Ô.Ð.Ø	�Ò	Ð	˜]Õ.@Ò@Ð@Ý!¨'Ð2Ñ2Ô2Ð2Ø	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-r\   r   c                ór  — |                       d¦  «        }|dk    r$t          |                       dd¦  «        ¬¦  «        S |dk    r$t          |                       dd¦  «        ¬¦  «        S |dk    r$t          |                       dd¦  «        ¬¦  «        S t	          |                       dd¦  «        |¬¦  «        S )	Nrý   rÿ   r­   rþ   r   r  r  r  )rd   r   r   r   r   )rù   rý   s     rZ   rË   rË   Ë  s°   € Ø�9Š9�VÑÔ€DØˆv‚~€~Ý E§I¢I¨i¸Ñ$<Ô$<Ð=Ñ=Ô=Ð=Ø	�Ò	Ð	Ý §¢¨9°bÑ!9Ô!9Ð:Ñ:Ô:Ð:Ø	�Ò	Ð	Ý U§Y¢Y¨y¸"Ñ%=Ô%=Ð>Ñ>Ô>Ð>å 5§9¢9¨Y¸Ñ#;Ô#;À$ÐGÑGÔGÐGr\   r£   rŒ   c                ó²  — t          | t          ¦  «        r| j        | j        dœ}n˜t          | t          ¦  «        rd| j        dœ}nxt          | t
          ¦  «        rd| j        dœ}nXt          | t          ¦  «        rd| j        dœ}n8t          | t          ¦  «        rd| j        | j        dœ}nt          d| › �¦  «        ‚d| j
        v r| j
        d         |d<   |S )	zŠConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    )rý   r­   rÿ   r  r  Úfunction)rý   Únamer­   zGot unknown type r  )r¨   r   rý   r­   r   r   r   r   r  rf   Úadditional_kwargs)r£   Úmessage_dicts     rZ   rÀ   rÀ   ×  sþ   € õ �'�;Ñ'Ô'ð 8Ø '¤¸¼ÐIÐIˆˆÝ	�G�\Ñ	*Ô	*ð 8Ø &°7´?ÐCÐCˆˆÝ	�G�YÑ	'Ô	'ð 8Ø +¸¼ÐHÐHˆˆÝ	�G�]Ñ	+Ô	+ð 	8Ø (°W´_ÐEÐEˆˆÝ	�G�_Ñ	-Ô	-ð 8àØ”LØ”ð
ð 
ˆˆõ Ð6¨WÐ6Ð6Ñ7Ô7Ð7Ø�Ô*Ð*Ð*Ø&Ô8¸Ô@ˆ�VÑØÐr\   )rã   r/   rS   rä   )rã   r/   r   r   rS   r   )rù   rÖ   rú   rû   rS   r   )rù   rÖ   rS   r   )r£   r   rS   rŒ   )?rÞ   Ú
__future__r   ró   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   r   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r    r!   Úlangchain_core.utilsr"   r#   r$   Úpydanticr%   r&   r'   r(   Útenacityr)   r*   r+   r,   r-   Ú	getLoggerrÛ   rg   r/   r‡   rÒ   r«   rË   rÀ   rW   r\   rZ   ú<module>r     sý  ðØ Ð à "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rðð ð ð ð ð ð ð ð ð ð
 CÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðXð Xð Xð Xð X�ñ Xô Xð Xðv
ð ð ð ð,	2ð 	2ð 	2ð 	2ð.ð .ð .ð .ð$	Hð 	Hð 	Hð 	Hðð ð ð ð ð r\   