
    /jv                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SK
JrJrJrJr  S SKrS SKJr  S SKJr  SSKJrJr  SS	KJrJrJrJr  SS
KJr  SSKJr  SSK J!r!J"r"J#r#J$r$J%r%  SSKJ&r&  SSK'J(r(J)r)J*r*  \S   r+\S   r,\S   r-\S   r.\S   r/\S   r0 " S S\SS9r1 " S S\SS9r2 " S S\SS9r3 " S S\SS9r4 " S  S!\SS9r5 " S" S#\SS9r6S$r7S%\8S&'   S:S' jr9\S(   r: " S) S*\SS9r;\;\<-  r=S;S+ jr>    S<S, jr?\+\,-  \--  \.-  \/-  \0-  \S-   -  r@\S.   rAS.rBS/\8S0'   S1rCS2\8S3'   \ " S4 S55      5       rD " S6 S7\R                  5      rE " S8 S9\R                  5      rFg)=    )annotationsN)	dataclassreplace)AnyLiteral	TypedDictoverload)Required)rtc   )sttutils)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_headers)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-1c                  *    \ rS rSr% S\S'   S\S'   Srg)CartesiaOptions9   float
min_volumemax_silence_duration_secs N__name__
__module____qualname____firstlineno____annotations____static_attributes__r&       M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/inference/stt.pyr!   r!   9   s    $$r.   r!   F)totalc                     \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S rg!)"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/   r2   r2   >   s    O%%NMON	MLMJr.   r2   c                  \    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S	\S'   Srg)DeepgramFluxOptionsZ   r#   eager_eot_thresholdeot_thresholdr7   eot_timeout_msr<   r=   r4   r@   rI   rD   r&   Nr'   r&   r.   r/   rQ   rQ   Z   s,    	r.   rQ   c                  p    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   Srg)AssemblyaiOptionsd   r4   format_turnsr#    end_of_turn_confidence_thresholdr7   &min_end_of_turn_silence_when_confidentmax_turn_silencez	list[str]keyterms_promptlanguage_detectioninactivity_timeoutrK   promptspeaker_labelsr&   Nr'   r&   r.   r/   rW   rW   d   s7    &++,//Kr.   rW   c                  \    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S	\S'   S\S'   Srg)ElevenlabsOptionsp   zLiteral['manual', 'vad']commit_strategyr4   include_timestampsr#   vad_silence_threshold_secsvad_thresholdr7   min_speech_duration_msmin_silence_duration_msrK   language_coder&   Nr'   r&   r.   r/   rc   rc   p   s,    -- %%  r.   rc   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)

XaiOptionsz   r4   rB   r7   r8   formatr6   r&   Nr'   r&   r.   r/   rm   rm   z   s    MLr.   rm   )rB   ra   ztuple[str, ...]_DIARIZATION_EXTRA_KEYSc                F   ^  T (       d  g[        U 4S j[         5       5      $ )z=Return True if any known provider diarization flag is truthy.Fc              3  X   >#    U  H  n[        TR                  U5      5      v   M!     g 7fN)r4   get).0keyextra_kwargss     r/   	<genexpr>'_diarization_enabled.<locals>.<genexpr>   s&     N6MstL$$S)**6Ms   '*)anyrp   )rw   s   `r/   _diarization_enabledr{      s    N6MNNNr.   )	multiendeesfrjaptzhhic                  0    \ rS rSr% SrS\S'    S\S'   Srg)	FallbackModel   zA fallback model with optional extra configuration.

Extra fields are passed through to the provider.

Example:
    >>> FallbackModel(model="deepgram/nova-3", extra_kwargs={"keyterm": ["livekit"]})
zRequired[str]modeldict[str, Any]rw   r&   N)r(   r)   r*   r+   __doc__r,   r-   r&   r.   r/   r   r      s     h  ,r.   r   c                l    [         nU R                  S5      =nS:w  a  [        XS-   S  5      nU S U n X4$ )N:r   )r   rfindr   )r   languageidxs      r/   _parse_model_stringr      sC    )2H{{3B&Agi 01ds?r.   c                    SS jn[        U [        5      (       a  U  Vs/ s H
  o!" U5      PM     sn$ U" U 5      /$ s  snf )Nc                \    [        U [        5      (       a  [        U 5      u  p[        US9$ U $ )N)r   )
isinstancerK   r   r   )r   name_s      r/   _make_fallback+_normalize_fallback.<locals>._make_fallback   s+    eS!!)%0GD t,,r.   )r   FallbackModelTypereturnr   )r   list)fallbackr   ms      r/   _normalize_fallbackr      sC     (D!!+348aq!8448$%% 5s   <auto	pcm_s16leSTTEncodingDEFAULT_ENCODINGi>  r7   DEFAULT_SAMPLE_RATEc                  z    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S
\S'   S
\S'   S\S'   S\S'   S\S'   Srg)
STTOptions   NotGivenOr[STTModels | str]r   zNotGivenOr[LanguageCode]r   r   encodingr7   sample_raterK   base_urlapi_key
api_secretr   rw   zNotGivenOr[list[FallbackModel]]r   NotGivenOr[APIConnectOptions]conn_optionsr&   Nr'   r&   r.   r/   r   r      s;    &&&&MLO  --//r.   r   c                    ^  \ rS rSr\\\\\\\S\\\S.
                       SS jj5       r\\\\\\\S\\\S.
                       SS jj5       r\\\\\\\S\\\S.
                       SS jj5       r\\\\\\\S\\\S.
                       SS jj5       r\\\\\\\S\\\S.
                       SS jj5       r\\\\\\\S\\\S.
                       SS	 jj5       r\\\\\\\S\\\S.
                       SS
 jj5       r\4\\\\\\S\\\S.
                       SU 4S jjjjr\S S j5       r\	S!S j5       r
\	S!S j5       rS"S jr\S.       S#S jjr\\S.     S$S jjr\\\S.       S%S jjr\S.   S&S jjrSrU =r$ )'STT   N)
r   r   r   r   r   r   http_sessionrw   r   r   c       
            g rs   r&   selfr   r   r   r   r   r   r   r   rw   r   r   s               r/   __init__STT.__init__        r.   c       
            g rs   r&   r   s               r/   r   r      r   r.   c       
            g rs   r&   r   s               r/   r   r      r   r.   c       
            g rs   r&   r   s               r/   r   r     r   r.   c       
            g rs   r&   r   s               r/   r   r   "  r   r.   c       
            g rs   r&   r   s               r/   r   r   3  r   r.   c       
            g rs   r&   r   s               r/   r   r   D  r   r.   c       
        t  > [        [        U	5      (       a  [        U	5      OS5      n[        TU ]  [
        R                  " SSUSSS9S9  [        U5      (       aF  [        U[        5      (       a1  [        U5      u  pUn[        U5      (       a  [        U5      (       d  Un[        U5      (       a  UO	[        5       n[        U5      (       a  UO+[        R                  " S[        R                  " SS	5      5      nU(       d  [        S
5      e[        U5      (       a  UO+[        R                  " S[        R                  " SS	5      5      nU(       d  [        S5      e[        n[        U
5      (       a  [        U
5      n[!        U[        U[        5      (       a  [#        U5      OU[        U5      (       a  UO[$        [        U5      (       a  UO[&        UUU[        U	5      (       a  [        U	5      O0 U[        U5      (       a  UO[(        S9
U l        Xl        [.        R0                  [2           " 5       U l        g)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.
NTwordF)	streamingr6   diarization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   rw   r   r   )r{   r   dictsuperr   r   STTCapabilitiesr   rK   r   r   osgetenv
ValueErrorr   r   r   r   r   r   r   _opts_sessionweakrefWeakSetSpeechStream_streams)r   r   r   r   r   r   r   r   r   rw   r   r   diarization_enabledparsed_modelparsed_languagelk_base_url
lk_api_keylk_api_secretfallback_models	__class__s                      r/   r   r   U  s   T 3"*<"8"8Dd
 	,, $/#)"' 	 	
 E??z%55,?,F)L E(((1C1C*"*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                (    [        U5      u  p#U " X#S9$ )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                z    [        U R                  R                  5      (       a  U R                  R                  $ S$ )Nunknown)r   r   r   r   s    r/   r   	STT.model  s+    #+DJJ,<,<#=#=tzzL9Lr.   c                    g)Nlivekitr&   r   s    r/   providerSTT.provider  s    r.   c                    U R                   (       d#  [        R                  R                  5       U l         U R                   $ rs   )r   r   http_contextr   r   s    r/   _ensure_sessionSTT._ensure_session  s)    }}!..;;=DM}}r.   r   c                   #    [        S5      e7f)NzNLiveKit Inference STT does not support batch recognition, use stream() instead)NotImplementedError)r   bufferr   r   s       r/   _recognize_implSTT._recognize_impl  s      "\
 	
s   )r   r   c               n    U R                  US9n[        XUS9nU R                  R                  U5        U$ )z)Create a streaming transcription session.r   )r   optsr   )_sanitize_optionsr   r   add)r   r   r   optionsstreams        r/   r   
STT.stream  s:     ((((;$<P&!r.   r   r   rO   c                  [        U5      (       a  XR                  l        [        U5      (       a  [        U5      U R                  l        [        U5      (       a[  U R                  R
                  R                  U5        [        U R                  [        U R                  R
                  5      S9U l        U R                   H  nUR                  XUS9  M     g)z!Update STT configuration options.)r   r   N)r   r   r   r   r   rw   updater   _capabilitiesr{   r   update_options)r   r   r   rO   r   s        r/   r  STT.update_options  s     E??$JJH".x"8DJJE??JJ##**51!(""01H1HI"D
 mmF!!!N $r.   c                   [        U R                  5      n[        UR                  5      Ul        [	        U5      (       a  [        U5      Ul        U$ )zFCreate a sanitized copy of options with language override if provided.)r   r   r   rw   r   r   r   )r   r   r   s      r/   r   STT._sanitize_options  sB     $**%#G$8$89H+H5Gr.   )r   r   r   r   )r   CartesiaModelsr   NotGivenOr[str]r   r  r   NotGivenOr[STTEncoding]r   NotGivenOr[int]r   r  r   r  r   aiohttp.ClientSession | Nonerw   zNotGivenOr[CartesiaOptions]r   7NotGivenOr[list[FallbackModelType] | FallbackModelType]r   r   r   None)r   DeepgramModelsr   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[DeepgramOptions]r   r
  r   r   r   r  )r   DeepgramFluxModelsr   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[DeepgramFluxOptions]r   r
  r   r   r   r  )r   AssemblyAIModelsr   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[AssemblyaiOptions]r   r
  r   r   r   r  )r   ElevenlabsModelsr   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[ElevenlabsOptions]r   r
  r   r   r   r  )r   	XaiModelsr   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[XaiOptions]r   r
  r   r   r   r  )r   rK   r   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   NotGivenOr[dict[str, Any]]r   r
  r   r   r   r  )r   r   r   r  r   r  r   r  r   r  r   r  r   r  r   r	  rw   zNotGivenOr[dict[str, Any] | CartesiaOptions | DeepgramOptions | DeepgramFluxOptions | AssemblyaiOptions | ElevenlabsOptions | XaiOptions]r   r
  r   r   r   r  )r   rK   r   r   )r   rK   )r   zaiohttp.ClientSession)r   zutils.AudioBufferr   r  r   r   r   zstt.SpeechEvent)r   NotGivenOr[STTLanguages | str]r   r   r   r   r   r   r   r  rO   r  r   r  )r   r  r   r   )r(   r)   r*   r+   r	   r   r   classmethodr   propertyr   r   r   r   r   r   r  r   r-   __classcell__r   s   @r/   r   r      sf   
 %.$-,5'0#,&/594=LU6? "	
 " * % ! $ 3 2 J 4 
   
 %.$-,5'0#,&/594=LU6? "	
 " * % ! $ 3 2 J 4 
   
 %.$-,5'0#,&/598ALU6?! "	
 " * % ! $ 3 6 J 4 
   
 %.$-,5'0#,&/596?LU6? "	
 " * % ! $ 3 4 J 4 
   
 %.$-,5'0#,&/596?LU6? "	
 " * % ! $ 3 4 J 4 
   
 %.$-,5'0#,&/59/8LU6? "	
 " * % ! $ 3 - J 4 
   
 %.$-,5'0#,&/593<LU6? "	
 " * % ! $ 3 1 J 4 
 $ .7f8 %.$-,5'0#,&/59 LU6?+f8*f8 "	f8
 "f8 *f8 %f8 !f8 $f8 3f8
f8( J)f8* 4+f8, 
-f8 f8P 
8 
8 M M   %.		
!	
 "		

 (	
 
	
 4=*E	
 1
 (	

 

 .73<,5O +O 1	O
 *O 
O. =F
9
	
 
r.   r   c                     ^  \ rS rSr        SU 4S jjr\\\S.       SS jjrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrU =r$ )r   i  c                  > [         TU ]  XUR                  S9  X l        UR                  " 5       U l        [        [        R                  " S5      5      U l	        SU l
        SU l        S U l        g )N)r   r   r   stt_request_Fr   )r   r   r   r   r   r   rK   r   	shortuuid_request_id	_speaking_speech_duration_ws)r   r   r   r   r   s       r/   r   SpeechStream.__init__  s^     	SIYIYZ
++-u~>?'(;?r.   r   c                  [        U5      (       a  XR                  l        [        U5      (       a  [        U5      U R                  l        [        U5      (       a%  U R                  R
                  R                  U5        [        U5      =(       d    [        U5      =(       d    [        U5      nU(       a  U R                  b  U R                  R                  (       d|  0 n[        U5      (       a  XS'   [        U5      (       a  [        [        U5      5      US'   [        U5      (       a  X5S'   SUS.n[        R                  " U R                  U5      5        gggg)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   rO   zsession.update)typesettings)r   r   r   r   r   rw   r   r  closedrK   asyncioensure_future_send_session_update)r   r   r   rO   
has_updater#  
update_msgs          r/   r  SpeechStream.update_options"  s     E??$JJH".x"8DJJE??JJ##**51e_M(:Mhuo
$((.txx')H$)!!!'*<+A'B$$)!($J !!$";";J"GH 8G.:r.   c                   #     U R                   bT  U R                   R                  (       d8  U R                   R                  [        R                  " U5      5      I S h  vN   g g g  N! [
         a    [        R                  " S5         g f = f7f)Nz0failed to send session.update, ws may be closing)r  r$  send_strjsondumps	Exceptionr   debug)r   msgs     r/   r'  !SpeechStream._send_session_updateE  sg     	Mxx#DHHOOhh''

3888 -<#8 	MLLKL	Ms;   BAA( A&A( #B&A( ( BB
BBc                  ^ ^#    Sm[         R                  " [        S9SUU 4S jj5       n[         R                  " [        S9SUU 4S jj5       nSn T R                  5       I Sh  vN nUT l        [
        R                  " U" U5      5      [
        R                  " U" U5      5      /n [
        R                  " U6 I Sh  vN   [         R                  R                  " U6 I Sh  vN    ST l        Ub  UR                  5       I Sh  vN   gg N NP N-! [         R                  R                  " U6 I Sh  vN    f = f N7! ST l        Ub  UR                  5       I Sh  vN    f f = f7f)z&Main loop for streaming transcription.Fr   c                  >#    [         R                  R                  T
R                  R                  ST
R                  R                  S-  S9nT
R
                    S h  vN n/ n[        U[        R                  5      (       a+  UR                  UR                  UR                  5      5        O:[        UT
R                  5      (       a  UR                  UR                  5       5        U H  nT
=R                  UR                  -  sl        UR                  R!                  5       n["        R$                  " U5      R'                  S5      nSUS.nU R)                  [*        R,                  " U5      5      I S h  vN   M     GM+   GN' N
 Sm	SS	0nU R)                  [*        R,                  " U5      5      I S h  vN    g 7f)
Nr      )r   num_channelssamples_per_channelzutf-8input_audio)r"  audioTr"  zsession.finalize)r   r9  AudioByteStreamr   r   	_input_chr   r   
AudioFrameextendpushdata_FlushSentinelflushr  durationtobytesbase64	b64encodedecoder,  r-  r.  )wsaudio_bstreamevframesframeaudio_bytesbase64_audio	audio_msgfinalize_msg
closing_wsr   s            r/   	send_task$SpeechStream._run.<locals>.send_taskP  sb     "KK77 JJ22$(JJ$:$:b$@ 8 M !NN =b/1b#..1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7sI   AG F
FF
"DG 9F:G F
G 
/G 9F<:G c                  >#     U R                  5       I S h  vN nUR                  [        R                  R                  [        R                  R
                  [        R                  R                  4;   a,  T(       d  TR                  R                  (       a  g [        SS9eUR                  [        R                  R                  :w  a#  [        R                  " SUR                  5        M  [        R                  " UR                  5      nUR!                  S5      nUS:X  a  OUS:X  a  TR#                  USS	9  OUS
:X  a  TR%                  U5        OoUS:X  a  TR#                  USS	9  OXUS:X  a  OQUS:X  a  OJUS:X  a-  [        SUR!                  S5       3UR!                  SS5      US9e[        R                  " SU5        GM   GN7f)NTz4LiveKit Inference STT connection closed unexpectedly)messagez0unexpected LiveKit Inference STT message type %sr"  zsession.createdinterim_transcriptF)is_finalpreflight_transcriptfinal_transcriptzsession.finalizedzsession.closederrorz&LiveKit Inference STT returned error: rT  coder   )status_codebodyz:received unexpected message from LiveKit Inference STT: %s)receiver"  aiohttp	WSMsgTypeCLOSEDCLOSECLOSINGr   r$  r   TEXTr   warningr-  loadsr?  rt   _process_transcript_process_preflight_transcript)rG  r1  r?  msg_typerP  r   s       r/   	recv_task$SpeechStream._run.<locals>.recv_taskq  s     JJL(88%%,,%%++%%--  
 "T]]%9%9( 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!  NNTVZM (s   GGF0GN)rG  aiohttp.ClientWebSocketResponser   r  )r   log_exceptionsr   _connect_wsr  r%  create_taskgatheraiogracefully_cancelclose)r   rQ  ri  rG  tasksrP  s   `    @r/   _runSpeechStream._runL  s5    
			V	,	8 
-	8@ 
		V	,*	 
-*	X 6:	!''))BDH##IbM2##IbM2E:nne,,,ii115999DH~hhj    * -9eii115999 ! DH~hhj   s   AE+E %D&AE *D  DD  E %D&E +E+E 	E+E D E !D=6D97D==E  E+E( E#!E((E+c                  #    S[        U R                  R                  5      U R                  R                  U R                  R                  S.0nU R                  R
                  (       a3  U R                  R
                  S:w  a  U R                  R
                  US'   U R                  R                  (       a  U R                  R                  US   S'   U R                  R                  (       aN  U R                  R                   Vs/ s H&  nUR                  S5      UR                  S5      S.PM(     nnSU0US	'   U R                  R                  (       aD  U R                  R                  R                  U R                  R                  R                  S
.US'   U R                  R                  nUR                  S5      (       a  UR                  SSS5      n0 [        5       ESS[!        U R                  R"                  U R                  R$                  5       30En [&        R(                  " U R*                  R-                  U SU R                  R
                   3US9U R.                  R                  5      I Sh  vN nSUS'   UR1                  [2        R4                  " U5      5      I Sh  vN   U$ s  snf  N= N! [6        R8                   a$  n[;        UR<                  UR>                  S9UeSnAf[&        R@                   a  n[C        S5      UeSnAf[6        RD                   a  n[G        S5      UeSnAff = f7f)z/Connect to the LiveKit Inference STT WebSocket.r#  )r   r   rO   r   r   r   rw   )r   rO   modelsr   )timeoutretries
connection)zhttp://zhttps://httprG  r   AuthorizationzBearer z/stt?model=)headersNzsession.creater"  )statusz+LiveKit Inference STT connection timed out.z*failed to connect to LiveKit Inference STT)$rK   r   r   r   rw   r   r   r   rt   r   rx  	max_retryr   
startswithr   r   r   r   r   r%  wait_forr   
ws_connect_conn_optionsr,  r-  r.  r^  ClientResponseErrorr   rT  r~  TimeoutErrorr   ClientConnectorErrorr   )r   paramsr   rw  r   r}  rG  es           r/   rm  SpeechStream._connect_ws  s     "4::#9#9: JJ//00"
 ::

 0 0F :"jj..F7O::-1ZZ-@-@F:z*:: ,,,A %%.1553HI,   #+F!3F:::""::22::::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st   DM-J:5C,M"AK J?1K 3K4K 8M?K K MK66MLM0L<<MMc                   [        UR                  SU R                  R                  =(       d    S5      5      nUR                  S/ 5      =(       d    / n[        R
                  " UU R                  UR                  SS5      -   U R                  UR                  SS5      -   UR                  SS5      -   UR                  SS5      UR                  S	S
5      UR                  S5      U Vs/ s H  n[        UR                  SS
5      UR                  SS5      U R                  -   UR                  SS5      U R                  -   U R                  UR                  SS5      UR                  S5      S9PM     snS9$ s  snf )Nr   r}   wordsstartr   rB  
confidenceg      ?
transcriptr   
speaker_idr   endg        )text
start_timeend_timestart_time_offsetr  r  )r   r  r  r  r  r  r  )r   rt   r   r   r   
SpeechDatar  r   )r   r?  r   r  r   s        r/   _build_speech_dataSpeechStream._build_speech_data  sH   TZZ5H5H5PD QR"%+~~--!0DD++dhhw.BBTXXjZ[E\\xxc2,+xx- "
 "D &"-#xx3d6L6LL!XXeQ/$2H2HH&*&<&<#xxc:#xx5 "

 	

s   *BE:c                H   UR                  SS5      nU(       a  U R                  (       d  g U R                  U5      nUR                  SU R                  5      n[        R
                  " [        R                  R                  UU/S9nU R                  R                  U5        g )Nr  r   
request_idr"  r  alternatives)
rt   r  r  r  r   SpeechEventSpeechEventTypePREFLIGHT_TRANSCRIPT	_event_chsend_nowait)r   r?  r  speech_datar  events         r/   rg  *SpeechStream._process_preflight_transcript  s}    xxb)4>>--d3XXlD,<,<=
$$99!%

 	""5)r.   c           
     L   UR                  SU R                  5      nUR                  SS5      nU(       d  U(       d  g U R                  (       dN  SU l        [        R                  " [        R
                  R                  S9nU R                  R                  U5        U R                  U5      nU(       Ga%  U R                  S:  aj  U R                  R                  [        R                  " [        R
                  R                  U[        R                  " U R                  S9S95        SU l
        [        R                  " [        R
                  R                  UU/S	9nU R                  R                  U5        U R                  (       aO  S
U l        [        R                  " [        R
                  R                  S9nU R                  R                  U5        g g [        R                  " [        R
                  R                  UU/S	9nU R                  R                  U5        g )Nr  r  r   T)r"  r   )audio_duration)r"  r  recognition_usager  F)rt   r  r  r   r  r  START_OF_SPEECHr  r  r  r  RECOGNITION_USAGERecognitionUsageFINAL_TRANSCRIPTEND_OF_SPEECHINTERIM_TRANSCRIPT)	r   r?  rV  r  r  start_eventr  r  	end_events	            r/   rf   SpeechStream._process_transcript	  s   XXlD,<,<=
xxb)H~~!DN//s/B/B/R/RSKNN&&{3--d3$$q(**OO 00BB#-*-*>*>+/+@+@+ )*%OO((99%)]E
 NN&&u-~~!&OO1D1D1R1RS	**95 
 OO((;;%)]E
 NN&&u-r.   )r   r  r   r  r  r  )r   r   r   r   r   r   r   r  r  )r1  r   r   r  )r   r  )r   rk  )r?  r   r   zstt.SpeechData)r?  r   r   r  )r?  r   rV  r4   r   r  )r(   r)   r*   r+   r   r   r  r'  rt  rm  r  rg  rf  r-   r  r  s   @r/   r   r     s    @ @ 	@
 (@ 
@& .73<,5!I +!I 1	!I
 *!I 
!IFMa!F3j
.*,. ,.r.   r   )rw   zdict[str, Any] | Noner   r4   )r   rK   r   z$tuple[str, NotGivenOr[LanguageCode]])r   z+list[FallbackModelType] | FallbackModelTyper   zlist[FallbackModel])G
__future__r   r%  rD  r-  r   r   dataclassesr   r   typingr   r   r   r	   r^  typing_extensionsr
   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!   r2   rQ   rW   rc   rm   rp   r,   r{   STTLanguagesr   rK   r   r   r   	STTModelsr   r   r   r   r   r   r&   r.   r/   <module>r     s   "    	  * 4 4  &    $    Y Y!    01 
 ;< L!	%iu %
iu 8)5 		 		 % ,  O NO-IU -  "C' &9&&    	
  fo 
 k" !, + +  S   
0 
0 
0q#'' qh	d.3## d.r.   