Ë
    ò©Ñh&  ã                  óV   — d dl mZ d dlmZmZ d dlmZ d dlmZ g d¢Z	 G d„ de«      Z
y)	é    )Úannotations)ÚAnyÚOptional)Ú	LLMResult)ÚAsyncIteratorCallbackHandler)ÚFinalÚAnswerú:c                  ót   ‡ — e Zd ZdZdd„Zdd„Zddddœ	 	 	 	 	 	 	 dˆ fd„Z	 	 	 	 	 	 	 	 dd	„Zdd
„Zdd„Z	ˆ xZ
S )Ú!AsyncFinalIteratorCallbackHandlerznCallback handler that returns an async iterator.
    Only the final output of the agent will be iterated.
    c                ó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)ÚselfÚtokens     úl/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/callbacks/streaming_aiter_final_only.pyÚappend_to_last_tokensz7AsyncFinalIteratorCallbackHandler.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_reachedz9AsyncFinalIteratorCallbackHandler.check_if_answer_reached   s9   € Ø×ÒØ×,Ñ,°×0RÑ0RÑRÐRØ×Ñ 4×#<Ñ#<Ñ<Ð<r   NTF)r   r   Ústream_prefixc               ó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 AsyncFinalIteratorCallbackHandler.

        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*AsyncFinalIteratorCallbackHandler.__init__   s®   ø€ ô" 	‰ÑÔØÐ'Ü(DˆDÕ%à(<ˆDÔ%Ùà+/×+DÑ+Dö2Ø"'—‘•ò2ˆDÕ.ð 26×1JÑ1JˆDÔ.Ø˜4¤# d×&?Ñ&?Ó"@Ñ@ˆÔØ%' D¬3¨t×/HÑ/HÓ+IÑ$IˆÔ!Ø(ˆÔØ*ˆÔØ#ˆÕùò2s   µB8c              ‹  óN   K  — | j                   j                  «        d| _        y ­w)NF)ÚdoneÚclearr%   )r   Ú
serializedÚpromptsÚkwargss       r   Úon_llm_startz.AsyncFinalIteratorCallbackHandler.on_llm_start?   s   è ø€ ð 		‰	‰ÔØ#ˆÕùs   ‚#%c              ‹  óZ   K  — | j                   r| j                  j                  «        y y ­wr   )r%   r(   Úset)r   Úresponser,   s      r   Ú
on_llm_endz,AsyncFinalIteratorCallbackHandler.on_llm_endI   s!   è ø€ Ø×ÒØI‰IM‰MOð ùs   ‚)+c              ‹  ó  K  — | j                  |«       | j                  «       r@d| _        | j                  r,| j                  D ]  }| j
                  j                  |«       Œ y | j                  r| j
                  j                  |«       y y ­w)NT)r   r   r%   r   r   ÚqueueÚ
put_nowait)r   r   r,   Úts       r   Úon_llm_new_tokenz2AsyncFinalIteratorCallbackHandler.on_llm_new_tokenM   s   è ø€ à×"Ñ" 5Ô)ð ×'Ñ'Ô)Ø"&ˆDÔØ×!Ò!Ø×)Ñ)ò -AØ—J‘J×)Ñ)¨!Õ,ð-àð ×ÒØJ‰J×!Ñ! %Õ(ð ùs   ‚BB)r   ÚstrÚreturnÚNone)r8   Úbool)r   zOptional[list[str]]r   r:   r   r:   r8   r9   )r*   zdict[str, Any]r+   z	list[str]r,   r   r8   r9   )r0   r   r,   r   r8   r9   )r   r7   r,   r   r8   r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r-   r1   r6   Ú__classcell__)r&   s   @r   r   r      s€   ø„ ñó-ó=ð 59Ø!Ø#ñ $ð 2ð $ð ð	 $ð
 ð $ð 
õ $ðD$à"ð$ð ð$ð ð	$ð
 
ó$ó÷)r   r   N)Ú
__future__r   Útypingr   r   Úlangchain_core.outputsr   Ú#langchain.callbacks.streaming_aiterr   r$   r   © r   r   ú<module>rE      s&   ðÝ "ç  å ,å Lâ7Ð ôO)Ð(Dõ O)r   