
    /j^]                    |   % 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Jr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  SSK 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.\*\+-  \,-  \--  \.-  r/S0S jr0 " S S\5      r1\1\2-  r3    S1S jr4 " S S\SS9r5 " S S\SS9r6 " S S\SS9r7 " S  S!\SS9r8 " S" S#\SS9r9\S$   r:S$r;S%\<S&'   S'r=S(\<S)'   \ " S* S+5      5       r> " S, S-\R~                  5      r? " S. S/\R                  5      r@g)2    )annotationsN)	dataclassreplace)AnyLiteral	TypedDictoverload)NotRequired   )tokenizettsutils)APIConnectionErrorAPIErrorAPIStatusErrorAPITimeoutErrorcreate_api_error_from_http)LanguageCode)logger)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr)is_given   )create_access_tokenget_default_inference_urlget_inference_headers)cartesiazcartesia/sonic-3zcartesia/sonic-2zcartesia/sonic-turbozcartesia/sonic)deepgramzdeepgram/aurazdeepgram/aura-2)
elevenlabszelevenlabs/eleven_flash_v2zelevenlabs/eleven_flash_v2_5zelevenlabs/eleven_turbo_v2zelevenlabs/eleven_turbo_v2_5z!elevenlabs/eleven_multilingual_v2)rimezrime/arcanazrime/mistv2)inworldzinworld/inworld-tts-1.5-maxzinworld/inworld-tts-1.5-minizinworld/inworld-tts-1-maxzinworld/inworld-tts-1c                R    SnU R                  S5      =nS:w  a  XS-   S nU SU n X4$ )zParse a model string into a model and voice
Args:
    model (str): Model string to parse
Returns:
    tuple[str, str | None]: Model and voice (voice is None if not specified)
N:r   )rfind)modelvoiceidxs      M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/inference/tts.py_parse_model_stringr,   @   s@     E{{3B&Agi ds<    c                  <    \ rS rSr% SrS\S'    S\S'    S\S'   Srg	)
FallbackModelN   zA fallback model with optional extra configuration.

Extra fields are passed through to the provider.

Example:
    >>> FallbackModel(model="cartesia/sonic", voice="")
strr(   r)   zNotRequired[dict[str, Any]]extra_kwargs N__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r3   r-   r+   r/   r/   N   s"     JZJ%--,r-   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                r    [        U [        5      (       a!  [        U 5      u  p[        X(       a  US9$ SS9$ U $ )N r(   r)   )
isinstancer1   r,   r/   )r(   
model_namer)   s      r+   _make_fallback+_normalize_fallback.<locals>._make_fallbackg   s8    eS!! 3E :J z%PPRPPr-   )r(   FallbackModelTypereturnr/   )r@   list)fallbackrB   ms      r+   _normalize_fallbackrI   d   sC     (D!!+348aq!8448$%% 5s   <c                  f    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   Srg)CartesiaOptionss   r1   emotionz)Literal['slow', 'normal', 'fast'] | floatspeedfloatvolumedurationintmax_buffer_delay_msbooladd_timestampsadd_phoneme_timestampsuse_normalized_timestampsr3   Nr5   r6   r7   r8   r:   r;   r3   r-   r+   rK   rK   s   s/    L44MO  ##r-   rK   F)totalc                       \ rS rSr% S\S'   Srg)DeepgramOptions~   rT   mip_opt_outr3   NrX   r3   r-   r+   r[   r[   ~   s    r-   r[   c                      \ 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rg)ElevenlabsOptions   rR   inactivity_timeoutzLiteral['auto', 'off', 'on']apply_text_normalizationrT   	auto_modeenable_loggingenable_ssml_parsingsync_alignmentr1   language_coderO   	stabilitysimilarity_booststylerN   use_speaker_boostzlist[float]chunk_length_schedulepreferred_alignmentr3   NrX   r3   r-   r+   r_   r_      sS    ::OLL&&r-   r_   c                  L    \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S\S
'   Srg)RimeOptions   zMistv2-specific parameters. Arcana has no extra WS JSON query params.
See: https://docs.rime.ai/api-reference/endpoint/websockets-json
rO   speed_alpharT   pause_between_bracketsphonemize_between_bracketsr1   inline_speed_alphano_text_normalizationr3   Nr4   r3   r-   r+   ro   ro      s'        $$r-   ro   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)InworldOptions   rO   speaking_ratetemperaturez:Literal['TIMESTAMP_TYPE_UNSPECIFIED', 'WORD', 'CHARACTER']timestamp_typez<Literal['APPLY_TEXT_NORMALIZATION_UNSPECIFIED', 'ON', 'OFF']rb   r3   NrX   r3   r-   r+   rw   rw      s    NNZZr-   rw   	pcm_s16leTTSEncodingDEFAULT_ENCODINGi]  rR   DEFAULT_SAMPLE_RATEc                      \ 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rg)_TTSOptions   TTSModels | strr(   NotGivenOr[str]r)   zNotGivenOr[LanguageCode]languager}   encodingrR   sample_rater1   base_urlapi_key
api_secretzdict[str, Any]r2   zNotGivenOr[list[FallbackModel]]rG   NotGivenOr[APIConnectOptions]conn_optionsr3   NrX   r3   r-   r+   r   r      sA    &&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U 4S
 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 jrS$S j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 jrSrU =r$ ))TTS   N)r)   r   r   r   r   r   r   http_sessionr2   rG   r   c                   g Nr3   selfr(   r)   r   r   r   r   r   r   r   r2   rG   r   s                r+   __init__TTS.__init__       " 	r-   c                   g r   r3   r   s                r+   r   r      r   r-   c                   g r   r3   r   s                r+   r   r      r   r-   c                   g r   r3   r   s                r+   r   r      r   r-   c                   g r   r3   r   s                r+   r   r     r   r-   c                   g r   r3   r   s                r+   r   r     r   r-   c               t  > [        U5      (       a  UO[        n[        TU ]  [        R
                  " SSS9USS9  [        U[        5      (       a$  [        U5      u  pUnUb  [        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[        U[        5      (       a  [!        U5      OU[        U5      (       a  UO["        UUUU[        U
5      (       a  [%        U
5      O0 U[        U5      (       a  UO[&        S9U l        Xl        [,        R.                  [0        R2                     " U R4                  U R6                  SSS9U l        [:        R<                  [>           " 5       U l         g)a  Livekit Cloud Inference TTS

Args:
    model (TTSModels | str): TTS model to use, in "provider/model[:voice]" format
    voice (str, optional): Voice to use, use a default one if not provided
    language (str, optional): Language of the TTS model.
    encoding (TTSEncoding, optional): Encoding of the TTS model.
    sample_rate (int, optional): Sample rate of the TTS 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 TTS 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.
TF)	streamingaligned_transcriptr   )capabilitiesr   num_channelsNLIVEKIT_INFERENCE_API_KEYLIVEKIT_API_KEYr>   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   r2   rG   r   i,  )
connect_cbclose_cbmax_session_durationmark_refreshed_on_get)!r   r   superr   r   TTSCapabilitiesr@   r1   r,   r   osgetenv
ValueErrorr   rI   r   r   r~   dictr   _opts_sessionr   ConnectionPoolaiohttpClientWebSocketResponse_connect_ws	_close_ws_poolweakrefWeakSetSynthesizeStream_streams)r   r(   r)   r   r   r   r   r   r   r   r2   rG   r   parsed_modelparsed_voicelk_base_url
lk_api_keylk_api_secretfallback_models	__class__s                      r+   r   r   .  s   P &.k%:%:k@S,,tPUV# 	 	
 eS!!)<U)C&L E'$"*8"4"4h:S:U    6		BSUW8XY 	
 g  
## 9299EY[];^_ 	
 m  <EH1(;O /9(C/H/H\(+h!)(!3!3X9I# $/7/E/El+2$)1,)?)?E`

 %))'*I*IJ''^^!$"&	

  (89;r-   c                F    [        U5      u  pU " X(       a  US9$ [        S9$ )zCreate a TTS instance from a model string

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

Returns:
    TTS: TTS instance
r?   )r,   r   )clsr(   r)   s      r+   from_model_stringTTS.from_model_string  s'     +51ueDD)DDr-   c                .    U R                   R                  $ r   )r   r(   r   s    r+   r(   	TTS.model  s    zzr-   c                    g)Nlivekitr3   r   s    r+   providerTTS.provider  s    r-   c           	     *  #    U R                  5       n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S n [        R                  " UR                  U SU R                  R                   3US9U5      I S h  vN nS[-        U R                  R.                  5      U R                  R0                  U R                  R2                  S.nU R                  R4                  (       a  U R                  R4                  US'   U R                  R                  (       a  U R                  R                  US'   U R                  R6                  (       a  U R                  R6                  US'   U R                  R8                  (       a_  U R                  R8                   Vs/ s H7  nUR;                  S5      UR;                  S5      UR;                  S0 5      S.PM9     n	nSU	0US'   U R                  R<                  (       aD  U R                  R<                  R>                  U R                  R<                  R@                  S.US'    URC                  [D        RF                  " U5      5      I S h  vN   U$  GN! [        R                   a$  n[        UR                   UR"                  S	9UeS nAf[        R$                   a  n['        S
5      UeS nAf[        R(                   a  n[+        S5      UeS nAff = fs  snf  N! [H         a*  nURK                  5       I S h  vN    [+        S5      UeS nAff = f7f)N)zhttp://zhttps://httpwsr   AuthorizationzBearer z/tts?model=)headersstatusz+LiveKit Inference TTS connection timed out.z*failed to connect to LiveKit Inference TTSzsession.create)typer   r   extrar)   r(   r   r2   )r(   r)   r   modelsrG   )timeoutretries
connectionz>failed to send session.create message to LiveKit Inference TTS)&_ensure_sessionr   r   
startswithr   r   r   r   r   asynciowait_for
ws_connectr(   r   ClientResponseErrorr   messager   TimeoutErrorr   ClientConnectorErrorr   r1   r   r   r2   r)   r   rG   getr   r   	max_retrysend_strjsondumps	Exceptionclose)
r   r   sessionr   r   r   eparamsrH   r   s
             r+   r   TTS._connect_ws  s    &&(::&&677''a8H
#%
w':4::;M;MtzzOdOd'e&fg
 
	Z''""hZ{4::;K;K:L#MW^"_ B %tzz556

++ZZ,,	"
 ::"jj..F7O::"jj..F7O::!%!4!4F::: ,, -A	 UU7^UU7^UU>26
 -   #+F!3F:::""::22::::22<<$F< 
	++djj0111 	c ** 	P,QYYqxxHaO## 	X!"OPVWW++ 	Z$%QRXYY	Z"" 2 	((*$P	s   BNAK KK  DN;>M9A(N"(M 
MM NK M(LML**MMMNM 
N&N9M<:NNNc                @   #    UR                  5       I S h  vN   g  N7fr   )r   )r   r   s     r+   r   TTS._close_ws  s     hhjs   c                    U R                   (       d#  [        R                  R                  5       U l         U R                   $ r   )r   r   http_contextr   r   s    r+   r   TTS._ensure_session  s)    }}!..;;=DM}}r-   c                8    U R                   R                  5         g r   )r   prewarmr   s    r+   r   TTS.prewarm  s    

r-   )r)   r(   r   r2   c               D   [        U5      (       a  X R                  l        [        U5      (       a  XR                  l        [        U5      (       a  [	        U5      U R                  l        [        U5      (       a&  U R                  R                  R                  U5        gg)z
Args:
    voice (str, optional): Voice.
    model (TTSModels | str, optional): TTS model to use.
    language (str, optional): Language code for the TTS model.
    extra_kwargs (dict, optional): Extra kwargs to pass to the TTS model.
N)r   r   r(   r)   r   r   r2   update)r   r)   r(   r   r2   s        r+   update_optionsTTS.update_options  sn     E??$JJE??$JJH".x"8DJJL!!JJ##**<8 "r-   r   c                    U R                  XS9$ )Nr   )_synthesize_with_stream)r   textr   s      r+   
synthesizeTTS.synthesize  s     ++D+LLr-   c               N    [        XS9nU R                  R                  U5        U$ N)r   r   )r   r   add)r   r   streams      r+   r  
TTS.stream  s%     "dF&!r-   c                   #    [        U R                  5       H  nUR                  5       I S h  vN   M     U R                  R                  5         U R                  R                  5       I S h  vN   g  NE N7fr   )rF   r   acloseclearr   )r   r  s     r+   r  
TTS.aclose  sY     4==)F--/!! * 	jj!!! " 	"s!   ,A8A4?A8.A6/A86A8)r   r   r   r   )r(   CartesiaModelsr)   r   r   r   r   NotGivenOr[TTSEncoding]r   NotGivenOr[int]r   r   r   r   r   r   r   aiohttp.ClientSession | Noner2   zNotGivenOr[CartesiaOptions]rG   7NotGivenOr[list[FallbackModelType] | FallbackModelType]r   r   rE   None)r(   DeepgramModelsr)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   zNotGivenOr[DeepgramOptions]rG   r  r   r   rE   r  )r(   ElevenlabsModelsr)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   zNotGivenOr[ElevenlabsOptions]rG   r  r   r   rE   r  )r(   
RimeModelsr)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   zNotGivenOr[RimeOptions]rG   r  r   r   rE   r  )r(   InworldModelsr)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   zNotGivenOr[InworldOptions]rG   r  r   r   rE   r  )r(   r1   r)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   NotGivenOr[dict[str, Any]]rG   r  r   r   rE   r  )r(   r   r)   r   r   r   r   r  r   r  r   r   r   r   r   r   r   r  r2   zqNotGivenOr[dict[str, Any] | CartesiaOptions | DeepgramOptions | ElevenlabsOptions | RimeOptions | InworldOptions]rG   r  r   r   rE   r  )r(   r1   rE   r   )rE   r1   )r   rO   rE   aiohttp.ClientWebSocketResponser   r  rE   r  )rE   zaiohttp.ClientSessionrE   r  )
r)   r   r(   zNotGivenOr[TTSModels | str]r   r   r2   r  rE   r  )r   r1   r   r   rE   ztts.ChunkedStream)r   r   rE   r   )r5   r6   r7   r8   r	   r   r   classmethodr   propertyr(   r   r   r   r   r   r   r   r   r  r  r;   __classcell__r   s   @r+   r   r      s   
 "+$-,5'0$-#,&/594=LU6? 	
 " * % " ! $ 3 2 J 4 
 $ 
 "+$-,5'0$-#,&/594=LU6? 	
 " * % " ! $ 3 2 J 4 
 $ 
 "+$-,5'0$-#,&/596?LU6? 	
 " * % " ! $ 3 4 J 4 
 $ 
 "+$-,5'0$-#,&/5909LU6? 	
 " * % " ! $ 3 . J 4 
 $ 
 "+$-,5'0$-#,&/593<LU6? 	
 " * % " ! $ 3 1 J 4 
 $ 
 "+$-,5'0$-#,&/593<LU6? 	
 " * % " ! $ 3 1 J 4 
 , "+$-,5'0$-#,&/59 LU6?+d<d< 	d<
 "d< *d< %d< "d< !d< $d< 3d<
d<( J)d<* 4+d<, 
-d< d<L 
E 
E      =~ "+-6$-3<9 9 +	9
 "9 19 
92 ?ZMM*;M	M 4O0	" "r-   r   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )r   i   zStreamed API using websocketsc               `   > [         TU ]  XS9  Xl        [        UR                  5      U l        g r  )r   r   _ttsr   r   )r   r   r   r   s      r+   r   SynthesizeStream.__init__#  s(    S<	SYY'
r-   c                  ^ ^^^	^
#    [         R                  " 5       m	TR                  T	T R                  R                  SSSS9  [
        R                  R                  5       R                  5       m
[        R                  " 5       mS
U U
4S jjnSUU U
4S jjnSUUU	U 4S jjn T R                  R                  R                  T R                  R                  S9 IS h  vN nT R                  R                  R                   T l        T R                  R                  R$                  T l        [        R(                  " U" 5       5      [        R(                  " U" U5      5      [        R(                  " U" U5      5      /n [        R*                  " U6 I S h  vN   TR-                  5         T
R/                  5       I S h  vN   [         R0                  R2                  " U6 I S h  vN   S S S 5      IS h  vN   g  GN Ne N? N! TR-                  5         T
R/                  5       I S h  vN    [         R0                  R2                  " U6 I S h  vN    f = f Nb! , IS h  vN  (       d  f       g = f! [        R4                   a    [7        5       S e[8        R:                   a$  n[=        UR>                  UR@                  S	9S eS nAf[B         a    e [D         a  n[G        5       UeS nAff = f7f)Nr   Tz	audio/pcm)
request_idr   r   r  	mime_typec                    >#    TR                     S h  vN n [        U TR                  5      (       a  TR                  5         M6  TR	                  U 5        MI   ND
 TR                  5         g 7fr   )	_input_chr@   _FlushSentinelflush	push_text	end_input)datar   sent_tokenizer_streams    r+   _input_task*SynthesizeStream._run.<locals>._input_task6  sY     "nn 6ddD$7$788)//1%//5	6n "++-s&   A-AAAAA-AA-c                V  >#    0 nSUS'   T  S h  vN nUR                  5       nUR                  S-   US'   0 nTR                  R                  (       a  TR                  R                  US'   TR                  R                  (       a  TR                  R                  US'   TR                  R
                  (       a  TR                  R
                  US'   XCS'   TR                  R                  (       a  TR                  R                  O0 US	'   TR                  5         U R                  [        R                  " U5      5      I S h  vN   TR                  5         GMS   GNO N
 SS
0nU R                  [        R                  " U5      5      I S h  vN    TR                  5         g 7f)Ninput_transcriptr    
transcriptr)   r(   r   generation_configr   zsession.flush)copytokenr   r)   r(   r   r2   _mark_startedr   r   r   set)	r   base_pktev	token_pktr1  end_pktinput_sent_eventr   r*  s	         r+   _sentence_stream_task4SynthesizeStream._run.<locals>._sentence_stream_task?  sM    ')H1HV1 'b$MMO	*,((S.	,'46!::##151A1A%g.::##151A1A%g.::&&48JJ4G4G%j11B-.@D

@W@WTZZ%<%<]_	'"""$kk$**Y"7888 $$&' 9 2" G ++djj1222  "sD   
F)E%E E%D3F)E#	F) E%#F)%-F)FF)c                  >#    S nTR                  5       I S h  vN    U R                  T	R                  R                  S9I S h  vN nUR                  [
        R                  R                  [
        R                  R                  [
        R                  R                  4;   a
  [        ST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c  Ub  UnTR%                  US9  UR#                  S5      S:X  a  OUR#                  S5      S	:X  a+  [&        R(                  " US
   5      nTR+                  U5        OjUR#                  S5      S:X  a  TR-                  5         g UR#                  S5      S:X  a  [/        SUR                    35      e[        R                  " SU5        GM   GN GN7f)Nr   z&Gateway connection closed unexpectedly)r!  z"unexpected Gateway message type %s
session_id)
segment_idr   zsession.createdoutput_audioaudiodoneerrorz&LiveKit Inference TTS returned error: zunexpected message %s)waitreceive_conn_optionsr   r   r   	WSMsgTypeCLOSEDCLOSECLOSINGr   TEXTr   warningr   loadsr)  r   start_segmentbase64	b64decodepushr(  r   )
r   current_session_idmsgr)  r?  b64datar:  output_emitterr!  r   s
         r+   
_recv_task)SynthesizeStream._run.<locals>._recv_taskY  s    -1"'')))JJt/A/A/I/IJJJ88%%,,%%++%%--  
 )@Z  88w00555NN#GR'+zz#((';!XXl3
%-*2H)3&"00J0G88F#'88XXf%7$..tG}=G"''0XXf%/",,.XXf%0"%KCHH:#VWWNN#:DAA  * Ks"   HH+HHG HHr>  r   r  r  )$r   	shortuuid
initializer   r   r   basicSentenceTokenizerr  r   Eventr  r   r   rG  r   last_acquire_time_acquire_timelast_connection_reused_connection_reusedcreate_taskgatherr5  r  aiogracefully_cancelr   r   r   r   r   r   r   r   r   r   )r   rV  r+  r;  rW  r   tasksr   r:  r!  r*  s   ``      @@@r+   _runSynthesizeStream._run)  s8    __&
!!!

..! 	" 	
 !) @ @ B I I K"==?	. 	.	# 	#4$	B $	BL	.yy11$:L:L:T:T1UUY[%)YY__%F%F"*.))//*P*P'''6''(=b(AB''
27>!..%000$((*/66888))55u=== VUU 1 9= %((*/66888))55u=== VUUU  ## 	.!#-** 	S,QYYqxxHdR 	 	.$&A-	.s   BK.$;I3 G: I3 #BIHG=H#I?G? $I$H%I)I3 4I5I3 9K.:I3 =H?II$I'H*
(%II
III3 I0I" I0,I3 /K.0I3 32K+%KK+K&&K++K.)r_  ra  r   r  )r   r   r   r   )rV  ztts.AudioEmitterrE   r  )	r5   r6   r7   r8   r9   r   rg  r;   r  r  s   @r+   r   r      s    '(q. q.r-   r   )r(   r1   rE   ztuple[str, str | None])rG   z+list[FallbackModelType] | FallbackModelTyperE   zlist[FallbackModel])A
__future__r   r   rP  r   r   r   dataclassesr   r   typingr   r   r   r	   r   typing_extensionsr
   r>   r   r   r   _exceptionsr   r   r   r   r   r   r   logr   typesr   r   r   r   r   _utilsr   r   r   r
  r  r  r  r  	TTSModelsr,   r/   r1   rD   rI   rK   r[   r_   ro   rw   r}   r~   r:   r   r   r   r   r3   r-   r+   <module>rr     s   "    	  * 4 4  ) # #  $  Y Y  Y Y 
 )  

  ^+.>>Km[	-I -& "C' &9&&$iu $iu 	 "	 )5 	 [Ye [ k" + + +  S   0 0 0b"#'' b"Jz.s++ z.r-   