ó
    +Ðå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     Ú^/root/34ku/venv/lib/python3.13/site-packages/langchain/callbacks/streaming_aiter_final_only.pyÚappend_to_last_tokensÚ7AsyncFinalIteratorCallbackHandler.append_to_last_tokens   s|   € Ø×Ñ×Ñ Ô&Ø×!Ñ!×(Ñ(¨¯©«Ô7Üˆt×ÑÓ ¤3 t×'@Ñ'@Ó#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_reachedÚ9AsyncFinalIteratorCallbackHandler.check_if_answer_reached   s9   € Ø××Ø×,Ñ,°×0RÑ0RÑRÐRØ×Ñ 4×#<Ñ#<Ñ<Ð<r   NTF)r   r   Ústream_prefixc               ó„  >• [         TU ]  5         Uc  [        U l        OXl        U(       a0  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«   ø€ ô" 	‰ÑÔØÑ'Ü(DˆDÕ%à(<Ô%Þà+/×+DÒ+Dó2Ú+D %—‘–Ñ+Dñ2ˆDÕ.ð 26×1JÑ1JˆDÔ.Ø˜4¤# d×&?Ñ&?Ó"@Ñ@ˆÔØ%' D¬3¨t×/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    é € Ø××ØI‰IM‰MOð ù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_tokenÚ2AsyncFinalIteratorCallbackHandler.on_llm_new_tokenM   s|   é € à×"Ñ" 5Ô)ð ×'Ñ'×)Ñ)Ø"&ˆDÔØ×!×!Ø×)Ô)AØ—J‘J×)Ñ)¨!Ö,ñ *àð ××ØJ‰J×!Ñ! %Õ(ð ù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   