
    @h&                    V    S SK Jr  S SKJrJr  S SKJr  S SKJr  / SQr	 " S S\5      r
g)	    )annotations)AnyOptional)	LLMResult)AsyncIteratorCallbackHandler)FinalAnswer:c                     ^  \ rS rSrSrSS jrSS jrSSSS.       SU 4S	 jjjr        SS
 jrSS jr	SS jr
SrU =r$ )!AsyncFinalIteratorCallbackHandler   zfCallback handler that returns an async iterator.
Only the final output of the agent will be iterated.
c                R   U R                   R                  U5        U R                  R                  UR                  5       5        [	        U R                   5      [	        U R
                  5      :  a7  U R                   R                  S5        U R                  R                  S5        g g )Nr   )last_tokensappendlast_tokens_strippedstriplenanswer_prefix_tokenspop)selftokens     f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/callbacks/streaming_aiter_final_only.pyappend_to_last_tokens7AsyncFinalIteratorCallbackHandler.append_to_last_tokens   s|    &!!((7t 3t'@'@#AA  #%%))!, B    c                    U R                   (       a  U R                  U R                  :H  $ U R                  U R                  :H  $ N)strip_tokensr   answer_prefix_tokens_strippedr   r   )r   s    r   check_if_answer_reached9AsyncFinalIteratorCallbackHandler.check_if_answer_reached   s9    ,,0R0RRR4#<#<<<r   NTF)r   r   stream_prefixc                 > [         TU ]  5         Uc  [        U l        OXl        U(       a/  U R                   Vs/ sH  oDR	                  5       PM     snU l        OU R                  U l        S/[        U R                  5      -  U l        S/[        U R                  5      -  U l        X l	        X0l
        SU l        gs  snf )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&   *AsyncFinalIteratorCallbackHandler.__init__   s    " 	'(DD%(<%+/+D+D2+D%+D2D. 261J1JD.4#d&?&?"@@%'D3t/H/H+I$I!(*#2s   B<c                N   #    U R                   R                  5         SU l        g 7f)NF)doneclearr(   )r   
serializedpromptskwargss       r   on_llm_start.AsyncFinalIteratorCallbackHandler.on_llm_start?   s      			#s   #%c                d   #    U R                   (       a  U R                  R                  5         g g 7fr   )r(   r,   set)r   responser0   s      r   
on_llm_end,AsyncFinalIteratorCallbackHandler.on_llm_endI   s      IIMMO s   .0c                @  #    U R                  U5        U R                  5       (       aG  SU l        U R                  (       a.  U R                   H  nU R
                  R                  U5        M      g U R                  (       a  U R
                  R                  U5        g g 7f)NT)r   r    r(   r"   r   queue
put_nowait)r   r   r0   ts       r   on_llm_new_token2AsyncFinalIteratorCallbackHandler.on_llm_new_tokenM   s|     ""5) ''))"&D!!))AJJ))!, * JJ!!%( s   BB)r   r   r(   r   r   r"   r   )r   strreturnNone)r?   bool)r   zOptional[list[str]]r   rA   r"   rA   r?   r@   )r.   zdict[str, Any]r/   z	list[str]r0   r   r?   r@   )r5   r   r0   r   r?   r@   )r   r>   r0   r   r?   r@   )__name__
__module____qualname____firstlineno____doc__r   r    r&   r1   r6   r<   __static_attributes____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>rN      s&    "   , L7 O)(D O)r   