
    i0                       S SK Jr  S SKrS SKrS SKJrJr  S SKJrJ	r	J
r
JrJrJrJrJrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJrJr  S S
K J!r!  S SK"J#r#J$r$J%r%  S SK&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  S SK.J/r/J0r0  S SK1J2r2J3r3J4r4  S SK5J6r6  SSK7J8r8  S SK9J:r:  \(       a  S SK;J<r<  S SK=J>r>  \" S\S9r?\@\A\B\   4   rC\R                  " 5       rE " S S\F5      rG " S S\\8   5      rHg)    )annotationsN)Counterdefaultdict)
TYPE_CHECKINGAnyAsyncGenerator	AwaitableCallable	CoroutineGenericTypeTypeVarcast)active_instrument_tagsinstrument_tags)_nanoid)WorkflowRuntimeError)Event
StartEvent)control_looprebuild_state_from_ticks)BrokerState)PluginWorkflowRuntimeas_snapshottable)AddCollectedEvent	AddWaiterDeleteCollectedEventDeleteWaiterStepWorkerContextStepWorkerStateContextVarWaitingForEvent)StepWorkerFunctionas_step_worker_function)TickAddEventTickCancelRunWorkflowTick)workflow_registry   )MODEL_T)WorkflowHandler)Workflow)ContextT)boundc                      \ rS rSrSrg)UnserializableKeyWarningE    N)__name__
__module____qualname____firstlineno____static_attributes__r3       R/home/james-whalen/.local/lib/python3.13/site-packages/workflows/runtime/broker.pyr1   r1   E   s    r9   r1   c                     \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'             S%S jrS&S jr    S'           S(S jjrS)S jr	\
S*S j5       r\
S+S j5       r\
S,S j5       rS-S jr S.       S/S jjrS.S0S jjrS1S jr    S2           S3S jjrS4S  jrS5S! jrS6S" jrS)S# jrS$rg)7WorkflowBrokerI   z
The workflow broker manages starting up and connecting a workflow handler, a runtime, and triggering the
execution of the workflow. From there it manages communication between the workflow and the outside world.
Context[MODEL_T]_contextr   _runtimer   _pluginbool_is_runningzWorkflowHandler | None_handlerr,   	_workflowzlist[asyncio.Task]_workersBrokerState | None_init_statec                l    X l         X0l        X@l        SU l        S U l        Xl        / U l        S U l        g )NF)r?   r@   rA   rC   rD   rE   rF   rH   )selfworkflowcontextruntimeplugins        r:   __init__WorkflowBroker.__init__Y   s6       !r9   c                   ^ ^ [         R                  " U5      mT R                  R                  T5        TR	                  U U4S j5        T$ )Nc                :   > TR                   R                  T5      $ N)rF   remove)_rJ   tasks    r:   <lambda>.WorkflowBroker._execute_task.<locals>.<lambda>l   s    )=)=d)Cr9   )asynciocreate_taskrF   appendadd_done_callback)rJ   cororV   s   ` @r:   _execute_taskWorkflowBroker._execute_taski   s9    ""4(T"CDr9   Nc                  ^ ^^^^^^	 T R                   b  [        S5      eTT l        SUUUU	U UU4S jjn[        5       nT R	                  U" U[
        R                  " 5       S95      n[        T R                  UUS9m	T	T l         T	$ )z0Start the workflow run. Can only be called once.z?this WorkflowBroker already run or running. Cannot start again.c           	     "  >#    [        SU 0UE5         STl        [        R                  " S5      I S h  vN   Tb  T" 5       I S h  vN    T=(       d    [        R
                  " T5      n S n0 nTR                  5       R                  5        H  u  pV[        USU5      n[        U5      XE'   M!     [        R                  " TTR                  [        U5      n[        R                  " U TTR                  TR                   UR"                  S9   UR%                  TUU 5      I S h  vN n	[        R&                  " U 5        TR)                  U	5        U(       a&  TR-                  5       (       d  TR/                  U5        Tb  T" 5       I S h  vN   STl         S S S 5        g  GNm GN^ N! [        R&                  " U 5        f = f! [*         a  n
U
n S n
A
NS n
A
ff = f NQ! Tb  T" 5       I S h  vN    STl        f = f! , (       d  f       g = f7f)Nrun_idTr   __func__)rb   rK   rN   rL   stepsF)r   rC   rY   sleepr   from_workflow
_get_stepsitemsgetattrr$   r(   get_registered_workflowrA   r   register_runr@   r?   rd   workflow_function
delete_run_set_stop_event	Exceptiondoneset_exception)rb   tags
init_stateexception_raisedstep_workersname	step_funcunbound
registeredworkflow_resulteafter_completebefore_startpreviousresultrJ   start_eventrK   s              r:   _run_workflow+WorkflowBroker.start.<locals>._run_workflow   s     (F!;d!;< $( mmA&&&+&.((.-!)!P[-F-Fx-PJ"-+/(FH/7/B/B/D/J/J/LOD '.iY&OG1H1QL.	 0M &7%N%N$dllL,&

 *66#)%-#'==$(MM","2"2A4>4P4P + * &5 /O .88@..? (%{{}}"001AB%1,...',D$k =< '(8/ .88@$ -+,(- / &1,...',D$k =<s   H!G>F!G>F$G>G,B"GF)%F'&F)*'G-G>G>GG>	H!G>$G>'F))GG
GGGGGG>G;-G0
.G;;G>>
HH)rr   )ctxrb   run_task)rb   strrr   zdict[str, Any]returnNone)	rD   r   rH   nanoidr^   r   getr+   r?   )
rJ   rK   r~   r   r}   r|   r   rb   r   r   s
   ``````   @r:   startWorkflowBroker.startp   s     ==$&Q  $6	- 6	-r  %%&'='A'A'CD
 !

 r9   c                h    U R                  U R                  R                  [        5       5      5        g rS   )r^   r@   
send_eventr&   rJ   s    r:   
cancel_runWorkflowBroker.cancel_run   s!    4==33MODEr9   c                    U R                   $ rS   )rC   r   s    r:   
is_runningWorkflowBroker.is_running   s    r9   c                    U R                   nU R                  =(       d     [        R                  " U R                  5      n[        X!5      nU$ rS   )	_tick_logrH   r   rf   rE   r   )rJ   ticksstate	new_states       r:   _stateWorkflowBroker._state   s:      MK$=$=dnn$M,U:	r9   c                h    [        U R                  5      nUc  [        S5      eUR                  5       $ )NzPlugin is not snapshottable)r   r@   r   replay)rJ   snapshottables     r:   r   WorkflowBroker._tick_log   s1    (7 &'DEE##%%r9   c                   #    U R                   R                  R                  5        Vs/ s H/  nU R                   R                  U   R                  (       d  M-  UPM1     sn$ s  snf 7frS   )r   workerskeysin_progress)rJ   steps     r:   running_stepsWorkflowBroker.running_steps   sW      ++002
2{{""4(44 2
 	
 
s   'A',A"A"A'c           	        U R                  SS9nU=(       d    SnUR                  R                  R                  U/ 5      n[	        U5      [	        U Vs/ s H  n[        U5      PM     sn5      -
  nU[	        [        U5      /5      :w  a<  [        U5      U;   a,  UR                  R                  R                  [        X1S95        g / n[        [        5      n	XQ/-    H   nU	[        U5         R                  U5        M"     U H%  n
UR                  X   R                  S5      5        M'     UR                  R                  R                  [        US95        U$ s  snf )Ncollect_eventsfndefault)event_ideventr   )r   )_get_step_ctxr   collected_eventsr   r   typereturnsreturn_valuesr[   r   r   listpopr   )rJ   evexpected	buffer_idstep_ctxr   r{   remaining_event_typestotalby_typee_types              r:   r   WorkflowBroker.collect_events   s=    %%)9%:*	#>>::>>y"M ' 1G./.T!W./5
 !
 !GT"XJ$77Bx00  ..55%yC d#!D(ADG##A& ) FLL,,Q/0  	&&--.BI.VW' 0s   E
c           	     |   Ub  X R                   R                  5       ;  a  [        SU S35      eU R                   R                  5       U   nUR                  n[	        U5      UR
                  ;  a  [        SU S[	        U5       35      eU R                  U R                  R                  [        XS95      5        g )NzStep z does not existz does not accept event of type )r   	step_name)
rE   rg   r   _step_configr   accepted_eventsr^   r@   r   r%   )rJ   messager   rw   step_configs        r:   r   WorkflowBroker.send_event  s    >>4466*U4&+HII 113D9I#00KG}K$?$??*D6!@gP  	MM$$\%PQ	
r9   c                f     [         R                  " 5       $ ! [         a    [        U S35      ef = f)Nz/ may only be called from within a step function)r!   r   LookupErrorr   )rJ   r   s     r:   r   WorkflowBroker._get_step_ctx  s=    	,0022 	&$EF 	s    0c           
       ^#    U R                  SS9nUR                  R                  nU=(       d    0 nU R                  U5      n[	        U5      n	T=(       d    SU SU	 3m[        U4S jU 5       S 5      n
U
b  U
R                  c  [        [        TUUUUS95      eUR                  R                  R                  [        TS95        [        [        U
R                  5      $ 7f)Nwait_for_eventr   waiter_rU   c              3  J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7frS   	waiter_id).0wr   s     r:   	<genexpr>0WorkflowBroker.wait_for_event.<locals>.<genexpr>2  s     P"3Q{{i7Oqq"3s   #	#)r   requirementstimeout
event_typewaiter_eventr   )r   r   collected_waiters_get_full_pathr   nextresolved_eventr"   r   r   r   r[   r   r   r.   )rJ   r   r   r   r   r   r   r   	event_strrequirements_strwaiters      `       r:   r   WorkflowBroker.wait_for_event   s      %%)9%:$NN<<#)r ''
3	|,I79+Q7G6H!I	P"3PRVW>V22:!'!-#)!-  **11,2ST60011s   C C#c                8    UR                    SUR                   3$ )N.)r5   r4   )rJ   ev_types     r:   r   WorkflowBroker._get_full_pathA  s!    $$%Qw'7'7&899r9   c                6    U R                   R                  5       $ )z8The internal queue used for streaming events to callers.)r@   stream_published_eventsr   s    r:   r   &WorkflowBroker.stream_published_eventsD  s    }}4466r9   c                `    Ub+  U R                  U R                  R                  U5      5        g g rS   )r^   r@   write_to_event_stream)rJ   r   s     r:   write_event_to_stream$WorkflowBroker.write_event_to_streamI  s)    >t}}BB2FG r9   c                (  #    U R                   R                  [        5       5      I Sh  vN   U R                   H  nUR	                  5         M     U R                  R                  5         U R                   R                  5       I Sh  vN   g Nd N7f)zCancels the running workflow loop

Cancels all outstanding workers, waits for them to finish, and marks the
broker as not running. Queues and state remain available so callers can
inspect or drain leftover events.
N)r@   r   r&   rF   cancelclearclose)rJ   workers     r:   shutdownWorkflowBroker.shutdownM  sh      mm&&}777mmFMMO $mm!!###	 	8 	$s"   'BBABB	BB)r?   rD   rH   rC   rA   r@   rF   rE   )
rK   r,   rL   r>   rM   r   rN   r   r   r   )r]   zCoroutine[Any, Any, Any]r   zasyncio.Task[Any])NNNN)rK   r,   r~   rG   r   zStartEvent | Noner}   $Callable[[], Awaitable[None]] | Noner|   r   r   r+   )r   r   )r   rB   )r   r   )r   zlist[WorkflowTick])r   z	list[str]rS   )r   r   r   zlist[Type[Event]]r   
str | Noner   zlist[Event] | None)r   r   r   r   r   r   )r   r   r   r    )NNNi  )r   zType[T]r   Event | Noner   r   r   zdict[str, Any] | Noner   zfloat | Noner   r.   )r   zType[Event]r   r   )r   zAsyncGenerator[Event, None])r   r   r   r   )r4   r5   r6   r7   __doc____annotations__rO   r^   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r8   r3   r9   r:   r<   r<   I   s   
 O$$  ##   "  !	 
   
   (,)-=A?CUU %U '	U
 ;U =U 
UpF       & &
 OS#4AK	@
" &* $.2 $22 #2 	2
 ,2 2 
2B:7
H$r9   r<   )I
__future__r   rY   loggingcollectionsr   r   typingr   r   r   r	   r
   r   r   r   r   r   &llama_index_instrumentation.dispatcherr   r   workflows.utilsr   r   workflows.errorsr   workflows.eventsr   r   workflows.runtime.control_loopr   r   &workflows.runtime.types.internal_stater   workflows.runtime.types.pluginr   r   r   workflows.runtime.types.resultsr   r   r   r   r    r!   r"   %workflows.runtime.types.step_functionr#   r$   workflows.runtime.types.ticksr%   r&   r'   #workflows.runtime.workflow_registryr(   context.state_storer*   workflows.handlerr+   	workflowsr,   workflows.context.contextr-   r.   dictr   r   EventBuffer	getLoggerloggerWarningr1   r<   r3   r9   r:   <module>r     s    #   ,   . 1 R > T T   T S A ) -"1 Cu3U#$					w 	O$WW% O$r9   