
    (Gg                         d dl mZmZmZmZmZmZmZ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 d dlmZmZ d dlmZmZmZ d dlmZ eeed	f   e eef   f   Z! G d
 dee      Z"y)    )
AnyAsyncIteratorCallableDictIteratorListOptionalSequenceUnioncast)UUIDuuid4)BaseCallbackHandler)BaseMessage)ChatGenerationChunk	LLMResult)T_StreamingCallbackHandler)NS_SEP
TAG_HIDDENTAG_NOSTREAM)StreamChunk.c                   D   e Zd ZdZdZ	 deegdf   fdZddded	e	d
e
ddfdZdedee   dee   fdZdedee   dee   fdZdddddeeef   deee	      dedee   deee      deeeef      dedefdZdddddedee   dedee   deee      dedefdZdddededee   dedef
dZddd ededee   dedef
d!Zdddddeeef   d"eeef   dedee   deee      deeeef      dedefd#Z dddededee   dedef
d$Z!ddd ededee   dedef
d%Z"y)&StreamMessagesHandlerzA callback handler that implements stream_mode=messages.
    Collects messages from (1) chat model stream events and (2) node outputs.TstreamNc                 >    || _         i | _        t               | _        y N)r   metadatasetseen)selfr   s     v/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langgraph/pregel/messages.py__init__zStreamMessagesHandler.__init__!   s    *,*-%	    Fdedupemetamessager&   returnc                   |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!   r'   r(   r&   s       r"   _emitzStreamMessagesHandler._emit&   sb    gjjDII-zz! \
IIMM'**%KKa*wQ.@ABr$   run_idoutputc                     |S r    r!   r1   r2   s      r"   tap_output_aiterz&StreamMessagesHandler.tap_output_aiter/   s	     r$   c                     |S r   r4   r5   s      r"   tap_output_iterz%StreamMessagesHandler.tap_output_iter4   s    r$   )parent_run_idtagsr   
serializedr+   r9   r:   r   kwargsc                    |rJ|rt         |vr?t        t        t        |d         j	                  t
                    |f| j                  |<   y y y )Nlanggraph_checkpoint_ns)r   tupler   r.   splitr   r   )r!   r;   r+   r1   r9   r:   r   r<   s           r"   on_chat_model_startz)StreamMessagesHandler.on_chat_model_start7   sJ     T\%=d3)B CDJJ6RS%DMM&! &>8r$   )chunkr9   r:   tokenrB   c                   t        |t              sy | j                  j                  |      x}rL|xs g D cg c]  }|j	                  d      r| }	}|	r|	|d   d<   | j                  ||j                         y y c c}w )Nzseq:stepr,   r:   )
isinstancer   r   get
startswithr0   r(   )
r!   rC   rB   r1   r9   r:   r<   r'   tfiltered_tagss
             r"   on_llm_new_tokenz&StreamMessagesHandler.on_llm_new_tokenH   sx     %!45==$$V,,4,)-U1ALL<TQUMU"/QJJtU]]+	 -Us   A<A<)r9   responsec                <    | j                   j                  |d        y r   r   pop)r!   rK   r1   r9   r<   s        r"   
on_llm_endz StreamMessagesHandler.on_llm_endZ        	&$'r$   errorc                <    | j                   j                  |d        y r   rM   r!   rQ   r1   r9   r<   s        r"   on_llm_errorz"StreamMessagesHandler.on_llm_errord   rP   r$   inputsc                   |rH|j                  d      |j                  d      k(  r#|r	t        |vrt        t        t        |d         j                  t                    |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_noder>   )rF   r   r?   r   r.   r@   r   r   rE   dictitemsr   r-   r    r/   r
   )r!   r;   rU   r1   r9   r:   r   r<   keyvalueitems              r"   on_chain_startz$StreamMessagesHandler.on_chain_startn   s    

6"hll3C&DDZt3 d3)B CDJJ6RS%DMM&! &$'"(,,. ;JC!%5 88/ IIMM%((3#E84Zs=S$) ;D)$<#'77#6$(IIMM$''$:;; ( 4 E r$   c                x   | j                   j                  |d       x}rt        |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 y # t        $ r Y w xY w)NTr%   __dir__)r   rN   rE   r   r0   r
   rY   valueshasattrcallabler`   dirgetattrAttributeError)	r!   rK   r1   r9   r<   r'   r\   r]   r[   s	            r"   on_chain_endz"StreamMessagesHandler.on_chain_end   s    ==$$VT2242(K0

4$
7Hh/% =E!%5

4t
<= Hd+%__. DE!%5

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

4d
 CD	D 9-(8;K;K2Lx= 
C	 '# 6%e[9 JJtU4J@'x8(- H#-dK#@$(JJtT$J$GH
 3M- 32 * s   :AF-F--	F98F9c                <    | j                   j                  |d        y r   rM   rS   s        r"   on_chain_errorz$StreamMessagesHandler.on_chain_error   rP   r$   )#__name__
__module____qualname____doc__
run_inliner   r   r#   Metar   boolr0   r   r   r   r6   r   r8   rY   r.   r   listr	   rA   r   rJ   r   rO   BaseExceptionrT   r   r   r^   rg   ri   r4   r$   r"   r   r      s   Q JY0xt(;< 0
 IN C$ C C CRV C$1!$4	q	
d HQK HQK  )-$(-1cN tK()
   ~ tCy! 4S>*  
* 04(,$(,, +,	,
 ,  ~, tCy!, , 
,. )-(( 	(
  ~( ( 
( )-(( 	(
  ~( ( 
(  )-$(-1;cN; S#X;
 ;  ~; tCy!; 4S>*; ; 
;H )-"" 	"
  ~" " 
"R )-(( 	(
  ~( ( 
(r$   r   N)#typingr   r   r   r   r   r   r	   r
   r   r   uuidr   r   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr   r   !langchain_core.tracers._streamingr   r   langgraph.constantsr   r   r   langgraph.typesr   r?   r.   rY   ro   r   r4   r$   r"   <module>r{      s_       8 / A J @ @ 'U38_d38n,-_(/1J _(r$   