§
    æ˜ºh?;  ã                  óf  — 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. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4  ej5        e6¦  «        Z7d d„Z8d!d„Z9d"d„Z:d#d„Z;d$d„Z< G d„ de¦  «        Z=dS )%zJinaChat 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)ÚFieldÚ	SecretStrÚroot_validator)Úconvert_to_secret_strÚget_from_dict_or_envÚget_pydantic_field_names)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialÚllmÚJinaChatÚreturnúCallable[[Any], Any]c           
     ó¶  — dd l }d}d}t          dt          | j        ¦  «        t	          d||¬¦  «        t          |j        j        ¦  «        t          |j        j        ¦  «        z  t          |j        j	        ¦  «        z  t          |j        j
        ¦  «        z  t          |j        j        ¦  «        z  t          t          t          j        ¦  «        ¬¦  «        S ©Nr   é   é<   T)Ú
multiplierÚminÚmax)ÚreraiseÚstopÚwaitr)   Úbefore_sleep©Úopenair)   r+   Úmax_retriesr,   r*   ÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr(   ÚloggerÚloggingÚWARNING)r-   r=   Úmin_secondsÚmax_secondss       úp/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/jinachat.pyÚ_create_retry_decoratorrK   ;   sÌ   € Ø€M€M€Mà€KØ€Kõ ØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMå# F¤LÔ$8Ñ9Ô9Ý% f¤lÔ&;Ñ<Ô<ñ=å% f¤lÔ&EÑFÔFñGõ & f¤lÔ&AÑBÔBñCõ & f¤lÔ&JÑKÔKñ	Lõ &¥f­g¬oÑ>Ô>ðñ ô ð ó    Úkwargsr   c              ‹  ó^   ‡ K  — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤Žƒ d{V —†S )z0Use tenacity to retry the async completion call.rM   r   r/   c               ›  ó8   •K  —  ‰j         j        di | ¤Žƒ d {V —†S ©N© )ÚclientÚacreate)rM   r-   s    €rJ   Ú_completion_with_retryz6acompletion_with_retry.<locals>._completion_with_retryU   s6   øè è € ð (�S”ZÔ'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1rL   N©rM   r   r/   r   rQ   ©rK   )r-   rM   Úretry_decoratorrT   s   `   rJ   Úacompletion_with_retryrX   Q   sg   øè è € å-¨cÑ2Ô2€Oàð2ð 2ð 2ð 2ð 2ñ „_ð2ð (Ð'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1rL   Ú_dictúMapping[str, Any]Ú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ÚroleÚcontentÚ Úuser©r_   Ú	assistantÚsystem©r_   r^   )Úgetr   r   r   r   )rY   r[   r^   r_   s       rJ   Ú_convert_delta_to_message_chunkrg   ]   sÖ   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐ.Ñ.Ô.Ð.Ø	�Ò	Ð	˜]Õ.@Ò@Ð@Ý!¨'Ð2Ñ2Ô2Ð2Ø	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-rL   r   c                óð   — | d         }|dk    rt          | d         ¬¦  «        S |dk    r| d         pd}t          |¬¦  «        S |dk    rt          | d         ¬¦  «        S t          | d         |¬¦  «        S )	Nr^   ra   r_   rb   rc   r`   rd   re   )r   r   r   r   )rY   r^   r_   s      rJ   Ú_convert_dict_to_messageri   o   sŽ   € Ø�Œ=€DØˆv‚~€~Ý E¨)Ô$4Ð5Ñ5Ô5Ð5Ø	�Ò	Ð	Ø˜	Ô"Ð( bˆÝ Ð)Ñ)Ô)Ð)Ø	�Ò	Ð	Ý U¨9Ô%5Ð6Ñ6Ô6Ð6å 5¨Ô#3¸$Ð?Ñ?Ô?Ð?rL   ÚmessageÚdictc                ó²  — 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 )	N)r^   r_   ra   rc   rd   Úfunction)r^   Únamer_   zGot unknown type rn   )Ú
isinstancer   r^   r_   r   r   r   r   rn   Ú
ValueErrorÚadditional_kwargs)rj   Úmessage_dicts     rJ   Ú_convert_message_to_dictrs   |   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ÑØÐrL   c                  óè  — e Zd ZU dZedBd„¦   «         ZedCd„¦   «         Zded<   d	Z	d
ed<   	  e
e¬¦  «        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<   	  G d„ d¦  «        Z ed¬¦  «        dDd „¦   «         Z e¦   «         dEd"„¦   «         ZedFd#„¦   «         ZdGd%„ZdHd'„ZdId+„Z	 	 dJdKd3„Z	 	 dJdLd5„ZdMd7„ZdNd:„Z	 	 dJdOd=„Z	 	 dJdPd>„ZedQd?„¦   «         Z edRdA„¦   «         Z!dS )Sr.   a  `Jina AI` Chat models API.

    To use, you should have the ``openai`` python package installed, and the
    environment variable ``JINACHAT_API_KEY`` set to your API key, which you
    can generate at https://chat.jina.ai/api.

    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 JinaChat
            chat = JinaChat()
    r/   úDict[str, str]c                ó
   — ddiS )NÚjinachat_api_keyÚJINACHAT_API_KEYrQ   ©Úselfs    rJ   Ú
lc_secretszJinaChat.lc_secrets£   s   € à"Ð$6Ð7Ð7rL   Úboolc                ó   — dS )z9Return whether this model can be serialized by Langchain.FrQ   )Úclss    rJ   Úis_lc_serializablezJinaChat.is_lc_serializable§   s	   € ð ˆurL   r   rR   gffffffæ?ÚfloatÚtemperature)Údefault_factoryúDict[str, Any]Úmodel_kwargsNzOptional[SecretStr]rw   z+Optional[Union[float, Tuple[float, float]]]Úrequest_timeouté   Úintr>   FÚ	streamingzOptional[int]Ú
max_tokensc                  ó   — e Zd ZdZdZdS )úJinaChat.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úallow_population_by_field_namerQ   rL   rJ   ÚConfigr‹   ½   s   € € € € € Ø5Ð5à)-Ð&Ð&Ð&rL   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'   rf   Úlistrp   rE   ÚwarningÚpopÚintersectionÚkeys)r~   r“   Úall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         rJ   Úbuild_extrazJinaChat.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ñô ð ð
 "'ˆˆ~ÑØˆrL   r   c                óà   — t          t          |dd¦  «        ¦  «        |d<   	 ddl}n# t          $ r t	          d¦  «        ‚w xY w	 |j        |d<   n# t          $ r t	          d¦  «        ‚w xY w|S )z?Validate that api key and python package exists in environment.rw   rx   r   NzTCould not import openai python package. Please install it with `pip install openai`.rR   z�`openai` has no `ChatCompletion` attribute, this is likely due to an old version of the openai package. Try upgrading it with `pip install --upgrade openai`.)r%   r&   r=   ÚImportErrorrp   ÚChatCompletionÚAttributeError)r~   r“   r=   s      rJ   Úvalidate_environmentzJinaChat.validate_environmentÜ   sº   € õ &;Ý  Ð);Ð=OÑPÔPñ&
ô &
ˆÐ!Ñ"ð	ØˆMˆMˆMˆMøåð 	ð 	ð 	Ýð?ñô ð ð	øøøð
	Ø%Ô4ˆF�8ÑÐøÝð 	ð 	ð 	Ýð7ñô ð ð	øøøð ˆs   £( ¨AÁ
A ÁA+c                óF   — | j         | j        | j        | j        dœ| j        ¥S )z4Get the default parameters for calling JinaChat API.)r…   r‰   Ústreamr�   )r…   r‰   rˆ   r�   r„   ry   s    rJ   Ú_default_paramszJinaChat._default_paramsô   s6   € ð  $Ô3Øœ/Ø”nØÔ+ð	
ð 
ð
 Ôð
ð 	
rL   r0   c           
     ó¶  — dd l }d}d}t          dt          | j        ¦  «        t	          d||¬¦  «        t          |j        j        ¦  «        t          |j        j        ¦  «        z  t          |j        j	        ¦  «        z  t          |j        j
        ¦  «        z  t          |j        j        ¦  «        z  t          t          t          j        ¦  «        ¬¦  «        S r2   r<   )rz   r=   rH   rI   s       rJ   rK   z JinaChat._create_retry_decoratorÿ   sÎ   € ØˆˆˆàˆØˆõ ØÝ# DÔ$4Ñ5Ô5Ý!¨Q°KÀ[ÐQÑQÔQå'¨¬Ô(<Ñ=Ô=Ý)¨&¬,Ô*?Ñ@Ô@ñAå)¨&¬,Ô*IÑJÔJñKõ *¨&¬,Ô*EÑFÔFñGõ *¨&¬,Ô*NÑOÔOñ	Põ *­&µ'´/ÑBÔBð
ñ 
ô 
ð 	
rL   rM   c                óX   ‡ — ‰                       ¦   «         }|dˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.rM   r   r/   c                 ó(   •—  ‰j         j        di | ¤ŽS rP   )rR   Úcreate)rM   rz   s    €rJ   rT   z>JinaChat.completion_with_retry.<locals>._completion_with_retry  s   ø€ à%�4”;Ô%Ð/Ð/¨Ð/Ð/Ð/rL   rU   rQ   rV   )rz   rM   rW   rT   s   `   rJ   Úcompletion_with_retryzJinaChat.completion_with_retry  sU   ø€ à×6Ò6Ñ8Ô8ˆà	ð	0ð 	0ð 	0ð 	0ð 	0ñ 
Œð	0ð &Ð%Ð/Ð/¨Ð/Ð/Ð/rL   Úllm_outputsúList[Optional[dict]]rk   c                ó–   — i }|D ]A}|€Œ|d         }|                      ¦   «         D ]\  }}||v r||xx         |z  cc<   Œ|||<   Œ ŒBd|iS )NÚtoken_usage)Úitems)rz   r¬   Úoverall_token_usageÚoutputr¯   ÚkÚvs          rJ   Ú_combine_llm_outputszJinaChat._combine_llm_outputs  s”   € Ø$&ÐØ!ð 		/ð 		/ˆFØˆ~àØ  Ô/ˆKØ#×)Ò)Ñ+Ô+ð /ð /‘��1ØÐ+Ð+Ð+Ø'¨Ð*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ð*à-.Ð'¨Ñ*Ð*ð	/ð
 Ð2Ð3Ð3rL   ÚmessagesúList[BaseMessage]r9   úOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]úIterator[ChatGenerationChunk]c              +  ó4  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥}t          } | j        dd|i|¤ŽD ][}|d         d         d         }	t          |	|¦  «        }|j        }t          |¬¦  «        V — |r|                     |j        ¦  «         Œ\d S )	Nr¥   Tr¶   Úchoicesr   Údelta©rj   rQ   )Ú_create_message_dictsr   r«   rg   Ú	__class__r    Úon_llm_new_tokenr_   ©
rz   r¶   r9   r¹   rM   Úmessage_dictsÚparamsÚdefault_chunk_classÚchunkr¾   s
             rJ   Ú_streamzJinaChat._stream,  sÔ   è è € ð !%× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆå,ÐØ/�TÔ/ÐQÐQ¸ÐQÈ&ÐQÐQð 	<ð 	<ˆEØ˜)Ô$ QÔ'¨Ô0ˆEÝ3°EÐ;NÑOÔOˆEØ"'¤/ÐÝ%¨eÐ4Ñ4Ô4Ð4Ð4Ð4Øð <Ø×,Ò,¨U¬]Ñ;Ô;Ð;øð	<ð 	<rL   r!   c                óÖ   — | j         r  | j        d|||dœ|¤Ž}t          |¦  «        S |                      ||¦  «        \  }}i |¥|¥} | j        dd|i|¤Ž}|                      |¦  «        S ©N)r¶   r9   r¹   r¶   rQ   )rˆ   rÈ   r   rÀ   r«   Ú_create_chat_result©	rz   r¶   r9   r¹   rM   Ústream_iterrÄ   rÅ   Úresponses	            rJ   Ú	_generatezJinaChat._generate?  s¤   € ð Œ>ð 	5Ø&˜$œ,ð Ø!¨¸+ðð ØIOðð ˆKõ (¨Ñ4Ô4Ð4à $× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ%�FÐ%˜fÐ%ˆØ-�4Ô-ÐOÐO°}ÐOÈÐOÐOˆØ×'Ò'¨Ñ1Ô1Ð1rL   ú+Tuple[List[Dict[str, Any]], Dict[str, Any]]c                ó~   — t          | j        ¦  «        }|�d|v rt          d¦  «        ‚||d<   d„ |D ¦   «         }||fS )Nr9   z2`stop` found in both the input and default params.c                ó,   — g | ]}t          |¦  «        ‘ŒS rQ   )rs   )Ú.0Úms     rJ   ú
<listcomp>z2JinaChat._create_message_dicts.<locals>.<listcomp>Y  s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGrL   )rk   Ú_invocation_paramsrp   )rz   r¶   r9   rÅ   rÄ   s        rJ   rÀ   zJinaChat._create_message_dictsQ  s[   € õ �dÔ-Ñ.Ô.ˆØÐØ˜ÐÐÝ Ð!UÑVÔVÐVØ!ˆF�6‰NØGÐG¸hÐGÑGÔGˆØ˜fÐ$Ð$rL   rÎ   rZ   c                óÆ   — g }|d         D ]<}t          |d         ¦  «        }t          |¬¦  «        }|                     |¦  «         Œ=d|d         i}t          ||¬¦  «        S )Nr½   rj   r¿   r¯   Úusage)ÚgenerationsÚ
llm_output)ri   r   Úappendr!   )rz   rÎ   rÙ   Úresrj   ÚgenrÚ   s          rJ   rË   zJinaChat._create_chat_result\  su   € ØˆØ˜IÔ&ð 	$ð 	$ˆCÝ.¨s°9¬~Ñ>Ô>ˆGÝ ¨Ð1Ñ1Ô1ˆCØ×Ò˜sÑ#Ô#Ð#Ð#Ø# X¨gÔ%6Ð7ˆ
Ý k¸jÐIÑIÔIÐIrL   ú'Optional[AsyncCallbackManagerForLLMRun]ú"AsyncIterator[ChatGenerationChunk]c               óZ  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥}t          }t          | fd|i|¤Žƒ d {V —†2 3 d {V —†}|d         d         d         }	t          |	|¦  «        }|j        }t          |¬¦  «        W V — |r |                     |j        ¦  «        ƒ d {V —† Œh6 d S )Nr¥   Tr¶   r½   r   r¾   r¿   )rÀ   r   rX   rg   rÁ   r    rÂ   r_   rÃ   s
             rJ   Ú_astreamzJinaChat._astreame  s9  è è € ð !%× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆå,ÐÝ!7Øð"
ð "
Ø(ð"
Ø,2ð"
ð "
ð 
ð 
ð 
ð 
ð 
ð 
ð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	B�%ð ˜)Ô$ QÔ'¨Ô0ˆEÝ3°EÐ;NÑOÔOˆEØ"'¤/ÐÝ%¨eÐ4Ñ4Ô4Ð4Ð4Ð4Ð4Øð BØ!×2Ò2°5´=ÑAÔAÐAÐAÐAÐAÐAÐAÐAøð
ð 
ð 
s   ÁB*c              ‹  óò   K  — | j         r& | j        d|||dœ|¤Ž}t          |¦  «        ƒ d {V —†S |                      ||¦  «        \  }}i |¥|¥}t	          | fd|i|¤Žƒ d {V —†}|                      |¦  «        S rÊ   )rˆ   rá   r   rÀ   rX   rË   rÌ   s	            rJ   Ú
_ageneratezJinaChat._ageneratez  sÊ   è è € ð Œ>ð 	<Ø'˜$œ-ð Ø!¨¸+ðð ØIOðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à $× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ%�FÐ%˜fÐ%ˆÝ/°ÐWÐW¸}ÐWÐPVÐWÐWÐWÐWÐWÐWÐWÐWˆØ×'Ò'¨Ñ1Ô1Ð1rL   c                ó`   — | j         o| j                              ¦   «         dddœ}i |¥| j        ¥S )z,Get the parameters used to invoke the model.zhttps://api.chat.jina.ai/v1Újinachat)Úapi_keyÚapi_baseÚmodel)rw   Úget_secret_valuer¦   )rz   Újinachat_credss     rJ   rÖ   zJinaChat._invocation_paramsŒ  sH   € ð Ô,ð 9ØÔ%×6Ò6Ñ8Ô8Ø5Øð	*
ð *
ˆð :�.Ð9 DÔ$8Ð9Ð9rL   Ústrc                ó   — dS )zReturn type of chat model.rå   rQ   ry   s    rJ   Ú	_llm_typezJinaChat._llm_type—  s	   € ð ˆzrL   )r/   ru   )r/   r|   )r“   rƒ   r/   rƒ   )r“   r   r/   r   )r/   rƒ   )r/   r0   rU   )r¬   r­   r/   rk   )NN)
r¶   r·   r9   r¸   r¹   rº   rM   r   r/   r»   )
r¶   r·   r9   r¸   r¹   rº   rM   r   r/   r!   )r¶   r·   r9   r¸   r/   rÐ   )rÎ   rZ   r/   r!   )
r¶   r·   r9   r¸   r¹   rÞ   rM   r   r/   rß   )
r¶   r·   r9   r¸   r¹   rÞ   rM   r   r/   r!   )r/   rZ   )r/   rë   )"rŒ   r�   rŽ   r�   Úpropertyr{   Úclassmethodr   Ú__annotations__r�   r"   rk   r„   rw   r…   r>   rˆ   r‰   r‘   r$   rž   r£   r¦   rK   r«   rµ   rÈ   rÏ   rÀ   rË   rá   rã   rÖ   rí   rQ   rL   rJ   r.   r.   ’   s×  € € € € € € ðð ð  ð8ð 8ð 8ñ „Xð8ð ðð ð ñ „[ðð €K€K�KØ€KÐÐÐÑØ+Ø#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVØ,0ÐÐ0Ð0Ð0Ñ0ð=àCG€OÐGÐGÐGÑGØRØ€KÐÐÐÑØ<Ø€IÐÐÐÑØ/Ø $€JÐ$Ð$Ð$Ñ$Ø/ð.ð .ð .ð .ð .ñ .ô .ð .ð
 €^˜ÐÑÔðð ð ñ Ôðð2 €^ÑÔðð ð ñ Ôðð. ð
ð 
ð 
ñ „Xð
ð
ð 
ð 
ð 
ð*0ð 0ð 0ð 0ð4ð 4ð 4ð 4ð" %)Ø:>ð	<ð <ð <ð <ð <ð, %)Ø:>ð	2ð 2ð 2ð 2ð 2ð$	%ð 	%ð 	%ð 	%ðJð Jð Jð Jð %)Ø?Cð	Bð Bð Bð Bð Bð0 %)Ø?Cð	2ð 2ð 2ð 2ð 2ð$ ð:ð :ð :ñ „Xð:ð ðð ð ñ „Xðð ð rL   )r-   r.   r/   r0   )r-   r.   rM   r   r/   r   )rY   rZ   r[   r\   r/   r   )rY   rZ   r/   r   )rj   r   r/   rk   )>r�   Ú
__future__r   rF   Ú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.pydantic_v1r"   r#   r$   Úlangchain_core.utilsr%   r&   r'   Útenacityr(   r)   r*   r+   r,   Ú	getLoggerrŒ   rE   rK   rX   rg   ri   rs   r.   rQ   rL   rJ   ú<module>rû      sõ  ðØ Ð Ø "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð,	2ð 	2ð 	2ð 	2ð.ð .ð .ð .ð$
@ð 
@ð 
@ð 
@ðð ð ð ð,Hð Hð Hð Hð Hˆ}ñ Hô Hð Hð Hð HrL   