Ë
    µŒj@  ã                   óœ  — 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mZ d dlmZmZ d dl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 d dlmZm Z m!Z! d dl"m#Z# d d	l$m%Z% d d
l&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. dZ/ee0eee0ee0ef   f      f   Z1dee0ef   dee0ef   fd„Z2de1deee0ef      fd„Z3dee   deee0ef      fd„Z4 G d„ de«      Z5y)é    N)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚLiteralÚMappingÚOptionalÚSequenceÚTypeÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLanguageModelInput)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚHumanMessageÚSystemMessageÚToolMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚRunnable)ÚBaseTool)Úget_from_dict_or_env)Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚmodel_validatorz
reka-flashÚitemÚreturnc                 óX   — | d   dk(  r!| d   }t        |t        «      rd|v r|d   | d<   | S )zProcess a single content item.ÚtypeÚ	image_urlÚurl)Ú
isinstanceÚdict)r&   r*   s     ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/reka.pyÚprocess_content_itemr/   /   s=   € àˆF�|�{Ò"Ø˜Ñ%ˆ	Ü�i¤Ô&¨5°IÑ+=à )¨%Ñ 0ˆD�ÑØ€Kó    Úcontentc                 ó4  — t        | t        «      rd| dœgS t        | t        «      rhg }| D ]_  }t        |t        «      r|j                  d|dœ«       Œ(t        |t        «      r|j                  t        |«      «       ŒSt        d|› �«      ‚ |S t        d«      ‚)z\Process content to handle both text and media inputs,
    returning a list of content items.Útext©r)   r3   zInvalid content item format: zInvalid content format)r,   ÚstrÚlistÚappendr-   r/   Ú
ValueError)r1   Úresultr&   s      r.   Úprocess_contentr:   9   s’   € ô �'œ3ÔØ¨Ñ1Ð2Ð2Ü	�GœTÔ	"ØˆÛˆDÜ˜$¤Ô$Ø—‘ v°tÑ<Õ=Ü˜D¤$Ô'Ø—‘Ô2°4Ó8Õ9ä Ð#@ÀÀÐ!GÓHÐHð ð ˆäÐ1Ó2Ð2r0   Úmessagesc                 óH  — g }d}| D �]  }t        |t        «      r?|€2t        |j                  t        «      r|j                  }Œ=t	        d«      ‚t        d«      ‚t        |t        «      rŠt        |j                  «      }|r^|rEt        |d   t        «      r2|d   j                  d«      dk(  rd|d   v r|› d|d   d   › �|d   d<   n|j                  dd|dœ«       d}|j                  d	|d
œ«       Œít        |t        «      r¡ddi}|j                  rt        |j                  «      }||d<   d|j                  v rV|j                  d   }g }|D ];  }|d   |d   d   t        j                  |d   d   «      dœ}	|j                  |	«       Œ= ||d<   |j                  |«       �Œžt        |t         «      rUg }
|
j                  |j"                  t        j$                  d|j                  i«      dœ«       |j                  d|
d
œ«       �Œt        dt'        |«      › �«      ‚ |S )z2Convert LangChain messages to Reka message format.Nz'SystemMessage content must be a string.z+Multiple system messages are not supported.r   r)   r3   Ú
r4   Úuser)Úroler1   r?   Ú	assistantr1   Ú
tool_callsÚidÚfunctionÚnameÚ	arguments)rB   rD   Ú
parametersÚstatus)Útool_call_idÚoutputÚtool_outputzUnsupported message type: )r,   r   r1   r5   Ú	TypeErrorr8   r   r:   r-   ÚgetÚinsertr7   r   Úadditional_kwargsÚjsonÚloadsr   rH   Údumpsr)   )r;   Úreka_messagesÚsystem_messageÚmessageÚprocessed_contentÚreka_messagerA   Úformatted_tool_callsÚ	tool_callÚformatted_tool_callÚcontent_lists              r.   Úconvert_to_reka_messagesr[   L   sI  € à*,€MØ$(€NäˆÜ�gœ}Ô-ØÐ%Ü˜gŸo™o¬sÔ3Ø%,§_¡_‘Nä#Ð$MÓNÐNä Ð!NÓOÐOÜ˜¤Ô.Ü /°·±Ó @ÐÙá%Ü"Ð#4°QÑ#7¼Ô>Ø)¨!Ñ,×0Ñ0°Ó8¸FÒBØÐ"3°AÑ"6Ñ6ð *Ð*¨"Ð->¸qÑ-AÀ&Ñ-IÐ,JÐKð & aÑ(¨Ò0ð &×,Ñ,Ø F°NÑCôð "&�Ø× Ñ ¨&Ð=NÑ!OÕPÜ˜¤Ô+Ø,2°KÐ+@ˆLØ�ŠÜ$3°G·O±OÓ$DÐ!Ø*;�˜YÑ'Ø˜w×8Ñ8Ñ8Ø$×6Ñ6°|ÑD�
Ø')Ð$Û!+�Ià'¨™oØ )¨*Ñ 5°fÑ =Ü&*§j¡j°¸:Ñ1FÀ{Ñ1SÓ&Tñ+Ð'ð
 )×/Ñ/Ð0CÕDð ",ð .B�˜\Ñ*Ø× Ñ  Ö.Ü˜¤Ô-Ø13ˆLØ×Ñà$+×$8Ñ$8Ü"Ÿj™j¨(°G·O±OÐ)DÓEñôð × Ñ à)Ø+ñöô Ð9¼$¸w»-¸ÐIÓJÐJðw ðz Ðr0   c                   ó4  ‡ — e Zd ZU dZdZeed<   dZeed<    ee	¬«      Z
eed<    ed¬«      Zeed<   dZee   ed	<   d
Zeed<   dZee   ed<   dZeed<   dZee   ed<    ee¬«      Zeeef   ed<    ed¬«      ZdZeeeeeee   f   gef      ed<    e d¬«      e!deeef   deeef   fd„«       «       Z"e#de$eef   fd„«       Z%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-dee   deee      dee+   dede,e)   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.f
d#„Z0d$eeeee   f   defd%„Z1d&dd'œd(e2eeeef   e3e4   ee5f      d)eeee6d*   f      d+ee   dede7e8ef   f
ˆ fd,„Z9ˆ xZ:S ).ÚChatRekaz Reka chat large language models.NÚclientÚasync_client)ÚdefaultÚmodelé   Ú
max_tokensÚtemperatureFÚ	streamingÚdefault_request_timeouté   Úmax_retriesÚreka_api_key)Údefault_factoryÚmodel_kwargsÚforbid)ÚextraÚtoken_counterÚbefore)ÚmodeÚvaluesr'   c                 óÂ   — |j                  d«      }t        d|idd«      }||d<   	 ddlm}m}  ||¬«      |d<    ||¬«      |d<   |S # t
        $ r t        d«      ‚w xY w)	zBValidate that API key and Python package exist in the environment.ri   ÚREKA_API_KEYr   )Ú	AsyncRekaÚReka)Úapi_keyr^   r_   zTCould not import Reka Python package. Please install it with `pip install reka-api`.)rL   r    Úreka.clientrt   ru   ÚImportError)Úclsrq   ri   rt   ru   s        r.   Úvalidate_environmentzChatReka.validate_environment£   s�   € ð —z‘z .Ó1ˆÜ+Ø˜\Ð*¨N¸Nó
ˆð ".ˆˆ~Ñð	ç3á#Ø$ô ˆF�8Ññ &/Ø$ô&ˆF�>Ñ"ð ˆøô ò 	ÜðAóð ð	ús   § A	 Á	Ac                 óŠ   — | j                   | j                  dœ}| j                  �| j                  |d<   i |¥| j                  ¥S )z0Get the default parameters for calling Reka API.)ra   rc   rd   )ra   rc   rd   rk   )ÚselfÚparamss     r.   Ú_default_paramszChatReka._default_params¾   sM   € ð —Z‘ZØŸ/™/ñ
ˆð ×ÑÐ'Ø$(×$4Ñ$4ˆF�=Ñ!Ø.�&Ð.˜D×-Ñ-Ð.Ð.r0   c                  ó   — y)zReturn type of chat model.z	reka-chat© )r|   s    r.   Ú	_llm_typezChatReka._llm_typeÉ   s   € ð r0   r;   ÚstopÚrun_managerÚkwargsc              +   óR  K  — t        |«      }i | j                  ¥|¥}|r||d<    | j                  j                  j                  dd|i|¤Ž}|D ]T  }|j
                  d   j                  j                  }	t        t        |	¬«      ¬«      }
|r|j                  |	|
¬«       |
–— ŒV y ­w©Nr‚   r;   r   ©r1   ©rT   )Úchunkr€   )r[   r~   r^   ÚchatÚcreate_streamÚ	responsesr‰   r1   r   r   Úon_llm_new_token©r|   r;   r‚   rƒ   r„   rR   r}   Ústreamr‰   r1   Ú
chat_chunks              r.   Ú_streamzChatReka._streamÎ   s¦   è ø€ ô 1°Ó:ˆØ3�D×(Ñ(Ð3¨FÐ3ˆÙØ!ˆF�6‰Nà/�—‘×!Ñ!×/Ñ/ÑQ¸ÐQÈ&ÑQˆãˆEØ—o‘o aÑ(×.Ñ.×6Ñ6ˆGÜ,´^ÈGÔ5TÔUˆJÙØ×,Ñ,¨W¸JÐ,ÔGØÓñ ùs   ‚B%B'c                óx  K  — t        |«      }i | j                  ¥|¥}|r||d<    | j                  j                  j                  dd|i|¤Ž}|2 3 d {  –—† }|j
                  d   j                  j                  }	t        t        |	¬«      ¬«      }
|r|j                  |	|
¬«      ƒ d {  –—†  |
­–— Œe7 Œ`7 Œ6 y ­wr†   )r[   r~   r_   rŠ   r‹   rŒ   r‰   r1   r   r   r�   rŽ   s              r.   Ú_astreamzChatReka._astreamã   sÁ   è ø€ ô 1°Ó:ˆØ3�D×(Ñ(Ð3¨FÐ3ˆÙØ!ˆF�6‰Nà5�×"Ñ"×'Ñ'×5Ñ5ÑW¸}ÐWÐPVÑWˆá!÷ 	�%Ø—o‘o aÑ(×.Ñ.×6Ñ6ˆGÜ,´^ÈGÔ5TÔUˆJÙØ!×2Ñ2°7À*Ð2ÓM×MÐMØÔð	øð Nøñ	 "ùs=   ‚AB:ÁB8ÁB4ÁB8ÁAB:Â)B6Â*
B:Â4B8Â6B:Â8B:c                 óÂ  — | j                   rt         | j                  |f||dœ|¤Ž«      S t        |«      }i | j                  ¥|¥}|r||d<    | j
                  j                  j                  dd|i|¤Ž}|j                  d   j                  j                  ry|j                  d   j                  j                  }t        dd|D �	cg c]<  }	|	j                  d|	j                  t        j                  |	j                   «      dœd	œ‘Œ> c}	i¬
«      }
n3|j                  d   j                  j"                  }t        |�|nd¬«      }
t%        t'        |
¬«      g¬«      S c c}	w ©N)r‚   rƒ   r‚   r;   r   Ú rA   rC   )rD   rE   )rB   r)   rC   )r1   rN   r‡   rˆ   )Úgenerationsr€   )re   r   r‘   r[   r~   r^   rŠ   ÚcreaterŒ   rT   rA   r   rB   rD   rO   rQ   rF   r1   r   r   ©r|   r;   r‚   rƒ   r„   rR   r}   ÚresponserA   ÚtcrT   r1   s               r.   Ú	_generatezChatReka._generateø   s^  € ð �>Š>Ü'Ø�—‘˜XÐT¨D¸kÑTÈVÑTóð ô 1°Ó:ˆØ3�D×(Ñ(Ð3¨FÐ3ˆÙØ!ˆF�6‰NØ*�4—;‘;×#Ñ#×*Ñ*ÑL°MÐLÀVÑLˆà×Ñ˜aÑ ×(Ñ(×3Ò3Ø!×+Ñ+¨AÑ.×6Ñ6×AÑAˆJÜØà ñ #-ó
#ñ #-˜Bð #%§%¡%Ø$.à(*¯©Ü-1¯Z©Z¸¿¹Ó-Fñ)óð #-ñ
#ð#ô‰Gð" ×(Ñ(¨Ñ+×3Ñ3×;Ñ;ˆGä°7Ð3F©ÈBÔOˆGä¤~¸gÔ'FÐ&GÔHÐHùò%
#s   ÃAEc              ‹   óô  K  — | j                   r't         | j                  |f||dœ|¤Ž«      ƒ d {  –—† S t        |«      }i | j                  ¥|¥}|r||d<    | j
                  j                  j                  dd|i|¤Žƒ d {  –—† }|j                  d   j                  j                  ry|j                  d   j                  j                  }t        dd|D �	cg c]<  }	|	j                  d|	j                  t        j                  |	j                   «      dœd	œ‘Œ> c}	i¬
«      }
n3|j                  d   j                  j"                  }t        |�|nd¬«      }
t%        t'        |
¬«      g¬«      S 7 �Œ=7 Œíc c}	w ­wr•   )re   r   r“   r[   r~   r_   rŠ   r˜   rŒ   rT   rA   r   rB   rD   rO   rQ   rF   r1   r   r   r™   s               r.   Ú
_ageneratezChatReka._agenerate#  sz  è ø€ ð �>Š>Ü.Ø�—‘˜hÐU¨T¸{ÑUÈfÑUó÷ ð ô 1°Ó:ˆØ3�D×(Ñ(Ð3¨FÐ3ˆÙØ!ˆF�6‰NØ6˜×*Ñ*×/Ñ/×6Ñ6ÑXÀÐXÐQWÑX×Xˆà×Ñ˜aÑ ×(Ñ(×3Ò3Ø!×+Ñ+¨AÑ.×6Ñ6×AÑAˆJÜØà ñ #-ó
#ñ #-˜Bð #%§%¡%Ø$.à(*¯©Ü-1¯Z©Z¸¿¹Ó-Fñ)óð #-ñ
#ð#ô‰Gð" ×(Ñ(¨Ñ+×3Ñ3×;Ñ;ˆGä°7Ð3F©ÈBÔOˆGä¤~¸gÔ'FÐ&GÔHÐHðCùð Yúò
#ùs7   ‚/E8±E.²AE8ÂE1ÂAE8ÃAE3ÄAE8Å1E8Å3E8Úinputc                 óª  — | j                   �| j                  |«      S 	 ddl}|j                  d«      }t	        |t
        «      rt        |j                  |«      «      S t	        |t        «      rM|j                  }t	        |t
        «      st        dt        |«      › �«      ‚t        |j                  |«      «      S t	        |t        «      r[d}|D ]R  }|j                  }t	        |t
        «      st        dt        |«      › �«      ‚|t        |j                  |«      «      z  }ŒT |S t        dt        |«      › �«      ‚# t        $ r t        d«      ‚w xY w)aN  Calculate number of tokens.

        Args:
            input: Either a string, a single BaseMessage, or a list of BaseMessages.

        Returns:
            int: Number of tokens in the input.

        Raises:
            ImportError: If tiktoken is not installed.
            ValueError: If message content is not a string.
        Nr   zXCould not import tiktoken python package. Please install it with `pip install tiktoken`.Úcl100k_basez&Message content must be a string, got zUnsupported input type: )rn   Útiktokenrx   Úget_encodingr,   r5   ÚlenÚencoder   r1   r8   r)   r6   rK   )r|   rŸ   r¢   Úencodingr1   ÚtotalÚmsgs          r.   Úget_num_tokenszChatReka.get_num_tokensN  sJ  € ð ×ÑÐ)Ø×%Ñ% eÓ,Ð,ð	Ûð ×(Ñ(¨Ó7ˆä�eœSÔ!Ü�x—‘ uÓ-Ó.Ð.Ü˜œ{Ô+Ø—m‘mˆGÜ˜g¤sÔ+Ü Ø<¼TÀ'»]¸OÐLóð ô �x—‘ wÓ/Ó0Ð0Ü˜œtÔ$ØˆEÛ�ØŸ+™+�Ü! '¬3Ô/Ü$Ø@ÄÀgÃÀÐPóð ð œ˜XŸ_™_¨WÓ5Ó6Ñ6‘ð ð ˆLäÐ6´t¸E³{°mÐDÓEÐEøô9 ò 	ÜðAóð ð	ús   ŸD= Ä=EÚauto)Útool_choiceÚstrictÚtoolsr«   Úanyr¬   c                óØ   •— |D �cg c]  }t        ||¬«      ‘Œ }}|€d}|dk(  rd}|dvrt        d|› d�«      ‚||d<   |D �cg c]  }|d	   ‘Œ	 }}t        ‰| �  dd
|i|¤ŽS c c}w c c}w )a¾  Bind tool-like objects to this chat model.

        The `tool_choice` parameter controls how the model uses the tools you pass.
        There are three available options:

        - `"auto"`: Lets the model decide whether or not to invoke a tool. This is the
          recommended way to do function calling with our models.
        - `"none"`: Disables tool calling. In this case, even if you pass tools to
          the model, the model will not invoke any tools.
        - `"tool"`: Forces the model to invoke one or more of the tools it has
          been passed.

        Args:
            tools: A list of tool definitions to bind to this chat model.
                Supports any tool definition handled by
                :meth:`langchain_core.utils.function_calling.convert_to_openai_tool`.
            tool_choice: Controls how the model uses the tools you pass.
                Options are "auto", "none", or "tool". Defaults to "auto".
            strict:
            If True, model output is guaranteed to exactly match the JSON Schema
                provided in the tool definition.
                If False, input schema will not be validated
                and model output will not be validated.
                If None, ``strict`` argument will not
                be passed to the model.
            kwargs: Any additional parameters are passed directly to the model.

        Returns:
            Runnable: An executable chain or component.
        )r¬   rª   r®   Útool)rª   Únoner°   zInvalid tool_choice 'zB' provided. Tool choice must be one of: 'auto', 'none', or 'tool'.r«   rC   r­   r€   )r!   r8   ÚsuperÚbind)r|   r­   r«   r¬   r„   r°   Úformatted_toolsÚ	__class__s          €r.   Ú
bind_toolszChatReka.bind_tools~  s¹   ø€ ñN EJó
ÙDI¸DÔ" 4°Ö7ÀEð 	ð 
ð
 ÐØ ˆKØ˜%ÒØ ˆKØÐ6Ñ6ÜØ'¨ }ð 5Ið Ióð ð !,ˆˆ}Ññ 9HÓH¹°˜4 
Ó+¸ˆÐHÜ‰w‰|Ñ< /Ð<°VÑ<Ð<ùò)
ùò& Is   †A"ÁA')NN);Ú__name__Ú
__module__Ú__qualname__Ú__doc__r^   r   Ú__annotations__r_   r$   ÚDEFAULT_REKA_MODELra   r5   rc   Úintrd   r   Úfloatre   Úboolrf   rh   ri   r-   rk   r   r#   Úmodel_configrn   r   r   r   r   r%   Úclassmethodrz   Úpropertyr
   r~   r�   r   r   r   r‘   r   r   r“   r   rœ   rž   r©   r   r   r"   r   r	   r   r   r¶   Ú__classcell__)rµ   s   @r.   r]   r]   ‘   sY  ø… Ù*à€FˆCÓØ€L�#ÓÙÐ1Ô2€Eˆ3Ó2Ù CÔ(€J�Ó(Ø#'€K�˜%‘Ó'Ø€IˆtÓØ/3Ð˜X e™_Ó3Ø€K�ÓØ"&€L�(˜3‘-Ó&Ù#(¸Ô#>€L�$�s˜C�x‘.Ó>Ù HÔ-€Lð 	ð �8Ø�%˜˜[¨$¨{Ñ*;Ð;Ñ<Ð=¸sÐBÑCñó ñ ˜(Ô#Øð¨$¨s°C¨x©.ð ¸TÀ#ÀsÀ(¹^ò ó ó $ðð2 ð/ ¨¨c¨Ñ!2ò /ó ð/ð ð˜3ò ó ðð %)Ø:>ñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
Ð%Ñ	&óð0 %)Ø?Cñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð;Ñ<ð	ð
 ðð 
Ð*Ñ	+óð0 %)Ø:>ñ	)Ià�{Ñ#ð)Ið �t˜C‘yÑ!ð)Ið Ð6Ñ7ð	)Ið
 ð)Ið 
ó)Ið\ %)Ø?Cñ	)Ià�{Ñ#ð)Ið �t˜C‘yÑ!ð)Ið Ð;Ñ<ð	)Ið
 ð)Ið 
ó)IðV.F E¨#¨{¸DÀÑ<MÐ*MÑ$Nð .FÐSVó .Fðh =CØ!%ò:=à˜˜d 3¨ 8™n¨d°9©o¸xÈÐQÑRÑSð:=ð ˜e C¨°©Ð$7Ñ8Ñ9ð	:=ð
 ˜‘ð:=ð ð:=ð 
Ð$ kÐ1Ñ	2÷:=ñ :=r0   r]   )6rO   Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú*langchain_core.language_models.chat_modelsr   r   r   Úlangchain_core.messagesr   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.runnablesr   Úlangchain_core.toolsr   Úlangchain_core.utilsr    Ú%langchain_core.utils.function_callingr!   Úpydanticr"   r#   r$   r%   r¼   r5   ÚContentTyper/   r:   r[   r]   r€   r0   r.   Ú<module>rÐ      sû   ðÛ ÷÷ ÷ ó ÷õ >÷ñ ÷
÷ ÷ SÑ RÝ -Ý )Ý 5Ý Hß BÓ Bà!Ð à�C˜˜e C¨¨c°3¨h©Ð$7Ñ8Ñ9Ð9Ñ:€ð˜t C¨ H™~ð °$°s¸C°x±.ó ð3˜[ð 3¨T°$°s¸C°x±.Ñ-Aó 3ð&B t¨KÑ'8ð B¸TÀ$ÀsÈCÀxÁ.Ñ=Qó BôJg=ˆ}õ g=r0   