+
    ~j$                     b   ^ RI t ^ RIt^ RIt^ RIHt ^ RIt^ RIt^RIH	t	 ^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIHtHtHtHtHt ^RIHt ^RIHtHt ^RIHt ]! 4       t]P<                  ! ]P>                  4       R t R	 t!]PD                  ! R]PF                  ! ]PH                  4      ]PJ                  4      t&^ t' ! R
 R4      t(]! R4      t) ! R R]]),          4      t*]PD                  ! R]PF                  ! ]PH                  4      ]PJ                  4      R R l4       t+R R lt, ! R R4      t-R# )    N)	ExitStack)__version__)CallableGenericListOptionalTypeVar)ffi_pb2)Queueclassproperty)loggerc                      \         P                  ! 4       R 8X  d   R# \         P                  ! 4       R8X  d   R# \         P                  ! 4       R8X  d   R# R# )Linuxzliblivekit_ffi.soDarwinzliblivekit_ffi.dylibWindowszlivekit_ffi.dllN)platformsystem     l/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/rtc/_ffi_client.py	_lib_namer   %   s;    G#"		h	&%		i	' r   c                     \         P                  P                  R R4      P                  4       p V '       d   \        P
                  ! V 4      # \        4       pVf#   \        R\        P                  ! 4        R24      h\        P                  P                  R4      V,          p\        P                  P                  V4      p\        P                  V4      p\        P
                  ! \!        V4      4      # )LIVEKIT_LIB_PATH z"no ffi library found for platform z.. Set LIVEKIT_LIB_PATH to specify the lib pathzlivekit.rtc.resources)osenvirongetstripctypesCDLLr   	Exceptionr   r   	importlib	resourcesfilesas_file_resource_filesenter_contextstr)libpathlibnameresctxpaths        r   get_ffi_libr.   /   s    jjnn/4::<G{{7##kG01B0C D; ;
 	

 


#
#$;
<w
FC



%
%c
*C((-D;;s4y!!r   c                   x   a  ] tR t^Gt o V 3R lR ltR t]V 3R lR l4       tV 3R lR ltV 3R lR	 lt	R
t
V tR# )	FfiHandlec                $   < V ^8  d   QhRS[ RR/# )   handlereturnN)int)format__classdict__s   "r   __annotate__FfiHandle.__annotate__H   s      s t r   c                     Wn         R V n        R# )FN)r3   	_disposed)selfr3   s   &&r   __init__FfiHandle.__init__H   s    r   c                &    V P                  4        R # N)disposer<   s   &r   __del__FfiHandle.__del__L   s    r   c                    < V ^8  d   QhRS[ /# r2   r4   )bool)r6   r7   s   "r   r8   r9   P   s      $ r   c                    V P                   # r@   )r;   rB   s   &r   disposedFfiHandle.disposedO   s    ~~r   c                   < V ^8  d   QhRR/# r2   r4   Nr   )r6   r7   s   "r   r8   r9   S   s     e e er   c                   V P                   \        8w  dm   V P                  '       gY   R V n        \        P                  P
                  P                  \        P                  ! V P                   4      4      '       g   Q hR# R# R# )TN)	r3   INVALID_HANDLEr;   	FfiClientinstance_ffi_liblivekit_ffi_drop_handler   c_uint64rB   s   &r   rA   FfiHandle.disposeS   sY    ;;.(!DN%%..FFvW[WbWbGcdddd 2@(r   c                    < V ^8  d   QhRS[ /# rF   )r(   )r6   r7   s   "r   r8   r9   X   s     + +# +r   c                "    R V P                    R2# )z
FfiHandle())r3   rB   s   &r   __repr__FfiHandle.__repr__X   s    DKK=**r   )r;   r3   N)__name__
__module____qualname____firstlineno__r=   rC   propertyrI   rA   rX   __static_attributes____classdictcell__r7   s   @r   r0   r0   G   s>        e e
+ +r   r0   Tc                   l   a  ] tR t^_t o V 3R lR ltV 3R lR ltRV 3R lR lltV 3R lR	 ltR
tV t	R# )FfiQueuec                   < V ^8  d   QhRR/# rL   r   )r6   r7   s   "r   r8   FfiQueue.__annotate__`   s      $ r   c                H    \         P                  ! 4       V n        . V n        R # r@   )	threadingRLock_lock_subscribersrB   s   &r   r=   FfiQueue.__init__`   s    __&
  	r   c                $   < V ^8  d   QhRS[ RR/# )r2   itemr4   N)rb   )r6   r7   s   "r   r8   rf   g   s     B B Bd Br   c                |   V P                   ;_uu_ 4        V P                   F9  w  r#pVe    V! V4      '       g   K    VP                  VP                  V4       K;  	  R R R 4       R #   \         d     L8i ; i  \         d#   p\
        P                  ! RT4        R p?K  R p?ii ; i  + '       g   i     R # ; i)Nzerror putting to queue: %s)rj   rk   r!   call_soon_threadsafe
put_nowaitr   error)r<   rn   queueloop	filter_fnes   &&    r   putFfiQueue.putg   s    ZZZ*.*;*;&Y(($  /
B--e.>.>E +< Z % 
 ! B LL!=qAAB ZZsV   B*A)B*A:B*)A7	4B*6A7	7B*:B'	B"	B*"B'	'B**B;	Nc                   < V ^8  d   QhRS[ S[P                  ,          RS[ S[S[.S[3,          ,          RS[S[,          /# )r2   rt   ru   r4   )r   asyncioAbstractEventLoopr   rb   rG   r   )r6   r7   s   "r   r8   rf   y   sH      w001 HaS$Y/0 
q	r   c                   V P                   ;_uu_ 4        \        \        ,          ! 4       pT;'       g    \        P                  ! 4       pV P
                  P                  W1V34       VuuRRR4       #   + '       g   i     R# ; i)aD  Subscribe to FFI events.

Args:
    loop: Event loop to use (defaults to current).
    filter_fn: Optional filter function. If provided, only items where
              filter_fn(item) returns True will be delivered.
              If None, receives all events (original behavior).

Returns:
    Queue to receive events from.
N)rj   r   rb   rz   get_event_looprk   append)r<   rt   ru   rs   s   &&& r   	subscribeFfiQueue.subscribey   sV      ZZZ!HJE337113D$$e9%=>	 ZZZs   AA44B	c                4   < V ^8  d   QhRS[ S[,          RR/# )r2   rs   r4   N)r   rb   )r6   r7   s   "r   r8   rf      s      q d r   c                    V P                   ;_uu_ 4        \        V P                  4       F-  w  pw  p pW18X  g   K  V P                  P                  V4        M	  R R R 4       R #   + '       g   i     R # ; ir@   )rj   	enumeraterk   pop)r<   rs   iq_s   &&   r   unsubscribeFfiQueue.unsubscribe   sR    ZZZ )$*;*; <9Aq!:%%))!, != ZZZs   #A&A&&A7	)rj   rk   )NN)
rZ   r[   r\   r]   r=   rw   r   r   r_   r`   ra   s   @r   rd   rd   _   s/      B B$ , r   rd   c                    V ^8  d   QhR\         P                  ! \         P                  4      R\         P                  RR/# )r2   data_ptrdata_lenr4   N)r   POINTERc_uint8c_size_t)r6   s   "r   r8   r8      s7     %( %(nnV^^,%(oo%( 
%(r   c           	         \         P                  ! V \        V4      4      p\        P                  ! 4       pVP                  V4       VP                  R 4      pVR8X  Ed   VP                  P                   F  p\        VP                  4      p\        P                  P                  RR4      P                  4       P                  4       pVR9   pV\         P"                  8X  d=   V'       g5   VP$                  R8X  g"   VP$                  P'                  R4      '       d   K  Vf   K  \(        P*                  ! VRVP$                  VP,                  VP.                  VP0                  4       K  	  R# VR8X  dl   \3        R	VP4                  P0                  \6        P8                  R
R7       \        P:                  ! \        P<                  ! 4       \>        P@                  4       R# \B        PD                  PF                  PI                  V4       R# )messagelogsLIVEKIT_RTC_DEBUGr   	libwebrtclivekitNz%s:%s:%s - %spaniczFFI Panic: T)fileflush)true1)%r   	string_atr5   	proto_ffiFfiEventParseFromString
WhichOneofr   recordsto_python_levellevelr   r   r   r   lowerloggingDEBUGtarget
startswithr   loglinemodule_pathr   printr   sysstderrkillgetpidsignalSIGTERMrO   rP   rs   rw   )	r   r   
event_dataeventwhichrecordr   	debug_env	rtc_debugs	   &&       r   ffi_event_callbackr      se   
 !!(CM:J E	*%Y'Ejj((F#FLL1E

':B?EEGMMOI!]2I%i==K/6==3K3KI3V3V 

#MMKK&&NN )( 		'	mU[[00szzN
		V^^,  'r   c                n    V ^8  d   QhR\         P                  P                  R\        \        ,          /# )r2   r   r4   )r   LogLevel	ValueTyper   r5   )r6   s   "r   r8   r8      s*      9--77 HSM r   c                    V \         P                  P                  8X  d   \        P                  # V \         P                  P
                  8X  d   \        P                  # V \         P                  P                  8X  d   \        P                  # V \         P                  P                  8X  d   \        P                  # V \         P                  P                  8X  d    R # r@   )r   r   	LOG_ERRORr   ERRORLOG_WARNWARNLOG_INFOINFO	LOG_DEBUGr   	LOG_TRACE)r   s   &r   r   r      s    	"",,,}}	)$$--	-||	)$$--	-||	)$$..	.}}	)$$..	. 	r   c                      a  ] tR t^t o Rt]V 3R lR l4       tV 3R lR lt]V 3R lR l4       t	V 3R lR	 lt
V 3R
 ltRtV tR# )rO   Nc                   < V ^8  d   QhRR/# )r2   r4   rO   r   )r6   r7   s   "r   r8   FfiClient.__annotate__   s       r   c                T    V P                   f   \        4       V n         V P                   # r@   )	_instancerO   )clss   &r   rP   FfiClient.instance   s    == %KCM}}r   c                   < V ^8  d   QhRR/# rL   r   )r6   r7   s   "r   r8   r      s     '* '*$ '*r   c                   a \         P                  ! 4       V n        \        \        P
                  ,          ! 4       V n         \        4       V n        \        \        P                  \        P                  \        P                  .T P                  P                   n        \        P$                  ! \        P&                  4      \        P(                  \        P$                  ! \        P$                  ! \        P&                  4      4      \        P$                  ! \        P(                  4      .T P                  P*                  n        \        P,                  T P                  P*                  n        \        P,                  .T P                  P0                  n        \        P                  T P                  P0                  n        . T P                  P2                  n        RT P                  P2                  n        T P                  P!                  \4        RR\6        P8                  ! R4      4       T P                  o\:        P<                  T3R l4       pR#   \         d/   p\        4       ;'       g    R p\        RT: RT: R24      RhRp?ii ; i)	livekit_ffizfailed to load z: zq
Install the livekit package with: pip install livekit
Or set LIVEKIT_LIB_PATH to the path of the native library.NTs   pythonasciic                  (   < S P                  4        R # r@   )livekit_ffi_dispose)ffi_libs   r   _dispose_lk_ffi+FfiClient.__init__.<locals>._dispose_lk_ffi  s    '')r   )rh   ri   rj   rd   r   r   _queuer.   rQ   r!   r   ImportError
ffi_cb_fncr   c_boolc_char_plivekit_ffi_initializeargtypesr   c_ubyter   livekit_ffi_requestrS   restyperR   r   r   r   encodeatexitregister)r<   rv   r*   r   r   s   &   @r   r=   FfiClient.__init__   s   __&
y1124	'MDM MMOOOO	9
,,5 NN6>>*OONN6>>&..9:NN6??+	6
))2 5;OO))1:@//9J--68>--557))248))1,,i1C1CG1L	
 --		* 
	*A  	k22]G QXYZ\ 		s   I J)JJc                D   < V ^8  d   QhRS[ S[P                  ,          /# rF   )rd   r   r   )r6   r7   s   "r   r8   r     s      x	 2 23 r   c                    V P                   # r@   )r   rB   s   &r   rs   FfiClient.queue  s    {{r   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# )r2   reqr4   )r   
FfiRequestFfiResponse)r6   r7   s   "r   r8   r   	  s'      9// I4I4I r   c                P   VP                  4       p\        V4      p\        P                  V,          ! V!  p\        P                  ! \        P                  4      ! 4       p\        P
                  ! 4       pV P                  P                  WC\        P                  ! V4      \        P                  ! V4      4      pV\        8w  g   Q h\        P                  ! WVP                  4      p\        P                  ! 4       p	V	P                  V4       \        V4      P!                  4        V	# r@   )SerializeToStringlenr   r   r   r   rQ   r   byrefrN   r   valuer   r   r   r0   rA   )
r<   r   
proto_data	proto_lendataresp_ptrresp_lenr3   	resp_dataresps
   &&        r   requestFfiClient.request	  s    **,

O	*Z8>>&..13??$22V\\(3V\\(5K
 '''$$X~~>	$$&Y'&!!#r   c                4   < V ^8  d   Qh/ S[ R,          ;R&   # )r2   rO   r   )r   )r6   r7   s   "r   r8   r      s     $+ r   )rQ   rj   r   )rZ   r[   r\   r]   r   r   rP   r=   r^   rs   r   __annotate_func__r_   r`   ra   s   @r   rO   rO      sM     '+I 
'* '*R   m  r   rO   ).r   rz   r   
contextlibr   r   importlib.resourcesr"   versionr   r   r   r   r   rh   typingr   r   r   r   r	   _protor
   r   _utilsr   r   r   r   r&   r   closer   r.   	CFUNCTYPEr   r   r   r   rN   r0   rb   rd   r   r   rO   r   r   r   <module>r     s      
        	    = = ( ( + %% &"& dFNN6>>$BFOOT
+ +* CL6wqz 6r $v~~6H%( I%(P$F Fr   