
    \ǻi"              
         d dl mZ d dlmZmZmZmZ d dlmZ d dl	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mZmZmZmZmZmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*  ed      Z+d$dZ,d%dZ-d&dZ.	 	 	 	 	 	 d'dZ/d(dZ0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)dZ1	 	 	 	 	 	 	 	 	 	 d*dZ2dddddddddd 	Z3d+d!Z4d,d"Z5y#)-    )annotations)IterableIteratorMappingSequenceasdict)Any)UUID)RunnableConfig)CheckpointMetadataPendingWrite)patch_checkpoint_map)CONFCONFIG_KEY_CHECKPOINT_NSERROR	INTERRUPTNS_ENDNS_SEPRETURN)MISSING)BaseChannel)
TAG_HIDDEN)read_channels)CheckpointPayloadPregelExecutableTask
PregelTaskStateSnapshotTaskPayloadTaskResultPayloadz$6ba7b831-9dad-11d1-80b4-00c04fd430c8c              #     K   | D ]b  }|j                   #t        |j                   j                  dg       v r2|j                  |j                  |j
                  |j                  d d yw)z,Produce "task" events for stream_mode=debug.Ntags)idnameinputtriggers)configr   getr#   r$   r%   r&   )taskstasks     T/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/langgraph/pregel/debug.pymap_debug_tasksr,   %   s`      	
;;"zT[[__VR5P'P ''IIZZ	
 	
		
s   A)A+c                X    t        | t              xr d| v xr t        | d   t              S )zOReturn True if the payload already wraps multiple writes from the same channel.$writes)
isinstancedictlist)values    r+   is_multiple_channel_writer3   3   s4     	5$ 	/	/uY'.    c                    i }| D ]I  \  }}|j                  |      }|,t        |      r|d   n|g}|j                  |       d|i||<   E|||<   K |S )aJ  Folds task writes into a result dict and aggregates multiple writes to the same channel.

    If the channel contains a single write, we record the write in the result dict as `{channel: write}`
    If the channel contains multiple writes, we record the writes in the result dict as `{channel: {'$writes': [write1, write2, ...]}}`r.   )r(   r3   append)writesresultchannelr2   existingchannel_writess         r+   map_task_result_writesr<   <   s|      F  $::g& -X6 #Z 
 !!%((.9F7O#F7O$ Mr4   c              #    K   t        |t              r|gn|}| \  }}|j                  |j                  t	        d |D        d      t        |D cg c]  }|d   |v s|d   t        k(  s| c}      |D cg c]<  }|d   t        k(  r.t        |d   t              r|d   n|d   gD ]  }t        |       > c}}d yc c}w c c}}w w)z3Produce "task_result" events for stream_mode=debug.c              3  @   K   | ]  }|d    t         k(  s|d     ywr      N)r   ).0ws     r+   	<genexpr>z)map_debug_task_results.<locals>.<genexpr>_   s     =qtu}qt=s   
Nr   r@   )r#   r$   errorr8   
interrupts)
r/   strr#   r$   nextr<   r   r   r   r	   )task_tupstream_keysstream_channels_listr*   r7   rB   vs          r+   map_debug_task_resultsrL   S   s      $K5;  LD&gg		=V=tD(Q1!A$*>">!A$&.QQ

 
ty (1x8adqtf	
  1I

 
 R
s%   ACC 'C +C6AC7Cc                    | | S d| j                  di       j                         D ci c]  \  }}|j                  d      s|| c}}iS c c}}w )z,Remove pregel-specific keys from the config.configurable	__pregel_)r(   items
startswith)r'   krK   s      r+   rm_pregel_keysrS   l   s\    ~

>26<<>
1<<, qD
 
s   Ac              #    K   | t            j                  t        d      }i }	|D ]d  }
|
j                  s|
j                   t
         |
j                   }|r| t         | }t         d| t            d   t        |ii|	|
j                  <   f t        t        | |            t        t        ||            t        ||      ||D cg c]  }|j                   c}t        |||	|      D cg c]  }|j                  r/|j                  |j                  |j                  |j                  dn|j                  rJ|j                  |j                  |j                  t        d |j                   D              |j                  dn>|j                  |j                  t        d |j                   D              |j                  d c}d y	c c}w c c}w w)
z2Produce "checkpoint" events for stream_mode=debug. 	thread_id)r#   r$   rD   statec              3  2   K   | ]  }t        |        y wNr   rA   is     r+   rC   z'map_debug_checkpoint.<locals>.<genexpr>        #D!F1I#D   )r#   r$   r8   rE   rW   c              3  2   K   | ]  }t        |        y wrY   r   rZ   s     r+   rC   z'map_debug_checkpoint.<locals>.<genexpr>   r\   r]   )r#   r$   rE   rW   )r'   parent_configvaluesmetadatarG   r)   N)r   r(   r   	subgraphsr$   r   r#   r   rS   r   r   tasks_w_writesrD   rW   r8   tuplerE   )r'   channelsstream_channelsra   r)   pending_writesr_   output_keys	parent_nstask_statesr*   task_nsts                r+   map_debug_checkpointrm   y   s     t  !92>I=?K 
~~ YYKxy1"F8G95G VD\+6(' 
DGG
$ !!5fh!GH'(<]H(UV/:!&'A'. $E>;T-
,  ww dd	 xx dd((##Dq||#DD dd##Dq||#DD	
 
 (
s   CGGG(CG?Gc                   |xs g }g }| D ]  t        fd|D        t              }t        fd|D        d      }t        fd|D              }|D 	
cg c],  \  }}	}
|j                  k(  r|	t        t
        t        fvr|	|
f. }}	}}
|t        ur|}nt        |t              rF|D 	
cg c]  \  }	}
|	|k(  s|	|
f }}	}
t        |      }|r|j                  t        |            nd}n?t        |t              r|g}|D 	
cg c]  \  }	}
|	|v s|	|
f }}	}
t        |      }|r|ni }|t        uxs t        fd|D              }|j                  t        j                  j                  j                  |||r|j                  j                        nd|r|nd              t        |      S c c}
}	}w c c}
}	w c c}
}	w )zJApply writes / subgraph states to tasks to be returned in a StateSnapshot.c              3  Z   K   | ]"  \  }}}|j                   k(  r|t        k(  r| $ y wrY   )r#   r   )rA   tidchanvalr*   s       r+   rC   z!tasks_w_writes.<locals>.<genexpr>   s0      "Cs$''>dfn s   (+c              3  ^   K   | ]$  \  }}}|j                   k(  s|t        k(  s!| & y wrY   )r#   r   )rA   rp   nexcr*   s       r+   rC   z!tasks_w_writes.<locals>.<genexpr>   s'     T[S!ScTWWneSTs   -	--Nc              3     K   | ]<  \  }}}|j                   k(  r'|t        k(  rt        |t              r|n|gD ]  }|  > y wrY   )r#   r   r/   r   )rA   rp   rt   vvrK   r*   s        r+   rC   z!tasks_w_writes.<locals>.<genexpr>   sR       
Qdgg~!y.&r84b2$	 
   
 
s   AAc              3  h   K   | ])  }|d    j                   k(  xr |d   t        t        fv + ywr?   )r#   r   r   )rA   rB   r*   s     r+   rC   z!tasks_w_writes.<locals>.<genexpr>   s8      /
CDAaDDGGO>!UI,> >>/
s   /2)rG   r   rd   r#   r   r   r   r/   rF   r<   r(   anyr6   r   r$   path)r)   rg   statesrh   outrtn
task_errortask_interruptsrp   rq   rr   task_writestask_resultfiltered_writesmapped_writes
has_writesr*   s                   @r+   rc   rc      s    $)rNC <
&4
 
 TNT

    
, 
 
 #1
 
T3dgg~$ui.H"H 3K
 
 gKS) .9 )cDK<OsO  3?CMAN-++C,<=TXK+s+*m .9 )cDK<OsO  3?CM+:-K' 
3 /
HV/
 ,

 	

				'-

477#4)t
	
e<
z :S
s   1F8
-F?;F?GGz0;30z0;31z0;32z0;33z0;34z0;35z0;36z0;37z1;30)	blackredgreenyellowbluemagentacyanwhitegrayc                "    dt         |    d|  dS )zGet colored text.z[1;3m[0m)COLOR_MAPPING)textcolors     r+   get_colored_textr     s    mE*+1TF'::r4   c                    d|  dS )zGet bolded text.z[1mr    )r   s    r+   get_bolded_textr     s    TF'""r4   N)r)   Iterable[PregelExecutableTask]returnzIterator[TaskPayload])r2   r
   r   bool)r7   zSequence[tuple[str, Any]]r   zdict[str, Any])rH   z6tuple[PregelExecutableTask, Sequence[tuple[str, Any]]]rI   str | Sequence[str]r   zIterator[TaskResultPayload])r'   RunnableConfig | Noner   r   )r'   r   re   zMapping[str, BaseChannel]rf   r   ra   r   r)   r   rg   zlist[PendingWrite]r_   r   rh   r   r   zIterator[CheckpointPayload])
r)   z+Iterable[PregelTask | PregelExecutableTask]rg   zlist[PendingWrite] | Noner{   z0dict[str, RunnableConfig | StateSnapshot] | Nonerh   r   r   ztuple[PregelTask, ...])r   rF   r   rF   r   rF   )r   rF   r   rF   )6
__future__r   collections.abcr   r   r   r   dataclassesr	   typingr
   uuidr   langchain_core.runnablesr   langgraph.checkpoint.baser   r   langgraph._internal._configr   langgraph._internal._constantsr   r   r   r   r   r   r   langgraph._internal._typingr   langgraph.channels.baser   langgraph.constantsr   langgraph.pregel._ior   langgraph.typesr   r   r   r   r   r    TASK_NAMESPACEr,   r3   r<   rL   rS   rm   rc   r   r   r   r   r4   r+   <module>r      sK   " A A    3 F <   0 / * .  <=
.D$ !2
>>'> )> !	>
 *> '> )> %> !>BF6F-F =F %	F
 FT 
;
#r4   