Ë
    µŒj<"  ã                   ó®   — d dl Z d dl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 d dlmZmZ d dlmZ defd	„Zdefd
„Zdededefd„Z G d„ de«      Zy)é    N)ÚAnyÚDictÚListÚOptionalÚcast)ÚAgentActionÚAgentFinish)ÚBaseCallbackHandler)ÚBaseMessage)ÚChatGenerationÚ	LLMResult©Úguard_importÚreturnc                  ó4   — t        d«      j                  «       S )zImport the infino client.Úinfinopy)r   ÚInfinoClient© ó    úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/callbacks/infino_callback.pyÚimport_infinor      s   € ä˜
Ó#×0Ñ0Ó2Ð2r   c                  ó   — t        d«      S )z6Import tiktoken for counting tokens for OpenAI models.Útiktokenr   r   r   r   Úimport_tiktokenr      s   € ä˜
Ó#Ð#r   ÚstringÚopenai_model_namec                 óp   — t        «       }|j                  |«      }t        |j                  | «      «      }|S )zÚCalculate num tokens for OpenAI with tiktoken package.

    Official documentation: https://github.com/openai/openai-cookbook/blob/main
                            /examples/How_to_count_tokens_with_tiktoken.ipynb
    )r   Úencoding_for_modelÚlenÚencode)r   r   r   ÚencodingÚ
num_tokenss        r   Úget_num_tokensr#      s6   € ô Ó €Hà×*Ñ*Ð+<Ó=€HÜ�X—_‘_ VÓ,Ó-€JØÐr   c                   óè  — e Zd ZdZ	 	 	 d*dee   dee   deddfd„Z	 d+ded	ed
eddfd„Z	de
eef   dee   deddfd„Zdededdfd„Zdededdfd„Zdededdfd„Zde
eef   de
eef   deddfd„Zde
eef   deddfd„Zdededdfd„Zde
eef   dededdfd„Zdededefd„Z	 	 d,ded ee   d!ee   deddf
d"„Zdededdfd#„Zd$ededdfd%„Zd&ededdfd'„Zde
eef   d(eee      deddfd)„Zy)-ÚInfinoCallbackHandlerz%Callback Handler that logs to Infino.NÚmodel_idÚmodel_versionÚverboser   c                 óh   — t        «       | _        || _        || _        || _        d| _        d| _        y )NFzgpt-3.5-turbo)r   Úclientr&   r'   r(   Úis_chat_openai_modelÚchat_openai_model_name)Úselfr&   r'   r(   s       r   Ú__init__zInfinoCallbackHandler.__init__%   s3   € ô $“oˆŒØ ˆŒØ*ˆÔØˆŒØ$)ˆÔ!Ø&5ˆÕ#r   ÚkeyÚvalueÚis_tsc                 ó$  — dt        t        j                  «       «      ||d| j                  | j                  dœi}| j                  rt        d|› d|› �«       |r| j                  j                  |«       y| j                  j                  |«       y)a  Send the key-value to Infino.

        Parameters:
        key (str): the key to send to Infino.
        value (Any): the value to send to Infino.
        is_ts (bool): if True, the value is part of a time series, else it
                      is sent as a log message.
        ÚdateÚlabels)r&   r'   z	Tracking z with Infino: N)	ÚintÚtimer&   r'   r(   Úprintr*   Ú	append_tsÚ
append_log)r-   r/   r0   r1   Úpayloads        r   Ú_send_to_infinoz%InfinoCallbackHandler._send_to_infino3   s   € ð ”CœŸ	™	›Ó$Ø�ØØ ŸM™MØ!%×!3Ñ!3ñð
ˆð �<Š<Ü�I˜c˜U .°°	Ð:Ô;ñ Ø�K‰K×!Ñ! 'Õ*à�K‰K×"Ñ" 7Õ+r   Ú
serializedÚpromptsÚkwargsc                 óz   — |D ]  }| j                  d|d¬«       Œ d| _        t        j                  «       | _        y)z=Log the prompts to Infino, and set start time and error flag.ÚpromptF©r1   r   N)r;   Úerrorr6   Ú
start_time)r-   r<   r=   r>   r@   s        r   Úon_llm_startz"InfinoCallbackHandler.on_llm_startS   s;   € ó ˆFØ× Ñ  ¨6¸Ð Õ?ð ð
 ˆŒ
ô Ÿ)™)›+ˆ�r   Útokenc                  ó   — y)z)Do nothing when a new token is generated.Nr   )r-   rE   r>   s      r   Úon_llm_new_tokenz&InfinoCallbackHandler.on_llm_new_tokene   ó   € àr   Úresponsec                 óÄ  — t        j                   «       | _        | j                  | j                  z
  }| j                  d|«       | j                  d| j                  «       |j
                  D ]'  }|D ]   }| j                  d|j                  d¬«       Œ" Œ) |j                  �pt        |j                  t        «      rV|j                  d   }|�E|d   }|d	   }|d
   }	| j                  d|«       | j                  d	|«       | j                  d
|	«       | j                  rBdj                  d„ D «       «      }
t        |
| j                  ¬«      }	| j                  d
|	«       yy)z<Log the latency, error, token usage, and response to Infino.ÚlatencyrB   Úprompt_responseFrA   NÚtoken_usageÚprompt_tokensÚtotal_tokensÚcompletion_tokensÚ c              3   ó€   K  — | ]6  }t        t        t        t        |«      j                  j                  «      –— Œ8 y ­w©N)r   Ústrr   ÚmessageÚcontent)Ú.0Ú
generations     r   Ú	<genexpr>z3InfinoCallbackHandler.on_llm_end.<locals>.<genexpr>…   s2   è ø€ ð  á"-�Jô ”Sœ$œ~¨zÓ:×BÑB×JÑJ×KÙ"-ùs   ‚<>©r   )r6   Úend_timerC   r;   rB   ÚgenerationsÚtextÚ
llm_outputÚ
isinstancer   r+   Újoinr#   r,   )r-   rI   r>   Údurationr\   rX   rM   rN   rO   rP   Úmessagess              r   Ú
on_llm_endz InfinoCallbackHandler.on_llm_endi   s\  € ô Ÿ	™	›ˆŒØ—=‘= 4§?¡?Ñ2ˆØ×Ñ˜Y¨Ô1ð 	×Ñ˜W d§j¡jÔ1ð $×/Ô/ˆKÛ)�
Ø×$Ñ$Ð%6¸
¿¹ÈuÐ$ÕUñ *ð 0ð
 ×ÑÐ+´¸H×<OÑ<OÔQUÔ1VØ"×-Ñ-¨mÑ<ˆKØÐ&Ø +¨OÑ <�Ø*¨>Ñ:�Ø$/Ð0CÑ$DÐ!Ø×$Ñ$ _°mÔDØ×$Ñ$ ^°\ÔBØ×$Ñ$Ð%8Ð:KÔLð ×$Ò$Ø—x‘xñ  á"-ó ó ˆHô !/Ø¨D×,GÑ,Gô!Ðð × Ñ Ð!4Ð6GÕHð %r   rB   c                 ó   — d| _         y)zSet the error flag.é   N)rB   ©r-   rB   r>   s      r   Úon_llm_errorz"InfinoCallbackHandler.on_llm_errorŽ   s	   € àˆ�
r   Úinputsc                  ó   — y)z!Do nothing when LLM chain starts.Nr   )r-   r<   rh   r>   s       r   Úon_chain_startz$InfinoCallbackHandler.on_chain_start’   s   € ð 	r   Úoutputsc                  ó   — y)zDo nothing when LLM chain ends.Nr   )r-   rk   r>   s      r   Úon_chain_endz"InfinoCallbackHandler.on_chain_end˜   rH   r   c                  ó   — y)zNeed to log the error.Nr   rf   s      r   Úon_chain_errorz$InfinoCallbackHandler.on_chain_errorœ   rH   r   Ú	input_strc                  ó   — y)zDo nothing when tool starts.Nr   )r-   r<   rp   r>   s       r   Úon_tool_startz#InfinoCallbackHandler.on_tool_start    s   € ð 	r   Úactionc                  ó   — y)z.Do nothing when agent takes a specific action.Nr   )r-   rs   r>   s      r   Úon_agent_actionz%InfinoCallbackHandler.on_agent_action©   rH   r   ÚoutputÚobservation_prefixÚ
llm_prefixc                  ó   — y)zDo nothing when tool ends.Nr   )r-   rv   rw   rx   r>   s        r   Úon_tool_endz!InfinoCallbackHandler.on_tool_end­   s   € ð 	r   c                  ó   — y)z&Do nothing when tool outputs an error.Nr   rf   s      r   Úon_tool_errorz#InfinoCallbackHandler.on_tool_error·   rH   r   r]   c                  ó   — y©zDo nothing.Nr   )r-   r]   r>   s      r   Úon_textzInfinoCallbackHandler.on_text»   rH   r   Úfinishc                  ó   — yr~   r   )r-   r€   r>   s      r   Úon_agent_finishz%InfinoCallbackHandler.on_agent_finish¿   rH   r   rb   c                 ó^  — |j                  d«      }|r|D ]  }|dk(  sŒ	d| _         n | j                  r||j                  d«      }|ri|j                  d«      }|rV|| _        d}|D ]6  }	dj                  d„ |	D «       «      }
t	        |
| j                  ¬	«      }||z  }Œ8 | j                  d
|«       | j                  r%t        d| j                  › d| j                  › �«       dj                  d„ |D «       «      }| j                  d|d¬«       d| _        t        j                  «       | _
        y)zRun when LLM starts running.ÚidÚ
ChatOpenAITÚinvocation_paramsÚ
model_namer   rQ   c              3   óP   K  — | ]  }t        t        |j                  «      –— Œ  y ­wrS   ©r   rT   rV   )rW   Úmsgs     r   rY   z<InfinoCallbackHandler.on_chat_model_start.<locals>.<genexpr>Ý   s   è ø€ ð 2Ù>J°sœD¤ c§k¡k×2¹lùs   ‚$&rZ   rN   z=on_chat_model_start: is_chat_openai_model=                   z+,                   chat_openai_model_name=c              3   ó^   K  — | ]%  }|D ]  }t        t        |j                  «      –— Œ  Œ' y ­wrS   r‰   )rW   ÚsublistrŠ   s      r   rY   z<InfinoCallbackHandler.on_chat_model_start.<locals>.<genexpr>ð   s(   è ø€ ð 
Ù2: wÃg¸sŒD”�c—k‘k×"ÀgÐ"±(ùs   ‚+-r@   FrA   N)Úgetr+   r,   r`   r#   r;   r(   r7   rB   r6   rC   )r-   r<   rb   r>   Úvaluesr0   r†   r‡   rN   Úmessage_listÚmessage_stringr"   r@   s                r   Úon_chat_model_startz)InfinoCallbackHandler.on_chat_model_startÃ   sN  € ð —‘ Ó%ˆÙÛ�Ø˜LÓ(Ø04�DÔ-Ùð  ð ×$Ò$Ø &§
¡
Ð+>Ó ?ÐÙ Ø.×2Ñ2°<Ó@�
ÙØ2<�DÔ/Ø$%�MÛ(0˜Ø),¯©ñ 2Ù>Jó2ó *˜ô &4Ø*Ø.2×.IÑ.Iô&˜
ð &¨Ñ3™ð )1ð ×(Ñ(¨¸-ÔHà�<Š<ÜðØ×,Ñ,Ð-ð .*Ø*.×*EÑ*EÐ)FðHôð —‘ñ 
Ù2:ó
ó 
ˆð 	×Ñ˜X v°UÐÔ;ð ˆŒ
ô Ÿ)™)›+ˆ�r   )NNF)T)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rT   Úboolr.   r   r;   r   r   rD   rG   r   rc   ÚBaseExceptionrg   rj   rm   ro   rr   r   ru   rz   r|   r   r	   r‚   r   r‘   r   r   r   r%   r%   "   sŒ  „ Ù/ð #'Ø'+Øñ	6à˜3‘-ð6ð   ‘}ð6ð ð	6ð
 
ó6ð$ ñ	,àð,ð ð,ð ð	,ð
 
ó,ð@&à˜˜c˜‘Nð&ð �c‘ð&ð ð	&ð
 
ó&ð$ cð °Sð ¸Tó ð#I 9ð #I¸ð #IÀó #IðJ -ð ¸3ð À4ó ðØ˜s C˜x™.ðØ26°s¸C°x±.ðØLOðà	óð D¨¨c¨¡Nð ¸cð Àdó ð Mð ¸Sð ÀTó ðà˜˜c˜‘Nðð ðð ð	ð
 
óð kð ¸Sð ÀSó ð -1Ø$(ñ	àðð % S™Mðð ˜S‘Mð	ð
 ðð 
óð =ð ¸Cð ÀDó ð˜Cð ¨3ð °4ó ð kð ¸Sð ÀTó ð8&à˜˜c˜‘Nð8&ð �t˜KÑ(Ñ)ð8&ð ð	8&ð
 
ô8&r   r%   )r6   Útypingr   r   r   r   r   Úlangchain_core.agentsr   r	   Úlangchain_core.callbacksr
   Úlangchain_core.messagesr   Úlangchain_core.outputsr   r   Úlangchain_core.utilsr   r   r   rT   r5   r#   r%   r   r   r   Ú<module>rž      s^   ðÛ ß 2Õ 2ç :Ý 8Ý /ß <Ý -ð3�só 3ð
$˜ó $ð

˜3ð 
°3ð 
¸3ó 
ôY&Ð/õ Y&r   