
    }
i!                    d   d dl mZ d dlmZmZ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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 d dlmZmZ d dl m!Z! d dl"m#Z# 	 d dl$m%Z% n# e&$ r e'Z%Y nw xY w ed          Z(e)e)e*df         e+e*ef         f         Z,ddZ- G d dee%          Z.dS )    )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.objr
   returnSequence[Any]c                \    t           t                    r!t                                                     S t           t                    r  fdt                     j        D             S t                     r0t           t
                    s fdt                     D             S dS )zSExtract top-level field values from a state object (dict, BaseModel, or dataclass).c                0    g | ]}t          |          S  )getattr).0kr   s     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/pregel/_messages.py
<listcomp>z!_state_values.<locals>.<listcomp>$   s!    @@@AQ@@@    c                :    g | ]}t          |j                  S r!   )r"   name)r#   fr   s     r%   r&   z!_state_values.<locals>.<listcomp>&   s%    :::QV$$:::r'   r!   )	
isinstancedictlistvaluesr   typemodel_fieldsr	   r   )r   s   `r%   _state_valuesr1      s    #t ;CJJLL!!!	C	#	# ;@@@@c)?@@@@	c		 ;:c4#8#8 ;::::fSkk::::2r'   c                      e Zd ZdZdZ	 ddd=dZddd>dZd?dZd@dZdAdZ	dddd dBd,Z
dddd-dCd2Zdd3dDd5Zdd3dEd8Zdddd dFd:Zdd3dGd;Zdd3dEd<ZdS )HStreamMessagesHandlerzA callback handler that implements stream_mode=messages.

    Collects messages from:
    (1) chat model stream events; and
    (2) node outputs.
    TN)	parent_nsstreamCallable[[StreamChunk], None]	subgraphsboolr4   tuple[str, ...] | Noner   Nonec               d    || _         || _        i | _        t                      | _        || _        dS )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)r5   r7   metadatasetseenr4   )selfr5   r7   r4   s       r%   __init__zStreamMessagesHandler.__init__5   s/    > "*,$'EE	"r'   FdedupemetaMetamessager   rB   c                  |r|j         | j        v rd S |j          t          t                                |_         | j                            |j                    |                     |d         d||d         ff           d S )Nr   messages   )idr>   strr   addr5   )r?   rC   rE   rB   s       r%   _emitzStreamMessagesHandler._emitZ   sy     	CgjDI--Fz! \\
IMM'*%%%KKa*wQ.@ABBBBBr'   responser
   c                   t          |t                    r|                     ||d           d S t          |t                    r4|D ]/}t          |t                    r|                     ||d           0d S t	          |          D ]w}t          |t                    r|                     ||d           0t          |t                    r2|D ]/}t          |t                    r|                     ||d           0xd S )NTrA   )r+   r   rL   r   r1   )r?   rC   rM   valueitems        r%   _find_and_emit_messagesz-StreamMessagesHandler._find_and_emit_messagesc   s0   h,, 	@JJtXdJ33333(++ 	@! 9 9e[11 9JJtU4J8889 9 'x00 @ @e[11 @JJtU4J8888x00 @ % @ @%dK88 @ JJtT$J???@ @r'   run_idr   outputAsyncIterator[T]c                    |S Nr!   r?   rR   rS   s      r%   tap_output_aiterz&StreamMessagesHandler.tap_output_aiters   s	     r'   Iterator[T]c                    |S rV   r!   rW   s      r%   tap_output_iterz%StreamMessagesHandler.tap_output_iterx   s    r'   )parent_run_idtagsr<   
serializeddict[str, Any]rG   list[list[BaseMessage]]r\   UUID | Noner]   list[str] | Noner<   dict[str, Any] | Nonekwargsc               H   |r|r	t           |vrt          t          t          |d                                       t
                              d d         }| j        s t          |          dk    r|| j        k    rd S |rd |D             x}	r|	|d<   ||f| j	        |<   d S d S d S )Nlanggraph_checkpoint_nsr   c                <    g | ]}|                     d           |S )zseq:step)
startswith)r#   ts     r%   r&   z=StreamMessagesHandler.on_chat_model_start.<locals>.<listcomp>   s)    $U$U$U1ALL<T<T$UQ$U$U$Ur'   r]   )
r   tupler   rJ   splitr   r7   lenr4   r<   )
r?   r^   rG   rR   r\   r]   r<   rd   nsfiltered_tagss
             r%   on_chat_model_startz)StreamMessagesHandler.on_chat_model_start{   s      		3T 		3l$&>&>tC*C!DEEKKFSSTTB > c"ggkkbDN6J6J 5$U$U$U$U$UU= 5'4HV$%'NDM&!!!		3 		3&>&>r'   )chunkr\   r]   tokenrJ   rq   ChatGenerationChunk | Nonec                   t          |t                    sd S | j                            |          x}r|                     ||j                   d S d S rV   )r+   r   r<   getrL   rE   )r?   rr   rq   rR   r\   r]   rd   rC   s           r%   on_llm_new_tokenz&StreamMessagesHandler.on_llm_new_token   s_     %!455 	F=$$V,,,4 	,JJtU]+++++	, 	,r'   )r\   r   c               &   | j                             |          x}rY|j        rR|j        d         rE|j        d         d         }t          |t                    r|                     ||j        d           | j                             |d            d S )Nr   TrA   )r<   ru   generationsr+   r   rL   rE   pop)r?   rM   rR   r\   rd   rC   gens          r%   
on_llm_endz StreamMessagesHandler.on_llm_end   s     =$$V,,,4 	?# ?(<Q(? ?*1-a0c>22 ?JJtS[J>>>&$'''''r'   errorBaseExceptionc               <    | j                             |d            d S rV   r<   ry   r?   r|   rR   r\   rd   s        r%   on_llm_errorz"StreamMessagesHandler.on_llm_error   "     	&$'''''r'   inputsc                  |ra|                     d          |                     d          k    r6|r
t          |vr,t          t          t          |d                                       t                              d d         }| j        st          |          dk    rd S ||f| j	        |<   t          |          D ]}	t          |	t                    r'|	j        | j                            |	j                   >t          |	t                     rUt          |	t                    s@|	D ]=}
t          |
t                    r&|
j        | j                            |
j                   >d S d S d S d S )Nr)   langgraph_noderf   rg   r   )ru   r   rk   r   rJ   rl   r   r7   rm   r<   r1   r+   r   rI   r>   rK   r   )r?   r^   r   rR   r\   r]   r<   rd   rn   rO   rP   s              r%   on_chain_startz$StreamMessagesHandler.on_chain_start   sv    	7

6""hll3C&D&DDD E't33tC*C!DEEKKFSSTTB > c"ggkk%'NDM&!&v.. 7 7e[11 7x+	eh///x00 7E39O9O 7 % 7 7%dK88 7#w2 $	dg 6 6 6'	7 	7DD337 7r'   c                  | j                             |d           x}rt          |t                    r|                     ||j                   d S t          |t                    rgt          d |D                       rN|D ]I}t          |t                    r|                     ||j                   3|                     ||           Jd S |                     ||           d S d S )Nc              3  @   K   | ]}t          |t                    V  d S rV   )r+   r   )r#   rO   s     r%   	<genexpr>z5StreamMessagesHandler.on_chain_end.<locals>.<genexpr>   s=       8 8/4
5'**8 8 8 8 8 8r'   )r<   ry   r+   r   rQ   updater   any)r?   rM   rR   r\   rd   rC   rO   s          r%   on_chain_endz"StreamMessagesHandler.on_chain_end   s     =$$VT2224 	=(G,, =,,T8?CCCCCHh// 
=C 8 88@8 8 8 5 5 
= & B BE!%11 B44T5<HHHH44T5AAAA	B B ,,T8<<<<<	= 	=r'   c               <    | j                             |d            d S rV   r   r   s        r%   on_chain_errorz$StreamMessagesHandler.on_chain_error   r   r'   )r5   r6   r7   r8   r4   r9   r   r:   )rC   rD   rE   r   rB   r8   r   r:   )rC   rD   rM   r
   r   r:   )rR   r   rS   rT   r   rT   )rR   r   rS   rY   r   rY   )r^   r_   rG   r`   rR   r   r\   ra   r]   rb   r<   rc   rd   r
   r   r
   )rr   rJ   rq   rs   rR   r   r\   ra   r]   rb   rd   r
   r   r
   )
rM   r   rR   r   r\   ra   rd   r
   r   r
   )
r|   r}   rR   r   r\   ra   rd   r
   r   r
   )r^   r_   r   r_   rR   r   r\   ra   r]   rb   r<   rc   rd   r
   r   r
   )
rM   r
   rR   r   r\   ra   rd   r
   r   r
   )__name__
__module____qualname____doc__
run_inliner@   rL   rQ   rX   r[   rp   rv   r{   r   r   r   r   r!   r'   r%   r3   r3   *   s         JX -1## ## ## ## ## ##J IN C C C C C C@ @ @ @    
    &*!%*.3 3 3 3 3 34 -1%)!%, , , , , ,( &*( ( ( ( ( (( &*( ( ( ( ( (  &*!%*.7 7 7 7 7 7J &*= = = = = =< &*( ( ( ( ( ( ( (r'   r3   N)r   r
   r   r   )/
__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   rk   rJ   r,   rD   r1   r3   r!   r'   r%   <module>r      s   " " " " " " G G G G G G G G G G G G , , , , , , , ,         
         8 8 8 8 8 8 / / / / / / Q Q Q Q Q Q Q Q Q Q       1 1 1 1 1 1 8 8 8 8 8 8 8 8 1 1 1 1 1 1 # # # # # #'KKKKKKK ' ' ' &' GCLLU38_d38n,-   P( P( P( P( P(/1J P( P( P( P( P(s   $A+ +A54A5