Ë
    µŒjð;  ã                  óv  — 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*m+Z+ dd
l,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6  ejn                  e8«      Z9dd„Z:dd„Z;	 	 	 	 	 	 dd„Z<dd„Z=dd„Z> G d„ de«      Z?y)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)Úconvert_to_secret_strÚget_from_dict_or_envÚget_pydantic_field_namesÚpre_init)Ú
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialÚJinaChatc           
     óâ  — 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)Úllmr<   Úmin_secondsÚmax_secondss       úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/jinachat.pyÚ_create_retry_decoratorrK   =   s¾   € Ûà€KØ€Kô ØÜ §¡Ó0Ü¨°ÀÔMä# F§L¡L×$8Ñ$8Ó9Ü% f§l¡l×&;Ñ&;Ó<ñ=ä% f§l¡l×&EÑ&EÓFñGô & f§l¡l×&AÑ&AÓBñCô & f§l¡l×&JÑ&JÓKñ	Lô &¤f¬g¯o©oÓ>ôð ó    c              ‹  ó\   ‡ K  — t        ‰ «      }|dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)z0Use tenacity to retry the async completion call.c               ›  óX   •K  —  ‰j                   j                  di | ¤Žƒ d {  –—† S 7 Œ­w©N© )ÚclientÚacreate)ÚkwargsrG   s    €rJ   Ú_completion_with_retryz6acompletion_with_retry.<locals>._completion_with_retryW   s)   øè ø€ ð (�S—Z‘Z×'Ñ'Ñ1¨&Ñ1×1Ð1Ð1ús   ƒ *£(¤*N©rS   r   Úreturnr   rP   ©rK   )rG   rS   Úretry_decoratorrT   s   `   rJ   Úacompletion_with_retryrY   S   s9   øè ø€ ä-¨cÓ2€Oàô2ó ð2ñ (Ñ1¨&Ñ1×1Ð1Ð1ús   ƒ",¥*¦,c                ó,  — | j                  d«      }| j                  d«      xs 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   )Ú_dictÚdefault_classr[   r\   s       rJ   Ú_convert_delta_to_message_chunkrf   _   s—   € ð �9‰9�VÓ€DØ�i‰i˜	Ó"Ò( b€Gàˆv‚~˜Ô*;Ò;Ü ¨Ô1Ð1Ø	�Ò	 ´Ò ?Ü gÔ.Ð.Ø	�Ò	˜]Ô.@Ò@Ü!¨'Ô2Ð2Ù	�Ô"2Ò2Ü¨°dÔ;Ð;á WÔ-Ð-rL   c                ó°   — | d   }|dk(  rt        | d   ¬«      S |dk(  r| d   xs d}t        |¬«      S |dk(  rt        | d   ¬«      S t        | d   |¬«      S )	Nr[   r^   r\   r_   r`   r]   ra   rb   )r   r   r   r   )rd   r[   r\   s      rJ   Ú_convert_dict_to_messagerh   q   sn   € Ø�‰=€DØˆv‚~Ü E¨)Ñ$4Ô5Ð5Ø	�Ò	Ø˜	Ñ"Ò( bˆÜ Ô)Ð)Ø	�Ò	Ü U¨9Ñ%5Ô6Ð6ä 5¨Ñ#3¸$Ô?Ð?rL   c                óÌ  — t        | t        «      r| j                  | j                  dœ}n™t        | t        «      rd| j                  dœ}nyt        | t
        «      rd| j                  dœ}nYt        | t        «      rd| j                  dœ}n9t        | t        «      rd| j                  | j                  dœ}nt        d| › �«      ‚d| j                  v r| j                  d   |d<   |S )	N)r[   r\   r^   r`   ra   Úfunction)r[   Únamer\   zGot unknown type rk   )Ú
isinstancer   r[   r\   r   r   r   r   rk   Ú
ValueErrorÚadditional_kwargs)ÚmessageÚmessage_dicts     rJ   Ú_convert_message_to_dictrq   ~   sÆ   € Ü�'œ;Ô'Ø '§¡¸¿¹ÑI‰Ü	�Gœ\Ô	*Ø &°7·?±?ÑC‰Ü	�GœYÔ	'Ø +¸¿¹ÑH‰Ü	�Gœ]Ô	+Ø (°W·_±_ÑE‰Ü	�Gœ_Ô	-àØ—L‘LØ—‘ñ
‰ô Ð,¨W¨IÐ6Ó7Ð7Ø�×*Ñ*Ñ*Ø&×8Ñ8¸Ñ@ˆ�VÑØÐrL   c                  óú  — e Zd ZU dZed+d„«       Zed,d„«       Zd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<   	  ed¬«      Z ed¬«      ed-d„«       «       Zed.d„«       Zed/d„«       Zd0d „Zd1d!„Zd2d"„Z	 	 d3	 	 	 	 	 	 	 	 	 d4d#„Z	 	 d3	 	 	 	 	 	 	 	 	 d5d$„Z	 	 	 	 	 	 d6d%„Zd7d&„Z 	 	 d3	 	 	 	 	 	 	 	 	 d8d'„Z!	 	 d3	 	 	 	 	 	 	 	 	 d9d(„Z"ed:d)„«       Z#ed;d*„«       Z$y)<r/   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()
    c                ó
   — ddiS )NÚjinachat_api_keyÚJINACHAT_API_KEYrP   ©Úselfs    rJ   Ú
lc_secretszJinaChat.lc_secrets¥   s   € à"Ð$6Ð7Ð7rL   Úboolc                 ó   — y)z9Return whether this model can be serialized by Langchain.FrP   )Úclss    rJ   Úis_lc_serializablezJinaChat.is_lc_serializable©   s   € ð rL   Nr   rQ   gffffffæ?ÚfloatÚtemperature)Údefault_factoryúDict[str, Any]Úmodel_kwargszOptional[SecretStr]rt   z+Optional[Union[float, Tuple[float, float]]]Úrequest_timeouté   Úintr=   FÚ	streamingzOptional[int]Ú
max_tokensT)Úpopulate_by_nameÚbefore)Úmodec           
     ó`  — t        | «      }|j                  di «      }t        |«      D ]M  }||v rt        d|› d�«      ‚||vsŒt        j                  d|› d|› d|› d�«       |j                  |«      ||<   ŒO |j                  |j                  «       «      }|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$   rc   Úlistrm   rD   ÚwarningÚpopÚintersectionÚkeys)r{   ÚvaluesÚall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         rJ   Úbuild_extrazJinaChat.build_extraÃ   sç   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØ˜UÑ"Ü  6¨*¨Ð5EÐ!FÓGÐGØÐ!9Ò9Ü—‘Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:��jÒ!ð 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÙÜØÐ2Ð3ð 4Sð Tóð ð
 "'ˆˆ~ÑØˆrL   c                óÂ   — t        t        |dd«      «      |d<   	 ddl}	 |j                  |d<   |S # t        $ r t        d«      ‚w xY w# t
        $ r t        d«      ‚w xY w)z?Validate that api key and python package exists in environment.rt   ru   r   NzTCould not import openai python package. Please install it with `pip install openai`.rQ   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<   ÚImportErrorÚChatCompletionÚAttributeErrorrm   )r{   r�   r<   s      rJ   Úvalidate_environmentzJinaChat.validate_environmentÞ   s‹   € ô &;Ü  Ð);Ð=OÓPó&
ˆÐ!Ñ"ð	Ûð	Ø%×4Ñ4ˆF�8Ñð ˆøô ò 	Üð?óð ð	ûô ò 	Üð7óð ð	ús   ›1  A	 ±AÁ	Ac                óx   — | j                   | j                  | j                  | j                  dœ| j                  ¥S )z4Get the default parameters for calling JinaChat API.)r‚   r†   Ústreamr~   )r‚   r†   r…   r~   r�   rv   s    rJ   Ú_default_paramszJinaChat._default_paramsö   s>   € ð  $×3Ñ3ØŸ/™/Ø—n‘nØ×+Ñ+ñ	
ð
 ×Ñð
ð 	
rL   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 r1   r;   )rw   r<   rH   rI   s       rJ   rK   z JinaChat._create_retry_decorator  sÁ   € ÛàˆØˆô ØÜ# D×$4Ñ$4Ó5Ü!¨Q°KÀ[ÔQä'¨¯©×(<Ñ(<Ó=Ü)¨&¯,©,×*?Ñ*?Ó@ñAä)¨&¯,©,×*IÑ*IÓJñKô *¨&¯,©,×*EÑ*EÓFñGô *¨&¯,©,×*NÑ*NÓOñ	Pô *¬&´'·/±/ÓBô
ð 	
rL   c                óJ   ‡ — ‰ j                  «       }|dˆ fd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.c                 ó<   •—  ‰j                   j                  di | ¤ŽS rO   )rQ   Úcreate)rS   rw   s    €rJ   rT   z>JinaChat.completion_with_retry.<locals>._completion_with_retry  s   ø€ à%�4—;‘;×%Ñ%Ñ/¨Ñ/Ð/rL   rU   rP   rW   )rw   rS   rX   rT   s   `   rJ   Úcompletion_with_retryzJinaChat.completion_with_retry  s3   ø€ à×6Ñ6Ó8ˆà	ô	0ó 
ð	0ñ &Ñ/¨Ñ/Ð/rL   c                óŠ   — i }|D ]9  }|€Œ|d   }|j                  «       D ]  \  }}||v r||xx   |z  cc<   Œ|||<   Œ Œ; d|iS )NÚtoken_usage)Úitems)rw   Úllm_outputsÚoverall_token_usageÚoutputr¤   ÚkÚvs          rJ   Ú_combine_llm_outputszJinaChat._combine_llm_outputs   sm   € Ø$&ÐÛ!ˆFØˆ~àØ  Ñ/ˆKØ#×)Ñ)Ö+‘��1ØÐ+Ñ+Ø'¨Ó*¨aÑ/Ô*à-.Ð'¨Ò*ñ	 ,ð "ð Ð2Ð3Ð3rL   c              +  ó>  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        } | j                  d	d|i|¤ŽD ]]  }|d   d   d   }	t        |	|«      }|j                  }t        |¬«      }
|r&|j                  t        |j                  «      |
¬«       |
–— Œ_ y ­w)
Nrœ   TÚmessagesÚchoicesr   Údelta©ro   ©ÚchunkrP   )	Ú_create_message_dictsr   r¢   rf   Ú	__class__r    Úon_llm_new_tokenÚstrr\   ©rw   r­   r8   Úrun_managerrS   Úmessage_dictsÚparamsÚdefault_chunk_classr²   r¯   Úcg_chunks              rJ   Ú_streamzJinaChat._stream.  s´   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐØ/�T×/Ñ/ÑQ¸ÐQÈ&ÔQˆEØ˜)Ñ$ QÑ'¨Ñ0ˆEÜ3°EÐ;NÓOˆEØ"'§/¡/ÐÜ*°5Ô9ˆHÙØ×,Ñ,¬S°·±Ó-?ÀxÐ,ÔPØ‹Nñ Rùs   ‚BBc                óÜ   — | j                   r! | j                  d|||dœ|¤Ž}t        |«      S | j                  ||«      \  }}i |¥|¥} | j                  dd|i|¤Ž}| j                  |«      S ©N)r­   r8   r¸   r­   rP   )r…   r½   r   r³   r¢   Ú_create_chat_result©	rw   r­   r8   r¸   rS   Ústream_iterr¹   rº   Úresponses	            rJ   Ú	_generatezJinaChat._generateB  s�   € ð �>Š>Ø&˜$Ÿ,™,ð Ø!¨¸+ñØIOñˆKô (¨Ó4Ð4à $× :Ñ :¸8ÀTÓ JÑˆ�vØ%�FÐ%˜fÐ%ˆØ-�4×-Ñ-ÑO°}ÐOÈÑOˆØ×'Ñ'¨Ó1Ð1rL   c                óš   — t        | j                  «      }|�d|v rt        d«      ‚||d<   |D �cg c]  }t        |«      ‘Œ }}||fS c c}w )Nr8   z2`stop` found in both the input and default params.)ÚdictÚ_invocation_paramsrm   rq   )rw   r­   r8   rº   Úmr¹   s         rJ   r³   zJinaChat._create_message_dictsT  sb   € ô �d×-Ñ-Ó.ˆØÐØ˜ÑÜ Ð!UÓVÐVØ!ˆF�6‰NÙ>FÓG¹h¸Ô1°!Õ4¸hˆÐGØ˜fÐ$Ð$ùò Hs   °Ac                ó˜   — g }|d   D ]-  }t        |d   «      }t        |¬«      }|j                  |«       Œ/ d|d   i}t        ||¬«      S )Nr®   ro   r°   r¤   Úusage)ÚgenerationsÚ
llm_output)rh   r   Úappendr!   )rw   rÃ   rË   Úresro   ÚgenrÌ   s          rJ   rÀ   zJinaChat._create_chat_result_  sZ   € ØˆØ˜IÔ&ˆCÜ.¨s°9©~Ó>ˆGÜ ¨Ô1ˆCØ×Ñ˜sÕ#ð 'ð $ X¨gÑ%6Ð7ˆ
Ü k¸jÔIÐIrL   c               ól  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        }t        | fd|i|¤Žƒ d {  –—† 2 3 d {  –—† }|d   d   d   }	t        |	|«      }|j                  }t        |¬«      }
|r.|j                  t        |j                  «      |
¬«      ƒ d {  –—†  |
­–— Œn7 Œr7 Œk7 Œ6 y ­w)	Nrœ   Tr­   r®   r   r¯   r°   r±   )	r³   r   rY   rf   r´   r    rµ   r¶   r\   r·   s              rJ   Ú_astreamzJinaChat._astreamh  sà   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐÜ!7Øñ"
Ø(ð"
Ø,2ñ"
÷ 
ð 
÷ 		�%ð ˜)Ñ$ QÑ'¨Ñ0ˆEÜ3°EÐ;NÓOˆEØ"'§/¡/ÐÜ*°5Ô9ˆHÙØ!×2Ñ2´3°u·}±}Ó3EÈXÐ2ÓV×VÐVØŒNð
øð 		øð Wøñ
ùsE   ‚7B4¹B,ºB4¾B2ÁB.ÁB2ÁAB4Â!B0Â"B4Â.B2Â0B4Â2B4c              ‹  ó   K  — | j                   r) | j                  d|||dœ|¤Ž}t        |«      ƒ d {  –—† S | j                  ||«      \  }}i |¥|¥}t	        | fd|i|¤Žƒ d {  –—† }| j                  |«      S 7 ŒF7 Œ­wr¿   )r…   rÑ   r   r³   rY   rÀ   rÁ   s	            rJ   Ú
_ageneratezJinaChat._agenerate~  sž   è ø€ ð �>Š>Ø'˜$Ÿ-™-ð Ø!¨¸+ñØIOñˆKô /¨{Ó;×;Ð;à $× :Ñ :¸8ÀTÓ JÑˆ�vØ%�FÐ%˜fÐ%ˆÜ/°ÑW¸}ÐWÐPVÑW×WˆØ×'Ñ'¨Ó1Ð1ð <øð Xús!   ‚1A>³A:´0A>Á$A<Á%A>Á<A>c                óz   — | j                   xr | j                   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)rt   Úget_secret_valuer�   )rw   Újinachat_credss     rJ   rÇ   zJinaChat._invocation_params�  sI   € ð ×,Ñ,ò 9Ø×%Ñ%×6Ñ6Ó8Ø5Øñ	*
ˆð :�.Ð9 D×$8Ñ$8Ð9Ð9rL   c                 ó   — y)zReturn type of chat model.rÕ   rP   rv   s    rJ   Ú	_llm_typezJinaChat._llm_type›  s   € ð rL   )rV   zDict[str, str])rV   ry   )r�   r€   rV   r   )r�   r   rV   r   )rV   r€   )rV   úCallable[[Any], Any]rU   )r¦   zList[Optional[dict]]rV   rÆ   )NN)
r­   úList[BaseMessage]r8   úOptional[List[str]]r¸   ú"Optional[CallbackManagerForLLMRun]rS   r   rV   zIterator[ChatGenerationChunk])
r­   rÞ   r8   rß   r¸   rà   rS   r   rV   r!   )r­   rÞ   r8   rß   rV   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])rÃ   úMapping[str, Any]rV   r!   )
r­   rÞ   r8   rß   r¸   ú'Optional[AsyncCallbackManagerForLLMRun]rS   r   rV   z"AsyncIterator[ChatGenerationChunk])
r­   rÞ   r8   rß   r¸   râ   rS   r   rV   r!   )rV   rá   )rV   r¶   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyrx   Úclassmethodr|   rQ   Ú__annotations__r~   r'   rÆ   r�   rt   r‚   r=   r…   r†   r&   Úmodel_configr)   r•   r%   rš   r�   rK   r¢   r«   r½   rÄ   r³   rÀ   rÑ   rÓ   rÇ   rÜ   rP   rL   rJ   r/   r/   ”   sD  … ñð  ò8ó ð8ð òó ðð €FˆCÓØ€K�ÓØ+Ù#(¸Ô#>€L�.Ó>ØVØ,0ÐÐ)Ó0ð=àCG€OÐ@ÓGØRØ€K�ÓØ<Ø€IˆtÓØ/Ø $€J�Ó$Ø/áØô€Lñ ˜(Ô#Øòó ó $ðð2 òó ðð. ò
ó ð
ó
ó*0ó4ð" %)Ø:>ð	à#ðð "ðð 8ð	ð
 ðð 
'óð. %)Ø:>ð	2à#ð2ð "ð2ð 8ð	2ð
 ð2ð 
ó2ð$	%Ø)ð	%Ø1Dð	%à	4ó	%óJð %)Ø?Cð	à#ðð "ðð =ð	ð
 ðð 
,óð2 %)Ø?Cð	2à#ð2ð "ð2ð =ð	2ð
 ð2ð 
ó2ð$ ò:ó ð:ð òó ñrL   )rG   r/   rV   rÝ   )rG   r/   rS   r   rV   r   )rd   rá   re   zType[BaseMessageChunk]rV   r   )rd   rá   rV   r   )ro   r   rV   rÆ   )@ræ   Ú
__future__r   rE   Ú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$   r%   Úpydanticr&   r'   r(   r)   Útenacityr*   r+   r,   r-   r.   Ú	getLoggerrã   rD   rK   rY   rf   rh   rq   r/   rP   rL   rJ   Ú<module>rõ      s¿   ðÙ å "ã ÷÷ ÷ ñ ÷÷ñ ÷
÷ ÷ ñ ÷ SÑ R÷ó ÷ CÓ B÷õ ð 
ˆ×	Ñ	˜8Ó	$€óó,	2ð.Øð.Ø-Cð.àó.ó$
@óô,Jˆ}õ JrL   