
    }h+                    ^    d dl mZ d dlmZmZ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DictList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     h/var/www/html/engine/venv/lib/python3.12/site-packages/langchain/callbacks/streaming_aiter_final_only.pyappend_to_last_tokensz7AsyncFinalIteratorCallbackHandler.append_to_last_tokens   s|    &!!((7t 3t'@'@#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    ,,0R0RRR##t'@'@@@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    " 	'(DD%(<D%+/+D+D2"'2D. 261J1JD.4#d&?&?"@@%'D3t/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_endG   s!     IIMMO 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_tokenK   s     ""5) '')"&D!!)) -AJJ))!,- JJ!!%( s   BB)r   strreturnNone)r:   bool)r   zOptional[List[str]]r   r<   r!   r<   r:   r;   )r,   zDict[str, Any]r-   z	List[str]r.   r   r:   r;   )r2   r   r.   r   r:   r;   )r   r9   r.   r   r:   r;   )__name__
__module____qualname____doc__r   r    r%   r/   r3   r8   __classcell__)r(   s   @r   r   r      s{    -A 59!# $ 2 $ 	 $
  $ 
 $D$($3<$HK$	$)r   r   N)
__future__r   typingr   r   r   r   langchain_core.outputsr   #langchain.callbacks.streaming_aiterr	   r&   r    r   r   <module>rG      s)    " , , , L7 M)(D M)r   