
    MKi!                    F   S SK Jr  S SKJrJrJrJr  S SKJrJ	r	  S SK
JrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJr  S S
KJr  S SKJrJr  S SK J!r!  S SK"J#r#   S SK$J%r%  \" S5      r(\)\)\*S4   \+\*\4   4   r,SS jr- " S S\\%5      r.g! \& a    \'r% N5f = f)    )annotations)AsyncIteratorCallableIteratorSequence)fieldsis_dataclass)AnyTypeVarcast)UUIDuuid4)BaseCallbackHandler)BaseMessage)ChatGenerationChatGenerationChunk	LLMResult)	BaseModel)NS_SEP)
TAG_HIDDENTAG_NOSTREAM)StreamChunk)Command)_StreamingCallbackHandlerT.c                   [        U [        5      (       a  [        U R                  5       5      $ [        U [        5      (       a/  [        U 5      R                   Vs/ s H  n[        X5      PM     sn$ [        U 5      (       aD  [        U [
        5      (       d/  [        U 5       Vs/ s H  n[        XR                  5      PM     sn$ gs  snf s  snf )zSExtract top-level field values from a state object (dict, BaseModel, or dataclass). )
isinstancedictlistvaluesr   typemodel_fieldsgetattrr	   r   name)objkfs      \/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langgraph/pregel/_messages.py_state_valuesr*      s    #tCJJL!!	C	#	#)-c)?)?@)?A)?@@	c		:c4#8#8.4Sk:kVV$k:: A:s   C%Cc                     \ rS rSrSrSr SS.       SS jjrSS.SS	 jjrSS
 jr      SS jr	SS jr
SSSS.               SS jjrSSSS.             SS jjrSS.         SS jjrSS.         S S jjrSSSS.               S!S jjrSS.         S"S jjrSS.         S S jjrSrg)#StreamMessagesHandler*   zA callback handler that implements stream_mode=messages.

Collects messages from:
(1) chat model stream events; and
(2) node outputs.
TN)	parent_nsc               T    Xl         X l        0 U l        [        5       U l        X0l        g)aC  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.   )selfr0   r1   r.   s       r)   __init__StreamMessagesHandler.__init__5   s#    > "*,$'E	"    Fdedupec                  U(       a  UR                   U R                  ;   a  g UR                   c  [        [        5       5      Ul         U R                  R	                  UR                   5        U R                  US   SX!S   445        g )Nr   messages   )idr4   strr   addr0   )r5   metamessager:   s       r)   _emitStreamMessagesHandler._emitZ   s`    gjjDII-zz! \
IIMM'**%KKa*wQ.@ABr8   c                   [        U[        5      (       a  U R                  XSS9  g [        U[        5      (       a1  U H*  n[        U[        5      (       d  M  U R                  XSS9  M,     g [	        U5       Hq  n[        U[        5      (       a  U R                  XSS9  M*  [        U[        5      (       d  MA  U H*  n[        U[        5      (       d  M  U R                  XSS9  M,     Ms     g )NTr9   )r   r   rC   r   r*   )r5   rA   responsevalueitems        r)   _find_and_emit_messages-StreamMessagesHandler._find_and_emit_messagesc   s    h,,JJtdJ3(++!e[11JJt4J8 " 'x0e[11JJt4J8x00 %%dK88 JJt$J? !&	 1r8   c                    U$ Nr   r5   run_idoutputs      r)   tap_output_aiter&StreamMessagesHandler.tap_output_aiters   s	     r8   c                    U$ rL   r   rM   s      r)   tap_output_iter%StreamMessagesHandler.tap_output_iterx   s    r8   )parent_run_idtagsr2   c                  U(       a  U(       a
  [         U;  a  [        [        [        US   5      R	                  [
        5      5      S S nU R                  (       d  [        U5      S:  a  XR                  :w  a  g U(       a5  U V	s/ s H  oR                  S5      (       a  M  U	PM     sn	=n
(       a  XS'   X4U R                  U'   g g g s  sn	f )Nlanggraph_checkpoint_nsr   zseq:steprV   )r   tupler   r?   splitr   r1   lenr.   
startswithr2   )r5   
serializedr<   rN   rU   rV   r2   kwargsnstfiltered_tagss              r)   on_chat_model_start)StreamMessagesHandler.on_chat_model_start{   s     Tl$&>tC*C!DEKKFSTB >>c"gkbNN6J04$U1LL<TQ$UU=U'4V$%'NDMM&! '?8 %Vs   C
#C
)chunkrU   rV   c                   [        U[        5      (       d  g U R                  R                  U5      =n(       a  U R	                  XrR
                  5        g g rL   )r   r   r2   getrC   rB   )r5   tokenre   rN   rU   rV   r_   rA   s           r)   on_llm_new_token&StreamMessagesHandler.on_llm_new_token   sD     %!455==$$V,,4,JJt]]+ -r8   )rU   c               L   U R                   R                  U5      =n(       af  UR                  (       aU  UR                  S   (       aA  UR                  S   S   n[        U[        5      (       a  U R                  XVR                  SS9  U R                   R                  US 5        g )Nr   Tr9   )r2   rg   generationsr   r   rC   rB   pop)r5   rF   rN   rU   r_   rA   gens          r)   
on_llm_end StreamMessagesHandler.on_llm_end   s~     ==$$V,,4,##(<(<Q(?**1-a0c>22JJt[[J>&$'r8   c               <    U R                   R                  US 5        g rL   r2   rm   r5   errorrN   rU   r_   s        r)   on_llm_error"StreamMessagesHandler.on_llm_error        	&$'r8   c                  U(       Ga|  UR                  S5      UR                  S5      :X  GaV  U(       a  [        U;  GaC  [        [        [        US   5      R                  [        5      5      S S nU R                  (       d  [        U5      S:  a  g X4U R                  U'   [        U5       H  n	[        U	[        5      (       a6  U	R                  b'  U R                  R                  U	R                  5        ML  MN  [        U	[         5      (       d  Me  [        U	[        5      (       a  M|  U	 HN  n
[        U
[        5      (       d  M  U
R                  c  M)  U R                  R                  U
R                  5        MP     M     g g g g )Nr%   langgraph_noderX   rY   r   )rg   r   rZ   r   r?   r[   r   r1   r\   r2   r*   r   r   r>   r4   r@   r   )r5   r^   inputsrN   rU   rV   r2   r_   r`   rG   rH   s              r)   on_chain_start$StreamMessagesHandler.on_chain_start   s    

6"hll3C&DDZt3tC*C!DEKKFSTB >>c"gk%'NDMM&!&v.e[11xx+		ehh/ ,x00E39O9O %%dK88#ww2 $		dgg 6 !& / 4 E r8   c                  U R                   R                  US 5      =n(       a  [        U[        5      (       a  U R	                  XQR
                  5        g [        U[        5      (       ad  [        S U 5       5      (       aM  U HF  n[        U[        5      (       a  U R	                  XVR
                  5        M5  U R	                  XV5        MH     g U R	                  XQ5        g g )Nc              3  B   #    U  H  n[        U[        5      v   M     g 7frL   )r   r   ).0rG   s     r)   	<genexpr>5StreamMessagesHandler.on_chain_end.<locals>.<genexpr>   s      88@u
5'**s   )r2   rm   r   r   rI   updater   any)r5   rF   rN   rU   r_   rA   rG   s          r)   on_chain_end"StreamMessagesHandler.on_chain_end   s     ==$$VT2242(G,,,,T??CHh//C 88@8 5 5 &E!%1144T<<H44TA	 & ,,T< 3r8   c               <    U R                   R                  US 5        g rL   rr   rs   s        r)   on_chain_error$StreamMessagesHandler.on_chain_error   rw   r8   )r2   r.   r4   r0   r1   )r0   zCallable[[StreamChunk], None]r1   boolr.   ztuple[str, ...] | NonereturnNone)rA   MetarB   r   r:   r   r   r   )rA   r   rF   r
   r   r   )rN   r   rO   AsyncIterator[T]r   r   )rN   r   rO   Iterator[T]r   r   )r^   dict[str, Any]r<   zlist[list[BaseMessage]]rN   r   rU   UUID | NonerV   list[str] | Noner2   dict[str, Any] | Noner_   r
   r   r
   )rh   r?   re   zChatGenerationChunk | NonerN   r   rU   r   rV   r   r_   r
   r   r
   )
rF   r   rN   r   rU   r   r_   r
   r   r
   )
rt   BaseExceptionrN   r   rU   r   r_   r
   r   r
   )r^   r   rz   r   rN   r   rU   r   rV   r   r2   r   r_   r
   r   r
   )
rF   r
   rN   r   rU   r   r_   r
   r   r
   )__name__
__module____qualname____firstlineno____doc__
run_inliner6   rC   rI   rP   rS   rc   ri   ro   ru   r{   r   r   __static_attributes__r   r8   r)   r,   r,   *   su    JX -1##-## ##
 *## 
##J IN C@ $4	
 &*!%*.3"3 *3
 3 #3 3 (3 3 
34 -1%)!%,, *	,
 , #, , , 
,( &*(( 	(
 #( ( 
(( &*(( 	(
 #( ( 
(  &*!%*.7"7 7
 7 #7 7 (7 7 
7J &*== 	=
 #= = 
=< &*(( 	(
 #( ( 
( (r8   r,   N)r&   r
   r   zSequence[Any])/
__future__r   collections.abcr   r   r   r   dataclassesr   r	   typingr
   r   r   uuidr   r   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr   r   r   pydanticr   langgraph._internal._constantsr   langgraph.constantsr   r   langgraph.pregel.protocolr   langgraph.typesr   !langchain_core.tracers._streamingr   ImportErrorobjectr   rZ   r?   r   r   r*   r,   r   r8   r)   <module>r      s    " G G , 
  8 / Q Q  1 8 1 #'K CLU38_d38n,-P(/1J P(%  ' &'s   $B B B 