Ë
    ´Œj  ã                   óJ   — d Z ddlZddlmZmZ ddlmZ g d¢Z G d„ de«      Zy)z4Callback Handler streams to stdout on new llm token.é    N)ÚAnyÚOptional)ÚStreamingStdOutCallbackHandler)ÚFinalÚAnswerÚ:c            	       ó¢   ‡ — e Zd ZdZdeddfd„Zdefd„Zdddd	œd
ee	e      dededdfˆ 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ˆ xZS )Ú#FinalStreamingStdOutCallbackHandlerz¦Callback handler for streaming in agents.
    Only works with agents using LLMs that support streaming.

    Only the final output of the agent will be streamed.
    ÚtokenÚreturnNc                 óP  — | j                   j                  |«       | j                  j                  |j                  «       «       t	        | j                   «      t	        | j
                  «      kD  r7| j                   j                  d«       | j                  j                  d«       y y )Nr   )Úlast_tokensÚappendÚlast_tokens_strippedÚstripÚlenÚanswer_prefix_tokensÚpop)Úselfr   s     úy/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/callbacks/streaming_stdout_final_only.pyÚappend_to_last_tokensz9FinalStreamingStdOutCallbackHandler.append_to_last_tokens   s|   € Ø×Ñ×Ñ Ô&Ø×!Ñ!×(Ñ(¨¯©«Ô7Üˆt×ÑÓ ¤3 t×'@Ñ'@Ó#AÒAØ×Ñ× Ñ  Ô#Ø×%Ñ%×)Ñ)¨!Õ,ð Bó    c                 ó~   — | j                   r| j                  | j                  k(  S | j                  | j                  k(  S )N)Ústrip_tokensr   Úanswer_prefix_tokens_strippedr   r   )r   s    r   Úcheck_if_answer_reachedz;FinalStreamingStdOutCallbackHandler.check_if_answer_reached   s9   € Ø×ÒØ×,Ñ,°×0RÑ0RÑRÐRØ×Ñ 4×#<Ñ#<Ñ<Ð<r   TF)r   r   Ústream_prefixr   r   r   c                óz  •— t         ‰| �  «        |€t        | _        n|| _        |r.| j                  D �cg c]  }|j	                  «       ‘Œ c}| _        n| j                  | _        dgt        | j                  «      z  | _        dgt        | j                  «      z  | _        || _	        || _
        d| _        yc c}w )aÊ  Instantiate FinalStreamingStdOutCallbackHandler.

        Args:
            answer_prefix_tokens: Token sequence that prefixes the answer.
                Default is ["Final", "Answer", ":"]
            strip_tokens: Ignore white spaces and new lines when comparing
                answer_prefix_tokens to last tokens? (to determine if answer has been
                reached)
            stream_prefix: Should answer prefix itself also be streamed?
        NÚ F)ÚsuperÚ__init__ÚDEFAULT_ANSWER_PREFIX_TOKENSr   r   r   r   r   r   r   r   Úanswer_reached)r   r   r   r   r   Ú	__class__s        €r   r!   z,FinalStreamingStdOutCallbackHandler.__init__   s³   ø€ ô" 	‰ÑÔØÐ'Ü(DˆDÕ%à(<ˆDÔ%Ùà+/×+DÒ+Dó2Ù+D %�—‘•Ð+Dñ2ˆDÕ.ð 26×1JÑ1JˆDÔ.Ø˜4¤# d×&?Ñ&?Ó"@Ñ@ˆÔØ%' D¬3¨t×/HÑ/HÓ+IÑ$IˆÔ!Ø(ˆÔØ*ˆÔØ#ˆÕùò2s   µB8Ú
serializedÚpromptsÚkwargsc                 ó   — d| _         y)zRun when LLM starts running.FN)r#   )r   r%   r&   r'   s       r   Úon_llm_startz0FinalStreamingStdOutCallbackHandler.on_llm_start@   s   € ð $ˆÕr   c                 óž  — | j                  |«       | j                  «       rbd| _        | j                  rN| j                  D ]!  }t
        j                  j                  |«       Œ# t
        j                  j                  «        y| j                  r>t
        j                  j                  |«       t
        j                  j                  «        yy)z?Run on new LLM token. Only available when streaming is enabled.TN)	r   r   r#   r   r   ÚsysÚstdoutÚwriteÚflush)r   r   r'   Úts       r   Úon_llm_new_tokenz4FinalStreamingStdOutCallbackHandler.on_llm_new_tokenI   s˜   € ð 	×"Ñ" 5Ô)ð ×'Ñ'Ô)Ø"&ˆDÔØ×!Ò!Ø×)Ô)�AÜ—J‘J×$Ñ$ QÕ'ð *ä—
‘
× Ñ Ô"Øð ×ÒÜ�J‰J×Ñ˜UÔ#Ü�J‰J×ÑÕð r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úboolr   r   Úlistr!   Údictr   r)   r0   Ú__classcell__)r$   s   @r   r
   r
      sº   ø„ ñð-¨3ð -°4ó -ð=¨ó =ð 59Ø!Ø#ò $ð ' t¨C¡yÑ1ð $ð ð	 $ð
 ð $ð 
õ $ðD$à˜˜c˜‘Nð$ð �c‘ð$ð ð	$ð
 
ó$ð cð °Sð ¸T÷ r   r
   )	r4   r+   Útypingr   r   Úlangchain_core.callbacksr   r"   r
   © r   r   Ú<module>r=      s&   ðÙ :ã 
ß  å Câ7Ð ôPÐ*Hõ Pr   