+
    ~jkA                       ^ RI Ht ^ RIt^ RI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 ^RIHt ^RIHtHt ^R	IHt ^R
IHtHtHtHt ^RIHt ^RIHt ^RIHt ^RIH t H!t!H"t"H#t#H$t$ ]! ^ ]PJ                  R7      t&] ! R R4      4       t'] ! R R4      4       t( ! R R] ]R,          ,          4      t) ! R R]!4      t*R# )    )annotationsN)AsyncIterable)	dataclass)AnyLiteral)rtc)utils)APIConnectionErrorAPIError)logger)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr)aio)AudioBuffer)VAD)STTRecognizeStreamSpeechEventSpeechEventTypeSTTCapabilities	max_retrytimeoutc                  ,    ] tR t^t$ R]R&   R]R&   RtR# )AvailabilityChangedEventr   sttbool	available N__name__
__module____qualname____firstlineno____annotations____static_attributes__r!       x/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/stt/fallback_adapter.pyr   r      s    	HOr)   r   c                  6    ] tR t^"t$ R]R&   R]R&   R]R&   RtR# )
_STTStatusr   r    zasyncio.Task[None] | Nonerecovering_recognize_taskrecovering_stream_taskr!   Nr"   r!   r)   r*   r,   r,   "   s    O8855r)   r,   c                     a  ] tR t^)tRtRRRRR^R^/R V 3R	 lllt]R
 R l4       t]R R l4       tR]	RR/R R llt
R R ltR]	/R R lltR]	R]/R V 3R llltR]	R]/R R lltR R ltR R ltR tV ;t# )!FallbackAdapterzxAgent Fallback Adapter for STT. Manages multiple STT instances with automatic fallback
when the primary provider fails.
vadNattempt_timeoutg      $@max_retry_per_sttretry_intervalc               0    V ^8  d   QhRRRRRRRRR	RR
R/# )   r   z	list[STT]r1   z
VAD | Noner2   floatr3   intr4   returnNoner!   )formats   "r*   __annotate__FallbackAdapter.__annotate__0   sF     :/ :/:/ 	:/
 :/ :/ :/ 
:/r)   c          
     	>  < \        V4      ^8  d   \        R4      hV Uu. uF"  qfP                  P                  '       d   K   VNK$  	  ppV'       dg   Vf(   RP	                  R V 4       4      p\        RV R24      h^RIHp	 V Uu. uF)  qfP                  P                  '       g
   V	! WbR7      MTNK+  	  ppR	p
\        ;QJ d    R
 V 4       F  '       d   K   R	M	  RM! R
 V 4       4      '       d   V^ ,          P                  P                  p
\        ST `)  \        R\        ;QJ d    R V 4       F  '       d   K   R	M	  RM! R V 4       4      \        ;QJ d    R V 4       F  '       d   K   R	M	  RM! R V 4       4      V
R7      R7       Wn        W0n        W@n        WPn        V P                   Uu. uF  p\!        RRRR7      NK  	  upV n        V P                   F  pVP%                  RV P&                  4       K!  	  R	V n        R# u upi u upi u upi )   z+At least one STT instance must be provided.Nz, c              3  8   "   T F  qP                   x  K  	  R # 5iN)label.0ts   & r*   	<genexpr>+FallbackAdapter.__init__.<locals>.<genexpr>?   s     "F4Eq774Es   zSTTs do not support streaming: zx. Provide a VAD to enable stt.StreamAdapter automatically or wrap them with stt.StreamAdapter before using this adapter.)StreamAdapter)r   r1   Fc              3  L   "   T F  qP                   P                  x  K  	  R # 5irA   )capabilitiesaligned_transcriptrC   s   & r*   rF   rG   N   s     >#Q~~00#   "$Tc              3  L   "   T F  qP                   P                  x  K  	  R # 5irA   )rJ   interim_resultsrC   s   & r*   rF   rG   T   s     #PCqNN$B$BCrL   c              3  L   "   T F  qP                   P                  x  K  	  R # 5irA   )rJ   diarizationrC   s   & r*   rF   rG   U   s     HCq : :CrL   )	streamingrN   rP   rK   )rJ   )r    r-   r.   metrics_collected)len
ValueErrorrJ   rQ   joinr   rH   allrK   super__init__r   _stt_instances_attempt_timeout_max_retry_per_stt_retry_intervalr,   _statuson_on_metrics_collected_recognize_metrics_needed)selfr   r1   r2   r3   r4   rE   non_streaming_sttlabelsrH   rK   _stt_instance	__class__s   &&$$$$       r*   rX   FallbackAdapter.__init__0   s    s8a<JKK(+L1>>3K3KQQL{"F4E"FF 5fX >U U 
 , _b^aYZ^^5M5M5M!-STT^a   ?D3>#>333>#>>>!$Q!4!4!G!G( ##PC#P#PC#P PCHCHCCCHCHH#5	 	 	
 " /"3- ((*
 ) *.'+
 )*
 !//LOO/1K1KL 0).&] M0*
s   HH/H9Hc                   V ^8  d   QhRR/# r6   r9   strr!   )r;   s   "r*   r<   r=   m   s     ! !s !r)   c                	    R # )r0   r!   ra   s   &r*   modelFallbackAdapter.modell   s     r)   c                   V ^8  d   QhRR/# ri   r!   )r;   s   "r*   r<   r=   q   s      # r)   c                	    R # )livekitr!   rl   s   &r*   providerFallbackAdapter.providerp   s    r)   language
recoveringFc               0    V ^8  d   QhRRRRRRRRR	R
RR/# )r6   r   r   bufferutils.AudioBufferrt   NotGivenOr[str]conn_optionsr   ru   r   r9   r   r!   )r;   s   "r*   r<   r=   t   sH     9 9 9 "	9
 "9 (9 9 
9r)   c               	*  "    VP                  VV\        P                  ! VV P                  V P                  V P
                  R 7      R7      G Rj  xL
 #  L  \        P                   dZ    T'       d)   \        P                  ! TP                   R2RR/R7       h \        P                  ! TP                   R2RR/R7       h \         d`   pT'       d*   \        P                  ! TP                   R2TRR/R	7       h \        P                  ! TP                   R
2TRR/R	7       h Rp?i\         dZ    T'       d)   \        P                  ! TP                   R2RR/R7       h \        P                  ! TP                   R2RR/R7       h i ; i5i)r   r   r4   rt   rz   N recovery timed outstreamedFextra! timed out, switching to next STT recovery failedexc_infor    failed, switching to next STT recovery unexpected error( unexpected error, switching to next STT)	recognizedataclassesreplacer[   rZ   r\   asyncioTimeoutErrorr   warningrB   r   	Exception	exception)ra   r   rw   rt   rz   ru   es   &$$$$$ r*   _try_recognizeFallbackAdapter._try_recognizet   s    0	!(00 "55 11#'#7#7	 ' 	 	 	 	 ## 
	#)),?@UZH[\NN99+>?!5)
  	yyk!12%u-
 NN99+;<!5)
  	  yyk!;<ZQVDW 99+EF!5) 	sV   FAA AA FA F5AFFAD))F6F?AFFc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r6   r   r   rw   rx   rt   ry   rz   r   r9   r:   r!   )r;   s   "r*   r<   r=      sE     "_ "_ "_ "	"_
 ""_ ("_ 
"_r)   c               	$  a aaaa S P                   S P                  P                  V4      ,          oSP                  e!   SP                  P	                  4       '       d1   R VVVV V3R llp\
        P                  ! V! V4      4      Sn        R # R # )Nc                    V ^8  d   QhRRRR/# r6   r   r   r9   r:   r!   )r;   s   "r*   r<   3FallbackAdapter._try_recovery.<locals>.__annotate__   s      S T r)   c                N  <"    SP                  V SSSR R7      G Rj  xL
  R Sn        \        P                  ! V P                   R24       SP                  R\        V R R7      4       R#  LM  \         d*    \        P                  ! T P                   R2R R7        R# i ; i5i)Tr   rw   rt   rz   ru   N
 recoveredstt_availability_changedr   r    z recovery attempt failed)r   )	r   r    r   inforB   emitr   r   debug)r   rw   rz   rt   ra   
stt_statuss   &r*   _recover_stt_task8FallbackAdapter._try_recovery.<locals>._recover_stt_task   s     --%!)%1#' .    ,0J(KK399+Z 89II20SDI ! LLCII;.F!GRVWs9   B%A. A,AA. *B%,A. .0B"B%!B""B%)r]   rY   indexr-   doner   create_task)ra   r   rw   rt   rz   r   r   s   f$ddd @r*   _try_recoveryFallbackAdapter._try_recovery   sp     \\$"5"5";";C"@A
0083388:: ( 4;3F3FGXY\G]3^J0/ ;r)   c               (    V ^8  d   QhRRRRRRRR/# )	r6   rw   rx   rt   ry   rz   r   r9   r   r!   )r;   s   "r*   r<   r=      s2     $
 $
!$
 "	$

 ($
 
$
r)   c          
     	8  "   \         P                   ! 4       p\        ;QJ d&    R  V P                   4       F  '       d   K   RM	  RM! R  V P                   4       4      pV'       d   \        P                  ! R4       \        V P                  4       Ff  w  rgV P                  V,          pVP                  '       g	   V'       d"    V P                  VVVVRR7      G Rj  xL
 u # V P                  WqW#R7       Kh  	  \        R	V P                   Uu. uF  qwP                  NK  	  up R
\         P                   ! 4       V,
           R24      h Ll  \         d:    TP                  '       d%   RTn        T P                  R\        TRR7      4        Li ; iu upi 5i)c              3  B   "   T F  qP                   '       * x  K  	  R # 5irA   r    rD   r   s   & r*   rF   2FallbackAdapter._recognize_impl.<locals>.<genexpr>   s     QLj1111L   FT$all STTs are unavailable, retrying..r   Nr   r   )r   rw   rt   rz   all STTs failed () after  seconds)timerV   r]   r   error	enumeraterY   r    r   r   r   r   r   r
   rB   )	ra   rw   rt   rz   
start_time
all_failedir   r   s	   &&$$     r*   _recognize_implFallbackAdapter._recognize_impl   sX     YY[
SQDLLQSSSQDLLQQ
LL?@ 3 34FAaJ###z!%!4!4%!)%1#( "5 "   3d' 5* !d6I6I J6Is6I JK8TXT]T]T_blTlSmmuv
 	
# ! !+++/4
,		64N !KsZ   <F&F(AFEE E#.FF
%'FEF+$FFFFrz   c               (    V ^8  d   QhRRRRRRRR/# )	r6   rw   r   rt   ry   rz   r   r9   r   r!   )r;   s   "r*   r<   r=      s8     ] ]] "	]
 (] 
]r)   c               	B   <"   \         SV `  WVR 7      G Rj  xL
 #  L5i)r}   N)rW   r   )ra   rw   rt   rz   rf   s   &&$$r*   r   FallbackAdapter.recognize   s#      W&v|&\\\\s   c               $    V ^8  d   QhRRRRRR/# )r6   rt   ry   rz   r   r9   r   r!   )r;   s   "r*   r<   r=     s/     _ _ "_ (	_
 
_r)   c               	    \        WVR 7      # ))r   rt   rz   )FallbackRecognizeStream)ra   rt   rz   s   &$$r*   streamFallbackAdapter.stream  s     '4Q]^^r)   c                   V ^8  d   QhRR/# r6   r9   r:   r!   )r;   s   "r*   r<   r=   
  s     	E 	Ed 	Er)   c                	v  "   V P                    Fq  pVP                  e)   \        P                  ! VP                  4      G R j  xL
  VP                  f   KI  \        P                  ! VP                  4      G R j  xL
  Ks  	  V P
                   F  pVP                  RV P                  4       K!  	  R #  Lq L;5i)NrR   )r]   r-   r   cancel_and_waitr.   rY   offr_   )ra   r   r   s   &  r*   acloseFallbackAdapter.aclose
  s     ,,J33?))**N*NOOO00<))**K*KLLL ' &&CGG')C)CD ' P Ms*   AB9B5B9#B9;B7<:B97B9c               $    V ^8  d   QhRRRRRR/# )r6   argsr   kwargsr9   r:   r!   )r;   s   "r*   r<   r=     s!     8 83 8# 8$ 8r)   c                	2    V P                   ! R .VO5/ VB  R# )rR   N)r   )ra   r   r   s   &*,r*   r_   %FallbackAdapter._on_metrics_collected  s    		%777r)   )rZ   r[   r`   r\   r]   rY   )r#   r$   r%   r&   __doc__rX   propertyrm   rr   r   r   r   r   $DEFAULT_FALLBACK_API_CONNECT_OPTIONSr   r   r   r_   r(   __classcell__rf   s   @r*   r0   r0   )   s    :/ 	:/
 "&:/ "#:/ !":/ :/x ! !  9
 %.9 !9v"_H$
 %.	$
L] %.	]
 +O] ]_ %._ +O	_	E8 8r)   r0   r   c                  Z   a  ] tR tRtR]/R V 3R llltR R ltR R ltR	 R
 ltRt	V ;t
# )r   i  rt   c               $    V ^8  d   QhRRRRRR/# )r6   r   r0   rt   ry   rz   r   r!   )r;   s   "r*   r<   $FallbackRecognizeStream.__annotate__  s*     
= 
= 
= "	
=
 (
=r)   c               	X   < \         SV `  W\        R 7       W n        Wn        . V n        R# ))r   rz   sample_rateN)rW   rX   r   	_language_fallback_adapter_recovering_streams)ra   r   rt   rz   rf   s   &$$$r*   rX    FallbackRecognizeStream.__init__  s*     	SS!!$:< r)   c                   V ^8  d   QhRR/# r   r!   )r;   s   "r*   r<   r   &  s     `
 `
D `
r)   c                	
  a a"   \         P                   ! 4       p\        ;QJ d0    R  S P                  P                   4       F  '       d   K   RM%	  RM!! R  S P                  P                   4       4      pV'       d   \        P
                  ! R4       RoRpR VV 3R llp\        S P                  P                  4       EF<  w  rVS P                  P                  V,          pVP                  '       g	   V'       d    VP                  S P                  \        P                  ! S P                  S P                  P                  S P                  P                  S P                  P                   R7      R7      oVe   VP#                  4       '       d   \$        P&                  ! V! 4       4      p S;_uu_4       GRj  xL
  S  Rj  xL
  pS P(                  P+                  V4       K'  S P?                  V4       EK?  	  Ve   \@        PB                  ! V4      G Rj  xL
  \$        PD                  ! S PF                   U
u. uF  qPI                  4       NK  	  up
!  G Rj  xL
  \K        RS P                  P                   Uu. uF  qfP0                  NK  	  up R\         P                   ! 4       V,
           R24      h EL LDRRR4      GRj  xL 
  M  + GRj  xL 
 '       g   i     M; i  \$        P,                   d*    \        P.                  ! TP0                   R	2R
R/R7       h \2         d/   p	\        P.                  ! TP0                   R2T	R
R/R7       h Rp	?	i\4         d*    \        P6                  ! TP0                   R2R
R/R7       h i ; i R#   \4         dE    TP                  '       d/   RTn        S P8                  P;                  R\=        TRR7      4        ELi ; i ELu up
i  ELu upi 5i)c              3  B   "   T F  qP                   '       * x  K  	  R # 5irA   r   r   s   & r*   rF   /FallbackRecognizeStream._run.<locals>.<genexpr>)  s     cDbj1111Dbr   FTr   Nc                   V ^8  d   QhRR/# r   r!   )r;   s   "r*   r<   2FallbackRecognizeStream._run.<locals>.__annotate__0  s     	, 	,4 	,r)   c                 <  <"   SP                     R j  xL
  p \        SP                  4       Fe  p \        V \        P
                  4      '       d   VP                  V 4       K7  \        V SP                  4      '       d   VP                  4        Ke  Kg  	  Sf   K   \        V \        P
                  4      '       d   SP                  V 4       K  \        V SP                  4      '       d   SP                  4        K  K   L  \         d     K  i ; i  \         d     \        P                  ! RRR/R7        EK/  i ; iED.SeR   \        P                  ! \        4      ;_uu_ 4        SP                  4        R R R 4       R #   + '       g   i     R # ; iR # 5i)Nz"error happened in forwarding inputr   Tr   )	_input_chlistr   
isinstancer   
AudioFrame
push_frame_FlushSentinelflushr   r   r   
contextlibsuppressRuntimeError	end_input)datar   main_streamra   s     r*   _forward_input_task9FallbackRecognizeStream._run.<locals>._forward_input_task0  sJ    "nn  d"4#;#;<F%dCNN;;"--d3'd.A.ABB"LLN C	 = *%dCNN;;'2248'd.A.ABB'--/ C %  % ((@UYHZ ! -* &((66))+ 7666 's   FEDEF1D$F&,DF1DF,D>FEDFDF%E ;F?E  +F+F<
FF	Fr|   r}   r   r   r   r   r   r   r   r   r   r   r   )&r   rV   r   r]   r   r   r   rY   r    r   r   r   r   _conn_optionsr[   rZ   r\   r   r   r   	_event_chsend_nowaitr   r   rB   r   r   r   _sttr   r   r   r   r   gatherr   r   r
   )ra   r   r   forward_input_taskr   r   r   r   evr   r   r   s   f          @r*   _runFallbackRecognizeStream._run&  s;    YY[
ScDDZDZDbDbcSSScDDZDZDbDbcc
LL?@.28<	, 	,4   6 6 E EFFA//77:J###z."%**!%%0%8%8 ..&*&<&<&O&O$($:$:$K$K+/+A+A+Q+Q	& #- #K *15G5L5L5N5N-4-@-@ATAV-W*#.;;,7 ? ?b $ : :2 >> s#g Gj )%%&8999nnT=U=UV=U6}}=UVWWW d6L6L6[6[ \6[s6[ \]]efjfofofqt~f~e  @H  I
 	
Q $/?K $/;;;;; #// "yyk)JK#-t"4 # "yyk)GH%&#-t"4
 $ (("yyk)QR#-t"4    !+++/4
,		64N :VW !]s/  AP0P>A?P?BN!N!0K4>K 
?K4KK	K
KK,3PO3 "PO6P"O;#"PO>
'P K4KKK4KK4N!K1K!
K1*K1,K40N!1K44AN:N;)M$$N1*NN!P!O0>.O0,P/O00P6P>Pc                    V ^8  d   QhRRRR/# r   r!   )r;   s   "r*   r<   r     s     8V 8V 8V 8Vr)   c           	     	P  a aaa S P                   P                  S P                   P                  P                  S4      ,          oSP                  e!   SP                  P                  4       '       d   SP                  S P                  \        P                  ! S P                  ^ S P                   P                  R7      R7      oS P                  P                  S4       R V VVV3R llp\        P                  ! V! 4       4      ;Sn        pVP!                  V V3R l4       R # R # )Nr   r}   c                   V ^8  d   QhRR/# r   r!   )r;   s   "r*   r<   ;FallbackRecognizeStream._try_recovery.<locals>.__annotate__  s     & &T &r)   c                   <"    ^ p S;_uu_4       GRj  xL
  S  Rj  xL
  pVP                   \        P                  8X  g   K+  VP                  '       d$   VP                  ^ ,          P                  '       g   Kb  V ^,          p  RRR4      GRj  xL
  T ^ 8X  d   R# RSn        \        P                  ! RSP                   R24       SP                  P                  R\        SRR7      4       R#  L LDLs Lg  + GRj  xL 
 '       g   i     L~; i  \        P                   d6    \        P                  ! SP                  P                   R2RR/R	7        R# \          d>   p\        P                  ! SP                  P                   R
2TRR/R7        Rp?R# Rp?i\"         d4    \        P$                  ! SP                  P                   R2RR/R	7       h i ; i5i)r   NTzstt.FallbackAdapter, r   r   r   r~   r   r   r   r   r   )typer   FINAL_TRANSCRIPTalternativestextr    r   r   rB   r   r   r   r   r   r   r   r   r   r   )nb_transcriptr   r   ra   r   r   r   s      r*   r   @FallbackRecognizeStream._try_recovery.<locals>._recover_stt_task  s    %$%M%vv(. & &"!ww/*J*JJ')booa>P>U>U>U$, - 2 %  &v %)+/J(KK"7		{* MN**//20SDI  &&  &vvv& ++ NN!;;,,--@A)40    NN!;;,,--=>!")40 
 ! $$!;;,,--GH)40 s   G(D C5D C=C9C7
C9C=C="C=<C=D C;D G(!AD 3G(5D 7C99C=;D =D	D
D	D	D AG%G("G%+G%,2F$G($G%14G%%G(c                :   < SP                   P                  S4      # rA   )r   remove)rd   ra   r   s   &r*   <lambda>7FallbackRecognizeStream._try_recovery.<locals>.<lambda>  s    T-E-E-L-LV-Tr)   )r   r]   rY   r   r.   r   r   r   r   r   r   rZ   r   appendr   r   add_done_callback)ra   r   r   taskr   r   s   ff  @@r*   r   %FallbackRecognizeStream._try_recovery  s    ++33""1177<

 ,,4
8Y8Y8^8^8`8`ZZ(00&& 22CC   F $$++F3& &P 8?7J7JK\K^7__J-""#TUi 9ar)   c                    V ^8  d   QhRRRR/# )r6   event_aiterzAsyncIterable[SpeechEvent]r9   r:   r!   )r;   s   "r*   r<   r     s      7Q VZ r)   c                	0   "   V  R j  xL
  pK   LDR # 5irA   r!   )ra   r  rd   s   && r*   _metrics_monitor_task-FallbackRecognizeStream._metrics_monitor_task  s     " 	 	!	{s   )r   r   r   )r#   r$   r%   r&   r   rX   r   r   r  r(   r   r   s   @r*   r   r     s/    
= %.	
= 
=`
D8Vt r)   r   )+
__future__r   r   r   r   r   collections.abcr   r   typingr   r   rq   r    r	   _exceptionsr
   r   logr   typesr   r   r   r   r   utils.audior   r1   r   r   r   r   r   r   r   r   r   r   r,   r0   r   r!   r)   r*   <module>r     s    "     ) !    6  Y Y  %  T T (94<<( $
   
 6 6 6m8*+,m8`ko kr)   