
    \ǻi*                    R   d dl mZ d dlZd dlZd dlZd dlZd dl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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mZm Z   ejB                  e"      Z#ejH                  dk\  Z%ddZ&	 d	 	 	 	 	 	 	 ddZ'	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ(ddZ)y)    )annotationsN)	AwaitableCallableSequence)replace)Any)patch_configurablerecast_checkpoint_ns)CONFCONFIG_KEY_CHECKPOINT_NSCONFIG_KEY_RESUMINGCONFIG_KEY_RUNTIMENS_SEP)GraphBubbleUpParentCommand)Runtime)CommandPregelExecutableTaskRetryPolicy)      c                f   | j                  t              }|r9|d   j                         r&|j                          |r|d   j                         r&|r|j                          |r9|d   j                         r&|j                          |r|d   j                         r&t        j                  |      S )a  Return the checkpoint namespace for the parent graph.

    The checkpoint namespace is a `|`-separated path. Each segment is usually
    of the form `name:task_id` (e.g. `parent_first:<uuid>|node:<uuid>`), but the
    runtime may also insert a purely-numeric segment (e.g. `|1`) to disambiguate
    concurrent tasks (e.g. `parent_first:<uuid>|1|node:<uuid>`).

    Numeric segments are not real path levels, so we drop them before computing
    the parent namespace.
    )splitr   isdigitpopjoin)nspartss     U/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/langgraph/pregel/_retry.py!_checkpoint_ns_for_parent_commandr!      s     HHVE E"I%%'		 E"I%%' 		 E"I%%'		 E"I%%' ;;u    c                z   | j                   xs |}d}t        j                         }| j                  }|t        ||      }|j	                  t
        i       j	                  t              }t        |t              r"t        |t        |j                  |      i      }	 |j	                  t
        i       j	                  t              }t        |t              r%t        |t        |j                  |dz         i      }	 | j                  j                          | j                  j                  | j                  |      S # t        $ r}|t
           t            }|j"                  d   }	|	j$                  |t'        |      | j(                  fv r(| j*                  D ]  }
|
j                  |	|        Y d}~y|	j$                  t,        j.                  k(  rt1        |	t3        |            f|_         d}~wt4        $ r  t6        $ r8}t8        r,|j;                  d| j(                   d	| j<                   d
       |s d}|D ]  }t?        ||      s|} n |s |dz  }||j@                  k\  r |jB                  }tE        |jF                  ||jH                  |dz
  z  z        }|jJ                  r|tM        jN                  dd      z   n|}t        jP                  |       tR        jU                  d| j(                   d|dd| d|jV                  jX                   d| 
|       t        |tZ        di      }Y d}~nd}~ww xY w)zRun a task with retries.r   Nnode_first_attempt_timeT   node_attemptgraphDuring task with name '
' and id ''Retrying task  after .2f seconds (attempt ) after  exc_info).retry_policytimeconfigr	   getr   r   
isinstancer   patch_execution_infowritesclearprocinvokeinputr   r   argsr*   r
   namewritersr   PARENTr   r!   r   	ExceptionSUPPORTS_EXC_NOTESadd_noteid_should_retry_onmax_attemptsinitial_intervalminmax_intervalbackoff_factorjitterrandomuniformsleeploggerinfo	__class____name__r   )taskr6   configurableattemptsr%   r8   runtimeexcr   cmdwmatching_policypolicyinterval
sleep_times                  r    run_with_retryrb   9   s(    $$4LH"iik[[F#FL9jjr"&&'9:G'7##"G$@$@,C %A %
 **T2&**+=>gw''&(D(D &.\ )E )	F?	MKK99##DJJ77 	Tl#;<B((1+CyyR!5b!9499EE *AHHS&)*gnn,#C/PQS/TUW 	 )	M!6tyykDGG9TUVW #O& #FC0&,O
 # MH?777&77H,,O::x!|LMH 4C3I3I6>>!Q//x  JJz" KK 7:c2BBTU]T^^fgjgtgtg}g}f~~  AD  @E  F  
 (1Dd0KLFS)	MG s3   <?D< <	L8A&G*0:G**L8 AL3	C%L33L8c                h  K   | j                   xs |}d}t        j                         }| j                  }|t        ||      }|j	                  t
        i       j	                  t              }t        |t              r"t        |t        |j                  |      i      }|&| j                   |        d{   D ]  }	|	| u s y 	 |j	                  t
        i       j	                  t              }t        |t              r%t        |t        |j                  |dz         i      }	 | j                  j                          |r0| j                  j                  | j                  |      2 3 d{   }

| j                  j!                  | j                  |       d{   S 7 7 56 y7 
# t"        $ r}|t
           t$           }|j&                  d   }|j(                  |t+        |      | j,                  fv r(| j.                  D ]  }|j1                  ||        Y d}~y|j(                  t2        j4                  k(  rt7        |t9        |            f|_         d}~wt:        $ r  t<        $ rA}t>        r,|jA                  d| j,                   d	| jB                   d
       |s d}|D ]  }tE        ||      s|} n |s |dz  }||jF                  k\  r |jH                  }tK        |jL                  ||jN                  |dz
  z  z        }|jP                  r|tS        jT                  dd      z   n|}tW        jX                  |       d{  7   tZ        j]                  d| j,                   d|dd| d|j^                  j`                   d| 
|       t        |tb        di      }Y d}~nd}~ww xY ww)z'Run a task asynchronously with retries.r   Nr$   Tr&   r'   r)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   )2r6   r7   r8   r	   r9   r   r   r:   r   r;   	cache_keyr<   r=   r>   astreamr@   ainvoker   r   rA   r*   r
   rB   rC   r?   r   rD   r   r!   r   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   asynciorR   rS   rT   rU   rV   r   )rW   r6   streammatch_cached_writesrX   rY   r%   r8   rZ   t_r[   r   r\   r]   r^   r_   r`   ra   s                      r    arun_with_retryrl      s     $$4LH"iik[[F#FL9jjr"&&'9:G'7##"G$@$@,C %A %
 &4>>+E*,, 	ADy	 **T2&**+=>gw''&(D(D &.\ )E )	FF	MKK#yy00VD  ! "YY..tzz6BBB7 -,D B 	Tl#;<B((1+CyyR!5b!9499EE *AHHS&)*gnn,#C/PQS/TUW 	 *	M!6tyykDGG9TUVW #O& #FC0&,O
 # MH?777&77H,,O::x!|LMH 4C3I3I6>>!Q//x  --
+++ KK 7:c2BBTU]T^^fgjgtgtg}g}f~~  AD  @E  F  
 (1Dd0KLFU*	MS s   B4N26F 7N2A"N2&AF( (F$,F"-F$0+F( F&F( N2"F$$F( %N2&F( (	N-1A&IN2:IN-,AN(5BN(M	AN(#N2(N--N2c                j   t        | j                  t              rt        |t        | j                              S t        | j                  t              r0t        | j                  t              rt        || j                        S t        | j                        r| j                  |      S t        d      )zICheck if the given exception should be retried based on the retry policy.zXretry_on must be an Exception class, a list or tuple of Exception classes, or a callable)	r:   retry_onr   tupletype
issubclassrE   callable	TypeError)r6   r[   s     r    rI   rI     s    ,''2#u\%:%:;<<	L))4	0Zy6 #|4455	,''	($$S))f
 	
r"   )r   strreturnrt   )N)rW   r   r6   Sequence[RetryPolicy] | NonerX   dict[str, Any] | Noneru   None)FNN)rW   r   r6   rv   rh   boolri   z>Callable[[], Awaitable[Sequence[PregelExecutableTask]]] | NonerX   rw   ru   rx   )r6   r   r[   rE   ru   ry   )*
__future__r   rg   loggingrP   sysr7   collections.abcr   r   r   dataclassesr   typingr   langgraph._internal._configr	   r
   langgraph._internal._constantsr   r   r   r   r   langgraph.errorsr   r   langgraph.runtimer   langgraph.typesr   r   r   	getLoggerrV   rS   version_inforF   r!   rb   rl   rI    r"   r    <module>r      s    "    
  9 9   P  : % F F			8	$%%0 @ +/bM
bM.bM (bM 
	bMP *.qM
qM.qM qM	qM (qM 
qMh
r"   