
    9i"                       d dl mZ d dlmZmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ 	 d dlm Z   e	d      Z#e$e$e%df   e&e%ef   f   Z' G d dee       Z(y# e!$ r e"Z Y /w xY w)    )annotations)AsyncIteratorCallableIteratorSequence)AnyTypeVarcast)UUIDuuid4)BaseCallbackHandler)BaseMessage)ChatGenerationChatGenerationChunk	LLMResult)NS_SEP)
TAG_HIDDENTAG_NOSTREAM)StreamChunk)Command)_StreamingCallbackHandlerT.c                  p   e Zd ZdZdZ	 dd	 	 	 	 	 	 	 ddZddddZdd	Z	 	 	 	 	 	 dd
ZddZ	dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
dddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 ddZdddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 d dZdd	 	 	 	 	 	 	 	 	 ddZy)!StreamMessagesHandlerzA callback handler that implements stream_mode=messages.

    Collects messages from:
    (1) chat model stream events; and
    (2) node outputs.
    TN)	parent_nsc               Z    || _         || _        i | _        t               | _        || _        y)a  Configure the handler to stream messages from LLMs and nodes.

        Args:
            stream: A callable that takes a StreamChunk and emits it.
            subgraphs: Whether to emit messages from subgraphs.
            parent_ns: The namespace where the handler was created.
                We keep track of this namespace to allow calls to subgraphs that
                were explicitly requested as a stream with `messages` mode
                configured.

        Example:
            parent_ns is used to handle scenarios where the subgraph is explicitly
            streamed with `stream_mode="messages"`.

            ```python
            def parent_graph_node():
                # This node is in the parent graph.
                async for event in some_subgraph(..., stream_mode="messages"):
                    do something with event # <-- these events will be emitted
                return ...

            parent_graph.invoke(subgraphs=False)
            ```
        N)stream	subgraphsmetadatasetseenr   )selfr   r   r   s       d/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langgraph/pregel/_messages.py__init__zStreamMessagesHandler.__init__(   s)    > "*,$'E	"    Fdedupec                  |r|j                   | j                  v ry |j                   t        t                     |_         | j                  j	                  |j                          | j                  |d   d||d   ff       y )Nr   messages   )idr!   strr   addr   )r"   metamessager'   s       r#   _emitzStreamMessagesHandler._emitM   sb    gjjDII-zz! \
IIMM'**%KKa*wQ.@ABr%   c                8   t        |t              r| j                  ||d       y t        |t              r-|D ]'  }t        |t              s| j                  ||d       ) y t        |t              rx|j                         D ]d  }t        |t              r| j                  ||d       (t        |t              s9|D ]'  }t        |t              s| j                  ||d       ) f y t        |d      rt        |j                        rt        |      D ]p  }	 t        ||      }t        |t              r| j                  ||d       n<t        |t              r,|D ]'  }t        |t              s| j                  ||d       ) r y y y # t        $ r Y w xY w)NTr&   __dir__)
isinstancer   r0   r   dictvalueshasattrcallabler2   dirgetattrAttributeError)r"   r.   responsevalueitemkeys         r#   _find_and_emit_messagesz-StreamMessagesHandler._find_and_emit_messagesV   sx   h,JJtXdJ3(+! 9e[1JJtU4J89 $'!* @e[1JJtU4J8x0 % @%dK8 JJtT$J?@	@ Xy)hx7G7G.H8} 
	#Hc2E!%5

4t
<#E84$) DD)$< $

4d
 CD
 /I) & s   AF2F	FFc                    |S N r"   run_idoutputs      r#   tap_output_aiterz&StreamMessagesHandler.tap_output_aiterr   s	     r%   c                    |S rA   rB   rC   s      r#   tap_output_iterz%StreamMessagesHandler.tap_output_iterw   s    r%   )parent_run_idtagsr   c               Z   |r|rt         |vrt        t        t        |d         j	                  t
                    d d }| j                  st        |      dkD  r|| j                  k7  ry |r)|D 	cg c]  }	|	j                  d      r|	 c}	x}
r|
|d<   ||f| j                  |<   y y y c c}	w )Nlanggraph_checkpoint_nsr   zseq:steprJ   )r   tupler
   r,   splitr   r   lenr   
startswithr   )r"   
serializedr)   rD   rI   rJ   r   kwargsnstfiltered_tagss              r#   on_chat_model_startz)StreamMessagesHandler.on_chat_model_startz   s     Tl$&>tC*C!DEKKFSTB >>c"gkbDNN6J04$U1ALL<TQ$UU=U'4HV$%'NDMM&! '?8 %Vs   /B(B()chunkrI   rJ   c                   t        |t              sy | j                  j                  |      x}r| j	                  ||j
                         y y rA   )r3   r   r   getr0   r/   )r"   tokenrX   rD   rI   rJ   rS   r.   s           r#   on_llm_new_tokenz&StreamMessagesHandler.on_llm_new_token   sC     %!45==$$V,,4,JJtU]]+ -r%   )rI   c               ,   | j                   j                  |      x}r[|j                  rO|j                  d   r@|j                  d   d   }t        |t              r| j                  ||j                  d       | j                   j                  |d        y )Nr   Tr&   )r   rZ   generationsr3   r   r0   r/   pop)r"   r;   rD   rI   rS   r.   gens          r#   
on_llm_endz StreamMessagesHandler.on_llm_end   s}     ==$$V,,4,##(<(<Q(?**1-a0c>2JJtS[[J>&$'r%   c               <    | j                   j                  |d        y rA   r   r_   r"   errorrD   rI   rS   s        r#   on_llm_errorz"StreamMessagesHandler.on_llm_error        	&$'r%   c                  |rh|j                  d      |j                  d      k(  rC|r	t        |vr7t        t        t        |d         j                  t                    d d }| j                  st        |      dkD  ry ||f| j                  |<   t        |t              r|j                         D ]  \  }	}
t        |
t              r3|
j                  #| j                  j!                  |
j                         It        |
t"              sZt        |
t              rk|
D ]E  }t        |t              s|j                  !| j                  j!                  |j                         G  y y y y y )Nnamelanggraph_noderL   rM   r   )rZ   r   rN   r
   r,   rO   r   r   rP   r   r3   r4   itemsr   r+   r!   r-   r   )r"   rR   inputsrD   rI   rJ   r   rS   rT   r>   r<   r=   s               r#   on_chain_startz$StreamMessagesHandler.on_chain_start   s*    

6"hll3C&DDZt3tC*C!DEKKFSTB >>c"gk%'NDMM&!&$'"(,,. ;JC!%5 88/ IIMM%((3#E84Zs=S$) ;D)$<#'77#6$(IIMM$''$:;; ( 4 E r%   c                  | j                   j                  |d       x}rt        |t              r| j	                  ||j
                         y t        |t              rYt        d |D              rG|D ]A  }t        |t              r| j	                  ||j
                         0| j	                  ||       C y | j	                  ||       y y )Nc              3  <   K   | ]  }t        |t                y wrA   )r3   r   ).0r<   s     r#   	<genexpr>z5StreamMessagesHandler.on_chain_end.<locals>.<genexpr>   s      8/4
5'*8s   )r   r_   r3   r   r?   updater   any)r"   r;   rD   rI   rS   r.   r<   s          r#   on_chain_endz"StreamMessagesHandler.on_chain_end   s     ==$$VT2242(G,,,T8??CHh/C 88@8 5 & BE!%144T5<<H44T5A	B ,,T8< 3r%   c               <    | j                   j                  |d        y rA   rc   rd   s        r#   on_chain_errorz$StreamMessagesHandler.on_chain_error   rg   r%   )r   zCallable[[StreamChunk], None]r   boolr   ztuple[str, ...] | NonereturnNone)r.   Metar/   r   r'   rw   rx   ry   )r.   rz   r;   r   rx   ry   )rD   r   rE   AsyncIterator[T]rx   r{   )rD   r   rE   Iterator[T]rx   r|   )rR   dict[str, Any]r)   zlist[list[BaseMessage]]rD   r   rI   UUID | NonerJ   list[str] | Noner   dict[str, Any] | NonerS   r   rx   r   )r[   r,   rX   zChatGenerationChunk | NonerD   r   rI   r~   rJ   r   rS   r   rx   r   )
r;   r   rD   r   rI   r~   rS   r   rx   r   )
re   BaseExceptionrD   r   rI   r~   rS   r   rx   r   )rR   r}   rl   r}   rD   r   rI   r~   rJ   r   r   r   rS   r   rx   r   )
r;   r   rD   r   rI   r~   rS   r   rx   r   )__name__
__module____qualname____doc__
run_inliner$   r0   r?   rF   rH   rW   r\   ra   rf   rm   rt   rv   rB   r%   r#   r   r      so    JX -1##-## ##
 *## 
##J IN C8$4	
 &*!%*.3"3 *3
 3 #3 3 (3 3 
34 -1%)!%,, *	,
 , #, , , 
,( &*(( 	(
 #( ( 
(( &*(( 	(
 #( ( 
(  &*!%*.;"; ;
 ; #; ; (; ; 
;L &*== 	=
 #= = 
=< &*(( 	(
 #( ( 
(r%   r   N))
__future__r   collections.abcr   r   r   r   typingr   r	   r
   uuidr   r   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr   r   r   langgraph._internal._constantsr   langgraph.constantsr   r   langgraph.pregel.protocolr   langgraph.typesr   !langchain_core.tracers._streamingr   ImportErrorobjectr   rN   r,   r4   rz   r   rB   r%   r#   <module>r      s    " G G 
  8 / Q Q 1 8 1 #'K CLU38_d38n,-](/1J ](  ' &'s   B BB