
    \ǻiX                    D   d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZmZ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 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" 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/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZWmXZX d dlYmZZZm[Z[ d dl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZg d dlhmiZimjZjmkZkmlZl d dlmmnZnmoZompZp d dlqmrZrmsZsmtZtmuZumvZv d dlwmxZx d dlymzZzm{Z{ d d l|m}Z}m~Z~mZ d d!lmZmZ d d"lmZmZmZmZmZmZmZmZ  ed#      Z e0d$      Zeeeef      Zd,d%Z G d& d'      Z G d( d)ee      Z G d* d+ee      Zy)-    )annotationsN)defaultdictdeque)CallableIteratorMappingSequence)AbstractAsyncContextManagerAbstractContextManagerAsyncExitStack	ExitStack)datetimetimezone)	signature)TracebackType)AnyLiteralTypeVarcast)AsyncParentRunManagerParentRunManager)RunnableConfig)	BaseCache)WRITES_IDX_MAPBaseCheckpointSaverChannelVersions
CheckpointCheckpointMetadataCheckpointTuplePendingWrite)	BaseStore)	ParamSpecSelf)patch_configurable)CONFCONFIG_KEY_CHECKPOINT_IDCONFIG_KEY_CHECKPOINT_MAPCONFIG_KEY_CHECKPOINT_NSCONFIG_KEY_REPLAY_STATECONFIG_KEY_RESUME_MAPCONFIG_KEY_RESUMINGCONFIG_KEY_SCRATCHPADCONFIG_KEY_STREAMCONFIG_KEY_TASK_IDCONFIG_KEY_THREAD_IDERRORINPUT	INTERRUPTNS_ENDNS_SEPNULL_TASK_IDPUSHRESUMETASKS)ReplayState)PregelScratchpad)	EMPTY_SEQMISSING)BaseChannel)UntrackedValue)
TAG_HIDDEN)EmptyInputErrorGraphInterrupt)ManagedValueMappingManagedValueSpec)CallGetNextVersionPregelTaskWritesapply_writescheckpoint_null_version	incrementprepare_next_tasksprepare_single_task!sanitize_untracked_values_in_sendshould_interrupttask_path_str)channels_from_checkpointcopy_checkpointcreate_checkpointempty_checkpoint)AsyncBackgroundExecutorBackgroundExecutorSubmit)map_command	map_inputmap_output_updatesmap_output_valuesread_channels)
PregelNode)get_new_channel_versionsis_xxh3_128_hexdigest)map_debug_checkpointmap_debug_task_resultsmap_debug_tasks)StreamChunkStreamProtocol)AllCachePolicyCommand
DurabilityPregelExecutableTaskRetryPolicySend
StreamModeVPc            	     v     d fd}t        | D ch c]  }|j                  D ]  }|  c}}      S c c}}w )Nc                H    D ]  }| d   |j                   v s ||         y )N   )modes)valuestreamstreamss     T/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/langgraph/pregel/_loop.py__call__zDuplexStream.<locals>.__call__   s)     	FQx6<<'u	    )rq   ra   returnNone)rb   rp   )rs   ru   smodes   `   rt   DuplexStreamr{      s5    
 (7$Oaqww$OtT$OT$OPP$Os   5c                     e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d ed!<   d"ed#<   d$ed%<   d&ed'<   d(ed)<   ded*<   d+ed,<   d-ed.<   d/ed0<   d1ed2<   d3ed4<   d5ed6<   d7ed8<   d9ed:<   ded;<   d<ed=<   d>ed?<   d@edA<   dBedC<   dDedE<   dFedG<   dHZdIedJ<   dHZdKedL<   eedHdHdMdHdN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d`dOZdadPZdbdQZ		 dc	 	 	 	 	 	 	 dddRZ
dedSZdbdTZdfdUZdfdVZdgdWZdhdXZ	 	 	 	 	 	 didYZdjdZZ	 	 	 	 	 	 	 	 dkd[Z	 	 	 	 	 	 	 	 	 	 dld\Zd]d^	 	 	 	 	 	 	 dmd_ZyH)n
PregelLoopr   configBaseStore | NonestoreStreamProtocol | Nonerr   intstepstop
Any | NoneinputzBaseCache[WritesT] | NonecacheBaseCheckpointSaver | NonecheckpointerMapping[str, PregelNode]nodes,Mapping[str, BaseChannel | ManagedValueSpec]specsstr | Sequence[str]
input_keysoutput_keysstream_keysboolis_replaying	is_nested/None | AsyncParentRunManager | ParentRunManagermanagerAll | Sequence[str]interrupt_afterinterrupt_beforerf   
durabilitySequence[RetryPolicy]retry_policyCachePolicy | Nonecache_policyrE   checkpointer_get_next_versionz4Callable[[RunnableConfig, WritesT, str], Any] | Nonecheckpointer_put_writes)checkpointer_put_writes_accepts_task_pathzjCallable[[concurrent.futures.Future | None, RunnableConfig, Checkpoint, str, ChannelVersions], Any] | None _checkpointer_put_after_previous#Callable[[Checkpoint], None] | None_migrate_checkpointrU   submitzMapping[str, BaseChannel]channelsrB   managedr   
checkpointstrcheckpoint_id_savedztuple[str, ...]checkpoint_nscheckpoint_configr   checkpoint_metadatazlist[PendingWrite]checkpoint_pending_writeszdict[str, str | float | int]checkpoint_previous_versionszRunnableConfig | Noneprev_checkpoint_configzZLiteral['input', 'pending', 'done', 'interrupt_before', 'interrupt_after', 'out_of_steps']statuszdict[str, PregelExecutableTask]tasksNzNone | dict[str, Any] | Anyoutputset[str] | Noneupdated_channels )r   r   r   migrate_checkpointr   r   c          
        || _         || _        || _        d| _        d| _        || _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        t         | j                  j#                  t$        i       v | _        t(        |t$           v | _        || _        || _        || _        || _        || _        | j                   8t6        |t$           v r)t9        | j                   |t$           t6                 | _         |t$           j#                  t:              }t=        |t>              r_|jA                         x}rMtC        | j                  tD        tG        jH                  |t$           tD           tK        |      f      i      | _        | j&                  sC|t$           j#                  tD              r'tC        | j                  tD        dt(        d i      | _        tL        | j                  t$           v r| j                  t$           j#                  tD              | j                  t$           tL           v rUtC        | j                  t(        | j                  t$           tL           | j                  t$           tD              i      | _'        n| j                  | _'        | jN                  t$           j#                  tP              x}r:t=        |tJ              s*tC        | jN                  tP        tK        |      i      | _'        | j                  t$           j#                  tD              rDtS        tU        tJ        | j                  t$           tD                 jW                  tF                    nd| _,        d | _-        y )Nr    r   ).rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   getr%   r   r&   r   r   trigger_to_nodesr   r   r   r-   r{   r,   
isinstancer:   subgraph_counterr$   r(   r4   joinr   r'   r   r/   tupler   splitr   r   )selfr   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
scratchpadcnt	thread_ids                          rt   __init__zPregelLoop.__init__   s   . 
		
(


$&&. 0+t{{tR/HH4tD#5  0(($;;"'8F4L'H&t{{F4LAR4STDK.4Tl.>.>?T.U
j"23 !1133s30KK0&++ &t-E F #C3
 ~~&,"2"23K"L,)2/GNDK
 &T)::D!%%&>?{{4 !:;< &8,dkk$.?1/kk$'(@A/C&D" &*[[D"..t4889MNN9Ni-);**)3y>:*& {{4 $$%=> $sDKK-.FGHNNvVW 	
 '+#rv   c           	        |syt        d |D              r+t        |D ci c]  }|d   |
 c}j                               }t        k(  re| j                  D cg c]  }|d   k7  s|d   t
        vr| c}| _        | j                  D cg c]  }|d   k(  s|dd  c}t        |      z   }n*| j                  D cg c]  }|d   k7  s| c}| _        |}t        d | j                  j                         D              rp|D cg c]c  \  }}t        | j                  j                  |      t              s5|t        k(  r(t        |t              r|t        || j                        fn||fe }}}| j                  j                  fd|D               | j                   dk7  r| j"                  t%        | j&                  t(        | j*                  t,           j                  t(        d      t.        | j0                  d	   i      }| j2                  rat5        | d
      r| j6                  j                        }nd}| j9                  | j"                  |||rt;        |j<                        nd       n| j9                  | j"                  ||       t5        | d
      r| j?                  |       yyc c}w c c}w c c}w c c}w c c}}w )3Put writes for a task, to be read by the next tick.Nc              3  2   K   | ]  }|d    t         v   yw)r   N)r   ).0ws     rt   	<genexpr>z(PregelLoop.put_writes.<locals>.<genexpr>7  s     6!qt~%6   r   ro   c              3  <   K   | ]  }t        |t                y wNr   r>   r   channels     rt   r   z(PregelLoop.put_writes.<locals>.<genexpr>K  s      
4;Jw/
   c              3  .   K   | ]  \  }}||f  y wr   r   )r   cvtask_ids      rt   r   z(PregelLoop.put_writes.<locals>.<genexpr>\  s     -Q$!Qw1o-Qs   exitr   idr   ) alllistvaluesr5   r   r   anyr   r   r   r   r>   r8   ri   rL   extendr   r   r$   r   r(   r~   r%   r&   r   r   hasattrr   r   rN   pathoutput_writes)	r   r   writesr   writes_to_saver   r   r~   tasks	    `       rt   
put_writeszPregelLoop.put_writes2  s   6v66F3q1Q473::<=Fl" 77.Q47?ad.&@ .D*  $=='1!"'V'N  99.QqTW_.D* $N  
?C}}?S?S?U
 
 +
 Aq!$**.."3^D EzjD&9 9!T]]KLQ 
N 
 	&&---Q&-QQ??f$)E)E)Q'&&,dkk$.?.C.C0"/ -dood.C	F ==4)::>>'2DD00"04M$))," 00"	 4!w/ "G 4.
'
.
s*   J2J7J<J<>KK	A(Kc           
        | j                   y | j                  sy t        | j                  t        | j
                  t           j                  t        d      t        | j                  d   i      }t        t              }| j                  D ]  \  }}}||   j                  ||f        |j                         D ]  \  }}| j                  r^t        | d      rR| j                   j                  |      }| j#                  | j                   ||||rt%        |j&                        nd       p| j#                  | j                   |||        y )Nr   r   r   )r   r   r$   r   r(   r~   r%   r   r&   r   r   r   appenditemsr   r   r   r   rN   r   )r   r~   by_taskr   r   rq   r   r   s           rt   _put_pending_writeszPregelLoop._put_pending_writes~  s6   ''/--#""($++d*;*?*?,b+ )$//$*?	
 d#'+'E'E 	6#GWeG##We$45	6  '}} 	OGV=='gC zz~~g.0004M$))," 00		rv   c           
     $   t        j                  | j                  d   j                  dd            }t	        | j                        }t        t        dz  t        t        |j                  ||j                  |fdfi d| j                  d|d|d| j                  d	| j                  d
| j                  d| j                  d|j                  d| j                   d| j"                  ddd| j$                  d| j&                  d| j(                  d| j*                  d| j,                        x}r\| j/                  dt0        |g       || j2                  |j                  <   | j4                  s| j7                  |j                  |i       |S y)zEAccept a PUSH from a task, potentially returning a new task to start.r   -r   Nr   checkpoint_id_bytesrH   pending_writes	processesr   r   r~   r   r   for_executionTr   r   r   r   r   r   )binascii	unhexlifyr   replacerH   r   rg   rK   r6   r   r   r   r   r   r   r~   r   r   r   r   r   r   r   _emitr`   r   r   _match_writes)r   r   	write_idxcallr   null_versionpusheds          rt   accept_pushzPregelLoop.accept_push  s    '001F1N1NsTV1WX.t? 4'tyy)TWWd;  ?? %8	
 )5  $== **   {{ YY YY # jj "..  !" "..#$ "..%
 
6 
0 JJw&:$*DJJvyy!$$""FIIv#67M?
rv   c                f   | j                   | j                  kD  rd| _        yt        | j                  | j
                  | j                  | j                  | j                  | j                  | j                   | j                  d| j                  | j                  | j                  | j                  | j                  | j                  | j                         | _        | j$                  | j'                  dt(        i | j*                  t,        i | j*                  t,           t.        | j                  d   ii| j                  | j0                  | j2                  | j"                  j5                         | j
                  | j6                  | j8                  
       | j"                  sd| _        y| j:                  s'| j
                  r| j=                  | j"                         | j>                  rJtA        | j                  | j>                  | j"                  j5                               rd| _        tC               | j'                  d	tD        | j"                  j5                                | j"                  j5                         D ]7  }|jF                  s| jI                  |jJ                  |jF                  d
       9 y)zyExecute a single iteration of the Pregel loop.

        Returns:
            True if more iterations are needed.
        out_of_stepsFT)r   r   r   r   r   r   r   r   checkpointsr   doner   r   cached)&r   r   r   rJ   r   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r^   r   r%   r&   r   r   r   r   r   r   r   r   rM   rA   r`   r   r   r   )r   r   s     rt   tickzPregelLoop.tick  s3    99tyy (DK (OO**JJMMLLKKIIIILL****!22!22****!

( 00<JJ$,, 0060$//$2G   ((

!!#..++  !( zz DK   T%C%Ctzz*   %5OOT22DJJ4E4E4G&
 -DK "" 	

7OTZZ->->-@A JJ%%' 	FD{{""477DKK"E	F rv   c                   | j                   j                         D cg c]  }|j                  D ]  }|  }}}t        | j                  | j
                  | j                   j                         | j                  | j                        | _        | j                  j                  t        | j                  t              r| j                  fn| j                        s-| j                  dt        | j                  || j
                         | j                  j!                          d| _        | j%                  ddi       | j&                  rJt)        | j                  | j&                  | j                   j                               rd| _        t-               | j.                  t0           j3                  t4        d        y c c}}w )Nr   Fsourceloopr   )r   r   r   rG   r   r   r   r   r   
isdisjointr   r   r   r   rY   r   clearr   _put_checkpointr   rM   r   rA   r~   r%   popr+   )r   tr   r   s       rt   
after_tickzPregelLoop.after_tick  s`   !ZZ..0C!((CQ!C!CC ,OOMMJJ..!!!
 $$//$**C0 !!

 JJ+T-=-=vt}} 	&&,,.!h/0$4OOT114::3D3D3F%
 ,DK ""D148? Ds   F:c                    t         r   NotImplementedErrorr   s    rt   match_cached_writeszPregelLoop.match_cached_writes?  s    !!rv   c                   K   t         wr   r  r  s    rt   amatch_cached_writeszPregelLoop.amatch_cached_writesB  s     !!s   	c                    | j                   D ]K  \  }}}|t        t        t        fv r|j	                  |      x}s/|j
                  j                  ||f       M y r   )r   r0   r2   r7   r   r   r   )r   r   tidkr   r   s         rt   r   zPregelLoop._match_writesG  sX    77 	+ICAUIv..yy~%t%""Aq6*		+rv   c                8   i }t               }| j                  D ]=  \  }}}|t        k(  r|d   j                  ||<   #|t        k(  s-|j                  |       ? |D ch c]  }||v r||    }}|j                         D ch c]  }||vr|
 }}|S c c}w c c}w )zUReturn the set of interrupt ids that are pending without corresponding resume values.r   )setr   r2   r   r7   addr   )	r   pending_interruptspending_resumesr   
write_typerq   resumed_interrupt_idsinterrupt_idhanging_interruptss	            rt   _pending_interruptszPregelLoop._pending_interruptsN  s     .0 %(E*.*H*H 	-&GZY&.3Ahkk"7+v%##G,	- +!
,, w'!
 !
 !3 9 9 ;(
#88 (
 (
 "!!
(
s   BBc                  | j                   j                  t        i       }t        | j                  t
              }t        | j                  d         xr t        |j                  t        | j                  d u xs_ |xs[ | j                   xrL | j                   j                  di       j                  d      | j                  j                  dt              k(              }| j                  r| j                  r,|j                  t        d      |j                  t        i       v s<|r$t        t
        | j                        j                   B|j                  t        d      s,| j"                  D cg c]  }|d   t$        k7  s| c}| _        |r<t        t
        | j                        j                   x}| j&                  st)        d      t        |t*              xr t-        d |D              x}r|| j                   t           t.        <   n't1        | j3                               dkD  rt)        d	      t5        t6              }	t9        t        t
        | j                        
      D ](  \  }
}}|t$        k(  rr|	|
   j;                  ||f       * |	sst=        d      |	j?                         D ]  \  }
}| jA                  |
|        | j"                  D cg c]  }|d   tB        k(  s|dd   c}x}r[tE        | j                  | jF                  tI        dtJ        |g       g| jL                  | jN                        }||jQ                  |       |r| j                  d   jS                  tT        i        | jF                  D ]?  }|| j                  d   v s| j                  d   |   }|| j                  d   tT           |<   A | jW                  dtX        | jZ                  d| jF                         nt]        t_        || j                              x}rta        | j                  | j"                  | jb                  | jF                  | jd                  | j                   | jf                  | jh                  dd d d |      }tE        | j                  | jF                  g |jk                         tI        dtJ        |g       | jL                  | jN                        }|| _6        | jo                  ddi       nt        |vrt=        d|       | j                  sd }| j                  rk| j                  d   }| j                  j                  d      dk(  r3| jp                  r'| jp                  t           j                  tr        |      }tu        |      }tw        | j                   t        |tx        |i      | _         d| _=        |S c c}w c c}w )Nchannel_versionsmetadatarun_idr   Fro   z3Cannot use Command(resume=...) without checkpointerc              3  2   K   | ]  }t        |        y wr   )r]   )r   r  s     rt   r   z$PregelLoop._first.<locals>.<genexpr>  s     E1!4Er   zWhen there are multiple pending interrupts, you must specify the interrupt id when resuming. Docs: https://docs.langchain.com/oss/python/langgraph/add-human-in-the-loop#resume-multiple-interrupts-with-one-invocation.)cmdzReceived empty Command inputr   r   versions_seenr   T)r   r   r   r   r   r  r   zReceived no input for r   updatepending)>r~   r   r%   r   r   re   r   r   r+   r   r   r<   r   r(   r'   r   resumer   r7   r   RuntimeErrordictr   r*   lenr  r   r   rV   r   r@   r   r   r5   rG   r   rF   r1   r   r   r%  
setdefaultr2   r   rY   r   r   rW   rJ   r   r   r   r   r   r   r  r   r&   r9   r$   r)   r   )r   r   r   configurableinput_is_commandis_resumingr   r'  resume_is_mapr   r  r   r   wsnull_writesnull_updated_channelsr  versioninput_writesdiscard_tasksreplay_statereplay_checkpoint_ids                         rt   _firstzPregelLoop._firstl  sY    {{tR0%djj':4??+=>? 
D#

d" # & G
B7;;HE//33HgFG	E
"   $$%=rB##$=rBC
 "d7DJJ&?&F&F&R  ##$7?  99.QqTV^.D*
 w

3:::G((&M 
 vt, FEfEE=  @FDKK%&;<43356:*Z 
 ?J$>OF(T'4::-FG /	QV3K&&1v./ -%&DEE!<<> )RR()  99
QqT\=QAabE
 
; 
 %1!"e["=>22%%%!  + ''(=>OOO,77	2F]] M(:;;"oo.@A!DGELDOOO4Y?BM
 JJ+T-=-=tT]] #9Z#DEE\E...

				"!!1M   ,"))+$RbA 22%%	  %5D!  (G!45 4!$::,"GHH~~ 04L  '+t'<$,,00:hF33+/+F+Ft+L+P+P02F,(  ++?@,'+\DK  o.F
s   /V=V=W,Wc                L   || j                   u }|r| j                  d   | j                  k(  ry |s@| j                  |d<   | j                  t
           j                  t        i       |d<   || _         | j                  d uxr |xs | j                  dk7  }t        | j                  |r| j                  nd | j                  |r| j                  d   nd | j                        | _        t        | j                  d   v rt        d | j                  j                         D              r_| j                  d   t           D cg c]*  }t!        |t"              rt%        || j                        n|, }}|| j                  d   t        <   |r| j                  ut&        | j(                  t
           v r&| j(                  t
           t&           r| j(                  nd | _        i | j(                  t
        i | j(                  t
           t,        | j                  t
           j                  t,        d      ii| _        | j                  d	   j/                         }t1        | j2                  |      }|| _        | j5                  | j                  t7        | d
d       | j(                  t9        | j                        | j                   |      | _        i | j(                  t
        i | j(                  t
           t&        | j                  d   ii| _        |s| xj                  dz  c_        y y c c}w )Nr   r   parentsr   )r   r   channel_valuesc              3  <   K   | ]  }t        |t                y wr   r   r   s     rt   r   z-PregelLoop._put_checkpoint.<locals>.<genexpr>-  s      >
4;Jw/>
r   r   r  _put_checkpoint_futro   )r   r   r   r   r~   r%   r   r'   r   r   rQ   r   r   r8   r   r   r   ri   rL   r&   r   r   r(   copyr\   r   r   getattrrP   r=  )r   r   exitingdo_checkpointrq   sanitized_tasksr  new_versionss           rt   r  zPregelLoop._put_checkpoint  s   d666tt,0H0HH#yyHV"&++d"3"7"78QSU"VHY'/D$==TI 
0t&0 	 ,OO*DMMII(/tt$T!22
 DOO$455# >
?C}}?S?S?U>
 ;
 "__-=>uE	  eT* 2%GO  8GDOO,-e4 TBBN ,t/E/Ed/KK**401IJ && 	 '&((& ,,T2,dkk$.?.C.C0"/&D"  $/ABGGI3113CL 1AD-
 (,{{553T:&&0(((D$&((& ,,T2,dood.C&D" IINI es   </L!c                   | j                   dk(  rU| j                  rt        d | j                  D              r+| j	                  | j
                         | j                          t        t              xr | j                   }|rt        | d      r.| j                  r!t        d | j                  j                         D              rt        | j                  | j                   | j                  j                         | j"                  | j$                        }|j'                  t        | j(                  t*              r| j(                  fn| j(                        sf| j-                  dt.        | j(                  | j                  j                         D cg c]  }|j0                  D ]  }|  c}}| j                          0j2                  rj2                  d   s| j-                  dfd       t5        | j                   | j(                        | _        y	|&t5        | j                   | j(                        | _        y y c c}}w )
Nr   c              3  ,   K   | ]  }t         |v  y wr   )r3   )r   parts     rt   r   z1PregelLoop._suppress_interrupt.<locals>.<genexpr>s  s     E$6%Es   r   c              3  4   K   | ]  }|j                     y wr   )r   )r   r   s     rt   r   z1PregelLoop._suppress_interrupt.<locals>.<genexpr>~  s     DDs   r   r   updatesc                 ^    t        t        t        t               j                  d   ig      S )Nr   )iterr2   r   rA   args)	exc_values   rt   <lambda>z0PregelLoop._suppress_interrupt.<locals>.<lambda>  s)    D#T.)%D%I%I!%LMN rv   T)r   r   r   r   r  r   r   r   rA   r   r   r   r   r   rG   r   r   r   r   r  r   r   r   rY   r   rK  rZ   r   )r   exc_typerL  	tracebacksuppressr   r  r   s     `     rt   _suppress_interruptzPregelLoop._suppress_interruptf  s    ??f$$E$2D2DEE  !9!9:$$&i8O=O g&22D

0A0A0CDD#/OOMMJJ%%'66))$  (22!$"2"2C8 %%'))
 JJ )(($(JJ$5$5$7JqJAJJ $innINNSTDU

 (t7G7GHDK't7G7GHDK  Ks   Ic           
        | j                   y |dv xr d| j                   j                  v }|| j                   j                  vr|sy  ||i |D ]  }|| j                   j                  v r| j                  | j                  ||f       |s<| j                  | j                  d|dk(  r| j                  dz
  n| j                  t	        j
                  t        j                        j                         |dk(  rdnd|v rdnd|d	f        y )
N)r   r   debugr   ro   r   resulttask_resultr   )r   	timestamptypepayload)	rr   rp   r   r   r   nowr   utc	isoformat)r   rz   r   rK  kwargsdebug_remapr   s          rt   r   zPregelLoop._emit  s    ;;66W7dkkFWFW;Wt{{((((( 	At{{(((T//q9:**  $}4 %)IIM!%)1hll)C)M)M)O#}4 %1  (1} "/!''(	rv   Fr   c               d   | j                   j                  |      x}r|j                  't        |j                  j                  dt              v ry |d   d   t
        k(  r|j                  d   t        k(  r|j                  d   du ry t
        t        d |D              ig| j                  r| j                  j                  ng }d|v r| j                  dfd       d|v rt        | j                  | j                        t        t               r)d   t
           t
        <   | j                  dfd	       nK| j                  dfd
       n5|d   d   t"        k7  r&| j                  dt$        | j                  ||fg|       |s%| j                  dt&        ||f| j(                         y y y )Ntagsr   Tc              3  ~   K   | ]5  }|d    t         k(  r't        |d   t              r|d   n|d   fD ]  }|  7 yw)r   ro   N)r2   r   r	   )r   r   r   s      rt   r   z+PregelLoop.output_writes.<locals>.<genexpr>  sS      ) ! ty0.81x.HadqQRtg	) !" ))s   ;=rH  c                     t               S r   rJ  
interruptss   rt   rM  z*PregelLoop.output_writes.<locals>.<lambda>  s    $z2B rv   r   c                     t         g      S r   rc  )current_valuess   rt   rM  z*PregelLoop.output_writes.<locals>.<lambda>  s    T>:J5K rv   c                     t               S r   rc  rd  s   rt   rM  z*PregelLoop.output_writes.<locals>.<lambda>  s    T*5E rv   r   )r   r   r~   r?   r;   r2   r   r6   r   rr   rp   r   rZ   r   r   r   r)  r0   rX   r_   r   )r   r   r   r   r   stream_modesrg  re  s         @@rt   r   zPregelLoop.output_writes  s    ::>>'**4*{{&:	: , ay|y( 99Q<4'DIIbMT,A "5 )%+) $	
 59KKt{{00R,JJy*BC|+%24==$BRBR%SN!.$74>qM)4Ly1

8-KL 

8-EF1&

&$$F^$ 

*6N$$	 S +rv   )(r   r   rr   r   r~   r   r   r   r   BaseCache | Noner   r   r   r   r   r   r   r   r   r   r   r   r   Mapping[str, Sequence[str]]r   rf   r   r   r   r   r   r   r   r   r   r   r   r   rw   rx   r   r   r   WritesTrw   rx   )rw   rx   r   r   rg   r   r   r   zCall | Nonerw   zPregelExecutableTask | None)rw   r   rw   zSequence[PregelExecutableTask])r   z"Mapping[str, PregelExecutableTask]rw   rx   )rw   zset[str])r   r   r   r   rw   r   )r   r   rw   rx   rN  ztype[BaseException] | NonerL  zBaseException | NonerO  zTracebackType | Nonerw   zbool | None)
rz   rj   r   zCallable[P, Iterator[Any]]rK  zP.argsr\  zP.kwargsrw   rx   )r   r   r   rm  r   r   rw   rx   )__name__
__module____qualname____annotations__r   r   r;   r   r   r   r   r   r	  r  r  r   r  r8  r  rQ  r   r   r   rv   rt   r}   r}      s   !!
I
I$$,,##77##$$$$O<<(())''$$#11QQ/33
	 =<N''  ""%%++11">>11  +**.F'.(,o,( 0909CGBF.0+/+_+_+ &	_+
 _+  _+  _+ 1_+ (_+ <_+ (_+ )_+ )_+ 6_+ _+  -!_+" .#_+$ A%_+& @'_+( ,)_+* )+_+, 
-_+BJ0X&R OS%(%58%@K%	$%NM^!9F""
+"<h 0h DSh 	h TN`;I,;I (;I (	;I
 
;Iz"" +" 	"
 " 
"J @E22$+28<2	2rv   r}   c            
           e Zd Zdeeeeedddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 d	 	 	 	 	 	 	 d fdZd fdZdd	Z		 	 	 	 	 	 	 	 dd
Z
 xZS )SyncPregelLoopNr   )	r   r   r   r   r   r   r   r   r   c               \   t         |   ||||||||||||||||	|||
       t               | _        |rX|j                  | _        |j                  | _        t        |j                        j                  j                  d      d u| _        y t        | _        d | _        d | _        d| _        y N)rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	task_pathF)superr   r   stackget_next_versionr   r   r   r   
parametersr   r   rI   r   )r   r   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	__class__s                       rt   r   zSyncPregelLoop.__init__  s    . 	%!##+-1-%%!' 	 	
* [
1=1N1ND.+7+B+BD(,112==AA+N :
 2;D.48D1+/D(=BD:rv   c                    	 ||j                          t        t        | j                        j	                  ||||       y # t        t        | j                        j	                  ||||       w xY wr   )rT  r   r   r   putr   prevr~   r   r   rC  s         rt   r   z/SyncPregelLoop._checkpointer_put_after_previous7  sa    	$d&7&78<<
HlD$d&7&78<<
Hls   A .A/c                   | j                   yg }| j                  j                         D ci c]G  }|j                  r9|j                  s-|j                  j
                  |j                  j                  f|I c}x}rk| j                   j                  t        |            j                         D ]6  \  }}||   }|j                  j                  |       |j                  |       8 |S c c}w )Nr   )r   r   r   	cache_keyr   nskeyr   r   r   r   r   r   matchedr  r   r  r   r   s          rt   r  z"SyncPregelLoop.match_cached_writesG  s    ::.0 ZZ&&(
{{188 [[^^Q[[__-q0
 
6 

  $zz~~eFm<BBD %Vc{""6*t$% 
s   AC*c                    t         |   |||      x}r=| j                         D ]*  }| j                  |j                  |j
                  d       , |S NTr   )rz  r   r  r   r   r   r   r   r   r   r   r~  s        rt   r   zSyncPregelLoop.accept_pushV  sZ     W(y$??6?002 F""477DKK"EFrv   c                   t         |   ||       |r| j                  t        | d      sy| j                  j                  |      }||j                  y| j                  | j                  j                  |j                  j                  |j                  j                  f|j                  |j                  j                  fi       y)r   Nr   )rz  r   r   r   r   r   r  r   r  r  r  r   ttlr   r   r   r   r~  s       rt   r   zSyncPregelLoop.put_writes^  s    7F++743Izz~~g&<4>>1JJNN""DNN$6$67KKNN&&:	
rv   c                f   | j                   sd }n| j                  t           j                  t              r&| j                   j                  | j                        }n| j                  t           j                  t              x}rt|j                  | j                  t           j                  t        d      | j                   | j                        }| j                  t           j                  t        d        n%| j                   j                  | j                        }|$t        | j                  t               ddid g       }n'| j                  | j                  |j                         i | j                  |j                  t        t        di| j                  j                  t        i       |j                  j                  t        i       i| _        |j                   | _        |j                  d   | _        |j                  | _        |j&                  | _        |j*                  .|j*                  D cg c]  \  }}}t-        |      ||f c}}}ng | _        | j0                  j3                  t5        | j                              | _        t9        | j:                  | j                        \  | _        | _        | j0                  jA                  | jB                         d| _"        | j(                  d   dz   | _#        | jF                  | j                  d   z   dz   | _$        | j                  d   jK                         | _&        | jO                  | jP                  | j                  j                  d	      r$tS        | j                  j                  d	            nd 
      | _*        | S c c}}}w Nr   r   r   r   ro   recursion_limitr  r   )r   r   )+r   r   r%   r   r&   	get_tupler~   r)   get_checkpointr(   r  r+   r   rR   r   r   parent_configr   r   r   r   r   r   r   r{  enter_contextrT   r   rO   r   r   r   pushrQ  r   r   r   r>  r   r8  r   r  r   r   savedr6  r  r  r   s         rt   	__enter__zSyncPregelLoop.__enter__r  s$     E##D)--.FG %%//0F0FGE![[.223JKK\K !//D!%%&>C!!&&E KK!!"5t< %%//0F0FGE=#&&(8(:VRL$PRE %%1$$U%5%56"
$$"
ll"
 ("((,,T26 ,,""4,"
 ',&9&9##(#3#3D#9 **#(>>  ##/ 05/C/CDD)#q!c#h1D 	&
 jj../A$++/NO&>JJ'
#t| 	

001,,V4q8	II,= >>B	,0OO<N,O,T,T,V) $""#56 !!4!45G!HI	 !, !
 ) Es   ;N,c                <    | j                   j                  |||      S r   )r{  __exit__)r   rN  rL  rO  s       rt   r  zSyncPregelLoop.__exit__  s     zz""8Y	BBrv   )(r   r   rr   r   r~   r   r   r   r   rj  r   r   r   r   r   r   r   rk  r   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   rx   )r  z concurrent.futures.Future | Noner~   r   r   r   r   r   rC  r   rw   r   ro  r   rn  rl  rw   r#   rp  )rq  rr  rs  r;   r   r   r  r   r   r  r  __classcell__r~  s   @rt   rv  rv    s    DH/809*3+4+4BF.0+/+8C8C &	8C
 8C  8C  8C 18C (8C <8C 68C 8C A8C -8C .8C  (!8C" )#8C$ )%8C& @'8C( ,)8C* )+8C, 
-8Ct.  	
 % & 
   OS(58@K	$
(BHC,C (C (	C
 
Crv   rv  c            
           e Zd Zeedeeedddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 d	 	 	 	 	 	 	 d fdZd fdZdd	Z		 	 	 	 	 	 	 	 dd
Z
 xZS )AsyncPregelLoopNr   )	r   r   r   r   r   r   r   r   r   c               \   t         |   ||||||||||||||||	|||
       t               | _        |rX|j                  | _        |j                  | _        t        |j                        j                  j                  d      d u| _        y t        | _        d | _        d | _        d| _        y rx  )rz  r   r   r{  r|  r   aput_writesr   r   r}  r   r   rI   r   )r   r   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r~  s                       rt   r   zAsyncPregelLoop.__init__  s    . 	%!##+-1-%%!' 	 	
* $%
1=1N1ND.+7+C+CD(,223>>BB;O :
 2;D.48D1+/D(=BD:rv   c                
  K   	 |
| d {    t        t        | j                        j                  ||||       d {    y 7 97 # t        t        | j                        j                  ||||       d {  7   w xY wwr   )r   r   r   aputr  s         rt   r   z0AsyncPregelLoop._checkpointer_put_after_previous  s     	

*D,=,=>CC
Hl   $*D,=,=>CC
Hl  sH   BA	 AA	 /BA BA	 B	0B 9A<:B  Bc                  K   | j                   g S g }| j                  j                         D ci c]G  }|j                  r9|j                  s-|j                  j
                  |j                  j                  f|I c}x}rs| j                   j                  t        |             d {   j                         D ]6  \  }}||   }|j                  j                  |       |j                  |       8 |S c c}w 7 Rwr   )r   r   r   r  r   r  r  agetr   r   r   r   r  s          rt   r  z$AsyncPregelLoop.amatch_cached_writes  s     ::I.0 ZZ&&(
{{188 [[^^Q[[__-q0
 
6 

 '+jjooeFm&D DKKM %Vc{""6*t$% 

 !Es   -C<AC5;,C<'C:(AC<c                   K   t         |   |||      x}rE| j                          d {   D ]*  }| j                  |j                  |j
                  d       , |S 7 3wr  )rz  r   r  r   r   r   r  s        rt   aaccept_pushzAsyncPregelLoop.aaccept_push  sf      W(y$??6?"7799 F""477DKK"EF :s   'A A4A c                   t         |   ||       |r| j                  t        | d      sy| j                  j                  |      }||j                  y|d   d   t        t        fv ry| j                  | j                  j                  |j                  j                  |j                  j                  f|j                  |j                  j                  fi       y)r   Nr   r   )rz  r   r   r   r   r   r  r2   r0   r   asetr  r  r   r  r  s       rt   r   zAsyncPregelLoop.put_writes"  s    7F++743Izz~~g&<4>>1!9Q<Iu--JJOO""DNN$6$67KKNN&&:	
rv   c                  K   | j                   sd }n%| j                  t           j                  t              r.| j                   j                  | j                         d {   }n| j                  t           j                  t              x}r||j                  | j                  t           j                  t        d      | j                   | j                         d {   }| j                  t           j                  t        d        n-| j                   j                  | j                         d {   }|$t        | j                  t               ddid g       }n'| j                  | j                  |j                         i | j                  |j                  t        t        di| j                  j                  t        i       |j                  j                  t        i       i| _        |j                   | _        |j                  d   | _        |j                  | _        |j&                  | _        |j*                  .|j*                  D cg c]  \  }}}t-        |      ||f c}}}ng | _        | j0                  j3                  t5        | j                               d {   | _        t9        | j:                  | j                        \  | _        | _        | j0                  jA                  | jB                         d| _"        | j(                  d   dz   | _#        | jF                  | j                  d   z   dz   | _$        | j                  d   jK                         | _&        | jO                  | jP                  | j                  j                  d	      r$tS        | j                  j                  d	            nd 
      | _*        | S 7 m7 7 c c}}}w 7 3wr  )+r   r   r%   r   r&   
aget_tupler~   r)   aget_checkpointr(   r  r+   r   rR   r   r   r  r   r   r   r   r   r   r   r{  enter_async_contextrS   r   rO   r   r   r   r  rQ  r   r   r   r>  r   r8  r   r  r   r  s         rt   
__aenter__zAsyncPregelLoop.__aenter__9  sU      E##D)--.FG ++66t7M7MNNE![[.223JKK\K '66D!%%&>C!!&& E KK!!"5t< ++66t7M7MNNE=#&&(8(:VRL$PRE %%1$$U%5%56"
$$"
ll"
 ("((,,T26 ,,""4,"
 ',&9&9##(#3#3D#9 **#(>>  ##/ 05/C/CDD)#q!c#h1D 	&
 !JJ::#DKK0
 
 '?JJ'
#t| 	

001,,V4q8	II,= >>B	,0OO<N,O,T,T,V) $""#56 !!4!45G!HI	 !, !
 { O
 O, E
sX   AO!!O"A<O!OAO!3O4D!O!O.=O!+O,D#O!O!O!O!c                   K   t        j                  | j                  j                  |||            }	 | d {   S 7 # t         j                  $ r}g |j
                  ||_         d }~ww xY wwr   )asynciocreate_taskr{  	__aexit__CancelledErrorrK  )r   rN  rL  rO  	exit_taskes         rt   r  zAsyncPregelLoop.__aexit__  sl      ''JJ  9i@
		"?"?%% 	 *qvv)y)AF		s5   1A2A  >A  A2A   A/A**A//A2)(r   r   rr   r   r~   r   r   r   r   rj  r   r   r   r   r   r   r   rk  r   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   rx   )r  zasyncio.Task | Noner~   r   r   r   r   r   rC  r   rw   r   ro  r   rn  rl  r  rp  )rq  rr  rs  r;   r   r   r  r  r   r  r  r  r  s   @rt   r  r    s    0909CG*3+4+4BF.0+/+8C8C &	8C
 8C  8C  8C 18C (8C <8C 68C 8C -8C .8C A8C  (!8C" )#8C$ )%8C& @'8C( ,)8C* )+8C, 
-8Ct!  	
 % & 
   OS(58@K	$
.DL, ( (	
 
rv   r  )rs   rb   rw   rb   )
__future__r   r  r   concurrent.futures
concurrentcollectionsr   r   collections.abcr   r   r   r	   
contextlibr
   r   r   r   r   r   inspectr   typesr   typingr   r   r   r   langchain_core.callbacksr   r   langchain_core.runnablesr   langgraph.cache.baser   langgraph.checkpoint.baser   r   r   r   r   r   r    langgraph.store.baser!   typing_extensionsr"   r#   langgraph._internal._configr$   langgraph._internal._constantsr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   langgraph._internal._replayr9   langgraph._internal._scratchpadr:   langgraph._internal._typingr;   r<   langgraph.channels.baser=   "langgraph.channels.untracked_valuer>   langgraph.constantsr?   langgraph.errorsr@   rA   langgraph.managed.baserB   rC   langgraph.pregel._algorD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   langgraph.pregel._checkpointrO   rP   rQ   rR   langgraph.pregel._executorrS   rT   rU   langgraph.pregel._iorV   rW   rX   rY   rZ   langgraph.pregel._readr[   langgraph.pregel._utilsr\   r]   langgraph.pregel.debugr^   r_   r`   langgraph.pregel.protocolra   rb   langgraph.typesrc   rd   re   rf   rg   rh   ri   rj   rk   rl   r   r   rm  r{   r}   rv  r  r   rv   rt   <module>r     sT   "    * A A  (    M 3 *   + - :     , 4 < : / = *     
  . S 
 B	 	 	 CLcN 5c?
#Qk k\ACZ!7 ACHOj"= Orv   