+
    ~j                      a  0 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
 ^ RIHtHtHtHt ^ RIt^ RIHt ^ RIHt ^RIHtHtHt ^RIHtHtHtHt ^R	IHt ^R
I H!t! ^RI"H#t#H$t$H%t%H&t&H't' ^RIH(t( ^RI)H*t*H+t+H,t, ]R7,          t-]R8,          t.]R9,          t/]R:,          t0]R;,          t1]R<,          t2]R=,          t3 ! R R]RR7      t4 ! R R]RR7      t5 ! R R]RR7      t6 ! R R]RR7      t7 ! R R]RR7      t8 ! R R]RR7      t9 ! R R]RR7      t:R>t;R]<R&   R  R! lt=]R?,          t> ! R" R#]RR7      t?]?]@,          tAR$ R% ltBR& R' ltCR( R) ltD]-].,          ]/,          ]0,          ]1,          ]2,          ]3,          ]R*,          ,          tE]R+,          tFR+tGR,]<R-&   R.tHR/]<R0&   ]	 ! R1 R24      4       tI ! R3 R4]P                  4      tJ ! R5 R6]P                  4      tKR# )@    )annotationsN)	dataclassreplace)AnyLiteral	TypedDictoverload)Required)rtc)sttutilsvad)APIConnectionErrorAPIStatusErrorAPITimeoutErrorcreate_api_error_from_http)LanguageCodelogger)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOrTimedString)is_given)create_access_tokenget_default_inference_urlget_inference_headersc                  ,    ] tR t^=t$ R]R&   R]R&   RtR# )CartesiaOptionsfloat
min_volumemax_silence_duration_secs N__name__
__module____qualname____firstlineno____annotations____static_attributes__r$       q/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/inference/stt.pyr    r    =   s    $$r,   r    F)totalc                     ] tR t^Bt$ 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tR # )!DeepgramOptionsboolfiller_wordsinterim_resultsintendpointing	punctuatesmart_formatzlist[tuple[str, float]]keywordsstr | list[str]keytermprofanity_filternumeralsmip_opt_out
vad_eventsdiarize	dictationdetect_languageno_delayutterance_endredactr   searchtagchannelsstrversioncallbackcallback_methodextrar$   Nr%   r$   r,   r-   r0   r0   B   s    O%%NMON	MLMJr,   r0   c                  ^    ] tR t^^t$ R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   RtR# )DeepgramFluxOptionsr!   eager_eot_thresholdeot_thresholdr4   eot_timeout_msr9   r:   r1   r=   rF   rA   r$   Nr%   r$   r,   r-   rN   rN   ^   s,    	r,   rN   c                  r    ] tR t^ht$ R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   R]R&   RtR# )AssemblyaiOptionsr1   format_turnsr!    end_of_turn_confidence_thresholdr4   &min_end_of_turn_silence_when_confidentmax_turn_silencez	list[str]keyterms_promptlanguage_detectioninactivity_timeoutrH   promptspeaker_labelsr$   Nr%   r$   r,   r-   rS   rS   h   s7    &++,//Kr,   rS   c                  ^    ] tR t^tt$ R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   RtR# )ElevenlabsOptionszLiteral['manual', 'vad']commit_strategyr1   include_timestampsr!   vad_silence_threshold_secsvad_thresholdr4   min_speech_duration_msmin_silence_duration_msrH   language_coder$   Nr%   r$   r,   r-   r^   r^   t   s,    -- %%  r,   r^   c                      ] tR t^~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]R&   R]R&   RtR# )SpeechmaticsOptionsrH   domainoutput_localer!   	max_delaymax_delay_modediarizationspeaker_sensitivityr4   max_speakersr1   prefer_current_speakerenable_partialsenable_entitiesdict[str, Any]punctuation_overrideszlist[dict[str, Any]]additional_vocab end_of_utterance_silence_triggeraudio_filtering_configtranscript_filtering_configr$   Nr%   r$   r,   r-   rg   rg   ~   s[    K  ))**&++**!//r,   rg   c                  @    ] tR t^t$ R]R&   R]R&   R]R&   R]R&   RtR# )	
XaiOptionsr1   r?   r4   r5   formatr3   r$   Nr%   r$   r,   r-   ry   ry      s    MLr,   ry   ztuple[str, ...]_DIARIZATION_EXTRA_KEYSc                    V ^8  d   QhRRRR/# )   extra_kwargszdict[str, Any] | Nonereturnr1   r$   )rz   s   "r-   __annotate__r      s      '<  r,   c                    V '       g   R# \          FL  pV P                  V4      pV'       g   K  \        V\        4      '       d   VP	                  4       R8X  d   KK   R# 	  R# )z=Return True if any known provider diarization flag is truthy.FnoneT)r{   get
isinstancerH   lower)r~   keyvalues   &  r-   _diarization_enabledr      sM    &  %eS!!ekkmv&= ' r,   c                  2    ] tR t^t$ RtR]R&    R]R&   RtR# )FallbackModela1  Inference Fallback Adapter: configuration for a fallback STT model that runs server-side in LiveKit Inference, providing automatic fallback between providers.

Extra fields are passed through to the provider.

Example:
    >>> FallbackModel(model="deepgram/nova-3", extra_kwargs={"keyterm": ["livekit"]})
zRequired[str]modelrr   r~   r$   N)r&   r'   r(   r)   __doc__r*   r+   r$   r,   r-   r   r      s     h  ,r,   r   c                    V ^8  d   QhRRRR/# )r}   r   rH   r   z$tuple[str, NotGivenOr[LanguageCode]]r$   )rz   s   "r-   r   r      s      s 'K r,   c                v    \         pV P                  R 4      ;pR8w  d   \        W^,           R 4      pV RV p W3# ):N)r   rfindr   )r   languageidxs   &  r-   _parse_model_stringr      sC    )2H{{3B&Agi 01ds?r,   c               $    V ^8  d   QhRRRRRR/# )r}   r   NotGivenOr[STTModels | str]vad_instancevad.VAD | Noner   r$   )rz   s   "r-   r   r      s&      &  r,   c                V   \        V 4      ;'       d*    \        V \        4      ;'       d    V P                  R 4      pVe"   V'       g   \        P
                  ! RV 4       R# V'       d   Vf    ^ RIHp TP                  4       pV#   \         d   p\        RT : R24      ThRp?ii ; i)zspeechmatics/Nz@`vad` will be ignored: model %r handles endpointing server-side.)VADz*livekit-plugins-silero is required: model z) does not handle endpointing server-side.)
r   r   rH   
startswithr   warninglivekit.plugins.sileror   ImportErrorload)r   r   is_speechmatics	SileroVADes   &&   r-   _resolve_vad_for_modelr      s    
 	XXJuc2XXu7G7G7X  N	
 </	? !~~'  	<)DF 	s   /B B(B##B(c                    V ^8  d   QhRRRR/# )r}   fallbackz+list[FallbackModelType] | FallbackModelTyper   zlist[FallbackModel]r$   )rz   s   "r-   r   r      s     & &9&&r,   c                    R  R lp\        V \        4      '       d   V  Uu. uF
  q!! V4      NK  	  up# V! V 4      .# u upi )c                    V ^8  d   QhRRRR/# )r}   r   FallbackModelTyper   r   r$   )rz   s   "r-   r   )_normalize_fallback.<locals>.__annotate__   s      / M r,   c                d    \        V \        4      '       d   \        V 4      w  r\        VR 7      # V # ))r   )r   rH   r   r   )r   name_s   &  r-   _make_fallback+_normalize_fallback.<locals>._make_fallback   s+    eS!!)%0GD t,,r,   )r   list)r   r   ms   &  r-   _normalize_fallbackr      sC     (D!!+348aq!8448$%% 5s   =auto	pcm_s16leSTTEncodingDEFAULT_ENCODINGi>  r4   DEFAULT_SAMPLE_RATEc                  |    ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
]R&   R
]R&   R
]R&   R]R&   R]R&   R]R&   RtR# )
STTOptionsi  r   r   zNotGivenOr[LanguageCode]r   r   encodingr4   sample_raterH   base_urlapi_key
api_secretrr   r~   zNotGivenOr[list[FallbackModel]]r   NotGivenOr[APIConnectOptions]conn_optionsr$   Nr%   r$   r,   r-   r   r     s;    &&&&MLO  --//r,   r   c                  "  a  ] tR tRt]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]R]/R R ll4       t]R]R]R]R]R]R]RR	R
]R]R]/
R R ll4       t]3R]R]R]R]R]R]RR	R
]R]R]R]/R V 3R llllt]R  R! l4       t]	R" R# l4       t
]	R$ R% l4       tR& R' ltR]/R( R) lltR]R]/R* R+ lltR,]R]R-]/R. R/ lltR]/R0 R1 lltR2tV ;t# )3STTi  r   r   r   r   r   r   http_sessionNr~   r   r   c               H    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   CartesiaModelsr   NotGivenOr[str]r   r   NotGivenOr[STTEncoding]r   NotGivenOr[int]r   r   r   aiohttp.ClientSession | Noner~   zNotGivenOr[CartesiaOptions]r   7NotGivenOr[list[FallbackModelType] | FallbackModelType]r   r   r   Noner$   )rz   s   "r-   r   STT.__annotate__         "	
 " * % ! $ 3 2 J 4 
r,   c       
        	    R # Nr$   selfr   r   r   r   r   r   r   r   r~   r   r   s   &&$$$$$$$$$$r-   __init__STT.__init__       r,   c               H    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   DeepgramModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[DeepgramOptions]r   r   r   r   r   r   r$   )rz   s   "r-   r   r   )  r   r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r   (  r   r,   c               H    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   DeepgramFluxModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[DeepgramFluxOptions]r   r   r   r   r   r   r$   )rz   s   "r-   r   r   :  s      ! "	
 " * % ! $ 3 6 J 4 
r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r   9  r   r,   c               H    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   AssemblyAIModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[AssemblyaiOptions]r   r   r   r   r   r   r$   )rz   s   "r-   r   r   K         "	
 " * % ! $ 3 4 J 4 
r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r   J  r   r,   c               H    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   ElevenlabsModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[ElevenlabsOptions]r   r   r   r   r   r   r$   )rz   s   "r-   r   r   \  r   r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r   [  r   r,   c               H    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   	XaiModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[XaiOptions]r   r   r   r   r   r   r$   )rz   s   "r-   r   r   m  s       "	
 " * % ! $ 3 - J 4 
r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r   l  r   r,   r   c               L    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   SpeechmaticsModelsr   r   r   r   r   r   r   r   r   r   r   r~   zNotGivenOr[SpeechmaticsOptions]r   r   r   r   r   NotGivenOr[vad.VAD | None]r   r   r$   )rz   s   "r-   r   r   ~  s      ! "	
 " * % ! $ 3 6 J 4 ( 
r,   c               	    R # r   r$   )r   r   r   r   r   r   r   r   r   r~   r   r   r   s   &&$$$$$$$$$$$r-   r   r   }  s      r,   c               H    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   rH   r   r   r   r   r   r   r   r   r   r   r   r~   NotGivenOr[dict[str, Any]]r   r   r   r   r   r   r$   )rz   s   "r-   r   r     s       "	
 " * % ! $ 3 1 J 4 
r,   c       
        	    R # r   r$   r   s   &&$$$$$$$$$$r-   r   r     r   r,   c               L    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~   zNotGivenOr[dict[str, Any] | CartesiaOptions | DeepgramOptions | DeepgramFluxOptions | AssemblyaiOptions | ElevenlabsOptions | XaiOptions | SpeechmaticsOptions]r   r   r   r   r   r   r   r   r$   )rz   s   "r-   r   r     s     n8 n8*n8 "	n8
 "n8 *n8 %n8 !n8 $n8 3n8	
n8* J+n8, 4-n8. (/n80 
1n8r,   c                 < \        \        V	4      '       d   \        V	4      MR4      p\        V4      '       dJ   \        V\        4      '       d4   \        V4      w  rTp\        V4      '       d   \        V4      '       g   Tp\        T\        V4      '       d   TMR4      p\        SV `!  \        P                  ! RRVRRR7      R7       \        V4      '       d   TM	\        4       p\        V4      '       d   TM+\        P                  ! R\        P                  ! RR	4      4      pV'       g   \        R
4      h\        V4      '       d   TM+\        P                  ! R\        P                  ! RR	4      4      pV'       g   \        R4      h\        p\        V
4      '       d   \!        V
4      p\#        T\        V\        4      '       d   \%        V4      MT\        V4      '       d   TM\&        \        V4      '       d   TM\(        TTT\        V	4      '       d   \        V	4      M/ T\        V4      '       d   TM\*        R7
      V n        Wn        Wn        \2        P4                  \6        ,          ! 4       V n        R# )a  Livekit Cloud Inference STT

Args:
    model (STTModels | str, optional): STT model to use, in "provider/model[:language]" format.
    language (str, optional): Language of the STT model.
    encoding (STTEncoding, optional): Encoding of the STT model.
    sample_rate (int, optional): Sample rate of the STT model.
    base_url (str, optional): LIVEKIT_URL, if not provided, read from environment variable.
    api_key (str, optional): LIVEKIT_API_KEY, if not provided, read from environment variable.
    api_secret (str, optional): LIVEKIT_API_SECRET, if not provided, read from environment variable.
    http_session (aiohttp.ClientSession, optional): HTTP session to use.
    extra_kwargs (dict, optional): Extra kwargs to pass to the STT model.
    fallback (FallbackModelType, optional): Fallback models - either a list of model names,
        a list of FallbackModel instances.
    conn_options (APIConnectOptions, optional): Connection options for request attempts.
    vad (VAD, optional): External Voice Activity Detector. When provided, each audio
        frame is forwarded to the VAD and `session.finalize` is sent to the inference
        gateway on end of speech. Only applicable to Speechmatics models.
NTwordF)	streamingr3   rl   aligned_transcriptoffline_recognize)capabilitiesLIVEKIT_INFERENCE_API_KEYLIVEKIT_API_KEY zUapi_key is required, either as argument or set LIVEKIT_API_KEY environmental variableLIVEKIT_INFERENCE_API_SECRETLIVEKIT_API_SECRETz[api_secret is required, either as argument or set LIVEKIT_API_SECRET environmental variable)
r   r   r   r   r   r   r   r~   r   r   )r   r   dictr   rH   r   r   superr   r   STTCapabilitiesr   osgetenv
ValueErrorr   r   r   r   r   r   r   _opts_session_vadweakrefWeakSetSpeechStream_streams)r   r   r   r   r   r   r   r   r   r~   r   r   r   diarization_enabledparsed_modelparsed_languagelk_base_url
lk_api_keylk_api_secretfallback_models	__class__s   &&$$$$$$$$$$$       r-   r   r     s   ^ 3"*<"8"8Dd

 E??z%55,?,F)L E(((1C1C*$U8C==CdK,, $/#)"' 	 	
 #+8"4"4h:S:U    6		BSUW8XY 	
 g  
## 9299EY[];^_ 	
 m  <EH1(;O/9(C/H/H\(+h!)(!3!3X9I'/'<'<BU $/7/E/El+2$)1,)?)?E`

 %	57r,   c                    V ^8  d   QhRRRR/# )r}   r   rH   r   r   r$   )rz   s   "r-   r   r     s     
8 
8c 
8c 
8r,   c                .    \        V4      w  r#V ! W#R7      # )zCreate a STT instance from a model string

Args:
    model (str): STT model to use, in "provider/model[:language]" format

Returns:
    STT: STT instance
)r   r   )r   )clsr   
model_namer   s   &&  r-   from_model_stringSTT.from_model_string  s      359
77r,   c                   V ^8  d   QhRR/# r}   r   rH   r$   )rz   s   "r-   r   r     s     M Ms Mr,   c                	|    \        V P                  P                  4      '       d   V P                  P                  # R # )unknown)r   r   r   r   s   &r-   r   	STT.model  s+    #+DJJ,<,<#=#=tzzL9Lr,   c                   V ^8  d   QhRR/# r  r$   )rz   s   "r-   r   r   "  s      # r,   c                	    R # )livekitr$   r  s   &r-   providerSTT.provider!  s    r,   c                   V ^8  d   QhRR/# )r}   r   aiohttp.ClientSessionr$   )rz   s   "r-   r   r   %  s      !6 r,   c                	    V P                   '       g$   \        P                  P                  4       V n         V P                   # r   )r   r   http_contextr   r  s   &r-   _ensure_sessionSTT._ensure_session%  s+    }}}!..;;=DM}}r,   c               (    V ^8  d   QhRRRRRRRR/# )	r}   bufferzutils.AudioBufferr   r   r   r   r   zstt.SpeechEventr$   )rz   s   "r-   r   r   *  s2     	
 	
!	
 "		

 (	
 
	
r,   c               	    "   \        R 4      h5i)zNLiveKit Inference STT does not support batch recognition, use stream() instead)NotImplementedError)r   r$  r   r   s   &&$$r-   _recognize_implSTT._recognize_impl*  s      "\
 	
s   c               $    V ^8  d   QhRRRRRR/# )r}   r   NotGivenOr[STTLanguages | str]r   r   r   r  r$   )rz   s   "r-   r   r   5  s*       1 (	
 
r,   c                   V P                  VR7      p\        V VVV P                  R7      pV P                  P	                  V4       V# )z)Create a streaming transcription session.)r   )r   optsr   r   )_sanitize_optionsr  r   r  add)r   r   r   optionsstreams   &$$  r-   r0  
STT.stream5  sJ     ((((;%	
 	&!r,   r   rL   c               (    V ^8  d   QhRRRRRRRR/# 	r}   r   r   r   r*  rL   r   r   r   r$   )rz   s   "r-   r   r   F  s:     O O +O 1	O
 *O 
Or,   c                  \        V4      '       dt   \        V\        4      '       d4   \        V4      w  rETp\        V4      '       d   \        V4      '       g   TpWP                  n        \        WP                  4      V n        \        V4      '       d   \        V4      V P                  n	        \        V4      '       d_   V P                  P                  P                  V4       \        V P                  \        V P                  P                  4      R7      V n        V P                   F  pVP!                  WVR7       K  	  R# )z!Update STT configuration options.)rl   )r   r   rL   N)r   r   rH   r   r   r   r   r   r   r   r~   updater   _capabilitiesr   r  update_options)r   r   r   rL   r  r  r0  s   &$$$   r-   r7  STT.update_optionsF  s     E??%%%0CE0J-$O,,Xh5G5G.H$JJ.uii@DIH".x"8DJJE??JJ##**51!(""01H1HI"D
 mmF!!!N $r,   c                    V ^8  d   QhRRRR/# )r}   r   r*  r   r   r$   )rz   s   "r-   r   r   d  s     
 
9
	
r,   c                   \        V P                  4      p\        VP                  4      Vn        \	        V4      '       d   \        V4      Vn        V# )zFCreate a sanitized copy of options with language override if provided.)r   r   r   r~   r   r   r   )r   r   r/  s   &$ r-   r-  STT._sanitize_optionsd  sB     $**%#G$8$89H+H5Gr,   )r6  r   r   r  r   )r&   r'   r(   r)   r	   r   r   classmethodr  propertyr   r  r!  r'  r   r0  r7  r-  r+   __classcell__r  s   @r-   r   r     s    %.	
 %. -6 (1 $- '0 6: 5> MV 7@    %.	
 %. -6 (1 $- '0 6: 5> MV 7@    %.	
 %. -6 (1 $- '0 6: 9B MV 7@    %.	
 %. -6 (1 $- '0 6: 7@ MV 7@    %.	
 %. -6 (1 $- '0 6: 7@ MV 7@    %.	
 %. -6 (1 $- '0 6: 09 MV 7@    %.	
 %. -6 (1 $- '0 6: 9B MV 7@ +4 "  %.	
 %. -6 (1 $- '0 6: 4= MV 7@ $ .7n8 %.	n8
 %.n8 -6n8 (1n8 $-n8 '0n8 6:n8( )n8* MV+n8, 7@-n8. +4/n8 n8` 
8 
8 M M  
	
 %.		
 4= +F	"O .7O 4=	O
 -6O<
<E
 
r,   r   c                     a  ] tR tRtRR/R V 3R llltR]R]R]/R	 R
 lltR R ltR R ltR R lt	R R lt
R R ltR R ltRtV ;t# )r  iq  r   Nc          
     ,    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$   )rz   s   "r-   r   SpeechStream.__annotate__r  s>     1 1 1 	1
 (1 %1 
1r,   c               	   < \         SV `  WVP                  R 7       Wn        W n        \        \        P                  ! R4      4      V n        RV n	        ^ V n
        RV n        W@n        R# ))r   r   r   stt_request_FN)r   r   r   _sttr   rH   r   	shortuuid_request_id	_speaking_speech_duration_wsr   )r   r   r,  r   r   r  s   &$$$$r-   r   SpeechStream.__init__r  sX     	SIYIYZ	
u~>?'(;?$0	r,   r   r   rL   c               (    V ^8  d   QhRRRRRRRR/# r3  r$   )rz   s   "r-   r   rB    s:     !I !I +!I 1	!I
 *!I 
!Ir,   c                  \        V4      '       d   WP                  n        \        V4      '       d   \        V4      V P                  n        \        V4      '       d&   V P                  P
                  P                  V4       \        V4      ;'       g    \        V4      ;'       g    \        V4      pV'       d   V P                  e   V P                  P                  '       g   / p\        V4      '       d   WR&   \        V4      '       d   \        \        V4      4      VR&   \        V4      '       d   W5R&   RRRV/p\        P                  ! V P                  V4      4       R# R# R# R# )zUpdate streaming transcription options.

When the WebSocket is live, a mid-stream session.update is sent so providers
that support it (e.g. AssemblyAI, Deepgram Flux) can apply changes without
reconnecting. Unsupported providers ignore the message.
Nr   r   rL   typezsession.updatesettings)r   r   r   r   r   r~   r5  rJ  closedrH   asyncioensure_future_send_session_update)r   r   r   rL   
has_updaterO  
update_msgs   &$$$   r-   r7  SpeechStream.update_options  s    E??$JJH".x"8DJJE??JJ##**51e_MM(:MMhuo
$((.txx')H$)!!!'*<+A'B$$)!(HJ !!$";";J"GH 8G.:r,   c                    V ^8  d   QhRRRR/# )r}   msgrr   r   r   r$   )rz   s   "r-   r   rB    s     M Mn M Mr,   c                	.  "    V P                   eX   V P                   P                  '       g:   V P                   P                  \        P                  ! V4      4      G R j  xL
  R # R # R #  L
  \
         d    \        P                  ! R4        R # i ; i5i)Nz0failed to send session.update, ws may be closing)rJ  rP  send_strjsondumps	Exceptionr   debug)r   rX  s   &&r-   rS  !SpeechStream._send_session_update  si     	Mxx#DHHOOOhh''

3888 -<#8 	MLLKL	Ms?   B)A- 2A-  A+!A- %B+A- -!BBBBc                   V ^8  d   QhRR/# )r}   r   r   r$   )rz   s   "r-   r   rB    s     u* u*D u*r,   c                  a aaa"   RoS P                   P                  4       oS P                  e   S P                  P                  4       MRo\        P
                  ! \        R7      R VV V3R ll4       p\        P
                  ! \        R7      R R l4       p\        P
                  ! \        R7      R VVV 3R	 ll4       pRp S P                  S4      G Rj  xL
 pVS n        \        P                  ! V! V4      4      \        P                  ! V! V4      4      .pSe-   VP                  \        P                  ! V! VS4      4      4        \        P                  ! V!  G Rj  xL
  \        P                  P                  ! V!  G Rj  xL
   RS n        Ve   VP                  4       G Rj  xL
  Se   SP!                  4       G Rj  xL
  R# R#  L Lp LL  \        P                  P                  ! T!  G Rj  xL 
  i ; i LV L<  RS n        Te   TP                  4       G Rj  xL 
  Se   SP!                  4       G Rj  xL 
  i i ; i5i)
z&Main loop for streaming transcription.FNr   c                    V ^8  d   QhRRRR/# r}   wsaiohttp.ClientWebSocketResponser   r   r$   )rz   s   "r-   r   'SpeechStream._run.<locals>.__annotate__  s     #	8 #	8 ? #	8D #	8r,   c                  <"   \         P                  P                  S
P                  P                  ^S
P                  P                  ^,          R7      pS
P
                    Rj  xL
  p. p\        V\        P                  4      '       dA   Se   SP                  V4       VP                  VP                  VP                  4      4       M;\        VS
P                  4      '       d    VP                  VP                  4       4       V F  pS
;P                  VP                   ,          un        VP                  P#                  4       p\$        P&                  ! V4      P)                  R4      pRRRV/pV P+                  \,        P.                  ! V4      4      G Rj  xL
  K  	  EKH   ELD LEDHSe   SP1                  4        Ro	RR/pT P+                  \,        P.                  ! T4      4      G Rj  xL 
  R# 5i)	   )r   num_channelssamples_per_channelNzutf-8rN  input_audioaudioTsession.finalize)r   rl  AudioByteStreamr   r   	_input_chr   r   
AudioFrame
push_frameextendpushdata_FlushSentinelflushrI  durationtobytesbase64	b64encodedecoderZ  r[  r\  	end_input)rd  audio_bstreamevframesframeaudio_bytesbase64_audio	audio_msgfinalize_msg
closing_wsr   
vad_streams   &        r-   	send_task$SpeechStream._run.<locals>.send_task  s     "KK77 JJ22$(JJ$:$:b$@ 8 M !NN = =b/1b#..11!-"--b1MM-"4"4RWW"=>D$7$788MM-"5"5"78#E))U^^;)"'**"4"4"6K#)#3#3K#@#G#G#PL!I ++djj&;<<< $=" =# +& %$$&J*L ++djj6777sJ   AG:!F.%F)&F.)D4G:F,G:)F.,G:.AG:2G53G:c               $    V ^8  d   QhRRRRRR/# )r}   rd  re  r0  zvad.VADStreamr   r   r$   )rz   s   "r-   r   rf    s#     
	 
	> 
	 
	Z^ 
	r,   c                f  "   V  R j  xL
  pVP                   \        P                  P                  8w  d   K5  V P                  '       d    R #  V P                  \        P                  ! RR/4      4      G R j  xL
  K|   Lw L  \         d    \        P                  ! R4         R # i ; iDR # 5i)NrN  rm  z;failed to send session.finalize from VAD, ws may be closing)rN  r   VADEventTypeEND_OF_SPEECHrP  rZ  r[  r\  r]  r   r^  )rd  r0  r~  s   && r-   vad_task#SpeechStream._run.<locals>.vad_task  s     " 	 	b77c..<<<999++djj&:L1M&NOOO	 P  LL!^_ #s[   B1B.BB.>B1B1*B:B;B?B1B.B!B+&B1*B++B1c                    V ^8  d   QhRRRR/# rc  r$   )rz   s   "r-   r   rf    s     &	 &	 ? &	D &	r,   c                  <"    V P                  4       G Rj  xL
 pVP                  \        P                  P                  \        P                  P
                  \        P                  P                  39   d)   S'       g   SP                  '       d   R# \        RR7      hVP                  \        P                  P                  8w  d$   \        P                  ! RVP                  4       K  \        P                  ! VP                  4      pVP                  R4      pVR8X  d   EK$  VR8X  d   SP!                  VRR	7       EKA  VR
8X  d   SP#                  V4       EK\  VR8X  d   SP!                  VR R	7       EKy  VR8X  d   EK  VR8X  d   EK  VR8X  g   EK  \        RVP                  R4       2VP                  RR4      VR7      h EL5i)TNz4LiveKit Inference STT connection closed unexpectedly)messagez0unexpected LiveKit Inference STT message type %srN  zsession.createdinterim_transcriptF)is_finalpreflight_transcriptfinal_transcriptzsession.finalizedzsession.closederrorz&LiveKit Inference STT returned error: r  code)status_codebodyr   )receiverN  aiohttp	WSMsgTypeCLOSEDCLOSECLOSINGrP  r   TEXTr   r   r[  loadsrt  r   _process_transcript_process_preflight_transcript)rd  rX  rt  msg_typer  r   r   s   &   r-   	recv_task$SpeechStream._run.<locals>.recv_task  s     JJL(88%%,,%%++%%--  
 "\%8%8%8( V  88w00555NN#UWZW_W_`zz#((+88F+00!55,,TE,B!7766t<!33,,TD,A!44!11((@)AT@UV$(HHVR$8! ? )s#   GGA'GGDG1G)rE  r!  r   r0  r   log_exceptionsr   _connect_wsrJ  rQ  create_taskappendgatheraiogracefully_cancelcloseaclose)	r   r  r  r  rd  tasksr  r   r  s	   f     @@@r-   _runSpeechStream._run  s    
yy002AEAV499+;+;+=\`
			V	,#	8 #	8 
-#	8J 
		V	,
	 
-
	 
		V	,&	 &	 
-&	P 6:	*''55BDH##IbM2##IbM2E %W00"j1IJK:nne,,,ii115999DH~hhj  % ''))) &! 6 -9eii115999 !)	 DH~hhj  % ''))) &s   B?IH GA3H G &G'G +!H GH I0H1IH	IH G H "H=H >HH I	II*H-+II
IIc                    V ^8  d   QhRRRR/# )r}   r   r  r   re  r$   )rz   s   "r-   r   rB  %  s     5 515	(5r,   c           	       "   RR\        V P                  P                  4      RV P                  P                  RV P                  P                  //pV P                  P
                  '       d5   V P                  P
                  R8w  d   V P                  P
                  VR&   V P                  P                  '       d!   V P                  P                  VR,          R&   V P                  P                  '       dO   V P                  P                   Uu. uF'  pRVP                  R4      RVP                  R4      /NK)  	  ppR	V/VR
&   V P                  P                  '       dF   RV P                  P                  P                  RV P                  P                  P                  /VR&   V P                  P                  pVP                  R4      '       d   VP                  RR^4      p/ \        4       CRR\!        V P                  P"                  V P                  P$                  4       2/Cp \&        P(                  ! VP+                  V RV P                  P
                   2VR7      V P,                  P                  4      G Rj  xL
 pRVR&   VP/                  \0        P2                  ! V4      4      G Rj  xL
  V# u upi  L= L  \4        P6                   d(   p\9        TP:                  TP<                  R7      ThRp?i\&        P>                   d   p\A        R4      ThRp?i\4        PB                   d   p\E        R4      ThRp?ii ; i5i)z/Connect to the LiveKit Inference STT WebSocket.rO  r   r   rL   r   r   r   r~   modelsr   timeoutretries
connectionhttprd  AuthorizationzBearer z/stt?model=)headersNzsession.createrN  )statusz+LiveKit Inference STT connection timed out.z*failed to connect to LiveKit Inference STT)zhttp://zhttps://)#rH   r   r   r   r~   r   r   r   r   r   r  	max_retryr   r   r   r   r   r   r   rQ  wait_for
ws_connect_conn_optionsrZ  r[  r\  r  ClientResponseErrorr   r  r  TimeoutErrorr   ClientConnectorErrorr   )	r   r   paramsr   r  r   r  rd  r   s	   &&       r-   r  SpeechStream._connect_ws%  s    
 s4::#9#9:DJJ//00"
 ::

 0 0F :"jj..F7O::-1ZZ-@-@F:z*:: ,,,A !%%.'1553HI,   #+F!3F:::"""4::22::4::22<<$F< 
 ::&&677''a8H
#%
w':4::;M;MtzzOdOd'e&fg
	Z''''jDJJ,<,<+=> (  ""**	 B .F6N++djj0111 	E( 2** 	P,QYYqxxHaO## 	X!"OPVWW++ 	Z$%QRXYY	Zs   B;M>;M:M-K ?$M$C
M/AK	 K1K	 9K:K	 >MK	 K	 	M"L  MML$$M;M<MMMc                    V ^8  d   QhRRRR/# )r}   rt  r   r   zstt.SpeechDatar$   )rz   s   "r-   r   rB  \  s     
 
t 
 
r,   c                	   \        TP                  R V P                  P                  ;'       g    R4      4      pVP                  R. 4      ;'       g    . pVP                  R4      p\	        V\
        4      '       d   V'       d   TMRp\        P                  ! TV P                  VP                  R^ 4      ,           V P                  VP                  R^ 4      ,           VP                  R^ 4      ,           VP                  RR4      VP                  R	R
4      VP                  R4      V Uu. uF  p\        VP                  RR
4      VP                  R^ 4      V P                  ,           VP                  R^ 4      V P                  ,           V P                  VP                  RR4      VP                  R4      R7      NK  	  upVR7      # u upi )r   enwordsrL   Nstartrw  
confidenceg      ?
transcriptr   
speaker_idr   endg        )text
start_timeend_timestart_time_offsetr  r  )r   r  r  r  r  r  r  metadata)
r   r   r   r   r   r   r   
SpeechDatar  r   )r   rt  r   r  rL   r  r   s   &&     r-   _build_speech_dataSpeechStream._build_speech_data\  sx   TZZ5H5H5P5PD QR"%++ !&ud3354~~--!0DD++dhhw.BBTXXjZ[E\\xxc2,+xx- "
 "D &"-#xx3d6L6LL!XXeQ/$2H2HH&*&<&<#xxc:#xx5 "
 %
 	

s   +BG	c                    V ^8  d   QhRRRR/# )r}   rt  r   r   r   r$   )rz   s   "r-   r   rB  x  s     * *$ *4 *r,   c                	V   VP                  R R4      pV'       d   V P                  '       g   R# V P                  V4      pVP                  RV P                  4      p\        P
                  ! \        P                  P                  VV.R7      pV P                  P                  V4       R# )r  r   N
request_idrN  r  alternatives)
r   rH  r  rG  r   SpeechEventSpeechEventTypePREFLIGHT_TRANSCRIPT	_event_chsend_nowait)r   rt  r  speech_datar  events   &&    r-   r  *SpeechStream._process_preflight_transcriptx  s    xxb)4>>>--d3XXlD,<,<=
$$99!%

 	""5)r,   c               $    V ^8  d   QhRRRRRR/# )r}   rt  r   r  r1   r   r   r$   )rz   s   "r-   r   rB    s!     ,. ,. ,. ,. ,.r,   c           
     	   VP                  R V P                  4      pVP                  RR4      pV'       g   V'       g   R# V P                  '       gR   RV n        \        P                  ! \        P
                  P                  R7      pV P                  P                  V4       V P                  V4      pV'       Ed6   V P                  ^ 8  dq   V P                  P                  \        P                  ! \        P
                  P                  V\        P                  ! V P                  R7      R7      4       ^ V n
        \        P                  ! \        P
                  P                  VV.R7      pV P                  P                  V4       V P                  '       dT   R	V n        \        P                  ! \        P
                  P                  R7      pV P                  P                  V4       R# R# \        P                  ! \        P
                  P                  VV.R7      pV P                  P                  V4       R# )
r  r  r   NT)rN  )audio_duration)rN  r  recognition_usager  F)r   rG  rH  r   r  r  START_OF_SPEECHr  r  r  rI  RECOGNITION_USAGERecognitionUsageFINAL_TRANSCRIPTr  INTERIM_TRANSCRIPT)	r   rt  r  r  r  start_eventr  r  	end_events	   &&&      r-   r   SpeechStream._process_transcript  s   XXlD,<,<=
xxb)H~~~!DN//s/B/B/R/RSKNN&&{3--d38$$q(**OO 00BB#-*-*>*>+/+@+@+ )*%OO((99%)]E
 NN&&u-~~~!&OO1D1D1R1RS	**95 
 OO((;;%)]E
 NN&&u-r,   )r   rG  rH  rI  rE  r   rJ  )r&   r'   r(   r)   r   r   r7  rS  r  r  r  r  r  r+   r>  r?  s   @r-   r  r  q  sf    1 (,1 1$!I .7!I 4=	!I
 -6!IFMu*n5n
8*,. ,.r,   r  )zdeepgram/nova-3zdeepgram/nova-3-medicalzdeepgram/nova-2zdeepgram/nova-2-medicalz deepgram/nova-2-conversationalaizdeepgram/nova-2-phonecall)zdeepgram/flux-generalzdeepgram/flux-general-en)zcartesia/ink-whisper)zassemblyai/universal-streamingz+assemblyai/universal-streaming-multilingualzassemblyai/u3-rt-pro)zelevenlabs/scribe_v2_realtime)z	xai/stt-1)zspeechmatics/enhancedzspeechmatics/standard)r?   r\   rl   )	multir  deesfrjaptzhhi)L__conditional_annotations__
__future__r   rQ  ry  r[  r   r   dataclassesr   r   typingr   r   r   r	   r  typing_extensionsr
   r  r   r   r   r   r   _exceptionsr   r   r   r   r   r   logr   typesr   r   r   r   r   r   _utilsr   r   r   r   r   r   r   r   r   r   r    r0   rN   rS   r^   rg   ry   r{   r*   r   STTLanguagesr   rH   r   r   r   r   	STTModelsr   r   r   r   r   r  )r  s   @r-   <module>r     s!   " "    	  * 4 4  &     $    Y Y!    01 
 ;< L!	 %iu %
iu 8)5 		 		 0)5 0$% ,   NO-IU -  "C' 2&    	
   fo 
 k" !, + +  S   
0 
0 
0X#'' Xv
A.3## A.r,   