
    /j'                    F   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  S SK	J
r
Jr  SSKJr  SSKJrJrJrJr  SS	KJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJr  \S   r\" \R>                  " \" 5       RA                  5       5      S5      r! " S S\RD                  \   5      r#g)    )annotationsN)	AwaitableCallable)BaseContext)AnyLiteral   )utils)
JobContextJobExecutorType
JobProcessRunningJobInfologger)aio)get_cpu_monitor   )inference_executorjob_proc_executorjob_thread_executor)JobExecutor)process_createdprocess_startedprocess_readyprocess_closedprocess_job_launched   c                  R  ^  \ rS rSr                              SU 4S jjr\SS j5       rSS jrSS jrSS jr	SS jr
SS jr\SS	 j5       r\R                  " \S
9SS j5       r\R                  " \S
9SS j5       r\R                  " \S
9SS j5       rSrU =r$ )ProcPool   c                 > [         TU ]  5         Xl        Xl        Xl        X l        X0l        X`l        Xpl        Xl	        XPl
        Xl        Xl        Xl        X@l        Xl        X@l        ["        R$                  " [&        5      U l        ["        R*                  [,           " 5       U l        / U l        [3        5       U l        [3        5       U l        [3        5       U l        SU l        SU l        ["        R>                  " 5       U l         SU l!        g )NFr   )"super__init___job_executor_type_mp_ctx_initialize_process_fnc_job_entrypoint_fnc_session_end_fnc_close_timeout_session_end_timeout_inf_executor_initialize_timeout_loop_memory_limit_mb_memory_warn_mb_default_num_idle_processes_http_proxy_target_idle_processesasyncio	SemaphoreMAX_CONCURRENT_INITIALIZATIONS	_init_semQueuer   _warmed_proc_queue
_executorsset_spawn_tasks_close_tasks_monitor_tasks_started_closedEvent_idle_ready_jobs_waiting_for_process)selfinitialize_process_fncjob_entrypoint_fncsession_end_fncnum_idle_processesinitialize_timeoutclose_timeoutsession_end_timeoutr   job_executor_typemp_ctxmemory_warn_mbmemory_limit_mb
http_proxyloop	__class__s                  M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/ipc/proc_pool.pyr#   ProcPool.__init__   s    $ 	"3'=$#5  /+$7!/#5 
 /-+=(%&8# **+IJ")--"<">-/58U58U7:u"==?)*&    c                    U R                   $ N)r9   rC   s    rR   	processesProcPool.processesL   s    rT   c                D   ^ [        U4S jU R                   5       S 5      $ )Nc              3     >#    U  H?  oR                   (       d  M  UR                   R                  R                  T:X  d  M;  Uv   MA     g 7frV   )running_jobjobid).0xjob_ids     rR   	<genexpr>)ProcPool.get_by_job_id.<locals>.<genexpr>R   s1     \1==QQ]]=N=N=Q=QU[=[QQs   A
"A
	A
)nextr9   )rC   ra   s    `rR   get_by_job_idProcPool.get_by_job_idP   s    \\
 	
rT   c                  #    U R                   (       a  g SU l         [        R                  " U R                  5       5      U l        U R
                  S:  aD   [        R                  " U R                  R                  5       U R                  S-   S9I S h  vN   g g  N! [        R                   a    [        R                  " S5         g f = f7f)NTr   r	   )timeoutz2timed out waiting for idle processes to initialize)r>   r3   create_task
_main_task_main_ataskr0   wait_forrA   waitr,   TimeoutErrorr   warningrW   s    rR   startProcPool.startV   s     =="..t/@A++a/U&&$$))+ 44q8  	 0 '' USTUs<   AC=B BB CB *C	CC		Cc                   #    U R                   (       d  g SU l        [        R                  " U R                  5      I S h  vN   g  N7f)NT)r>   r?   r   cancel_and_waitrk   rW   s    rR   acloseProcPool.acloseh   s0     }}!!$"2"2333s   =AA Ac                  #    Sn[        U5       GHl  nU =R                  S-  sl         U R                  R                  5       (       a  [	        U R
                  5      U R                  :  ad  [        R                  " U R                  5       5      nU R
                  R                  U5        UR                  U R
                  R                  5        U R                  R                  5       (       a+  [        R                  " SSUR                  R                  0S9  U R                  R!                  5       I S h  vN nU =R                  S-  sl         UR#                  U5      I S h  vN   U R%                  SU5          g    g  NJ! U =R                  S-  sl        f = f N7! [&         a    [        R                  " UR)                  5       5      nU R*                  R                  U5        UR                  U R*                  R                  5        X2S-
  :X  a-  [        R,                  " SUSUR                  R                  0S9  e [        R                  " SUR                  R                  US-   S	.S9   GMf  f = f7f)
N   r   zBno warmed process available for job, waiting for one to be createdra   extrar   z1failed to launch job on process after %d attemptsz<failed to launch job on process, retrying with a new process)ra   attempt)rangerB   r8   emptylenr;   r3   ri   _proc_spawn_taskaddadd_done_callbackdiscardr   ro   r]   r^   get
launch_jobemit	Exceptionrt   r<   error)rC   infoMAX_ATTEMPTSrz   taskproc
close_tasks          rR   r   ProcPool.launch_jobo   s    \*G**a/*4++1133D--.1O1OO #..t/D/D/FGD%%))$/**4+<+<+D+DE**0022NN\'5
 "4488::..!3.ood+++		0$73 +$ ;..!3. ,  $00?
!!%%j1,,T->->-F-FGQ..LLK$'5
 R%)XX[[Wq[Isf   'I:DF7F8F<I:F &F'F =I:FFI:F  CI72I:6I77I:c                    Xl         g rV   r2   )rC   rG   s     rR   set_target_idle_processes"ProcPool.set_target_idle_processes   s    &8#rT   c                    U R                   $ rV   r   rW   s    rR   target_idle_processesProcPool.target_idle_processes   s    ***rT   r   c                T  #    U R                   [        R                  :X  ay  [        R                  " U R
                  U R                  U R                  U R                  U R                  U R                  U R                  SSU R                  U R                  S9nOU R                   [        R                  :X  a  [        R                   " U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R"                  U R                  SSSU R$                  U R&                  U R                  S9nO[)        SU R                    35      eU R*                  R-                  U5        Sn U R.                   IS h  vN   U R0                  (       d  U R3                  SU5        UR5                  5       I S h  vN   U R3                  S	U5        UR7                  5       I S h  vN   U R3                  S
U5        U R8                  R;                  U5        U R8                  R=                  5       U R>                  :  a  U R@                  RC                  5         SnS S S 5      IS h  vN   U(       dF  U R*                  RQ                  U5        URS                  5       I S h  vN   U R3                  SU5        g [L        RT                  " U RW                  U5      5      nU RX                  R[                  U5        UR]                  U RX                  R^                  5        g  GN GNf GN? N! , IS h  vN  (       d  f       N= f! [D         a'    [F        RH                  " SURK                  5       S9   GN[L        RN                   a     GNf = f N7f)Ng      @g      ?)rD   rE   rF   rH   rI   rJ   r   ping_intervalhigh_ping_thresholdrO   rP   <   )rD   rE   rF   rH   rI   rJ   r   rL   rP   r   ping_timeoutr   rM   rN   rO   zunsupported job executor: Fr   r   r   Tzerror initializing processrx   r   )0r$   r   THREADr   ThreadJobExecutorr&   r'   r(   r,   r)   r*   r+   r1   r-   PROCESSr   ProcJobExecutorr%   r/   r.   
ValueErrorr9   appendr6   r?   r   rp   
initializer8   
put_nowaitqsizer0   rA   r:   r   r   	exceptionlogging_extrar3   CancelledErrorremovert   ri   _monitor_process_taskr=   r   r   r   )rC   r   initializedmonitor_tasks       rR   r~   ProcPool._proc_spawn_task   s     ""o&<&<<&88'+'C'C#'#;#; $ 5 5#'#;#;"11$($=$=#'#5#5!$'++ZZD $$(?(??$44'+'C'C#'#;#; $ 5 5#'#;#;"11$($=$=#'#5#5||ZZ!$'#33 $ 5 5++D$ 9$:Q:Q9RSTTt$	~~~||II/6**,&&II/6//+++IIot4++66t<..446$:Z:ZZ((,,."&K &~" OO""4(++-II&-**4+E+Ed+KL-&&t':':'B'BC3 & '+ &~~~  	W9ASASAUV%% 		
  s   FN(	M L7M 7ML:)M>L=?A5M4M ?M  M 5N(9N&:A=N(7M :M=M M MM	MM N(M -N#	N(N#N("N##N(c                   #     UR                  5       I S h  vN   U R                  SU5        U R                  R                  U5        g  N2! U R                  R                  U5        f = f7f)Nr   )joinr   r9   r   )rC   r   s     rR   r   ProcPool._monitor_process_task   sT     	)))+II&-OO""4(  OO""4(s+   A,A A
A A,
A A))A,c                  #     U R                   (       Gd  U R                  R                  5       [        U R                  5      -   n[        [        U R                  U R                  5      U R                  5      nX!-
  n[        U5       Hg  n[        R                  " U R                  5       5      nU R                  R                  U5        UR                  U R                  R                   5        Mi     [        R"                  " S5      I S h  vN   U R                   (       d  GM  g g  N! [        R$                   a    [&        R(                  " U R                  6 I S h  vN    [        R*                  " U R,                   Vs/ s H  ofR/                  5       PM     Os  snf sn6 I S h  vN    [        R*                  " U R0                  6 I S h  vN    [        R*                  " U R2                  6 I S h  vN     g f = f7f)Ng?)r?   r8   r   r}   r;   maxminr2   r0   rB   r{   r3   ri   r~   r   r   r   sleepr   r   rs   gatherr9   rt   r<   r=   )rC   current_pendingtargetto_spawn_r   r   s          rR   rj   ProcPool._main_task   sj    	7lll"&"9"9"?"?"ACHYHYDZ"Z33T5U5UV22 "3xA"..t/D/D/FGD%%))$/**4+<+<+D+DE )
 mmC((( lll )%% 	7%%t'8'8999..T__"M_T;;=_"MNNN..$"3"3444..$"5"5666		7sw   H D	D* D(D* &H (D* *4G=E!#G=F
G=(F+)%G=G%G=4G75G=:H <G==H )r<   r)   r?   r0   r9   r1   rA   r+   r6   r&   r,   r'   r$   rB   r-   rk   r.   r/   r=   r%   r(   r*   r;   r>   r2   r8   )rD   zCallable[[JobProcess], Any]rE   z'Callable[[JobContext], Awaitable[None]]rF   z.Callable[[JobContext], Awaitable[None]] | NonerG   intrH   floatrI   r   rJ   r   r   z+inference_executor.InferenceExecutor | NonerK   r   rL   r   rM   r   rN   r   rO   z
str | NonerP   zasyncio.AbstractEventLoopreturnNone)r   zlist[JobExecutor])ra   strr   zJobExecutor | None)r   r   )r   r   r   r   )rG   r   r   r   )r   r   )r   r   r   r   )__name__
__module____qualname____firstlineno__r#   propertyrX   re   rp   rt   r   r   r   r
   log_exceptionsr   r~   r   rj   __static_attributes____classcell__)rQ   s   @rR   r   r      sG   -+ !<-+ D	-+
 H-+  -+ "-+ -+ #-+ H-+ +-+ -+ -+ -+ -+  (!-+" 
#-+^  
U$4+Z9 + + (AD )ADF () )) (7 )7rT   r   )$
__future__r   r3   mathcollections.abcr   r   multiprocessing.contextr   typingr   r    r
   r]   r   r   r   r   logr   r   utils.hw.cpur   r   r   r   job_executorr   
EventTypesr   ceil	cpu_countr5   EventEmitterr    rT   rR   <module>r      s~    "   / /   I I   * H H %
 "%TYY/@/J/J/L%Mq!Q h7u!!*- h7rT   