+
    ~j                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt	^ RI
t
^ RIt^ RIt^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHt ^ RIHtHt ^ RIt^ RIt^ RIH t  ^ R	I!H"t" ^ R
I#H$t$H%t% ^ RI&H't'H(t( ^RI)H*t*H+t+H,t, ^RI-H.t. ^RI/H0t0 ^RI1H2t2H3t3H4t4H5t5H6t6H7t7 ^RI8H9t9H:t: ^RI;H<t< ^RI=H>t>H?t?H@t@ ^RI,HAtAHBtB ^RICHDtD ^RIEHFtF RtGRtHRtI^tJR R ltKR R ltL ! R R]4      tM]MtN ! R R 4      tO] ! R! R"4      4       tP]P                  P                  R#4      '       d   ]4P                  tTM]4P                  tT]! R$4      tV]! R%R&7       ! R' R(]]V,          4      4       tW]W! ]P                  R)R*7      tY]W! R+R,R*7      tZ]P! 4       t[]\! 0 R5m4      t]R- R. lt^] ! R/ R04      4       t_]_t`] ! R1 R24      4       ta]R6,          tb ! R3 R4],P                  ]b,          4      tdR# )7    )annotationsN)	AwaitableCallable)	dataclassfield)Enum)AnyGenericLiteralTypeVaroverload)urljoinurlparse)web)MessageToDict)apirtc)agentmodels)ipc	telemetryutils)AssignmentTimeoutError)_InferenceRunner)JobAcceptArguments
JobContextJobExecutorType
JobProcess
JobRequestRunningJobInfo)	DEV_LEVELlogger)Plugin)ATTRIBUTE_AGENT_NAME	NOT_GIVEN
NotGivenOr)http_serveris_given)get_cpu_monitor)__version__g      @      @      ?c                    V ^8  d   QhRRRR/# )   procr   returnr	    )formats   "j/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/worker.py__annotate__r4   A   s      Z C     c                    R # Nr1   )r/   s   &r3   _default_setup_fncr8   A   s    
r5   c                    V ^8  d   QhRRRR/# )r.   ctxr   r0   Noner1   )r2   s   "r3   r4   r4   E   s      J 4 r5   c                B   "   V P                  4       G R j  xL
  R #  L5ir7   )accept)r:   s   &r3   _default_request_fncr>   E   s     
**,s   c                  n    ] tR t^It]P
                  P                  t]P
                  P                  t	Rt
R# )
ServerTyper1   N)__name__
__module____qualname____firstlineno__r   JobTypeJT_ROOMROOMJT_PUBLISHER	PUBLISHER__static_attributes__r1   r5   r3   r@   r@   I   s     ==  D**Ir5   r@   c                  v    ] tR t^QtRt]P                  ! 4       tR R ltR R lt	R R lt
]R R	 l4       tR
tR# )_DefaultLoadCalcNc                   V ^8  d   QhRR/# r.   r0   r;   r1   )r2   s   "r3   r4   _DefaultLoadCalc.__annotate__U   s      $ r5   c                	   \         P                  ! ^4      V n        \        4       V n        \
        P                  ! V P                  RRR7      V n        \
        P                  ! 4       V n
        V P                  P                  4        R# )   Tworker_cpu_load_monitor)targetdaemonnameN)r   MovingAverage_m_avgr)   _cpu_monitor	threadingThread
_calc_load_threadLock_lockstartselfs   &r3   __init___DefaultLoadCalc.__init__U   s]    ))!,+- ''??46O
 ^^%
r5   c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   rO   ^   s     . .D .r5   c                	     V P                   P                  RR7      pV P                  ;_uu_ 4        V P                  P	                  V4       RRR4       KW    + '       g   i     Kh  ; i)Tr,   )intervalN)rX   cpu_percentr^   rW   
add_sample)ra   cpu_ps   & r3   r[   _DefaultLoadCalc._calc_load^   sE    %%1131?E&&u- s   AA)	c                   V ^8  d   QhRR/# r.   r0   floatr1   )r2   s   "r3   r4   rO   d   s     ) )% )r5   c                	    V P                   ;_uu_ 4        V P                  P                  4       uuR R R 4       #   + '       g   i     R # ; ir7   )r^   rW   get_avgr`   s   &r3   _get_avg_DefaultLoadCalc._get_avgd   s'    ZZZ;;&&( ZZZs	   :A	c                    V ^8  d   QhRRRR/# )r.   workerAgentServerr0   rm   r1   )r2   s   "r3   r4   rO   i   s     ( (k (e (r5   c                	    V P                   f;   V P                  ;_uu_ 4        V P                   f   \        4       V n         R R R 4       V P                   P                  4       #   + '       g   i     L*; ir7   )	_instance_instance_lockrL   rp   )clsrs   s   &&r3   get_load_DefaultLoadCalc.get_loadh   sO    == ###==($4$6CM $ }}%%''	 $#s   A##A3	)rX   r^   rW   r\   )rA   rB   rC   rD   rv   rY   r]   rw   rb   r[   rp   classmethodry   rJ   r1   r5   r3   rL   rL   Q   s6    I^^%N.) ( (r5   rL   c                  z    ] tR t^rt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   ]	! ]
R7      tR]R	&   R
tR]R&   RtR# )WorkerPermissionsTboolcan_publishcan_subscribecan_publish_datacan_update_metadatadefault_factoryzlist[models.TrackSource]can_publish_sourcesFhiddenr1   N)rA   rB   rC   rD   r   __annotations__r   r   r   r   listr   r   rJ   r1   r5   r3   r}   r}   r   sG    KM4!d! $$49$4O1OFDr5   r}   winTT)frozenc                  B    ] tR t^t$ R]R&   R]R&   ]R R l4       tRtR# )ServerEnvOptionr   dev_defaultprod_defaultc               $    V ^8  d   QhRRRRRR/# )r.   optzT | ServerEnvOption[T]devmoder~   r0   r   r1   )r2   s   "r3   r4   ServerEnvOption.__annotate__   s"      , t  r5   c                	r    \        V \        4      '       d!   V'       d   V P                  # V P                  # V # r7   )
isinstancer   r   r   )r   r   s   &&r3   getvalueServerEnvOption.getvalue   s+    c?++&-3??C33C3CC
r5   r1   N)rA   rB   rC   rD   r   staticmethodr   rJ   r1   r5   r3   r   r      s    NO r5   r   gffffff?r   r   DEBUGINFOc                    V ^8  d   QhRRRR/# )r.   	log_levelstr | ServerEnvOption[str]r0   r1   )r2   s   "r3   r4   r4      s      )r5   c                   \        V \        4      '       d   V P                  V P                  .pMV .pV FJ  pVP	                  4       \
        9  g   K  \        R V: RRP                  \        \
        4      4       24      h	  \        V \        4      '       d>   \        V P                  P	                  4       V P                  P	                  4       R7      # V P	                  4       # )zInvalid log level z. Valid levels: z, r   )	r   r   r   r   upperVALID_LOG_LEVELS
ValueErrorjoinsorted)r   levels_to_checklevels   &  r3   !_validate_and_normalize_log_levelr      s     )_--$00)2H2HI$+ ;;= 00$UI-=diiO_H`>a=bc  ! )_--!--335"//557
 	
 ??r5   c            	         ] tR t^t$ R]R&    ]tR]R&    ]tR]R&    ]	P                  tR]R&    ]tR	]R
&    ]tR]R&    RtR]R&    ^ tR]R&    RtR]R&    ]! ^ ]! ]P,                  ! ]! 4       P1                  4       4      ^4      R7      tR]R&    RtR]R&    RtR]R&    RtR]R&    ]! ]R7      tR]R&    Rt R ]R!&    ]!PD                  t#R"]R#&    ^t$R]R$&    R%t%R&]R'&    ]! R(R%R)7      t&R&]R*&    ]! R(R%R)7      t'R&]R+&    ](t)R,]R-&    Rt*R ]R.&   ]! ^ R/R7      t+R]R0&    ],t-R1]R2&    ].P^                  Pa                  R34      '       g   R4MR5t1R6]R7&    ],t2R8]R9&    R%t3R&]R:&    R; R< lt4R= R> lt5R?t6R%# )@ServerOptions'Callable[[JobContext], Awaitable[None]]entrypoint_fncz'Callable[[JobRequest], Awaitable[None]]request_fnczCallable[[JobProcess], Any]prewarm_fncz4Callable[[AgentServer], float] | Callable[[], float]load_fncr   job_executor_typefloat | ServerEnvOption[float]load_threshold  rm   job_memory_warn_mbjob_memory_limit_mb  intdrain_timeoutr   int | ServerEnvOption[int]num_idle_processes      $@shutdown_process_timeout     r@session_end_timeoutinitialize_process_timeoutr   r}   permissions str
agent_name
WorkerTypeworker_type	max_retryN
str | Nonews_urlF)reprdefaultapi_key
api_secretr   r   host  portNotGivenOr[str | None]
http_proxylinuxspawn
forkserverLiteral['spawn', 'forkserver']multiprocessing_contextNotGivenOr[int]prometheus_portprometheus_multiproc_dirc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   ServerOptions.__annotate__  s     K Kt Kr5   c                	:    \        V P                  4      V n        R # r7   )r   r   r`   s   &r3   __post_init__ServerOptions.__post_init__  s    :4>>Jr5   c                    V ^8  d   QhRRRR/# )r.   r   r~   r0   r;   r1   )r2   s   "r3   r4   r     s      t  r5   c                	    \         P                  V P                  V4      pV^8  d&   V'       g   \        P                  ! RV 24       R# R# R# )   z?load_threshold in prod env must be less than 1, current value: N)r   r   r   r"   warning)ra   r   r   s   && r3   validate_configServerOptions.validate_config  sD    (11$2E2EwOAgNNQR`Qab '.r5   )r   )7rA   rB   rC   rD   r   r>   r   r8   r   rL   ry   r   _default_job_executor_typer   _default_load_thresholdr   r   r   r   r   minmathceilr)   	cpu_countr   r   r   r   r   r}   r   r   r   rG   r   r   r   r   r   _default_log_levelr   r   r   r%   r   sysplatform
startswithr   r   r   r   r   rJ   r1   r5   r3   r   r      s   ;;X;OK8O/ 0BK,ASEUE^E^HB^d)CCX5LN2L
 !$#j!"" M3a5DC		/2C2M2M2O(PRS$T62  1&*e*J!&&](,,L%*;L%MK"M?JB )ooK-AIsAFJ;  UD9GZ9? #t<J
<B -?I)>H D#N'61SW'XD
$X
 *3J&2
 ||..w77\ ;  (1O_0T+/j/m
K r5   r   c                  ,    ] tR tRt$ R]R&   R]R&   RtR# )
WorkerInfoi  r   	http_portr~   cloud_agentsr1   N)rA   rB   rC   rD   r   rJ   r1   r5   r3   r   r     s    Nr5   r   c            .        a  ] tR tRt]! ^ ]P                  ! ]! 4       P                  4       4      R7      t	]! ^ RR7      t
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]P                   P#                  R4      '       g   RMRRRR RR!RR"RR#]/R$ V 3R% lllt]R& R' l4       t]R( R) l4       t]P.                  R* R+ l4       t]R, R- l4       t]P.                  R. R/ l4       t]R0 R1 l4       t]R2RR3]P:                  R4RR5R/R6 R7 ll4       t]R2RR3]P:                  R4RR5R/R8 R9 ll4       tRwR2RR3]P:                  R4RR5R/R: R; lllt]R< R= l4       tR>R?R@R?/RA RB llt R]R]R]R]R]R]R]R]R	]R]RRRRRR/RC RD llt!]RE RF l4       t"]RG RH l4       t#]RI RJ l4       t$]3RK RL llt%]&PN                  ! ](RM7      RNR?RORRPRRQR/RR RS ll4       t)RT RU lt*RV RW lt+]&PN                  ! ](RM7      RX RY l4       t,RZ R[ lt-R\ R] lt.R^ R_ lt/R` Ra lt0Rb Rc lt1Rd Re lt2Rf Rg lt3Rh Ri lt4Rj Rk lt5Rl Rm lt6Rn Ro lt7Rp Rq lt8Rr Rs lt9Rt Ru lt:Rvt;V ;t<# )xrt   i'  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Nr   r   r   r   r   r   r   r   r   r   	setup_fncr   r   r   r   c          0     x    V ^8  d   Qh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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   r   r   r   r   r   r   r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   "Callable[[JobProcess], Any] | Noner   ;Callable[[AgentServer], float] | Callable[[], float] | Noner   z
int | Noner   r   r   r0   r;   r1   )r2   s   "r3   r4   AgentServer.__annotate__-  s    Q$ Q$ +Q$ 7	Q$
 "Q$ #Q$ Q$ 7Q$ #(Q$ #Q$ %*Q$ 'Q$ Q$ Q$ Q$  !Q$" #Q$$ )%Q$& +'Q$( "@)Q$. 6/Q$0 N1Q$2 $3Q$4 #-5Q$6 .7Q$8 
9Q$r5   c               	  < \         SV `  4        T;'       g*    \        P                  P	                  R 4      ;'       g    RV n        T;'       g*    \        P                  P	                  R4      ;'       g    RV n        T;'       g*    \        P                  P	                  R4      ;'       g    RV n        \        P                  P	                  R4      ;'       g    RV n        Wn	        VV n
        Wn        W n        W0n        W@n        WPn        W`n        Wpn        Wn        Wn        Wn        Wn        VV n        VV n        VV n        \2        P4                  ! V4      V n        \9        V4      '       gG   \        P                  P	                  R4      ;'       g     \        P                  P	                  R4      pVV n        \=        V4      V n        RV n         RV n!        \D        PF                  V n$        RV n%        R	V n&        R	V n'        R	V n(        VV n)        VV n*        R
w  V n+        V n,        V n-        V n.        R	V n/        \`        Pb                  ! 4       V n2        R	# )LIVEKIT_URLr   LIVEKIT_API_KEYLIVEKIT_API_SECRETLIVEKIT_WORKER_TOKENHTTPS_PROXY
HTTP_PROXYFunregisteredN)TFFF)3superrb   osenvironget_ws_url_api_key_api_secret_worker_token_host_port_job_executor_type_load_threshold_job_memory_warn_mb_job_memory_limit_mb_drain_timeout_num_idle_processes_shutdown_process_timeout_session_end_timeout_initialize_process_timeout_permissions
_max_retry_prometheus_port_prometheus_multiproc_dir_mp_ctx_strmpget_context_mp_ctxr(   _http_proxyr   
_log_level_agent_name_agent_name_is_envr@   rG   _server_type_id_entrypoint_fnc_request_fnc_session_end_fnc
_setup_fnc	_load_fnc_closed	_draining_connecting_connection_failed_http_serverasyncior]   r^   )ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	__class__s   &$$$$$$$$$$$$$$$$$$$$$$$r3   rb   AgentServer.__init__-  s   : 	DD!>DD"JJ2::>>2C#DJJ%SS8L)MSSQSZZ^^,BCIIr

"3-#5 $7!+#5 )A&$7!+E('# /)A&2~~&=>
##6VV"**..:VJ%;IF"'&OO! PTLPPT ?HV^S
Odnd&68O <@\\^
r5   c                   V ^8  d   QhRR/# )r.   r0   r   r1   )r2   s   "r3   r4   r     s      5 r5   c                	    V P                   # r7   )r  r`   s   &r3   r   AgentServer.log_level      r5   c                   V ^8  d   QhRR/# )r.   r0   r   r1   )r2   s   "r3   r4   r     s      = r5   c                	    V P                   # r7   )r$  r`   s   &r3   r   AgentServer.setup_fnc  r1  r5   c                    V ^8  d   QhRRRR/# )r.   valuer   r0   r;   r1   )r2   s   "r3   r4   r     s        A  d  r5   c                	R    Ve   \        V4      '       g   \        R4      hWn        R # )Nz$setup_fnc must be a callable or None)callable	TypeErrorr$  ra   r6  s   &&r3   r   r4    s!    Xe__BCCr5   c                   V ^8  d   QhRR/# )r.   r0   r   r1   )r2   s   "r3   r4   r     s      U r5   c                	    V P                   # r7   )r%  r`   s   &r3   r   AgentServer.load_fnc      ~~r5   c                    V ^8  d   QhRRRR/# )r.   r6  zCallable[..., float] | Noner0   r;   r1   )r2   s   "r3   r4   r     s      9 d r5   c                	R    Ve   \        V4      '       g   \        R4      hWn        R # )Nz#load_fnc must be a callable or None)r8  r9  r%  r:  s   &&r3   r   r=    s!    Xe__ABBr5   c                    V ^8  d   QhRRRR/# )r.   optionsr   r0   rt   r1   )r2   s   "r3   r4   r     s        -  K  r5   c                	   T ! R/ R VP                   bRVP                  bRVP                  bRVP                  bRVP                  bRVP
                  bRVP                  bRVP                  bRVP                  bR	VP                  bR
VP                  bRVP                  bRVP                  bRVP                  bRVP                  bRVP                  bRVP                   bRVP"                  bR\%        VP&                  4      '       d   VP&                  MRbRVP(                  bRVP*                  bRVP,                  bRVP.                  b pVP1                  VP2                  VP4                  VP6                  VP8                  R7       V# )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Nr   r   r   r   )r   type
on_requestr1   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r   r   r   r   rtc_sessionr   r   r   r   )rx   rB  servers   && r3   from_server_optionsAgentServer.from_server_options  s    
%77
"11
 !( ; ;
  '99	

 "//
  '99
 &-%E%E
 !( ; ;
 (/'I'I
  ++
 ''
 >>
 OO
 ))
 
  !
" ))#
$ %,$C$C%
& 8@@W@W7X7XG33^b'
( &-%E%E)
* ))+
, %%-
. ''/
2 	""))$$**	 	 	
 r5   r   rD  rE  on_session_endc               0    V ^8  d   QhRRRRRRRRR	R
RR/# )r.   funcr   r   r   rD  r@   rE  "Callable[[JobRequest], Any] | NonerJ  "Callable[[JobContext], Any] | Noner0   r1   )r2   s   "r3   r4   r     sF     6 656 	6
 6 76 ;6 
16r5   c               	    R # r7   r1   )ra   rL  r   rD  rE  rJ  s   &&$$$$r3   rF  AgentServer.rtc_session  s     36r5   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r.   r   r   rD  r@   rE  rM  rJ  rN  r0   z\Callable[[Callable[[JobContext], Awaitable[None]]], Callable[[JobContext], Awaitable[None]]]r1   )r2   s   "r3   r4   r     s>     	 	 	 		
 7	 ;	
	r5   c               	    R # r7   r1   )ra   r   rD  rE  rJ  s   &$$$$r3   rF  rP    s     r5   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# )r.   rL  z.Callable[[JobContext], Awaitable[None]] | Noner   r   rD  r@   rE  rM  rJ  rN  r0   zCallable[[JobContext], Awaitable[None]] | Callable[[Callable[[JobContext], Awaitable[None]]], Callable[[JobContext], Awaitable[None]]]r1   )r2   s   "r3   r4   r     sF     1 1<1 	1
 1 71 ;1	
1r5   c               B   a aaaa R VVVV V3R llpVe	   V! V4      # V# )z
Decorator or direct registrar for the RTC session entrypoint.

Usage:
    @server.rtc_session(agent_name="survey_agent")
    async def my_agent(job_ctx: JobContext): ...

    server.rtc_session(my_agent, agent_name="survey_agent")
c                    V ^8  d   QhRRRR/# )r.   fr   r0   r1   )r2   s   "r3   r4   -AgentServer.rtc_session.<locals>.__annotate__  s     	 	6	4	r5   c                N  < SP                   e   \        R4      hV Sn         SSn        SSn        S'       d   SSn        RSn        MW\        P                  P                  R4      '       d%   \        P                  R,          Sn        RSn        MRSn        RSn        SSn	        V # )NzHThe AgentServer currently only supports registering only one rtc_sessionFLIVEKIT_AGENT_NAMETr   )
r!  RuntimeErrorr"  r#  r  r  r  r  r  r  )rV  r   rE  rJ  ra   rD  s   &r3   	decorator*AgentServer.rtc_session.<locals>.decorator  s     ##/"^  $%D  *D$2D!#- */' 455#%::.B#C *.'#% */' $DHr5   r1   )ra   rL  r   rD  rE  rJ  r[  s   f&dddd r3   rF  rP    s%    0	 	, T?"r5   c                   V ^8  d   QhRR/# )r.   r0   r   r1   )r2   s   "r3   r4   r     s     
 
Z 
r5   c                	    \        V P                  '       d   V P                  P                  M^ \        V P                  4      R7      # )r   )r   r   )r   r*  r   r~   r  r`   s   &r3   worker_infoAgentServer.worker_info  s9    040A0A0Ad'',,qd001
 	
r5   r   Fr   c               $    V ^8  d   QhRRRRRR/# )r.   r   r~   r   r0   r;   r1   )r2   s   "r3   r4   r     s'     W! W!D W! W!QU W!r5   c               2  a a"   S P                   ;_uu_4       GRj  xL
  S P                  '       g   \        R4      hS P                  f   \	        R4      hS P
                  f   \        S n        S P                  f   \        S n        S P                  f   \        P                  S n	        S P                  P                  '       d   S P                  \        P                  8w  d,   \        P                  ! R4       \        P                  S n	        S P                   \"        8w  d"   \        P                  ! R4       \"        S n        \$        P&                  ! 4       S n        SS n        \,        \$        P.                  \0        ,          ,          ! 4       S n        / S n        RS n        \8        P:                  P<                  \>        P@                  ,          ! ^S P(                  R7      S n!        RS n"        \G        \H        PJ                  4      ^ 8  df   \L        PN                  PQ                  \H        PJ                  R<^R^ ^^<RS PR                  S P(                  S PT                  ;'       g    RR	7      S n"        \L        PV                  PY                  S P                  S P                  S PZ                  \\        P_                  S P`                  S4      S P(                  S Pb                  S PD                  S PR                  S Pd                  S Pf                  S Ph                  S Pj                  S Pl                  S PT                  ;'       g    RR
7      S n7        \>        Pp                  Pr                  S n:        RS n;        RS n<        \z        P|                  ! S P~                  \\        P_                  S P                  S4      4      S nA        RS nB        ^ S nC        R V 3R llpR V 3R llpS P                  P                  P                  \        P                  ! RV4      .4       S P                  P                  P                  \        P                  ! RV4      .4       RS nH        RS nI        S P                  '       g   \        R4      hS P                  '       g   \        R4      hS P                  '       g   \        R4      hRS nN        S P                  e:   \        Pz                  P}                  S P~                  S P                  4      S nN        S P                  '       d   S P                  \        P                  R&   M1R\        P                  9   d   \        P                  R,          S nQ        S P                  '       d#   \        P                  ! S P                  RR7       S P                  '       d   \        P                  P                  S P                  4      '       d   \        P                  ! RRS P                  /R7       \        P                  ! S P                  4       Fk  p\        P                  P                  S P                  V4      p \        P                  P                  V4      '       d   \        P                  ! V4       Kk  Km  	  S P                  \        P                  R&   S P                  \        P                  R&   S P                  \        P                  R&   \        P                  ! R R!\        R"\        P                  /R7       \        P                   F3  p\        P                  ! R#R$VP                  R!VP                  /R7       K5  	  S P                  R%8X  dg   \        P                   Uu. uF  qP                  NK  	  upR&.,           p	\        P                  ! R'R(V	/R7       S PR                  P                  V	4       S PD                  e[   \        P                  ! R)4       S PD                  P                  4       G Rj  xL
  S PD                  P                  4       G Rj  xL
  R*S n        R+ V 3R, llp
S P                  P                  4       G Rj  xL
  \        P                  ! R-S P                  P                   R.S P                  P                   24       S P                  '       dc   S P                  P                  4       G Rj  xL
  \        P                  ! R/S P                  P                  S P                  P                  4       S Pn                  P                  R0V
4       S Pn                  P                  R1V
4       S Pn                  P                  R2V
4       S Pn                  P                  4       G Rj  xL
  \        P                  ! S PT                  ;'       g    RR37      S n<        \        P                  ! S P                  S P                  S P                  S Px                  R47      S n;        \$        P                  ! S P(                  R7      S n        \8        P                  ! \        R57      R6 VV 3R7 ll4       p. p\$        P                  ! V! 4       R8R97      S nI        VP                  S P                  4       V'       gG   \$        P                  ! S P                  4       R:R97      S nH        VP                  S P                  4       S P                  R;4       RRR4      GRj  xL
  S P6                  G Rj  xL
  R#  EL  \         d(   p\        P                  ! RT 2TR7        Rp?EK3  Rp?ii ; iu upi  ELM EL. EL EL EL Lf  + GRj  xL 
 '       g   i     L}; i Lp5i)=u  This method starts the worker's internal event loop, initializes any required
executors, HTTP servers, and process pools, and optionally registers the worker
with the LiveKit server.

Args:
    devmode (bool, optional):
        If True, the worker runs in development mode.
        This affects certain environment-dependent defaults, such as the
        number of idle processes, logging verbosity, and load thresholds,
        making it easier to test and debug without production constraints.

    unregistered (bool, optional):
        If True, the worker will start without registering itself with the
        LiveKit server.
        This allows the worker to operate in a partially connected state—
        capable of using other providers or local processing—but invisible
        to the central LiveKit job dispatcher.
        Useful for local testing, isolated jobs, or running without being
        assigned new jobs.
Nzworker is already runningzNo RTC session entrypoint has been registered.
Define one using the @server.rtc_session() decorator, for example:
    @server.rtc_session(agent_name="my_agent")
    async def my_agent(ctx: JobContext):
        ...
zLcustom load_fnc is not supported when hosting on Cloud, reverting to defaultzRcustom load_threshold is not supported when hosting on Cloud, reverting to default)loopi  r+   )runnersinitialize_timeoutclose_timeoutmemory_warn_mbmemory_limit_mbping_intervalping_timeouthigh_ping_thresholdmp_ctxrc  r   )initialize_process_fncjob_entrypoint_fncsession_end_fncr   rc  r   inference_executorrl  re  rf  r   rg  rh  r           c                    V ^8  d   QhRRRR/# r.   _r	   r0   zweb.Responser1   )r2   s   "r3   r4   %AgentServer.run.<locals>.__annotate__w  s     / /c /l /r5   c                "  <"   SP                   '       d9   SP                   P                  4       '       g   \        P                  ! R RR7      # SP                  '       d   \        P                  ! R RR7      # \        P                  ! RR7      # 5i)i  zinference process not running)statustextzfailed to connect to livekitOK)rx  )_inference_executoris_aliver   Responser)  )rt  ra   s   &r3   health_check%AgentServer.run.<locals>.health_checkw  se     +++D4L4L4U4U4W4W<<s9XYY***<<s9WXX||..s   2B)B /Bc                    V ^8  d   QhRRRR/# rs  r1   )r2   s   "r3   r4   ru    s     P P P Pr5   c                P  <"   \         P                  ! R SP                  RSP                  R\        P
                  P                  SP                  P                  4      RSP                  R\        SP                  4      R\        RR/4      p\        P                  ! VRR	7      # 5i)
r   agent_name_is_envr   worker_loadactive_jobssdk_versionproject_typepythonzapplication/json)bodycontent_type)jsondumpsr  r  r   rE   Namer  r6  _worker_loadlenr  r*   r   r|  )rt  r  ra   s   & r3   rs   AgentServer.run.<locals>.worker  s     zz$d&6&6+T-D-D%u}}'9'9$:K:K:Q:Q'R%t'8'8%s4+;+;'<%{&
 ||<NOOs   B#B&/z/workerz;ws_url is required, or set LIVEKIT_URL environment variablez@api_key is required, or set LIVEKIT_API_KEY environment variablezFapi_secret is required, or set LIVEKIT_API_SECRET environment variablePROMETHEUS_MULTIPROC_DIRT)exist_okz*cleaning prometheus multiprocess directorypathextrazfailed to remove exc_infor   r   r   zstarting workerversionzrtc-versionzplugin registeredpluginr   avzpreloading pluginspackageszstarting inference executorFc                    V ^8  d   QhRRRR/# r.   r/   zipc.job_executor.JobExecutorr0   r;   r1   )r2   s   "r3   r4   ru    s     G G)E G$ Gr5   c                   < SP                   P                  SP                  V 4      4      pSP                  P	                  V4       VP                  SP                  P                  4       R # r7   )_loopcreate_task_update_job_status_job_lifecycle_tasksaddadd_done_callbackdiscard)r/   tra   s   & r3   r  +AgentServer.run.<locals>._update_job_status  sP    JJ**4+B+B4+HI))--a0##D$=$=$E$EFr5   zHTTP server listening on :z2Prometheus metrics exposed at http://%s:%s/metricsprocess_startedprocess_closedprocess_job_launched)proxy)sessionr"   c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   ru    s     b bd br5   c                 $  <"   \         P                  P                  \        4      p  V P	                  4       G Rj  xL
  SP                  4       G Rj  xL
 Sn        \        P                  P                  SP                  4       SP                  '       dF   \        P                  ! 4       P                  R\        P                  P                  4      G Rj  xL
  \        P!                  SP"                  S4      p\        P!                  SP$                  S4      p\&        P(                  ! V4      '       d   EK  \+        SP,                  4      pV^ 8  d   SP                  \+        SP,                  4      ,          pVR8  db   \/        VSP                  ,
          R4      p\1        \&        P2                  ! WT,          4      V4      pSP4                  P7                  V4       EK  EK  SP4                  P7                  V4       EK   EL EL EL55i)zperiodically check loadNrq  )r   aiorf   UPDATE_LOAD_INTERVALtick_invoke_load_fncr  r   metrics_update_worker_loadr  r+  get_event_looprun_in_executor_update_child_proc_countr   r   r  r  r   isinfr  r  maxr   r   
_proc_poolset_target_idle_processes)	rf   r   default_num_idle_processesr  job_loadavailable_loadavailable_jobr   ra   s	          r3   
_load_task#AgentServer.run.<locals>._load_task  s     !99--.BC"--/)).2.C.C.E(ED%%%99$:K:KL555%446FF )"3"3"L"L   &5%=%=d>R>RT[%\N1@1I1I00'2.  ::n55&)$*:*:&;&?'+'8'83t?O?O;P'PH'#~14^dFWFW5WY\1]03$(IIn.G$HJd1" !% I I- X  . !OOEEF`a5 *(EsC   8HHHH
AHA HHAH<CH
HH	load_taskrU   worker_conn_taskworker_startedi,  )ur^   r&  	Exceptionr!  rZ  r"  r>   r$  r8   r%  rL   ry   r_  r   r"   r   r  r   r+  r  r  _devmodesetTaskr	   r  _pending_assignments_close_futurer   r  Chanr   WorkerMessage	_msg_chanrz  r  r   registered_runnersr   inference_proc_executorInferenceProcExecutorr  r  	proc_poolProcPoolr#  r   r   r  r
  r  r  r  r  r  r  WorkerStatusWS_AVAILABLE_previous_status_api_http_sessionr'   
HttpServerr  r	  r*  r  _reserved_slotsapp
add_routesr   r  
_conn_taskr  r  r   r  r  _prometheus_serverr  r   r  r  r  makedirsr  existsdebuglistdirr   isfileunlinkinfor*   r   r#   registered_pluginstitler  r  packageset_forkserver_preloadr_   
initializer   r   onaiohttpClientSessionr   
LiveKitAPIFuturelog_exceptionsr  append_connection_taskemit)ra   r   r   r}  rs   filename	file_pathepplugin_packagesr  r  taskss   fd$          r3   runAgentServer.run  s    * ::::<<< ;<<##+"$    ($8!&"4~~%!1!:!:,,,>>%5%>%>>NNf &6%>%>DN''+BBNNl ,CD( //1DJ#DM(+GLL,=(>(@D%XZD%>BD"YY^^E,?,?@4::VDN  $ #667!;+.+F+F+\+\,??'-"##'$%"#!#(+<<#//774 ,] ,( "mm44'+#'#7#7 $ 5 5#2#;#;D<T<TV]#^ZZ"&"9"9#'#;#;||#'#C#C"<<$($=$=#77 $ 9 9++33t 5 DO" %*$6$6$C$CD!/3DI?CD + 6 6

O44TZZI!D (+D()D / /P P !!,,cggc<.H-IJ!!,,cggi.H-IJ9=DO9=DO<<< !^__=== !cdd### \  PTD#$$0*3*?*?*J*JJJ 5 5+' ---9=9W9W

56+rzz913<V1W.---D::TJ---"''..A_A_2`2`@!4#A#AB !#

4+I+I JH "T-K-KX VIT77>>)44IIi0 5 !K )-BJJ}%,0MMBJJ()/3/?/?BJJ+,KK! +}cooN
 ..' !''!199 / </6<6O6O"P6O996O"PTXSY"Y0_8UV33OD''39:..44666..99;;; DLG G
 ##))+++KK+D,=,=,B,B+C1TEVEVE[E[D\] &&&--33555H++00++00 OO02DEOO/1CDOO57IJ//'')))!(!6!6T=M=M=U=UQU!VDdmmT-=-=tGYGYDI ")TZZ!@D!!0b b 1bB E%11*,[QDOLL)")"5"5))+2D# T__-II&'A :D     E l % T):9+'FQRSST, #Q 7; , 6 *Y :::D 	!s;  nl+nB'm9	F!m9+Cm9D3m9;m9m95A*m9 A m93m95.m9$A1m9;l.C5m9m#Bm9m(!m9=m+>1m9/m.0Am9
m9'm1(B5m9m4&m9C(m9.Am9nm7n$n%n.m 	9m	m9m 	 	m9+m9.m91m94m97n9n	?n 
n	n		nc               P    V ^8  d   Qh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/# )r.   r   zNotGivenOr[str]r   r   r   r   r   zNotGivenOr[JobExecutorType]r   zNotGivenOr[float]r   r   r   r   r   rm   r   r   r0   r;   r1   )r2   s   "r3   r4   r   %  s     6< 6<  6< !	6<
 $6< #6< 76< *6< .6< /6< '6< ,6< #(6< #6< %*6<  
!6<r5   c               	l   V P                   '       g   \        R 4      h\        V4      '       d   Wn        \        V4      '       d   W n        \        V4      '       d   W0n        \        V4      '       d   W@n        \        V4      '       d   WPn        \        V4      '       d   W`n        \        V4      '       d   Wpn	        \        V4      '       d   Wn
        \        V	4      '       d   Wn        \        V
4      '       d   Wn        \        V4      '       d   Wn        \        V4      '       d	   Wn        R# R# )z/cannot update options after starting the serverN)r&  rZ  r(   r  r  r  r  r
  r  r  r  r  r  r  r  )ra   r   r   r   r   r   r   r   r   r   r   r   r   r   s   &$$$$$$$$$$$$$r3   update_optionsAgentServer.update_options%  s    " |||PQQF!LG#MJ)I'O%&&&7#N###1 &'''9$'(((;%M"""/&'''9$,---E*'(((;% )r5   c                   V ^8  d   QhRR/# )r.   r0   r   r1   )r2   s   "r3   r4   r   ^  s      C r5   c                	    V P                   # r7   )r   r`   s   &r3   idAgentServer.id]  s    xxr5   c                   V ^8  d   QhRR/# )r.   r0   list[RunningJobInfo]r1   )r2   s   "r3   r4   r   b  s     \ \1 \r5   c                	    V P                   P                   Uu. uF"  qP                  '       g   K  VP                  NK$  	  up# u upi r7   )r  	processesrunning_job)ra   r/   s   & r3   r  AgentServer.active_jobsa  s5    -1__-F-F[-FTJZJZ   -F[[[s
   AAc                   V ^8  d   QhRR/# r.   r0   r~   r1   )r2   s   "r3   r4   r   f  s      $ r5   c                	    V P                   # r7   )r'  r`   s   &r3   drainingAgentServer.draininge  r>  r5   c                    V ^8  d   QhRRRR/# )r.   timeoutzNotGivenOr[int | None]r0   r;   r1   )r2   s   "r3   r4   r   i  s      #9 $ r5   c           	     X  a "   \        V4      '       d   TMS P                  pS P                  ;_uu_4       GRj  xL
  S P                  '       d    RRR4      GRj  xL
  R# \        P
                  ! RRS P                  RV/R7       RS n        S P                  4       G Rj  xL
  R V 3R llpV'       d&   \        P                  ! V! 4       V4      G Rj  xL
  MV! 4       G Rj  xL
  RRR4      GRj  xL
  R#  L L L_ L, L L  + GRj  xL 
 '       g   i     R# ; i5i)	zcWhen timeout isn't None, it will raise asyncio.TimeoutError if the processes didn't finish in time.Nzdraining workerr  r  r  Tc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   'AgentServer.drain.<locals>.__annotate__v  s     
* 
*$ 
*r5   c                 :  <"   \         P                  ! SP                  R R/ G Rj  xL
   SP                  P                   U u. uF  q P
                  '       g   K  V NK  	  pp V'       g   R# V F  pVP                  4       G Rj  xL
  K  	  Kf   Lju up i  L5i)return_exceptionsTN)r+  gatherr  r  r  r	  r   )r  procsr/   ra   s      r3   _drain!AgentServer.drain.<locals>._drainv  s     nnd&?&?XSWXXX (,(A(AS(A1]]QQ(AES  %"iik)) !& Y T *s3   $BBBBB#$BBBB)
r(   r  r^   r'  r"   r  r  _update_worker_statusr+  wait_for)ra   r  r  s   f& r3   drainAgentServer.draini  s      &g..'D4G4G::::~~~ :: KK)$G1TU!DN,,...
* 
* &&vx999h/ :: / :/ :::s   8D*DD*DD*DD*%A D%D&D;DDD*D	+D/D*:D;D*D*DD	DD*D'	D
D'	D'	!	D*r  fake_jobagent_identity	room_infotokenc               0    V ^8  d   QhRRRRRRRRR	RR
R/# )r.   roomr   r  r~   r   r   r!  zmodels.Room | Noner"  r0   r;   r1   )r2   s   "r3   r4   r     sF     3; 3;3; 	3;
 #3; &3; 3; 
3;r5   c               	v  "   V P                   ;_uu_4       GR j  xL
  Ve1   \        P                  ! 4       P                  VRR7      P                  pVf*   V'       g   \        R4      h\        P                  ! R4      pVf@   V'       g   \        R4      h\        P                  ! \        P                  ! R4      VR7      p\        P                  ! V'       g   \        P                  ! R4      M\        P                  ! R	4      V\        P                  P                  R R
7      pT;'       g~    \        P                  ! V P                  V P                   4      P#                  V4      P%                  R4      P'                  \        P(                  ! RVRR7      4      P+                  4       p\-        V P.                  \1        VRRR7      VV P2                  VVR7      pV P4                  P7                  V4      G R j  xL
  R R R 4      GR j  xL
  R #  EL L L  + GR j  xL 
 '       g   i     R # ; i5i)NF)verify_signaturez,agent_identity is None but fake_job is Falsezfake-agent-z'room_info is None but fake_job is FalseSRM_)sidrU   zjob-z	mock-job-)r  r$  rD  participantr   T)	room_joinr$  r   r   )identityrU   metadata)	worker_idaccept_argumentsjoburlr"  r  )r^   r   TokenVerifierverifyr+  r   r   	shortuuidr   Roomr   JobrE   rF   AccessTokenr  r  with_identity	with_kindwith_grantsVideoGrantsto_jwtr    r   r   r  r  
launch_job)ra   r$  r  r   r!  r"  r/  running_infos   &&$$$$  r3   simulate_jobAgentServer.simulate_job  s     :::: !$!2!2!4!;!;ETY!;!Z!c!c%$%STT!&!? $%NOO"KKEOOF,C$O	 ))2:5??6*P[@\]]** 	C   t/?/?@~.7#S__t$dST  *((!3^RT_a!bLL!L //,,\:::U ::T ;U :::sx   H9HH9A H ,HAHAH1CH>H?HH9HH9HH9H6	"H%#
H6	.H6	0	H9c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r     s     +4 +4d +4r5   c                	  "   V P                   ;_uu_4       GR j  xL
  V P                  '       d6   V P                  e   V P                  G R j  xL
   R R R 4      GR j  xL
  R # \        P                  ! RRV P
                  /R7       V P                  f   Q hV P                  f   Q hV P                  f   Q hV P                  f   Q hRV n        V P                  e2   \        P                  P                  V P                  4      G R j  xL
  V P                  e2   \        P                  P                  V P                  4      G R j  xL
  \        P                  ! V P                   RR/ G R j  xL
  V P"                  P%                  4       G R j  xL
  V P&                  e#   V P&                  P%                  4       G R j  xL
  V P                  P)                  4       G R j  xL
  V P                  P%                  4       G R j  xL
  V P*                  '       d#   V P*                  P%                  4       G R j  xL
  V P                  P%                  4       G R j  xL
  V P,                  P)                  4        V P                  P/                  4       '       g   V P                  P1                  R 4       R R R 4      GR j  xL
  R #  EL EL ELq EL EL ELg ELH EL L L L L L&  + GR j  xL 
 '       g   i     R # ; i5i)Nzshutting down workerr  r  Tr  )r^   r&  r  r"   r  r  r  r  r*  r  r   r  cancel_and_waitr  r+  r  r  r  acloserz  closer  r  done
set_resultr`   s   &r3   rC  AgentServer.aclose  s8    ::::|||%%1,,,,	 :: KK.tTWWoF%%111%%11199((($$000DL*ii//@@@*ii//@@@ ..$";";TtTTT//((***''3..55777$$**,,,##**,,,&&&--44666))""$$$ NN  "%%**,,""--d3U :: -   A A U* 8,, 7$I :::s)  L
KL
0K-KK-L
 K!L
'B%K-K>K-K'K-3K4!K-K/K-K !K-'K#(!K-	K%
K- K-=K'>!K-K) =K-K-9L
K+L
K-L
K-K-K-K- K-#K-%K-'K-)K-+L
-L	3K64
L	?L		L
c                    V ^8  d   QhRRRR/# )r.   msgzagent.WorkerMessager0   r;   r1   )r2   s   "r3   r4   r     s     	' 	'$7 	'D 	'r5   c                   "   V P                   '       d$   VP                  R4      pVR8X  d   R# VR8X  d   R# V P                  P                  V4      G Rj  xL
  R#  L5i)zB_queue_msg raises aio.ChanClosed when the worker is closing/closedmessageupdate_workerNping)r(  
WhichOneofr  send)ra   rI  whichs   && r3   
_queue_msgAgentServer._queue_msg  sL     NN9-E'&nn!!#&&&s   AAAAc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r     s     [% [% [%r5   c                	H	  "   V P                   f   Q h^ pR pV P                  '       Egz    RV n        \        P                  ! V P
                  V P                  4      P                  \        P                  ! RR7      4      P                  4       pRRV 2/p\        V P                  4      pVP                  pVP                  R4      '       d   VP                  RR4      pV RVP                   VP                    2P#                  R4      R,           p\%        VR	4      p/ p	V P&                  '       d   V P&                  V	R
&   V P                   P)                  TTT	RV P*                  ;'       g    R \,        R7      G R j  xL
 p^ p\.        P0                  ! 4       p
V P2                  P4                  V
P6                  n        V
P6                  P:                  P=                  \>        P@                  ! V PB                  PD                  V PB                  PF                  V PB                  PH                  V PB                  PJ                  V PB                  PL                  V PB                  PN                  RR7      4       V PP                  V
P6                  n)        \T        V
P6                  n+        VPY                  V
P[                  4       4      G R j  xL
  VP]                  4       G R j  xL
 p\.        P^                  ! 4       pVPa                  V4       VPc                  R4      '       g   \e        R4      hV Pg                  VP6                  4       RV n        V Pi                  4       G R j  xL
  V Pk                  V4      G R j  xL
  Ve   VPm                  4       G R j  xL
  EK  EK  R #  EL' L L LH L1  \d         d   pT P                  '       d&    R p?Te   TPm                  4       G R j  xL 
  R # R # YPn                  8  d   RT n8        \s        RT R24      R h\u        T^,          ^
4      pT^,          p\v        Px                  ! RT R2TR7       \z        P|                  ! T4      G R j  xL 
   R p?LR p?ii ; i L  Te   TPm                  4       G R j  xL 
  i i ; i5i)NT)r   AuthorizationzBearer httpwsz://r  r   worker_token)headersparamsautopingr  	heartbeat)r   r   r   r   r   r   r   registerz+expected register response as first messageFz#failed to connect to livekit after z	 attemptsz*failed to connect to livekit, retrying in sr  )?r  r&  r(  r   r6  r  r  r9  r:  r;  r   r  schemer   replacenetlocr  rstripr   r  
ws_connectr  HEARTBEAT_INTERVALr   r  r  r6  r]  rD  allowed_permissionsCopyFromr   ParticipantPermissionr  r   r   r   r   r   r   r  r   r*   r  
send_bytesSerializeToStringreceive_bytesServerMessageParseFromStringHasFieldr  _handle_register_report_active_jobs_run_wsrD  r  r)  rZ  r   r"   r   r+  sleep)ra   retry_countrW  join_jwtrY  parser_  base	agent_urlrZ  reqfirst_msg_brI  r  retry_delays   &              r3   r  AgentServer._connection_task  s    !!---59,,,U%#' OODMM43C3CD [t!<=VX  +ghZ,@A .$$V,,#^^FD9F U\\N5::,?FFsKcQ#D'2	%%%-1-?-?F>*--88#!!**22d0 9     ))+$($5$5$;$;!009900$($5$5$A$A&*&7&7&E&E)-):):)K)K,0,=,=,Q,Q,0,=,=,Q,Q#0077"
 +/*:*:''2$mmC$9$9$;<<< %'$4$4$66))+##K0||J//#$QRR%%cll3#(  ..000ll2&&&& >((*$$ "k .6 = 7 1& 1<<<  >((*$$ " //1.2D+&=k])T  "+/26q @QOZ[ mmK000!1& % >((*$$ "s   'R"EN0 .N0 >N%?E
N0 	N(
N0 !N*"A N0 #A N0 #N,$N0 <N.=N0 R"Q=R"%N0 (N0 *N0 ,N0 .N0 0Q:;Q5Q? R"Q? R"(O+)	R"2A8Q5*Q-+Q50Q? 5Q::Q? =R"?RRRR"c                    V ^8  d   QhRRRR/# )r.   rW  zaiohttp.ClientWebSocketResponser0   r;   r1   )r2   s   "r3   r4   r   S  s     >4 >4 ? >4D >4r5   c                	  a aa"   R oR V 3R llpR VV V3R llpR VV V3R llp\         P                  ! V! 4       4      \         P                  ! V! 4       4      \         P                  ! V! 4       4      .p \         P                  ! V!  G Rj  xL
  \        P                  P
                  ! V!  G Rj  xL
  R#  L, L  \        P                  P
                  ! T!  G Rj  xL 
  i ; i5i)Fc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   )AgentServer._run_ws.<locals>.__annotate__V  s     	3 	3$ 	3r5   c                    <"   \         P                  P                  \        4      p  V P	                  4       G Rj  xL
  SP                  4       G Rj  xL
  K3   L L5i)z!periodically update worker statusN)r   r  rf   UPDATE_STATUS_INTERVALr  r  )rf   ra   s    r3   r  'AgentServer._run_ws.<locals>._load_taskV  sG     yy))*@AHmmo%%00222 &2s!   8AAAAAAc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r~  ]  s     	 	$ 	r5   c                    <"     SP                   P                  4       G Rj  xL
 p SP                  V P                  4       4      G Rj  xL
  KM   L- L  \        P
                  P                   d    R o R# i ; i5i)TN)r  recvrh  ri  r   r  
ChanClosed)rI  
closing_wsra   rW  s    r3   
_send_task'AgentServer._run_ws.<locals>._send_task]  sf      $ 3 3 55C--(=(=(?@@@ 6@yy++ !%JsJ   A=A A&A 
AA A=A A !A:6A=9A::A=c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r~  g  s      	S  	S$  	Sr5   c                   <"    SP                  4       G Rj  xL
 p V P                  \        P                  P                  \        P                  P
                  \        P                  P                  39   d   S'       d   R# \        R4      hV P                  \        P                  P                  8w  d$   \        P                  ! RV P                  4       K  V P                  p\        P                  ! 4       pVP                  V4       VP                  R4      pVR8X  d   SP!                  VP"                  4       EK>  VR8X  d   SP%                  VP&                  4       EKc  VR8X  g   EKm  SP(                  P+                  SP-                  VP.                  4      RR	7      pSP0                  P3                  V4       VP5                  SP0                  P6                  4       EK   EL5i)
TNz%worker connection closed unexpectedlyzunexpected message type: %srK  availability
assignmentterminationagent_job_terminationr  )receiverD  r  	WSMsgTypeCLOSECLOSEDCLOSINGr  BINARYr"   r   datar   rk  rl  rN  _handle_availabilityr  _handle_assignmentr  r  r  _handle_terminationr  r  r  r  r  )rI  r  
server_msgrP  	user_taskr  ra   rW  s        r3   
_recv_task'AgentServer._run_ws.<locals>._recv_taskg  sq    JJL(88%%++%%,,%%--  
 "#$KLL88w00777NN#@#((Kxx"002
**40"--i8N*--j.E.EFl*++J,A,ABm+ $

 6 6001G1GH4 !7 !I --11)<//0I0I0Q0QR; )s   G-G*A'G-C*G-1A:G-N)r+  r  r  r   r  rB  )ra   rW  r  r  r  r  r  s   ff    @r3   rp  AgentServer._run_wsS  s     
	3 	3	 	 	S  	SF 
-
-
-

	4..%((())++U333 )3%))++U333sN   A2C,8C  B<C  !C,5B>6C,<C  >C, "C)"C%#C))C,c                    V ^8  d   QhRRRR/# )r.   jobsr  r0   r;   r1   )r2   s   "r3   r4   r     s     ; ;'; ; ;r5   c                	  "   V P                   '       g   \        R 4      hV EFZ  p\        P                  ! \        RRVP
                  P                  RVP
                  P                  /R7       VP                  p\        P                  ! W0P                   R.R7      p\        \        P                  P                  \        P                  P                  4      P!                  4       4      R,           VR&   \#        VP$                  VP
                  V P&                  \        P(                  ! W@P                   RR	7      VP*                  VP,                  R
7      pV P.                  P1                  V4      G Rj  xL
  EK]  	  R#  L5i)z%api_secret is required to reload jobszreloading jobjob_idr   r  HS256)
algorithmsi  exp)	algorithmr.  r/  r0  r"  r-  r  N)r  rZ  r"   logr!   r/  r  r   r"  jwtdecoder   datetimenowtimezoneutc	timestampr    r.  r  encoder-  r  r  r<  )ra   r  ajoriginal_tokendecodedr=  s   &&    r3   _reload_jobsAgentServer._reload_jobs  s    FGGBJJL"&&:K:KL  XXNjj1A1AwiXG !2!2!6!6x7H7H7L7L!M!W!W!YZ]aaGEN)!#!4!4FFLLjj*:*:gN,,L //,,\:::) ( ;s   E5F7F8Fc                    V ^8  d   QhRRRR/# )r.   regzagent.RegisterWorkerResponser0   r;   r1   )r2   s   "r3   r4   r     s     G G$@ GT Gr5   c                	F   VP                   V n        \        P                  ! R RV P                  RVP                   RV P
                  RVP                  P                  RVP                  P                  /R7       V P                  RVP                   VP                  4       R# )	zregistered workerr   r  r0  regionprotocolr  worker_registeredN)
r-  r   r"   r  r  r  server_infor  r  r  )ra   r  s   &&r3   rn  AgentServer._handle_register  sw    ==d..cmmt||#//00COO44		
 			%s}}cooFr5   c                    V ^8  d   QhRRRR/# r.   rI  zagent.AvailabilityRequestr0   r;   r1   )r2   s   "r3   r4   r     s     B B(A Bd Br5   c                	    V P                   P                  V P                  V4      4      pV P                  P	                  V4       VP                  V P                  P                  4       R # r7   )r  r  _answer_availabilityr  r  r  r  )ra   rI  tasks   && r3   r   AgentServer._handle_availability  sO    zz%%d&?&?&DE!!%%d+t88@@Ar5   c                   V ^8  d   QhRR/# rl   r1   )r2   s   "r3   r4   r     s     N N Nr5   c                |   a "   R V 3R llp\         P                  ! 4       P                  RV4      G Rj  xL
 #  L5i)zFRun load_fnc in executor. Uses signature to call with or without self.c                   V ^8  d   QhRR/# rl   r1   )r2   s   "r3   r4   2AgentServer._invoke_load_fnc.<locals>.__annotate__  s     	( 	(% 	(r5   c                   < SP                   f   Q h\        P                  ! SP                   4      p \        V P                  P                  4       4      p\        V4      ^ 8X  d   SP                  4       # SP                  S4      # r7   )r%  inspect	signaturer   
parametersvaluesr  )r  r  ra   s     r3   r   .AgentServer._invoke_load_fnc.<locals>.load_fnc  sh    >>---))$..9Ii2299;<J:!#~~''>>$''r5   N)r+  r  r  )ra   r   s   f r3   r  AgentServer._invoke_load_fnc  s4     	( 	( ++-==dHMMMMs   2<:<c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r     s     A AD Ar5   c                   "   V P                   f   R# V P                  4       G Rj  xL
 V n        \        P                  P                  V P                  4       R#  L45i)zRefresh _worker_load by running load_fnc. Used before availability checks
so concurrent job requests see up-to-date load (fixes race with periodic interval).
N)r%  r  r  r   r  r  r`   s   &r3   _refresh_worker_load AgentServer._refresh_worker_load  sG      >>!"&"7"7"99--d.?.?@ :s   $AA5Ac                   V ^8  d   QhRR/# rl   r1   )r2   s   "r3   r4   r     s     L LU Lr5   c                   V P                   p\        P                  V P                  V P                  4      pV'       d   V P
                  \        V4      ,          pM\\        P                  ! V4      '       d   RpM=\        P                  V P                  V P                  4      pV\        V^4      ,          pV P
                  V P                  V,          ,           # )zFCurrent load including reserved slots (accepted but not yet launched).rq  )r  r   r   r  r  r  r  r   r  r  r  r  )ra   r  r   job_load_estimatedefault_idles   &    r3   _get_effective_loadAgentServer._get_effective_load  s    &&(11$2F2FV $ 1 1C4D DZZ'' #*33D4L4Ldmm\L .\11E E  4#7#7:K#KKKr5   c                   V ^8  d   QhRR/# r  r1   )r2   s   "r3   r4   r     s     
; 
;t 
;r5   c                	    V P                   '       d   R # \        P                  V P                  V P                  4      p\
        P                  ! V4      '       d   R# V P                  4       V8  # )FT)r'  r   r   r  r  r   r  r  )ra   r   s   & r3   _is_availableAgentServer._is_available  sR    >>>(11$2F2FV::n%% '')N::r5   c                    V ^8  d   QhRRRR/# r  r1   )r2   s   "r3   r4   r     s     m: m:.G m:D m:r5   c                F  a aaaa	"   S P                  4       G Rj  xL
  S P                  4       '       gg   \        P                  ! 4       pSP                  P
                  VP                  n        RVP                  n        S P                  V4      G Rj  xL
  R# S ;P                  ^,          un
        RoR VVV 3R lloR VV	VV 3R llp\        SP                  SVR7      o	\        P                  ! RR	SP                  P
                  R
SP                  P                  RSP                  P                  P                   RSP                  P                  P"                  RS P$                  RSP&                  RSP                  P(                  /R7       \*        P,                  ! \        R7      R VVV	V 3R ll4       pR V 3R llpS P.                  P1                  V! 4       RR7      pS P2                  P5                  V4       VP7                  V4       R#  EL  EL5i)zAsk the user if they want to accept this job and forward the answer to the server.
If we get the job assigned, we start a new process.NFc                    V ^8  d   QhRRRR/# )r.   	terminater~   r0   r;   r1   )r2   s   "r3   r4   6AgentServer._answer_availability.<locals>.__annotate__  s     	5 	5 	5 	5r5   c                   <"   R o\         P                  ! 4       pSP                  P                  VP                  n        RVP                  n        WP                  n        SP                  V4      G Rj  xL
  R#  L5i)TFN)	r   r  r/  r  r  r  	availabler  rQ  )r  availability_respansweredrI  ra   s   & r3   
_on_reject4AgentServer._answer_availability.<locals>._on_reject  s_     H % 3 3 547GGJJ**17<**47@**4//"3444s   A2A>5A<6A>c                    V ^8  d   QhRRRR/# )r.   argsr   r0   r;   r1   )r2   s   "r3   r4   r    s     )	; )	;#5 )	;$ )	;r5   c           	     $  <"   R o\         P                  ! 4       pSP                  P                  VP                  n        R VP                  n        V P                  VP                  n        V P                  VP                  n
        V P                  VP                  n        SP                  VP                  P                  \        &   V P                   '       d0   VP                  P                  P#                  V P                   4       \$        P&                  \         P(                  ,          ! 4       pVSP*                  SP                  &   SP-                  V4      G Rj  xL
   \$        P.                  ! V\0        4      G Rj  xL
  TP=                  4       p\?        T SP                  TP@                  ;'       g    SPB                  TPD                  SPF                  RR7      pSPH                  PK                  T4      G Rj  xL
  R#  L L  \$        P2                   dg    SP*                  P5                  SP                  R4       \6        P8                  ! RSP                   R2RSRSP                  /R7       \;        4       Rhi ; i L5i)	TNzassignment for job z
 timed outjob_requestr   r  Fr  )&r   r  r/  r  r  r  r  r+  participant_identityrU   participant_namer,  participant_metadatar  participant_attributesr$   
attributesupdater+  r  JobAssignmentr  rQ  r  ASSIGNMENT_TIMEOUTTimeoutErrorpopr"   r   r   resultr    r0  r  r"  r   r  r<  )	r  r  wait_assignment
job_assignr=  r  job_reqrI  ra   s	   &    r3   
_on_accept4AgentServer._answer_availability.<locals>._on_accept  s    H % 3 3 547GGJJ**17;**4BF--**?>Bii**;BF--**?   **AABVW !..EELLT__]%nnU-@-@ACO4CD%%gjj1//"34449&&8JKKK )//1J)!%GGNN22dll &&((L //,,\:::/ 5 L'' 9))--gjj$?)'**Z@('<AQAQR -.D89$ ;sP   EJ!H"J'H HH 
3J>AJJJH A;JJ)r/  	on_reject	on_acceptzreceived job requestr  dispatch_idr$  room_idr   resumingenable_recordingr  r  c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r  F  s     	2 	2 	2r5   c                 \  <"   SP                   f   Q h SP                  S4      G R j  xL
  S'       g:   \        P
                  ! RRSRSP                  /R7       S ! RR7      G R j  xL
  R # R #  LG  \         d*    \        P                  ! RRSRSP                  /R7        Lxi ; i LA5i)Nzjob_request_fnc failedr  r   r  zOno answer was given inside the job_request_fnc, automatically rejecting the jobF)r  )r"  r  r"   	exceptionr  r   )r  r  r  ra   s   r3   _job_request_task;AgentServer._answer_availability.<locals>._job_request_taskE  s     $$000''000 e('<AQAQR !5111  1   ,('<AQAQR 2sH   B,A3 A1A3 B,2B,(B*)B,1A3 31B'$B,&B''B,c                    V ^8  d   QhRRRR/# )r.   r  zasyncio.Task[Any]r0   r;   r1   )r2   s   "r3   r4   r  W  s     	4 	4'8 	4T 	4r5   c                p   < S;P                   ^,          un         SP                  P                  V 4       R# )r   N)r  r  r  )r  ra   s   &r3   _on_job_request_done>AgentServer._answer_availability.<locals>._on_job_request_doneW  s(      A% %%--d3r5   r  r  )r  r  r   r  r/  r  r  r  r  rQ  r  r   r"   r  r  r$  rU   r(  r  r  r   r   r  r  r  r  r  r  )
ra   rI  r  r  r  r  r  r  r  r  s
   ff     @@@r3   r   AgentServer._answer_availability  s     '')))!!## % 3 3 547GGJJ**17<**4//"3444 	!	5 	5)	; )	;V J*U"#''**sww22))377<<++d..CLL"CGG$<$<	
 
		V	,	2 	2 
-	2"	4 	4 JJ**+<+>]*S	!!%%i0##$89S 	*
 5s(   H!HH!AH!HFH!H!c                    V ^8  d   QhRRRR/# )r.   r  zagent.JobAssignmentr0   r;   r1   )r2   s   "r3   r4   r   _  s      -@ T r5   c                	$   \         P                  ! R RV P                  RVP                  P                  P
                  RVP                  P                  P                  RVP                  P                  RVP                  P                  RVP                  P                  /R7       VP                  P                  V P                  9   dx   \        P                  ! \        P                  4      ;_uu_ 4        V P                  P                  VP                  P                  4      pVP!                  V4       RRR4       R# \         P"                  ! R	R
\%        VP                  4      RV P                  /R7       R#   + '       g   i     R# ; i)zreceived assignmentr   r  r$  r  r  r   r  Nz&received assignment for an unknown jobr/  )r"   r  r  r/  r$  r(  rU   r  r  r   r  
contextlibsuppressr+  InvalidStateErrorr  rF  r   r   )ra   r  futs   && r3   r  AgentServer._handle_assignment_  s   !d..:>>..22
++00*..++z~~99"JNN$C$C
	
 >> 9 99$$W%>%>??//33JNN4E4EFz* @? NN8mJNN;\4K[K[\	 @??s   8AE>>F	c                    V ^8  d   QhRRRR/# )r.   rI  zagent.JobTerminationr0   r;   r1   )r2   s   "r3   r4   r   u  s      -A d r5   c                	   "   V P                   P                  VP                  4      pV'       g   R # VP                  4       G R j  xL
  R #  L5ir7   )r  get_by_job_idr  rC  )ra   rI  r/   s   && r3   r  AgentServer._handle_terminationu  s2     ,,SZZ8kkms   AAAAc                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r   |  s     ' 'T 'r5   c                	x  "   \        V P                  4      pV P                  '       dc   \        P                  ! \        P
                  P                  VR 7      p\        P                  ! VR7      pV P                  V4      G Rj  xL
  R# \        P                  V P                  V P                  4      pV P                  4       pWT8  pV'       * ;'       d    V P                  '       * pV'       d   \        P
                  P                  M\        P
                  P                  p\        P                  ! V P                  WR7      pV P                   V8w  dX   V P                  '       gF   Wn        RVRV/p	V'       d   \"        P$                  ! RV	R7       M\"        P$                  ! RV	R7       \        P                  ! VR7      p\&        P(                  ! \*        P,                  P.                  4      ;_uu_ 4        V P                  V4      G Rj  xL
  RRR4       R#  EL L  + '       g   i     R# ; i5i)	)rw  	job_count)rL  N)loadrw  r  r  	thresholdz2worker is at full capacity, marking as unavailabler  z.worker is below capacity, marking as available)r  r  r'  r   UpdateWorkerStatusr  WS_FULLr  rQ  r   r   r  r  r  r  r  r  r"   r  r  r  r   r  r  )
ra   job_cntr  rI  r   effective_loadis_fullcurrently_availablerw  r  s
   &         r3   r  !AgentServer._update_worker_status|  s    d&&'>>>--U5G5G5O5O[bcF%%F;C//#&&&(11$2F2FV113 2")k@@$...@ 0CE++HZHZHbHb 	 ))t/@/@c   F*4>>>$*!^[.IEPX]^LTYZ!!7  !5!566//#&&& 761 '2 ' 766sQ   BH:H!AH:H:2A8H:+BH:=H&H$H&H:$H&&H7	1	H:c                    V ^8  d   QhRRRR/# r  r1   )r2   s   "r3   r4   r     s     # #-I #d #r5   c                	  "   VP                   pVf   R # \        P                  P                  pVP                  \
        P                  P                  P                  8X  d   \        P                  P                  pMVP                  \
        P                  P                  P                  8X  d   \        P                  P                  pMMVP                  \
        P                  P                  P                  8X  d   \        P                  P                  p\        P                  ! VP                  P                  VRR7      p\        P                  ! VR7      pV P!                  V4      G R j  xL
  R #  L5i)Nr   )r  rw  error)
update_job)r	  r   	JobStatus
JS_RUNNINGrw  r   job_executorFAILED	JS_FAILEDSUCCESS
JS_SUCCESSRUNNINGUpdateJobStatusr/  r  r  rQ  )ra   r/   job_inforw  r  rI  s   &&    r3   r  AgentServer._update_job_status  s     ##"'//"<"<;;#**44;;;__..F[[C,,66>>>__//F[[C,,66>>>__//F&&hlloofTVW!!V4ooc"""s   E.E90E71E9c                   V ^8  d   QhRR/# rN   r1   )r2   s   "r3   r4   r     s     
 
4 
r5   c                	h  "   V P                   pV'       g   R # V Uu. uF  q"P                  P                  NK  	  pp\        P                  ! VR7      p\        P
                  ! VR7      pV P                  V4      G R j  xL
  \        P                  ! RR\        V4      RV/R7       R # u upi  L05i)N)job_ids)migrate_jobz'reported active jobs after registrationr  r3  r  )
r  r/  r  r   MigrateJobRequestr  rQ  r"   r  r  )ra   r  r/  r3  migrate_reqrI  s   &     r3   ro  AgentServer._report_active_jobs  s     &&3>?;x<<??;?--g>!!k:ooc"""5K 0)WE	
 @ 	#s   B2B+AB2?B0 1B2)6r  r  r  r  r  r  r&  r  r(  r)  r  r  r'  r!  r  r  r*  r  r   rz  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#  r  r$  r  r  r  r  r7   )=rA   rB   rC   rD   r   r   r   r)   r   _default_num_idle_processes_default_portr   r   _default_permissionsr%   r   r   r   r   rb   propertyr   r   setterr   r{   rH  r   r@   rG   rF  r_  r  r  r  r  r  r  r   r  r"   r>  rC  rQ  r  rp  r  rn  r  r  r  r  r  r  r  r  r  r  ro  rJ   __classcell__)r,  s   @r3   rt   rt   '  s_   "1DIIo.?.I.I.K$L# $EMQ$ .HQ$ :Q	Q$
 %(Q$ &'Q$ "Q$ :UQ$ +/Q$ &+Q$ -1Q$ *>Q$ Q$ "Q$ #Q$  "&!Q$" #Q$$ ,9%Q$& .7'Q$* <<227;;G+Q$. 9=/Q$0 QU1Q$2 '+3Q$4 045Q$6 1C7Q$ Q$f        
   __ 
    D 6 	6
 &??6 :>6 >B6 6 	 	 &??		
 :>	 >B	 	1 	1
 &??1 :>1 >B1 1f 
 
W!5 W!u W!r6< #,6< $-	6<
 '06< &/6< :C6< -66< 1:6< 2;6< *36< /86< +/6< &+6< -16<p   \ \   =F < (3; 	3;
 &*3; )-3; !3; )3;j+4Z	' ([% )[%z>4@;4GB
NAL
;m:^,'B#"
 
r5   rt   >   r   WARNr   ERRORTRACECRITICAL)r  r  )e
__future__r   r+  r  r  r  r  r   multiprocessingr  r  r   rY   collections.abcr   r   dataclassesr   r   enumr   typingr	   r
   r   r   r   urllib.parser   r   r  r  r   google.protobuf.json_formatr   livekitr   r   livekit.protocolr   r   r   r   r   r   _exceptionsr   inference_runnerr   r/  r   r   r   r   r   r    r  r!   r"   r  r#   typesr$   r%   r&   r'   r(   utils.hwr)   r  r*   r  r  r  rd  r8   r>   r@   r   rL   r}   r   r   THREADr   PROCESSr   r   infr   r   r:  	frozensetr   r   r   WorkerOptionsr   
EventTypesEventEmitterrt   r1   r5   r3   <module>rW     s   #        	 
  / (  ; ; *  
  5  * # # / .  #  > > ( %      + +
 
( (B    <<5!!!0!7!7!0!8!8 CL $gaj   *dhhSQ $vN (* TU . g g gT    
 :;
T
%$$Z0 T
r5   