+
    TV-j´á  ã                   ó�  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
HtHtHt ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ]P@                  ! ]PB                  R	R
7       ]PD                  ! ]#4      t$] ! R R4      4       t%] ! R R4      4       t&] ! R R4      4       t' ! R R4      t( ! R R4      t) ! R R4      t* ! R R4      t+ ! R R4      t, ! R R4      t- ! R R4      t. ! R R 4      t/ ! R! R"4      t0 ! R# R$4      t1R% t2]#R&8X  d    ]Pf                  ! ]2! 4       4       R# R#   ]4 d     R# i ; i)'é    N)ÚThreadPoolExecutor)Ú	dataclass)ÚAnyÚCallableÚIterableÚOptional)Úgenerate©Úload)ÚAudioPlayer)Ú
load_modelz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)ÚlevelÚformatc                   óÆ   a € ] tR t^t o RtRtRt^t^ tRt	Rt
Rt^tRt^`tRtRtR	t^tR
tRt^útRtRtRtRtRtRtRtRtRtRt^´t Rt!^út"Rt#^ t$^t%Rt&^€t'Rt(R t)V 3R lt*Rt+V t,R# )ÚVoicePipelineConfigzCConfiguration for the realtime Voxtral STT + Pocket TTS voice loop.é€>  NÚbalancedú0mlx-community/Voxtral-Mini-4B-Realtime-2602-4bité   úmlx-community/silero-vadçffffffÖ?çš™™™™™É?éX  g      >@úmlx-community/smart-turn-v3ç      à?i@  ú1mlx-community/NVIDIA-Nemotron-3-Nano-30B-A3B-4bitzlYou are a helpful voice assistant. Respond in natural spoken sentences. Never use markdown, emoji, or lists.úmlx-community/pocket-ttsÚcosetteTéÂ  éô  Fc                óê   € V P                   P                  4       pV P                  f   R^ðRRRR/P                  VR4      V n        V P                  f    RRRRRR/P                  VR4      V n        R # R # )	NÚfastr   éà  ÚqualityiÀ  g¸…ëQ¸Î?ç{®GázÔ?g¸…ëQ¸Þ?)Úlatency_profileÚlowerÚstt_transcription_delay_msÚgetÚtts_streaming_interval)ÚselfÚprofiles   & Úm/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_audio/sts/voice_pipeline.pyÚ__post_init__Ú!VoicePipelineConfig.__post_init__K   s‰   € Ø×&Ñ&×,Ñ,Ó.ˆØ×*Ñ*Ò2à˜Ø˜CØ˜3ð/÷ ‰c�'˜3Óð	 Ô+ð ×&Ñ&Ò.à˜Ø˜DØ˜4ð+÷ ‰c�'˜4Ó ð	 Ö'ñ /ó    c                ó
  <€ V ^8„  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R&   S[S[ ,          ;R&   S[ ;R&   S[ ;R	&   S[ ;R
&   S[;R&   S[;R&   S[;R&   S[ ;R&   S[ ;R&   S[;R&   S[ ;R&   S[;R&   S[;R&   S[ ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R &   S[ ;R!&   S[;R"&   S[ ;R#&   S[;R$&   # )%é   Úinput_sample_rateÚoutput_sample_rateÚinput_channelsÚframe_duration_msr&   Ú	stt_modelr(   Ústt_max_decode_tokens_per_stepÚstt_max_turn_tokensÚstt_finalization_max_stepsÚ	vad_modelÚvad_start_thresholdÚvad_stop_thresholdÚvad_start_framesÚvad_end_silence_msÚvad_max_turn_secondsÚ
preroll_msÚ
turn_modelÚturn_thresholdÚturn_max_incomplete_silence_msÚresponse_modelÚsystem_promptÚ	tts_modelÚ	tts_voicer*   Útts_temperatureÚbarge_inÚmin_barge_in_msÚignore_playback_echo_msÚecho_delay_min_msÚecho_delay_max_msÚecho_correlation_step_msÚbarge_in_min_transcript_charsÚ
play_audioÚ
queue_sizeÚverbose)Úintr   ÚstrÚfloatÚbool)r   Ú__classdict__s   "€r-   Ú__annotate__Ú VoicePipelineConfig.__annotate__   s  ø‡ ‚ ñ Ñ#ñ	 ñ
 !¡�Ñ,ñ ñ Ññ ñ Ññ ñ Ñ%ñ ñ ÑGñ ñ !)©¥Ñ4ñ ñ %(Ñ+ñ ñ Ñ"ñ ñ !$Ñ(ñ ñ  Ñ/ñ! ñ" Ñ%ñ# ñ$ Ñ#ñ% ñ& Ññ' ñ( Ñ!ñ) ñ*  Ñ&ñ+ ñ, Ññ- ñ0 Ñ3ñ1 ñ2 Ññ3 ñ4 %(Ñ.ñ5 ñ8 ÑMñ9 ñ: ñ ñ; ñB Ñ/ñC ñD ÑñE ñF %¡U�OÑ2ñG ñH ™e•_Ñ+ñI ñL ÑñM ñN ÑñO ñP !Ñ&ñQ ñR Ñ ñS ñT Ñ ñU ñV "Ñ&ñW ñX $'Ñ*ñY ñ\ Ññ] ñ^ Ññ_ ñ` Ñòa r0   )r(   r*   )-Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r3   r4   r5   r6   r&   r7   r(   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r*   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r.   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rX   s   @r-   r   r      sá   ø‡ € áMà#ÐØ(,ÐØ€NØÐØ%€OàG€IØ04ÐØ*+Ð"Ø"ÐØ&(Ðà/€IØ!%ÐØ #ÐØÐØ!ÐØ"&ÐØ€Jà3€JØ€NØ*.Ð"àM€Nàvð ð 0€IØ€IØ.2ÐØ'+€Oà€HØ€OØ#&ÐØ ÐØ ÐØ$&ÐØ)*Ð!à€JØ€JØ€Gò!÷e ƒ r0   r   c                   ó4   a € ] tR t^\t o RtRtV 3R ltRtV tR# )ÚSpeechFrameDecisionFc                óJ   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[;R&   # )r2   ÚprobabilityÚ	is_speechÚspeech_startedÚcandidate_ended)rV   rW   )r   rX   s   "€r-   rY   Ú SpeechFrameDecision.__annotate__\   s6   ø‡ ‚ áÑñ ñ �Oñ ñ Ñ ñ	 ñ
 Ñ!ò r0   © N)	r[   r\   r]   r^   ri   rj   r`   ra   rb   rc   s   @r-   re   re   \   s   ø‡ € ð !€NØ!€O÷ ƒ r0   re   c                   ó,   a € ] tR t^dt o V 3R ltRtV tR# )ÚEndpointDecisionc                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r2   Úcompleterg   )rW   rV   )r   rX   s   "€r-   rY   ÚEndpointDecision.__annotate__d   s   ø‡ ‚ á�Nñ ñ Ñò r0   rl   N)r[   r\   r]   r^   r`   ra   rb   rc   s   @r-   rn   rn   d   s   ø‡ ‡ „ r0   rn   c                   ór   a € ] tR t^jt o RtR tV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 lt	Rt
V tR# )ÚMLXWorkScheduleraL  Run all MLX work on one worker thread and stream.

Recent MLX streams are thread-local, so model load, cached state creation,
and inference must stay on the same worker thread. A generic
``asyncio.to_thread`` call can hop between pool threads and later fail when
evaluating arrays that reference a stream created in another thread.
c                óF   € \        ^RR7      V n        RV n        RV n        R# )é   zmlx-audio-sts)Úmax_workersÚthread_name_prefixNF)r   Ú	_executorÚ_streamÚ_initialized©r+   s   &r-   Ú__init__ÚMLXWorkScheduler.__init__s   s$   € Ü+Ø¨oô
ˆŒð ˆŒØ!ˆÖr0   c                ó:   <€ V ^8„  d   QhRS[ . S[3,          RS[/# ©r2   ÚfuncÚreturn©r   r   )r   rX   s   "€r-   rY   ÚMLXWorkScheduler.__annotate__z   s$   ø€ ÷ ñ ™ "¡c 'Õ*ð ©sñ r0   c                ób  € V P                   '       gQ   \        P                  ! \        P                  4      V n        \        P
                  ! V P                  4       R V n         \        P                  ! V P                  4      ;_uu_ 4        V! 4       uuRRR4       #   + '       g   i     R# ; i©TN)rz   ÚmxÚ
new_streamÚgpury   Úset_default_streamÚstream)r+   r€   s   &&r-   Ú_runÚMLXWorkScheduler._runz   sc   € Ø× × Ð ÜŸ=š=¬¯©Ó0ˆDŒLÜ×!Ò! $§,¡,Ô/Ø $ˆDÔÜ�YŠY�t—|‘|×$Õ$Ù“6÷ %×$×$Ó$ús   ÂBÂB.	c                ó:   <€ V ^8„  d   QhRS[ . S[3,          RS[/# r   r‚   )r   rX   s   "€r-   rY   rƒ   ‚   s(   ø€ ÷ Kñ K™h r©3 wÕ/ð K±Cñ Kr0   c              ƒ  ó–   "  € \         P                  ! 4       pVP                  V P                  V P                  V4      G R j  x€L
 #  L5i©N)ÚasyncioÚget_running_loopÚrun_in_executorrx   r‹   )r+   r€   Úloops   && r-   ÚrunÚMLXWorkScheduler.run‚   s6   é € Ü×'Ò'Ó)ˆØ×)Ñ)¨$¯.©.¸$¿)¹)ÀTÓJ×JÐJÑJùs   ‚A A	ÁAÁA	c                ó   <€ V ^8„  d   QhRR/# ©r2   r�   Nrl   )r   rX   s   "€r-   rY   rƒ   †   s   ø€ ÷ )ñ )˜dñ )r0   c                óf   € V P                   e#   \        P                  ! V P                   4       R # R # r�   )ry   r†   Úsynchronizer{   s   &r-   Ú_synchronizeÚMLXWorkScheduler._synchronize†   s!   € Ø�<‰<Ò#Ü�NŠN˜4Ÿ<™<Ö(ñ $r0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   rƒ   Š   s   ø€ ÷ Añ A ñ Ar0   c              ƒ  óÒ   "  € \         P                  ! 4       pVP                  V P                  V P                  4      G R j  x€L
  V P                  P                  RRR7       R #  L#5i)NTF)ÚwaitÚcancel_futures)r�   r‘   r’   rx   rš   Úshutdown)r+   r“   s   & r-   r    ÚMLXWorkScheduler.shutdownŠ   sP   é € Ü×'Ò'Ó)ˆØ×"Ñ" 4§>¡>°4×3DÑ3DÓE×EÐEØ�‰×Ñ T¸%ÐÖ@ñ 	Fùs   ‚?A'ÁA%Á$A')rx   rz   ry   N)r[   r\   r]   r^   r_   r|   r‹   r”   rš   r    ra   rb   rc   s   @r-   rs   rs   j   s;   ø‡ € ñò"÷ð ÷Kð K÷)ð )÷Aö Ar0   rs   c                   óD   a € ] tR t^�t o V 3R lR ltV 3R lR ltRtV tR# )ÚFixedSizeAudioChunkerc                ó    <€ V ^8„  d   QhRS[ /# )r2   Ú
chunk_size©rT   )r   rX   s   "€r-   rY   Ú"FixedSizeAudioChunker.__annotate__‘   s   ø€ ÷ 5ñ 5¡3ñ 5r0   c                ó|   € \        V4      V n        \        P                  ! ^ \        P                  R7      V n        R# )r   ©ÚdtypeN)rT   r¥   ÚnpÚzerosÚfloat32Ú_buffer)r+   r¥   s   &&r-   r|   ÚFixedSizeAudioChunker.__init__‘   s#   € Ü˜j›/ˆŒÜ—x’x ¬¯©Ô4ˆŽr0   c                ó^   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          /# ©r2   Úsamplesr�   )r«   ÚndarrayÚlist)r   rX   s   "€r-   rY   r§   •   s(   ø€ ÷ 
ñ 
™BŸJ™Jð 
©4±·
±
Õ+;ñ 
r0   c                óì  € \         P                  ! V\         P                  R 7      P                  R4      pVP                  ^ 8X  d   . # \         P
                  ! V P                  V.4      V n        . pV P                  P                  ^ ,          V P                  8¼  dW   VP                  V P                  RV P                   P                  4       4       V P                  V P                  R V n        K‚  V# )r©   Néÿÿÿÿ)r«   Úasarrayr­   ÚreshapeÚsizeÚconcatenater®   Úshaper¥   ÚappendÚcopy)r+   r²   Úchunkss   && r-   ÚpushÚFixedSizeAudioChunker.push•   s¬   € Ü—*’*˜W¬B¯J©JÔ7×?Ñ?ÀÓCˆØ�<‰<˜1ÔØˆIÜ—~’~ t§|¡|°WÐ&=Ó>ˆŒàˆØ�l‰l× Ñ  Õ# t§¡Ô6Ø�M‰M˜$Ÿ,™,Ð'8¨¯©Ð9×>Ñ>Ó@ÔAØŸ<™<¨¯©Ð(9Ð:ˆDŽLØˆr0   )r®   r¥   N)r[   r\   r]   r^   r|   r¿   ra   rb   rc   s   @r-   r£   r£   �   s   ø‡ € ÷5ð 5÷
ö 
r0   r£   c                   óh   a € ] tR t^¢t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )ÚPreRollBufferc                ó    <€ V ^8„  d   QhRS[ /# )r2   Úmax_samplesr¦   )r   rX   s   "€r-   rY   ÚPreRollBuffer.__annotate__£   s   ø€ ÷ ñ ¡Cñ r0   c                óV   € \        ^ \        V4      4      V n        . V n        ^ V n        R# ©r   N)ÚmaxrT   rÄ   Ú_chunksÚ_samples)r+   rÄ   s   &&r-   r|   ÚPreRollBuffer.__init__£   s$   € Ü˜q¤# kÓ"2Ó3ˆÔØ)+ˆŒØˆŽr0   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# ©r2   r²   r�   N©r«   r³   )r   rX   s   "€r-   rY   rÅ   ¨   s   ø€ ÷ ñ ™bŸj™jð ¨Tñ r0   c                ó
  € V P                   ^ 8:  d   R# \        P                  ! V\        P                  R7      P	                  R4      pVP
                  ^ 8X  d   R# V P                  P                  VP                  4       4       V ;P                  VP
                  ,          un	        V P                  V P                   8”  dÁ   V P                  '       d­   V P                  V P                   ,
          pV P                  ^ ,          pW#P
                  8¼  dA   V P                  P                  ^ 4       V ;P                  VP
                  ,          un	        K­  W2R V P                  ^ &   V ;P                  V,          un	        R# R# R# )r   Nr©   r¶   )rÄ   r«   r·   r­   r¸   r¹   rÉ   r¼   r½   rÊ   Úpop)r+   r²   ÚextraÚfirsts   &&  r-   r¼   ÚPreRollBuffer.append¨   sÿ   € Ø×Ñ˜qÔ ÙÜ—*’*˜W¬B¯J©JÔ7×?Ñ?ÀÓCˆØ�<‰<˜1ÔÙØ�‰×Ñ˜GŸL™L›NÔ+Ø�Š˜Ÿ™Õ%�Ø�m‰m˜d×.Ñ.Ô.°4·<·<°<Ø—M‘M D×$4Ñ$4Õ4ˆEØ—L‘L •OˆEØŸ
™
Ô"Ø—‘× Ñ  Ô#Ø—’ §¡Õ+—à"'¨ -�—‘˜Q‘Ø—’ Õ&•Ùñ 4@Ñ.r0   c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©r2   r�   rÎ   )r   rX   s   "€r-   rY   rÅ   »   s   ø€ ÷ Kñ K‘R—Z‘Zñ Kr0   c                óð   € V P                   '       g'   \        P                  ! ^ \        P                  R7      # \        P                  ! V P                   4      P                  \        P                  RR7      # )r   r©   F©r½   )rÉ   r«   r¬   r­   rº   Úastyper{   s   &r-   r)   ÚPreRollBuffer.get»   sG   € Ø�|�|ˆ|Ü—8’8˜A¤R§Z¡ZÔ0Ð0Ü�~Š~˜dŸl™lÓ+×2Ñ2´2·:±:ÀEÐ2ÓJÐJr0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   rÅ   À   s   ø€ ÷ ñ �tñ r0   c                óH   € V P                   P                  4        ^ V n        R# rÇ   )rÉ   ÚclearrÊ   r{   s   &r-   rÜ   ÚPreRollBuffer.clearÀ   s   € Ø�‰×ÑÔØˆŽr0   )rÉ   rÊ   rÄ   N)
r[   r\   r]   r^   r|   r¼   r)   rÜ   ra   rb   rc   s   @r-   rÂ   rÂ   ¢   s/   ø‡ € ÷ð ÷
ð ÷&Kð K÷
ö r0   rÂ   c            
       óœ   a € ] tR t^Åt o RtRRRRRRR^R	R
/V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltR t	V 3R lR lt
RtV tR# )ÚSileroSpeechGatezCStateful speech gate using Silero VAD probabilities and hysteresis.Úsample_rater   Ústart_thresholdr   Ústop_thresholdr   Ústart_framesÚend_silence_msr   c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[ RS[ /# )r2   rà   rá   râ   rã   rä   )rT   rV   )r   rX   s   "€r-   rY   ÚSileroSpeechGate.__annotate__È   s?   ø€ ÷ ñ ñ ð	ñ
 ðñ ðñ ðñ ñr0   c          	     ó–  € Wn         W n        \        V4      V n        \        V4      V n        \        ^\        V4      4      V n        V P                  4       p\        ^\        \        VR,          V,          V,          4      4      4      V n
        \        V4      V n        V P                  4       V n        RV n        ^ V n        ^ V n        R# )ru   ç     @�@FN)Úmodelrà   rV   rá   râ   rÈ   rT   rã   Ú_chunk_sizeÚroundÚend_silence_framesr£   ÚchunkerÚ_initial_stateÚstateÚ	in_speechÚ_speech_runÚ_silence_run)r+   ré   rà   rá   râ   rã   rä   r¥   s   &&$$$$$ r-   r|   ÚSileroSpeechGate.__init__È   s«   € ð Œ
Ø&ÔÜ$ _Ó5ˆÔÜ# NÓ3ˆÔÜ ¤3 |Ó#4Ó5ˆÔØ×%Ñ%Ó'ˆ
Ü"%ØŒs”5˜.¨6Õ1°[Õ@À:ÕMÓNÓOó#
ˆÔô -¨ZÓ8ˆŒØ×(Ñ(Ó*ˆŒ
ØˆŒØˆÔØˆÖr0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   ræ   á   s   ø€ ÷ ñ �tñ r0   c                ó–   € \        V P                  4       4      V n        V P                  4       V n        R V n        ^ V n        ^ V n        R# )FN)r£   rê   rí   rî   rï   rð   rñ   rò   r{   s   &r-   ÚresetÚSileroSpeechGate.resetá   s>   € Ü,¨T×-=Ñ-=Ó-?Ó@ˆŒØ×(Ñ(Ó*ˆŒ
ØˆŒØˆÔØˆÖr0   c                óJ   <€ V ^8„  d   QhRS[ P                  RS[S[,          /# r±   )r«   r³   r´   re   )r   rX   s   "€r-   rY   ræ   è   s%   ø€ ÷ #ñ #™rŸz™zð #©dÑ3FÕ.Gñ #r0   c           
     ó˜  € . pV P                   P                  V4       EF'  pV P                  V4      pTV P                  '       d   V P                  MV P
                  8¬  pR pR pV'       d"   V ;P                  ^,          un        ^ V n        M ^ V n        V ;P                  ^,          un        V P                  '       g,   V P                  V P                  8¼  d   RV n        Rp^ V n        V P                  '       d,   V P                  V P                  8¼  d   R V n        Rp^ V n        VP                  \        VVVVR7      4       EK*  	  V# )FT)rg   rh   ri   rj   )rí   r¿   Ú_feed_probabilityrð   râ   rá   rñ   rò   rã   rì   r¼   re   )r+   r²   Ú	decisionsÚchunkrg   rh   ÚstartedÚendeds   &&      r-   ÚprocessÚSileroSpeechGate.processè   s  € Øˆ	Ø—\‘\×&Ñ& w×/ˆEØ×0Ñ0°Ó7ˆKØ#Ø'+§~§~ ~�×#Ò#¸4×;OÑ;OñˆIð ˆGØˆEçØ× Ò  AÕ%Õ Ø$%�Õ!à#$�Ô Ø×!Ò! QÕ&Õ!à—>—>�> d×&6Ñ&6¸$×:KÑ:KÔ&KØ!%�”Ø�Ø$%�Ô!à�~�~ˆ~ $×"3Ñ"3°t×7NÑ7NÔ"NØ!&�”Ø�Ø#$�Ô à×ÑÜ#Ø +Ø'Ø#*Ø$)ô	÷ñ3 0ðB Ðr0   c                ó    <€ V ^8„  d   QhRS[ /# rÕ   r¦   )r   rX   s   "€r-   rY   ræ     s   ø€ ÷ 7ñ 7™Sñ 7r0   c                ór   € \        \        V P                  R R4      RR4      p\        \        VRR4      4      # )ÚconfigNÚ
branch_16kr¥   i   )Úgetattrré   rT   )r+   Úbranchs   & r-   rê   ÚSileroSpeechGate._chunk_size  s1   € Üœ §¡¨X°tÓ<¸lÈDÓQˆÜ”7˜6 <°Ó5Ó6Ð6r0   c                óŠ   € \        V P                  R 4      '       d'   V P                  P                  V P                  R7      # R# )Úinitial_state©rà   N)Úhasattrré   r	  rà   r{   s   &r-   rî   ÚSileroSpeechGate._initial_state  s4   € Ü�4—:‘:˜×/Ò/Ø—:‘:×+Ñ+¸×8HÑ8HÐ+ÓIÐIÙr0   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r2   rü   r�   )r«   r³   rV   )r   rX   s   "€r-   rY   ræ     s   ø€ ÷ =ñ =¡r§z¡zð =±eñ =r0   c                ó2  € V P                   P                  WP                  V P                  R 7      w  q n        \	        VR4      '       d   \        VP                  4       4      # \        \        P                  ! V4      P                  R4      ^ ,          4      # )r
  Úitemr¶   )
ré   Úfeedrï   rà   r  rV   r  r«   r·   r¸   )r+   rü   rg   s   && r-   rú   Ú"SileroSpeechGate._feed_probability  st   € Ø"&§*¡*§/¡/Ø—:‘:¨4×+;Ñ+;ð #2ó #
Ñˆ”Zô �; ×'Ò'Ü˜×)Ñ)Ó+Ó,Ð,Ü”R—Z’Z Ó,×4Ñ4°RÓ8¸Õ;Ó<Ð<r0   )rò   rñ   rí   rì   rð   ré   rà   rã   rá   rï   râ   N)r[   r\   r]   r^   r_   r|   rö   rÿ   rê   rî   rú   ra   rb   rc   s   @r-   rß   rß   Å   sr   ø‡ € ÙMðð "ð	ð
 "&ðð !$ðð ðð "÷ò ÷2ð ÷#ð #÷J7ð 7ò÷
=ö =r0   rß   c                   óP   a € ] tR tRt o RRRR/V 3R lR lltV 3R lR	 ltR
tV tR# )ÚSmartTurnEndpointDetectori  rà   r   Ú	thresholdNc                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )r2   rà   r  )rT   r   rV   )r   rX   s   "€r-   rY   Ú&SmartTurnEndpointDetector.__annotate__   s%   ø€ ÷ 	#ñ 	#ñ ð		#ñ
 ™E•?ñ	#r0   c               ó*   € Wn         W n        W0n        R # r�   ©ré   rà   r  )r+   ré   rà   r  s   &&$$r-   r|   Ú"SmartTurnEndpointDetector.__init__   s   € ð Œ
Ø&ÔØ"Žr0   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r2   Úaudior�   )r«   r³   rn   )r   rX   s   "€r-   rY   r  +  s    ø€ ÷ 
ñ 
™RŸZ™Zð 
Ñ,<ñ 
r0   c                óÊ   € V P                   P                  WP                  V P                  R 7      p\	        \        VP                  4      \        VP                  4      R7      # )©rà   r  )rp   rg   )	ré   Úpredict_endpointrà   r  rn   rW   Ú
predictionrV   rg   )r+   r  Úresults   && r-   ÚpredictÚ!SmartTurnEndpointDetector.predict+  sT   € Ø—‘×,Ñ,Ø×/Ñ/¸4¿>¹>ð -ó 
ˆô  Ü˜&×+Ñ+Ó,¼%À×@RÑ@RÓ:Sô
ð 	
r0   r  )r[   r\   r]   r^   r|   r!  ra   rb   rc   s   @r-   r  r    s-   ø‡ € ð	#ð "ð		#ð
 &*÷	#ò 	#÷
ö 
r0   r  c                   óÖ   a € ] tR tRt o RRR^RRRR/V 3R	 lR
 llt]V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltR^`/V 3R lR lltRtV tR# )ÚVoxtralRealtimeTranscriberi4  Útranscription_delay_msr#   Úmax_decode_tokens_per_stepÚmax_turn_tokensr   rS   Fc                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[/# )r2   r%  r&  r'  rS   ©rT   rW   )r   rX   s   "€r-   rY   Ú'VoxtralRealtimeTranscriber.__annotate__5  s5   ø€ ÷ /ñ /ñ !$ð	/ñ
 %(ð/ñ ð/ñ ñ/r0   c               óˆ   € Wn         W n        W0n        W@n        WPn        R V n        RV n        ^ V n        RV n        RV n	        R # ©NÚ ç        F)
ré   r%  r&  r'  rS   ÚsessionÚtextÚlast_finish_stepsÚlast_finish_secondsÚlast_finish_hit_max_steps)r+   ré   r%  r&  r'  rS   s   &&$$$$r-   r|   Ú#VoxtralRealtimeTranscriber.__init__5  sF   € ð Œ
Ø&<Ô#Ø*DÔ'Ø.ÔØŒØˆŒØˆŒ	Ø!"ˆÔØ#&ˆÔ Ø).ˆÖ&r0   c                ó    <€ V ^8„  d   QhRS[ /# rÕ   ©rW   )r   rX   s   "€r-   rY   r*  J  s   ø€ ÷ Uñ U™ñ Ur0   c                óf   € V P                   R J;'       d    \        V P                   RR4      '       * # )NÚdoneF)r/  r  r{   s   &r-   ÚactiveÚ!VoxtralRealtimeTranscriber.activeI  s)   € à�|‰| 4Ð'×TÐT´¸¿¹ÀfÈeÓ0TÔ,TÐTr0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   r*  M  s   ø€ ÷ /ñ /�tñ /r0   c                óª   € V P                   P                  V P                  V P                  R 7      V n        RV n        ^ V n        RV n        RV n        R# ))Ú
max_tokensr%  r-  r.  FN)	ré   Úcreate_streaming_sessionr'  r%  r/  r0  r1  r2  r3  r{   s   &r-   ÚstartÚ VoxtralRealtimeTranscriber.startM  sP   € Ø—z‘z×:Ñ:Ø×+Ñ+Ø#'×#>Ñ#>ð ;ó 
ˆŒð ˆŒ	Ø!"ˆÔØ#&ˆÔ Ø).ˆÖ&r0   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# rÍ   rÎ   )r   rX   s   "€r-   rY   r*  W  s#   ø€ ÷ Mñ M™BŸJ™Jð M¨4ñ Mr0   c                ó  € V P                   e   \        V P                   RR4      '       d   V P                  4        V P                   P                  \        P
                  ! V\        P                  R7      P                  R4      4       R # )Nr8  Fr©   r¶   )r/  r  r?  r  r«   r·   r­   r¸   )r+   r²   s   &&r-   r  ÚVoxtralRealtimeTranscriber.feedW  sS   € Ø�<‰<Ò¤7¨4¯<©<¸À×#GÒ#GØ�J‰JŒLØ�‰×Ñœ"Ÿ*š* W´B·J±JÔ?×GÑGÈÓKÖLr0   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rÕ   )r´   rU   )r   rX   s   "€r-   rY   r*  \  s   ø€ ÷ ñ ‘d™3•iñ r0   c                ó¶   € V P                   f   . # V P                   P                  V P                  R7      pV F  pV ;P                  V,          un        K  	  V# )N)Úmax_decode_tokens)r/  Ústepr&  r0  ©r+   ÚdeltasÚdeltas   &  r-   rG  ÚVoxtralRealtimeTranscriber.step\  sK   € Ø�<‰<ÒØˆIØ—‘×"Ñ"°T×5TÑ5TÐ"ÓUˆÛˆEØ�IŠI˜Õ�Iñ àˆr0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   r*  d  s   ø€ ÷ !ñ !�tñ !r0   c                óZ   € V P                   e   V P                   P                  4        R # R # r�   )r/  Úcloser{   s   &r-   rN  Ú VoxtralRealtimeTranscriber.closed  s!   € Ø�<‰<Ò#Ø�L‰L×ÑÖ ñ $r0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   r*  h  s   ø€ ÷ /ñ /�tñ /r0   c                óœ   € V P                   e   V P                   P                  4        R V n         RV n        ^ V n        RV n        RV n        R # r,  )r/  rN  r0  r1  r2  r3  r{   s   &r-   rö   Ú VoxtralRealtimeTranscriber.reseth  sB   € Ø�<‰<Ò#Ø�L‰L×ÑÔ ØˆŒØˆŒ	Ø!"ˆÔØ#&ˆÔ Ø).ˆÖ&r0   Ú	max_stepsc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r2   rS  r�   )rT   rU   )r   rX   s   "€r-   rY   r*  q  s   ø€ ÷ ñ ¡3ð ±ñ r0   c               óÂ  € V P                   f   V P                  P                  4       # \        P                  ! 4       pV P                  4        ^ p\        V P                   RR4      '       g"   W18  d   V P                  4        V^,          pK>  W0n        \        P                  ! 4       V,
          V n	        W18¬  ;'       d    \        V P                   RR4      '       * V n
        V P                  '       dK   V P                  '       d9   \        P                  RV\        V P                  P                  4       4      4       V P                  P                  4       pR V n         V# )Nr8  Tz:event=voxtral_finalization_max_steps max_steps=%s chars=%s)r/  r0  ÚstripÚtimeÚ	monotonicrN  r  rG  r1  r2  r3  rS   ÚloggerÚwarningÚlen)r+   rS  Ú
start_timeÚstepsÚ
final_texts   &$   r-   ÚfinishÚ!VoxtralRealtimeTranscriber.finishq  s  € Ø�<‰<ÒØ—9‘9—?‘?Ó$Ð$Ü—^’^Ó%ˆ
Ø�
‰
ŒØˆÜ˜$Ÿ,™,¨°×5Ò5¸%Ô:KØ�I‰IŒKØ�Q�JŠEØ!&ÔÜ#'§>¢>Ó#3°jÕ#@ˆÔ Ø).Ñ);÷ *
ð *
ÄGØ�L‰L˜& $óE
ô A
ˆÔ&ð �<�<ˆ<˜D×:×:Ð:Ü�N‰NØLØÜ�D—I‘I—O‘OÓ%Ó&ôð
 —Y‘Y—_‘_Ó&ˆ
ØˆŒØÐr0   )
r3  r2  r1  r&  r'  ré   r/  r0  r%  rS   N)r[   r\   r]   r^   r|   Úpropertyr9  r?  r  rG  rN  rö   r_  ra   rb   rc   s   @r-   r$  r$  4  s—   ø‡ € ð/ð '*ð	/ð
 +,ð/ð  #ð/ð ÷/ò /ð( ÷Uó ðU÷/ð /÷Mð M÷
ð ÷!ð !÷/ð /ð¨÷ ÷ ð r0   r$  c                   óZ   a € ] tR tRt o V 3R lR ltV 3R lR ltR
V 3R lR lltR	tV tR# )ÚLocalLLMResponseEngineiŠ  c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r2   Ú
model_namerF   ©rU   )r   rX   s   "€r-   rY   Ú#LocalLLMResponseEngine.__annotate__‹  s   ø€ ÷ ñ ¡3ð ¹#ñ r0   c               ó:   € Wn         W n        R V n        R V n        R # r�   )re  rF   ÚllmÚ	tokenizer)r+   re  rF   s   &&$r-   r|   ÚLocalLLMResponseEngine.__init__‹  s   € Ø$ŒØ*ÔØˆŒØˆŽr0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   rg  ‘  s   ø€ ÷ =ñ =�dñ =r0   c                óJ   € \        V P                  4      w  V n        V n        R # r�   )Úload_llmre  ri  rj  r{   s   &r-   r   ÚLocalLLMResponseEngine.load‘  s   € Ü#+¨D¯O©OÓ#<Ñ ˆŒ�$–.r0   Nc                óL   <€ V ^8„  d   QhRS[ RS[S[S[,          ,          RS[ /# )r2   Ú
transcriptÚcontextr�   )rU   r   r´   Údict)r   rX   s   "€r-   rY   rg  ”  s1   ø€ ÷ 
Vñ 
V¡3ð 
V±¹$¹t½*Õ1Eð 
VÑQTñ 
Vr0   c                óx  € V P                   e   V P                  f   V P                  4        RRRV P                  /.pV'       d   VP	                  V4       VP                  RRRV/4       V P                  P                  VRRRR7      p\        V P                   V P                  VRR7      P                  4       # )	NÚroleÚsystemÚcontentÚuserFT)ÚtokenizeÚenable_thinkingÚadd_generation_prompt)rS   )	ri  rj  r   rF   Úextendr¼   Úapply_chat_templateÚgenerate_textrV  )r+   rq  rr  ÚmessagesÚprompts   &&&  r-   r	   ÚLocalLLMResponseEngine.generate”  s    € Ø�8‰8Ò˜tŸ~™~Ò5Ø�I‰IŒKØ˜X y°$×2DÑ2DÐEÐFˆßØ�O‰O˜GÔ$Ø�‰˜ ¨°JÐ?Ô@Ø—‘×3Ñ3Ø˜u°eÐSWð 4ó 
ˆô ˜TŸX™X t§~¡~°vÀuÔM×SÑSÓUÐUr0   )ri  re  rF   rj  r�   )	r[   r\   r]   r^   r|   r   r	   ra   rb   rc   s   @r-   rc  rc  Š  s+   ø‡ € ÷ð ÷=ð =÷
V÷ 
Vð 
Vr0   rc  c                   óT   a € ] tR tRt o RRRRRR/V 3R lR	 lltV 3R
 lR ltRtV tR# )ÚPocketTTSResponderi¡  Úvoicer   Ústreaming_intervalr%   ÚtemperatureNc                ó<   <€ V ^8„  d   QhRS[ RS[RS[S[,          /# )r2   r„  r…  r†  )rU   rV   r   )r   rX   s   "€r-   rY   ÚPocketTTSResponder.__annotate__¢  s4   ø€ ÷ Pñ Pñ ð	Pñ
 "ðPñ ™e•_ñPr0   c               ó€   € Wn         W n        W0n        W@n        \	        \        VR R4      ;'       g    R4      V n        R# )rà   iÀ]  N)ré   r„  r…  r†  rT   r  rà   )r+   ré   r„  r…  r†  s   &&$$$r-   r|   ÚPocketTTSResponder.__init__¢  s8   € ð Œ
ØŒ
Ø"4ÔØ&ÔÜœw u¨m¸VÓD×NÐNÈÓOˆÖr0   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# ©r2   r0  r�   )rU   r   r   )r   rX   s   "€r-   rY   rˆ  °  s   ø€ ÷ 	3ñ 	3¡Sð 	3©X±c­]ñ 	3r0   c                óÂ   € R VRV P                   RRRV P                  /pV P                  e   V P                  VR&   \        V P                  P
                  ! R/ VB 4      # )r0  r„  rŠ   Tr…  r†  rl   )r„  r…  r†  Úiterré   r	   )r+   r0  Úkwargss   && r-   Úcreate_generatorÚ#PocketTTSResponder.create_generator°  sb   € à�DØ�T—Z‘ZØ�dØ  $×"9Ñ"9ð	"
ˆð ×ÑÒ'Ø$(×$4Ñ$4ˆF�=Ñ!Ü�D—J‘J×'Ò'Ñ1¨&Ñ1Ó2Ð2r0   )ré   rà   r…  r†  r„  )r[   r\   r]   r^   r|   r�  ra   rb   rc   s   @r-   rƒ  rƒ  ¡  s<   ø‡ € ðPð ð	Pð
 %)ðPð (,÷Pò P÷	3ö 	3r0   rƒ  c                   óÒ   a € ] tR tRt o RRRR/V 3R lR lltV 3R lR	 ltR
R/V 3R lR llt]V 3R lR l4       tV 3R lR lt	RV 3R lR llt
V 3R lR ltV 3R lR ltRtV tR# )ÚAudioOutputStreami¼  ÚenabledTÚevent_callbackNc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r2   rà   r”  r)  )r   rX   s   "€r-   rY   ÚAudioOutputStream.__annotate__½  s   ø€ ÷ 
ñ 
¡sð 
±Tñ 
r0   c               ób   € W n         Wn        V'       d   \        WR 7      V n        R# RV n        R# ))rà   r•  N)r”  rà   r   Úplayer)r+   rà   r”  r•  s   &$$$r-   r|   ÚAudioOutputStream.__init__½  s/   € ØŒØ&Ô÷ ô  KÔOð 	Žð ð 	Žr0   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# rÕ   ©rs  rU   r   )r   rX   s   "€r-   rY   r—  Æ  s   ø€ ÷ ñ ¡D©©c¨¥Nñ r0   c                óä  € V P                  V4      pV P                  f,   RRRV P                  RVRW P                  ,          R,          /# V P                  P                  pV P                  P	                  V4       V P                  P                  4       pRRRV P                  P                  R	V'       * ;'       d    V P                  P                  RV P                  RVRW P                  ,          R,          R
VRW@P                  ,          R,          /p\        V P                  R4      '       d>   V P                  P                  4       VR&   V P                  P                  R,          VR&   V# )NÚplayer_enabledFrà   r²   Úduration_msrè   TÚplayer_playingÚplayer_startedÚbuffered_samplesÚbuffered_msÚstart_buffer_samplesÚstart_buffer_ms)	Ú_sample_countr™  rà   ÚplayingÚqueue_audior¢  r  r¤  Ústart_buffer_seconds)r+   r  r²   Úwas_playingr¢  Ústatuss   &&    r-   r¨  ÚAudioOutputStream.queue_audioÆ  s@  € Ø×$Ñ$ UÓ+ˆØ�;‰;Òà  %Ø˜t×/Ñ/Ø˜7Ø˜w×)9Ñ)9Õ9¸FÕBð	ð ð —k‘k×)Ñ)ˆØ�‰×Ñ Ô&ØŸ;™;×7Ñ7Ó9Ðà˜dØ˜dŸk™k×1Ñ1Ø +œo×EÐE°$·+±+×2EÑ2EØ˜4×+Ñ+Ø�wØ˜7×%5Ñ%5Õ5¸Õ>ØÐ 0ØÐ+×.>Ñ.>Õ>ÀÕGð	
ˆô �4—;‘;Ð 6×7Ò7Ø-1¯[©[×-MÑ-MÓ-OˆFÐ)Ñ*Ø(,¯©×(HÑ(HÈ6Õ(QˆFÐ$Ñ%Øˆr0   ÚforceFc                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# rÕ   rœ  )r   rX   s   "€r-   rY   r—  á  s   ø€ ÷ 
ñ 
¹DÁÁcÀ½Nñ 
r0   c               ó®  € V P                   f   RRRRRRRV P                  R^ RRR	V/# \        V P                   R
4      '       d   V P                   P                  VR7      # RRRV P                   P                  RRRV P                  RV P                   P                  4       RV P                   P                  4       V P                  ,          R,          R	V/# )Nrž  Fr   r¡  rà   r¢  r£  r.  ÚforcedÚstart_if_buffered©r­  Trè   )r™  rà   r  r±  r§  r¢  )r+   r­  s   &$r-   Ústart_playback_if_bufferedÚ,AudioOutputStream.start_playback_if_bufferedá  sÒ   € Ø�;‰;Òà  %Ø  %Ø  %Ø˜t×/Ñ/Ø" AØ˜sØ˜%ðð ô �4—;‘;Ð 3×4Ò4Ø—;‘;×0Ñ0°uÐ0Ó=Ð=à˜dØ˜dŸk™k×1Ñ1Ø˜eØ˜4×+Ñ+Ø §¡× <Ñ <Ó >Ø˜4Ÿ;™;×7Ñ7Ó9¸D×<LÑ<LÕLÈvÕUØ�eð
ð 	
r0   c                ó    <€ V ^8„  d   QhRS[ /# rÕ   r¦   )r   rX   s   "€r-   rY   r—  ù  s   ø€ ÷ !ñ !¡ñ !r0   c                ó¼  € \         P                  ! V 4      pVP                  ^ 8X  d   ^# VP                  ^8X  d   \        VP                  ^ ,          4      # VP                  ^8X  dâ   VP                  ^,          ^8X  d   \        VP                  ^ ,          4      # VP                  ^ ,          ^8X  d   \        VP                  ^,          4      # VP                  ^ ,          ^8:  dF   VP                  ^ ,          VP                  ^,          8  d   \        VP                  ^,          4      # \        VP                  ^ ,          4      # \        VP
                  4      # )r   )r«   r·   ÚndimrT   r»   r¹   )r  r²   s   & r-   r¦  ÚAudioOutputStream._sample_countø  sö   € ä—*’*˜UÓ#ˆØ�<‰<˜1ÔÙØ�<‰<˜1ÔÜ�w—}‘} QÕ'Ó(Ð(Ø�<‰<˜1ÔØ�}‰}˜QÕ 1Ô$Ü˜7Ÿ=™=¨Õ+Ó,Ð,Ø�}‰}˜QÕ 1Ô$Ü˜7Ÿ=™=¨Õ+Ó,Ð,Ø�}‰}˜QÕ 1Ô$¨¯©°qÕ)9¸G¿M¹MÈ!Õ<LÔ)LÜ˜7Ÿ=™=¨Õ+Ó,Ð,Ü�w—}‘} QÕ'Ó(Ð(Ü�7—<‘<Ó Ð r0   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# rÕ   rœ  )r   rX   s   "€r-   rY   r—  	  s   ø€ ÷ 
ñ 
‘t™C¡˜H•~ñ 
r0   c                óf   € V P                   e   V P                   P                  4       # RRR^ RRRR /# )Nrª  Fr¢  r£  r.  Úlast_output_age_ms)r™  Úflushr{   s   &r-   r¼  ÚAudioOutputStream.flush	  s=   € Ø�;‰;Ò"Ø—;‘;×$Ñ$Ó&Ð&à˜5Ø Ø˜3Ø  $ð	
ð 	
r0   c                óL   <€ V ^8„  d   QhRS[ S[,          RS[S[S[3,          /# )r2   Únow_msr�   ©r   rV   rs  rU   r   )r   rX   s   "€r-   rY   r—    s'   ø€ ÷ 9ñ 9¡X©e¥_ð 9ÁÁSÉ#ÀXÅñ 9r0   c                óŠ   € V P                   f   RRRRRV P                  R^ RRRR R	R /# V P                   P                  VR
7      # )Nrž  Fr   rà   r¢  r£  r.  Ú!last_output_callback_monotonic_msr»  ©r¿  )r™  rà   Úplayback_state)r+   r¿  s   &&r-   rÄ  Ú AudioOutputStream.playback_state  sY   € Ø�;‰;Òà  %Ø  %Ø˜t×/Ñ/Ø" AØ˜sØ3°TØ$ dðð ð �{‰{×)Ñ)°Ð)Ó8Ð8r0   c                ón   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[RS[RS[RS[S[S[3,          /# )r2   r²   r3   Úinput_end_msÚmin_delay_msÚmax_delay_msÚstep_msr�   )r«   r³   rT   rV   rs  rU   r   )r   rX   s   "€r-   rY   r—     s]   ø€ ÷ 
ñ 
á—‘ð
ñ ð	
ñ
 ð
ñ ð
ñ ð
ñ ð
ñ 
‰c‘3ˆh�ñ
r0   c          	     óp   € V P                   f	   RRRR RR /# V P                   P                  VVVVVVR7      # )NÚcorrelationr.  Údelay_msÚmethod©r3   rÇ  rÈ  rÉ  rÊ  )r™  Úecho_correlation)r+   r²   r3   rÇ  rÈ  rÉ  rÊ  s   &&$$$$$r-   rÐ  Ú"AudioOutputStream.echo_correlation   sO   € ð �;‰;ÒØ! 3¨
°D¸(ÀDÐIÐIØ�{‰{×+Ñ+ØØ/Ø%Ø%Ø%Øð ,ó 
ð 	
r0   c                ó   <€ V ^8„  d   QhRR/# r—   rl   )r   rX   s   "€r-   rY   r—  5  s   ø€ ÷ ñ �dñ r0   c                óZ   € V P                   e   V P                   P                  4        R # R # r�   )r™  Ústopr{   s   &r-   rÔ  ÚAudioOutputStream.stop5  s!   € Ø�;‰;Ò"Ø�K‰K×ÑÖñ #r0   )r”  r™  rà   r�   )r[   r\   r]   r^   r|   r¨  r³  Ústaticmethodr¦  r¼  rÄ  rÐ  rÔ  ra   rb   rc   s   @r-   r“  r“  ¼  su   ø‡ € ð
¸Dð 
ÐQU÷ 
ò 
÷ð ð6
°%÷ 
ò 
ð. ÷!ó ð!÷ 
ð 
÷9ò 9÷
ð 
÷*ö r0   r“  c                   ó–  a € ] tR tRt o RtRLRRRRRRRRRRR	R/V 3R
 lR llltV 3R lR lt]V 3R lR l4       tV 3R lR lt	V 3R lR lt
RLV 3R lR lltRMV 3R lR lltV 3R lR lt]V 3R lR l4       tV 3R lR lt]V 3R lR l4       tR  tR! tR" tV 3R# lR$ ltR% tV 3R& lR' ltV 3R( lR) ltV 3R* lR+ ltV 3R, lR- ltRLV 3R. lR/ lltR0RR1RR2R/V 3R3 lR4 lltR0R/V 3R5 lR6 lltV 3R7 lR8 ltV 3R9 lR: ltV 3R; lR< ltR= t R> t!R? t"R@ t#RA t$V 3RB lRC lt%V 3RD lRE lt&V 3RF lRG lt'V 3RH lRI lt(RJ t)RKt*V t+R# )NÚVoicePipelinei:  zLRealtime voice assistant pipeline using Voxtral Realtime STT and Pocket TTS.NÚspeech_gateÚendpoint_detectorÚtranscriberÚresponse_engineÚtts_responderÚaudio_outputc                óˆ   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          /# )r2   r  rÛ  rÜ  rÝ  rÞ  )r   r   r$  r   rƒ  r“  )r   rX   s   "€r-   rY   ÚVoicePipeline.__annotate__=  sY   ø€ ÷ +7ñ +7áÑ,Õ-ð+7ñ Ñ8Õ9ð+7ñ "¡#�ð+7ñ  Ñ 2Õ3ð+7ñ Ñ0Õ1ñ+7r0   c               óÜ  € T;'       g    \        4       V n        W n        W0n        W@n        WPn        W`n        Wpn        \        P                  ! V P                  P                  R 7      V n        \        P                  ! 4       V n        \        P                  ! V P                  P                  R 7      V n        \        4       V n        RV n        RV n        RV n        RV n        . V n        . V n        RV n        RV n        RV n        RV n        RV n        RV n        \9        V P                  P:                  V P                  P<                  ,          R,          4      p\?        V4      V n         R# ))ÚmaxsizeNr-  Frè   )!r   r  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  r�   ÚQueuerR   Úinput_audio_queueÚtranscript_queueÚoutput_audio_queuers   Úmlxr“   Ú_current_tts_taskÚ_current_tts_cancelÚ_current_response_textÚ_conversationÚ_turn_audioÚ_turn_started_atÚ_candidate_silence_started_atÚ_barge_candidate_started_atÚ_barge_candidate_reasonÚ_barge_candidate_waiting_loggedÚ_tts_output_started_loggedrT   r3   rA   rÂ   Ú_preroll)	r+   r  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  Úpreroll_sampless	   &&$$$$$$ r-   r|   ÚVoicePipeline.__init__=  s+  € ð ×5Ð5Ô 3Ó 5ˆŒØ&ÔØ!2ÔØ&ÔØ.ÔØ*ÔØ(Ôä<C¿MºMØ—K‘K×*Ñ*ô=
ˆÔô 5<·M²M³OˆÔÜ=D¿]º]Ø—K‘K×*Ñ*ô>
ˆÔô $Ó%ˆŒØ9=ˆŒ	à9=ˆÔØ<@ˆÔ Ø&(ˆÔ#Ø)+ˆÔØ-/ˆÔØ15ˆÔØ>BˆÔ*Ø<@ˆÔ(Ø6:ˆÔ$Ø/4ˆÔ,Ø*/ˆÔ'ÜØ�K‰K×)Ñ)¨D¯K©K×,BÑ,BÕBÀVÕKó
ˆô & oÓ6ˆŽr0   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r2   ÚeventÚfieldsr�   N)rU   r   )r   rX   s   "€r-   rY   rà  j  s"   ø€ ÷ 
'ñ 
'¡ð 
'©sð 
'°tñ 
'r0   c                ó  a € S P                   P                  '       g   R # V'       dB   RP                  V 3R lVP                  4        4       4      p\        P                  RW4       R # \        P                  RV4       R # )NÚ c              3   óT   <"  € T F  w  rV R SP                  V4       2x € K  	  R# 5i)Ú=N)Ú_format_log_value)Ú.0ÚkeyÚvaluer+   s   &  €r-   Ú	<genexpr>Ú+VoicePipeline._log_event.<locals>.<genexpr>n  s1   øé € ð 'á"0‘J�Cð �%�q˜×/Ñ/°Ó6Ð7Õ8Û"0ùs   ƒ%(zevent=%s %szevent=%s)r  rS   ÚjoinÚitemsrY  Úinfo)r+   rø  rù  Úrendered_fieldss   f&, r-   Ú
_log_eventÚVoicePipeline._log_eventj  s[   ø€ Ø�{‰{×"×"Ð"ÙßØ!Ÿh™hô 'à"(§,¡,¤.ó'ó ˆOô �K‰K˜ uÔ>ÙÜ�‰�J Ö&r0   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r2   r  r�   )r   rU   )r   rX   s   "€r-   rY   rà  w  s   ø€ ÷ ñ ¡ð ©ñ r0   c                ót  € \        V \        4      '       d   \        V 4      P                  4       # \        V \        4      '       d   V R  # \        V \        4      '       dP   V '       d;   \
        ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       d   \        V 4      # T # \        V 4      # )z.3fc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir�   )Úisspace)rÿ  Úchars   & r-   r  Ú2VoicePipeline._format_log_value.<locals>.<genexpr>  s   é € Ð#E¹u°t§L¡L§N N»uùs   ‚TF)Ú
isinstancerW   rU   r'   rV   ÚanyÚrepr)r  s   &r-   rþ  ÚVoicePipeline._format_log_valuev  s�   € ä�eœT×"Ò"Ü�u“:×#Ñ#Ó%Ð%Ü�eœU×#Ò#Ø˜C�[Ð!Ü�eœS×!Ò!÷ §£Ñ#E¹uÓ#E§§¢Ñ#E¹uÓ#E× EÒ Eô �U“ðð ðô
 �5‹zÐr0   c                ó:   <€ V ^8„  d   QhRS[ S[,          RS[RR/# )r2   rû   Únowr�   N)r´   re   rV   )r   rX   s   "€r-   rY   rà  „  s+   ø€ ÷ 
ñ 
ÙÑ1Õ2ð
Ù9>ð
à	ñ
r0   c                ó�  € V P                   P                  '       d	   V'       g   R # \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      pV'       g   R # VR,          p\        R V 4       4      pT P	                  RVR,          VP
                  T\        V4      \        R V 4       4      \        \        V P                  RR4      4      \        ;QJ d    R	 V 4       F  '       g   K   RM	  RM! R	 V 4       4      \        ;QJ d    R
 V 4       F  '       g   K   RM	  RM! R
 V 4       4      R7	       R # )Nc              3   ób   "  € T F%  pVP                   ;'       g    VP                  x € K'  	  R # 5ir�   )ri   rj   ©rÿ  Údecisions   & r-   r  Ú3VoicePipeline._log_vad_decisions.<locals>.<genexpr>‰  s.   é € ð 
á%�ð ×#Ñ#×?Ð? x×'?Ñ'?Ô?Û%ùs   ‚/š/TFc              3   ó8   "  € T F  qP                   x € K  	  R # 5ir�   )rg   r  s   & r-   r  r  �  s   é € ÐMÁ9°x×2Ö2Ã9ùó   ‚Úvadrè   c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir�   )rh   r  s   & r-   r  r  —  s   é € ÐKÁ°X×0Ö0Ãùr  rð   c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir�   )ri   r  s   & r-   r  r  ™  s   é € ÐQÁy¸8×6Ö6Ãyùr  c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir�   )rj   r  s   & r-   r  r  š  s   é € ÐSÉ¸X× 8Ö 8Ëùr  )Úmonotonic_msrg   Úmax_probabilityÚframesÚspeech_framesrð   ri   rj   r¶   )r  rS   r  rÈ   r  rg   r[  ÚsumrW   r  rÙ  )r+   rû   r  Úhas_transitionÚlastr"  s   &&&   r-   Ú_log_vad_decisionsÚ VoicePipeline._log_vad_decisions„  sõ   € ð �{‰{×"×"Ð"¯)Ùß›ñ 
á%ó
ŸŸšñ 
á%ó
ó 
ˆ÷ ÙØ˜�}ˆÜÑMÁ9ÓMÓMˆØ�‰ØØ˜v�Ø×(Ñ(Ø+Ü�y“>ÜÑKÁÓKÓKÜœ7 4×#3Ñ#3°[À%ÓHÓIß›3ÑQÁyÓQŸ3Ÿ3š3ÑQÁyÓQÓQß›CÑSÉÓSŸCŸCšCÑSÉÓSÓSð 	ö 
	
r0   c                ó@   <€ V ^8„  d   QhRS[ RS[S[ S[3,          RR/# r÷  )rU   rs  r   )r   rX   s   "€r-   rY   rà  �  s*   ø€ ÷ 1ñ 1©Cð 1¹¹cÁ3¸h½ð 1ÈDñ 1r0   c                óô  a aa€ S P                   P                  '       g   R # SR8X  d5   S P                  '       d   VP                  R4      '       g   R # RS n        Ro\	        V4      oSP                  R\        P                  ! 4       R,          4       S P                  eD   S P                  P                  4       '       d$   S P                  P                  VVV 3R l4       R # S P                  ! S3/ SB  R # )NÚtts_output_callbackr«  TÚtts_output_startedr!  rè   c                  ó*   <€ SP                   ! S 3/ SB # r�   )r  )rø  Ú
log_fieldsr+   s   €€€r-   Ú<lambda>Ú6VoicePipeline._handle_playback_event.<locals>.<lambda>¨  s   ø€ °4·?²?À5Ñ3WÈJÒ3Wr0   )r  rS   rò  r)   rs  Ú
setdefaultrW  rX  r“   Ú
is_runningÚcall_soon_threadsafer  )r+   rø  rù  r/  s   ff&@r-   Ú_handle_playback_eventÚ$VoicePipeline._handle_playback_event�  s®   ú€ Ø�{‰{×"×"Ð"ÙØÐ)Ô)Ø×.×.Ð.°v·z±zÀ(×7KÒ7KÙØ.2ˆDÔ+Ø(ˆEÜ˜&“\ˆ
Ø×Ñ˜n¬d¯nªnÓ.>ÀÕ.GÔHØ�9‰9Ò  T§Y¡Y×%9Ñ%9×%;Ò%;Ø�I‰I×*Ñ*Ö+WÖXà�OŠO˜EÑ0 ZÔ0r0   c                óL   <€ V ^8„  d   QhRS[ S[,          RS[S[S[3,          /# )r2   r  r�   rÀ  )r   rX   s   "€r-   rY   rà  ¬  s'   ø€ ÷ ?ñ ?¡8©E¥?ð ?¹dÁ3ÉÀ8½nñ ?r0   c           
     óê   € Ve   TM\         P                  ! 4       R,          pV P                  e   \        V P                  R4      '       g   RRRRR^ RRR	R /# V P                  P	                  VR
7      # )Nrè   rÄ  rž  Fr   r¢  r£  r.  r»  rÃ  )rW  rX  rÞ  r  rÄ  )r+   r  r¿  s   && r-   Ú_playback_stateÚVoicePipeline._playback_state¬  s~   € Øš‘#¬d¯nªnÓ.>À&ÕHˆØ×ÑÒ$¬GØ×ÑÐ/÷-
ò -
ð ! %Ø  %Ø" AØ˜sØ$ dðð ð × Ñ ×/Ñ/°vÐ/Ó>Ð>r0   c                ób   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[ S[,          RS[/# )r2   rï   r  r�   )r   rs  rU   r   rV   rW   )r   rX   s   "€r-   rY   rà  º  s;   ø€ ÷ Bñ BÙ™d¡3© 8�nÕ-ðBÙ;CÁE½?ðBá	ñBr0   c                ó   € T;'       g    V P                  V4      pVP                  R 4      pVRJ;'       d4    R\        V4      u;8*  ;'       d    V P                  P                  8*  Mu p\        VP                  R4      ;'       g    T4      # )r»  Nr   g      IÀ)r9  r)   rV   r  rL   rW   )r+   rï   r  r»  Úrecent_outputs   &&&  r-   Ú_playback_echo_window_activeÚ*VoicePipeline._playback_echo_window_activeº  sŠ   € ð ×2Ð2˜×-Ñ-¨cÓ2ˆØ"ŸY™YÐ';Ó<Ðà dÐ*÷ 3ð 3ØÜÐ'Ó(÷3ô 3à�{‰{×2Ñ2ô3ð 	ô �E—I‘IÐ.Ó/×@Ð@°=ÓAÐAr0   c                óV   <€ V ^8„  d   QhRS[ P                  RS[RS[S[S[3,          /# )r2   r²   r  r�   )r«   r³   rV   rs  rU   r   )r   rX   s   "€r-   rY   rà  Ç  s.   ø€ ÷ 
ñ 
©¯©ð 
¹%ð 
ÁDÉÉcÈÅNñ 
r0   c           	     óV  € V P                   e   \        V P                   R4      '       g	   RRRR RR /# V P                   P                  VV P                  P                  VR,          V P                  P
                  V P                  P                  V P                  P                  R7      # )NrÐ  rÌ  r.  rÍ  rÎ  rè   rÏ  )rÞ  r  rÐ  r  r3   rM   rN   rO   )r+   r²   r  s   &&&r-   Ú_echo_correlationÚVoicePipeline._echo_correlationÇ  s—   € Ø×ÑÒ$¬GØ×ÑÐ1÷-
ò -
ð " 3¨
°D¸(ÀDÐIÐIØ× Ñ ×1Ñ1ØØ"Ÿk™k×;Ñ;Ø˜v�ØŸ™×6Ñ6ØŸ™×6Ñ6Ø—K‘K×8Ñ8ð 2ó 
ð 	
r0   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# rŒ  rf  )r   rX   s   "€r-   rY   rà  Ö  s   ø€ ÷ @ñ @©ð @±ñ @r0   c                ój   € R P                  \        P                  ! RV P                  4       4      4      # )rû  z	[a-z0-9]+)r  ÚreÚfindallr'   ©r0  s   &r-   Ú_normalize_text_for_matchÚ'VoicePipeline._normalize_text_for_matchÕ  s"   € à�x‰xœŸ
š
 <°·±³Ó>Ó?Ð?r0   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[ 3,          /# rŒ  )rU   Útuple)r   rX   s   "€r-   rY   rà  Ù  s#   ø€ ÷ 	&ñ 	&±ð 	&¹¹sÁC¸x½ñ 	&r0   c                ó  € V P                  V4      p\        VP                  R R4      4      pW0P                  P                  8  d   R# V P                  V P
                  4      pV'       d   V P                  W$4      '       d   R# R# )rû  r-  )Ú	too_shortÚbelow_min_chars)ÚechoÚtranscript_matches_playback)Úspeechrq  )rI  r[  Úreplacer  rP   rê  Ú_looks_like_playback_text)r+   r0  Ú	candidateÚcompact_lenÚresponses   &&   r-   Ú_barge_candidate_text_statusÚ*VoicePipeline._barge_candidate_text_statusÙ  st   € Ø×2Ñ2°4Ó8ˆ	Ü˜)×+Ñ+¨C°Ó4Ó5ˆØŸ™×BÑBÔBØ1Ð1à×1Ñ1°$×2MÑ2MÓNˆß˜×6Ñ6°y×KÒKØ8Ð8Ø%Ð%r0   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r2   rU  rW  r�   )rU   rW   )r   rX   s   "€r-   rY   rà  å  s"   ø€ ÷ ñ ©Sð ¹Cð ÁDñ r0   c                ó  € V '       d	   V'       g   R # VP                  V 4      '       g   W9   d   R# V P                  4       pVP                  4       pV'       d   \        V4      \        V4      8”  d   R # \        \        V4      \        V4      ,
          ^,           4       Ff  pW4V\        V4      ,            p\        ;QJ d%    R \        W%4       4       F  '       d   K   R M	  RM! R \        W%4       4       4      '       g   Ke   R# 	  R # )FTc              3   óH   "  € T F  w  rVP                  V4      x € K  	  R # 5ir�   )Ú
startswith)rÿ  Úcandidate_tokenÚresponse_tokens   &  r-   r  Ú:VoicePipeline._looks_like_playback_text.<locals>.<genexpr>ñ  s(   é € ð á7TÑ3�Oð ×)Ñ)¨/×:Ð:Û7Tùs   ‚ ")r]  Úsplitr[  ÚrangeÚallÚzip)rU  rW  Úcandidate_tokensÚresponse_tokensÚindexÚwindows   &&    r-   rT  Ú'VoicePipeline._looks_like_playback_textä  sÓ   € ç§ÙØ×Ñ˜y×)Ò)¨YÔ-BÙà$Ÿ?™?Ó,ÐØ"Ÿ.™.Ó*ˆß¤3Ð'7Ó#8¼3¸Ó;OÔ#OÙÜœ3˜Ó/´#Ð6FÓ2GÕGÈ!ÕKÖLˆEØ$¨U´SÐ9IÓ5JÕ-JÐKˆFß‹sñ ä7:Ð;KÔ7Tó�s�sŠsñ ä7:Ð;KÔ7Tó÷ ô ò ñ Mñ r0   c              ƒ  ó€  a aa"  € S P                   f5   ^ RIHo  S P                  P	                  VV 3R l4      G R j  x€L
 S n         S P                  f5   ^ RIHo  S P                  P	                  VV 3R l4      G R j  x€L
 S n	        S P                  f�   ^ RIHo S P                  P	                  VV 3R l4      G R j  x€L
 p\        V\        S P                  P                  4      S P                  P                   S P                  P"                  S P                  P$                  R7      S n        S P&                  fr   \)        S P                  P*                  S P                  P,                  R7      S n        S P                  P	                  S P&                  P                  4      G R j  x€L
  S P.                  f�   S P                  P	                  V 3R	 l4      G R j  x€L
 p\1        VS P                  P2                  \5        S P                  P6                  4      S P                  P8                  R
7      S n        S P:                  fq   S P                  P<                  ;'       g    S P.                  P>                  p\A        \        V4      S P                  PB                  S PD                  R7      S n        R # R #  ELƒ  \
         d*   p\        RS P                  P                  : 24      ThR p?ii ; i EL{  \
         d*   p\        RS P                  P                  : 24      ThR p?ii ; i ELt ELŠ ELX5i)Nr
   c            	      ó"  <€ \        S ! SP                  P                  4      SP                  P                  SP                  P                  SP                  P
                  SP                  P                  SP                  P                  R 7      # ))rà   rá   râ   rã   rä   )rß   r  r;   r3   r<   r=   r>   r?   ©Úload_vadr+   s   €€r-   r0  Ú+VoicePipeline.init_models.<locals>.<lambda>þ  s^   ø€ Ô,Ù  §¡×!6Ñ!6Ó7Ø$(§K¡K×$AÑ$AØ(,¯©×(GÑ(GØ'+§{¡{×'EÑ'EØ%)§[¡[×%AÑ%AØ'+§{¡{×'EÑ'Eõr0   z Failed to load speech VAD model c                  ó¤   <€ \        S ! SP                  P                  4      SP                  P                  SP                  P                  R 7      # )r  )r  r  rB   r3   rC   rl  s   €€r-   r0  rn    s7   ø€ Ô5Ù  §¡×!7Ñ!7Ó8Ø$(§K¡K×$AÑ$AØ"&§+¡+×"<Ñ"<õr0   z Failed to load Smart Turn model c                  ó<   <€ S ! SP                   P                  4      # r�   )r  r7   )Úload_sttr+   s   €€r-   r0  rn    s   ø€ ©X°d·k±k×6KÑ6KÔ-Lr0   )r%  r&  r'  rS   )rF   c                  óB   <€ \        S P                  P                  4      # r�   )Úload_ttsr  rG   r{   s   €r-   r0  rn  /  s   ø€ ¬X°d·k±k×6KÑ6KÔ-Lr0   )r„  r…  r†  )rà   r”  r•  )#rÙ  Úmlx_audio.vadr   rç  r”   Ú	ExceptionÚRuntimeErrorr  r;   rÚ  rB   rÛ  Úmlx_audio.stt.utilsr$  rT   r(   r8   r9   rS   rÜ  rc  rE   rF   rÝ  rƒ  rH   rV   r*   rI   rÞ  r4   rà   r“  rQ   r5  )r+   ÚexcÚsttÚttsÚ	output_srrq  rm  s   f    @@r-   Úinit_modelsÚVoicePipeline.init_modelsø  s~  úé € Ø×ÑÒ#Ý6ðØ)-¯©¯©õó	*÷ 	$�Ô ð ×!Ñ!Ò)Ý6ðØ/3¯x©x¯|©|õó0÷ *�Ô&ð ×ÑÒ#Ý<àŸ™Ÿ™Õ%LÓM×MˆCÜ9ØÜ'*¨4¯;©;×+QÑ+QÓ'RØ+/¯;©;×+UÑ+UØ $§¡× ?Ñ ?ØŸ™×+Ñ+ô ˆDÔð ×ÑÒ'Ü#9Ø—‘×*Ñ*¸$¿+¹+×:SÑ:Sô$ˆDÔ ð —(‘(—,‘,˜t×3Ñ3×8Ñ8Ó9×9Ð9à×ÑÒ%ØŸ™Ÿ™Ô%LÓM×MˆCÜ!3ØØ—k‘k×+Ñ+Ü#(¨¯©×)KÑ)KÓ#LØ ŸK™K×7Ñ7ô	"ˆDÔð ×ÑÒ$ØŸ™×6Ñ6×XÐX¸$×:LÑ:L×:XÑ:XˆIÜ 1Ü 	›NØŸ™×.Ñ.Ø#×:Ñ:ô!ˆDÖñ %òu	$øô ô Ü"Ø6°t·{±{×7LÑ7LÑ6OÐPóàðûðúò*øô ô Ü"Ø6°t·{±{×7MÑ7MÑ6PÐQóàðûðúò Nò :ò Nùs§   …L>›#K ¾K¿	K ÁL>Á#K> Â K;Â	K> Â
7L>ÃL5ÃC,L>Æ.L8Æ/4L>Ç#L;Ç$BL>É,AL>ËK ËK8Ë$K3Ë3K8Ë8L>Ë;K> Ë>L2Ì	$L-Ì-L2Ì2L>Ì8L>Ì;L>c              ƒ  óð  "  € \         P                  ! 4       V n        . p V P                  4       G R j  x€L
  \         P                  ! V P                  4       4      \         P                  ! V P                  4       4      \         P                  ! V P                  4       4      \         P                  ! V P                  4       4      .p\         P                  ! V!  G R j  x€L
  V F  pVP                  4        K  	  \         P                  ! VRR/ G R j  x€L
  V P                  e   V P                  P                  4        V P                  P                  4       G R j  x€L
  R #  EL2 LŠ LU L  T F  pTP                  4        K  	  \         P                  ! TRR/ G R j  x€L 
  T P                  e   T P                  P                  4        T P                  P                  4       G R j  x€L 
  i ; i5i)NÚreturn_exceptionsT)r�   r‘   r“   r|  Úcreate_taskÚ	_listenerÚ_transcription_stepperÚ_response_processorÚ_audio_output_processorÚgatherÚcancelrÞ  rÔ  rç  r    )r+   ÚtasksÚtasks   &  r-   r?  ÚVoicePipeline.start?  sz  é € Ü×,Ò,Ó.ˆŒ	Øˆð	&Ø×"Ñ"Ó$×$Ð$ä×#Ò# D§N¡NÓ$4Ó5Ü×#Ò# D×$?Ñ$?Ó$AÓBÜ×#Ò# D×$<Ñ$<Ó$>Ó?Ü×#Ò# D×$@Ñ$@Ó$BÓCð	ˆEô —.’. %Ñ(×(Ð(ã�Ø—‘–ñ ä—.’. %Ð@¸4Ñ@×@Ð@Ø× Ñ Ò,Ø×!Ñ!×&Ñ&Ô(Ø—(‘(×#Ñ#Ó%×%Ò%ò %ñ )ñ Añ &øó �Ø—‘–ñ ä—.’. %Ð@¸4Ñ@×@Ñ@Ø× Ñ Ò,Ø×!Ñ!×&Ñ&Ô(Ø—(‘(×#Ñ#Ó%×%Ò%üs}   ‚G6 E. ³E%´B)E. ÃE(ÃE. Ã"2G6ÄE*ÄA	G6ÅE,ÅG6Å%E. Å(E. Å*G6Å,G6Å.3G3Æ!F$Æ"A
G3Ç,G/Ç-G3Ç3G6c                óØ   a a€ V'       d   S P                  R \        V4      R7       S P                  V4      oVV 3R lpS P                  e   S P                  P	                  V4       R# R# )Úinput_status)r«  c                  óà   <€  SP                   P                  S 4       R#   \        P                   d9    SP                  P
                  '       d   \        P                  R 4        R#  R# i ; i)z*Dropping input audio because queue is fullN)rä  Ú
put_nowaitr�   Ú	QueueFullr  rS   rY  Údebug©r  r+   s   €€r-   Ú_enqueueÚ,VoicePipeline._sd_callback.<locals>._enqueueX  sV   ø€ ðOØ×&Ñ&×1Ñ1°%Ö8øÜ×$Ñ$ô OØ—;‘;×&×&Ð&Ü—L‘LÐ!M×Nò 'ðOús   ƒ   0A-ÁA-Á,A-N)r  rU   Ú_normalize_inputr“   r4  )r+   Úindatar#  Ú_timer«  r‘  r  s   f&&&& @r-   Ú_sd_callbackÚVoicePipeline._sd_callbackS  sS   ù€ ßØ�O‰O˜N´3°v³;ˆOÔ?Ø×%Ñ% fÓ-ˆö	Oð �9‰9Ò Ø�I‰I×*Ñ*¨8Ö4ñ !r0   c                ó4   <€ V ^8„  d   QhRS[ P                  /# rÕ   rÎ   )r   rX   s   "€r-   rY   rà  b  s   ø€ ÷ 5ñ 5©"¯*©*ñ 5r0   c                ó|  € \         P                  ! V4      p\         P                  ! VP                  \         P                  4      '       dd   \        \        \         P                  ! VP                  4      P                  4      4      pVP                  \         P                  4      V,          pMÅ\         P                  ! VP                  \         P                  4      '       dr   \         P                  ! VP                  4      p\        VP                  4      R ,           R,          pVP                  \         P                  4      V,
          V,          pMVP                  \         P                  4      pVP                  ^8”  d   VP                  ^R7      p\         P                  ! VP!                  R4      RR 4      # )g      ð?g       @)Úaxisr¶   g      ð¿)r«   r·   Ú
issubdtyperª   ÚsignedintegerrV   ÚabsÚiinfoÚminrØ   r­   ÚunsignedintegerrÈ   r·  ÚmeanÚclipr¸   )r+   r”  r  Úscaler  Úmidpoints   &&    r-   r“  ÚVoicePipeline._normalize_inputb  s  € Ü—
’
˜6Ó"ˆÜ�=Š=˜Ÿ™¤b×&6Ñ&6×7Ò7Üœ#œbŸhšh u§{¡{Ó3×7Ñ7Ó8Ó9ˆEØ—L‘L¤§¡Ó,¨uÕ4‰EÜ�]Š]˜5Ÿ;™;¬×(:Ñ(:×;Ò;Ü—8’8˜EŸK™KÓ(ˆDÜ˜dŸh™h›¨#Õ-°Õ4ˆHØ—\‘\¤"§*¡*Ó-°Õ8¸HÕD‰Eà—L‘L¤§¡Ó,ˆEà�:‰:˜Œ>Ø—J‘J A�JÓ&ˆEÜ�wŠw�u—}‘} RÓ(¨$°Ó4Ð4r0   c              ƒ  óV  "  € \        V P                  P                  V P                  P                  R ,          ,          4      p\        P
                  ! V P                  P                  VV P                  P                  RV P                  R7      pVP                  4        V P                  RV P                  P                  V P                  P                  V P                  P                  V P                  P                  R7         V P                  P                  4       G Rj  x€L
 pV P                  V4      G Rj  x€L
  V P                  P                  4        KX   L9 L"  \         P"                  \$        3 d    h i ; i  TP'                  4        TP)                  4        i ; i5i)rè   Úint16)Ú
samplerateÚ	blocksizeÚchannelsrª   ÚcallbackÚ	listening)rà   Úframe_msr<   r=   N)rT   r  r3   r6   ÚsdÚInputStreamr5   r–  r?  r  r<   r=   rä  r)   Ú_process_input_audioÚ	task_doner�   ÚCancelledErrorÚKeyboardInterruptrÔ  rN  )r+   Ú
frame_sizerŠ   r²   s   &   r-   r�  ÚVoicePipeline._listenerr  s;  é € ÜØ�K‰K×)Ñ)¨T¯[©[×-JÑ-JÈVÕ-SÕTó
ˆ
ô —’Ø—{‘{×4Ñ4Ø Ø—[‘[×/Ñ/ØØ×&Ñ&ô
ˆð 	�‰ŒØ�‰ØØŸ™×5Ñ5Ø—[‘[×2Ñ2Ø $§¡× ?Ñ ?Ø#Ÿ{™{×=Ñ=ð 	ô 	
ð		ØØ $× 6Ñ 6× :Ñ :Ó <×<�Ø×/Ñ/°Ó8×8Ð8Ø×&Ñ&×0Ñ0Ö2ñ =Ù8øä×&Ñ&Ô(9Ð:ô 	Øð	ûð �K‰KŒMØ�L‰L�NüsB   ‚DF)ÄE$ Ä&E Ä'E$ Ä?E"Å !E$ Å"E$ Å$FÆF Æ"F&Æ&F)c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r2   r²   rÎ   )r   rX   s   "€r-   rY   rà  �  s   ø€ ÷ %(ñ %(±"·*±*ñ %(r0   c              ƒ  ó  a a"  € S P                   P                  VV 3R  l4      G Rj  x€L
 pV'       g   S P                  P                  S4       R# \        P
                  ! 4       pS P                  W#4       S P                  eb   S P                  P                  '       dF   S P                  P                  S4       S P                  P                  SP                  4       4       MS P                  P                  S4       V F¿  pVP                  '       d   S P                  VS4      G Rj  x€L
  M'S P                  e   S P                  WC4      G Rj  x€L
  VP                   '       g   Kk  S P                  e   S P#                  RVS4      G Rj  x€L
  K–  S P                  f   K¦  S P%                  V4      G Rj  x€L
  KÁ  	  S P                  e›   S P                  P                  '       d}   S P&                  em   VS P&                  ,
          S P(                  P*                  8¼  d?   S P-                  RVS P&                  ,
          R7       S P/                  4       G Rj  x€L
  R# R# R# R# R#  ELI ELF EL! Læ L½ L5i)c                  ó:   <€ SP                   P                  S 4      # r�   )rÙ  rÿ   )r²   r+   s   €€r-   r0  Ú4VoicePipeline._process_input_audio.<locals>.<lambda>‘  s   ø€ ¨t×/?Ñ/?×/GÑ/GÈÔ/Pr0   NÚended_before_confirmÚmax_turn_duration)Úduration_seconds)rç  r”   ró  r¼   rW  rX  r(  rÛ  r9  r  rì  r½   ri   Ú_handle_speech_startedrï  Ú_maybe_confirm_barge_candidaterj   Ú_suppress_barge_candidateÚ_maybe_finalize_turnrí  r  r@   r  Ú_finalize_turn)r+   r²   rû   r  r  s   ff   r-   r°  Ú"VoicePipeline._process_input_audio�  s  ùé € ØŸ(™(Ÿ,™,Õ'PÓQ×Qˆ	ßØ�M‰M× Ñ  Ô)Ùä�nŠnÓˆØ×Ñ 	Ô/Ø×ÑÒ'¨D×,<Ñ,<×,C×,CÐ,CØ×Ñ×!Ñ! 'Ô*Ø×Ñ×#Ñ# G§L¡L£NÕ3à�M‰M× Ñ  Ô)ã!ˆHØ×&×&Ð&Ø×1Ñ1°#°wÓ?×?Ñ?Ø×1Ñ1Ò=Ø×9Ñ9¸(ÓH×HÐHØ×'×'Ò'Ø×3Ñ3Ò?Ø×8Ñ8Ø.°°Wó÷ ò ð ×%Ñ%Ô1Ø×3Ñ3°CÓ8×8Ò8ñ "ð ×ÑÒ(Ø× Ñ ×'×'Ð'Ø×%Ñ%Ò1Ø�d×+Ñ+Õ+¨t¯{©{×/OÑ/OÔOà�O‰OØ#Ø!$ t×'<Ñ'<Õ!<ð ô ð ×%Ñ%Ó'×'Ò'ñ Pñ 2ñ (ñ )ò7 Rò @âHññ 9ñ (ùs‰   „$J ¨I1©J µA,J Â"BJ Ä.I4Ä/'J ÅI7ÅJ Å/$J ÆI:ÆJ Æ*J Æ>I<Æ?1J Ç1A1J É"I>É#J É4J É7J É:J É<J É>J c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# )r2   r  r²   )rV   r«   r³   )r   rX   s   "€r-   rY   rà  ·  s   ø€ ÷ $ñ $±ð $ÁÇ
Á
ñ $r0   c              ƒ  óÞ  "  € V P                   e8   V P                   P                  '       d   V P                  V4      G R j  x€L
  R # V P                  V4      pV P	                  W14      '       dÜ   V P                  V4      G R j  x€L
  V P                  W!4      pT P                  RV P                  V P                  P                  \        VP                  R4      4      \        VP                  R4      ;'       g    R4      VP                  R4      VP                  RR4      VP                  R4      VP                  R4      R	7	       R # V P                  V4      G R j  x€L
  R #  EL% Lä L5i)
NÚbarge_in_candidater   r£  r.  r»  rÌ  rÍ  rÎ  )ÚreasonrK   r   r£  r»  rÐ  Úecho_delay_msÚecho_method)rÛ  r9  Ú_start_turnr9  r>  Ú_start_barge_candidaterB  r  rð  r  rK   rW   r)   rV   )r+   r  r²   rÄ  rÌ  s   &&&  r-   r½  Ú$VoicePipeline._handle_speech_started·  s4  é € Ø×ÑÒ'¨D×,<Ñ,<×,C×,CÐ,CØ×"Ñ" 3Ó'×'Ð'ÙØ×-Ñ-¨cÓ2ˆØ×,Ñ,¨^×AÒAØ×-Ñ-¨cÓ2×2Ð2Ø×0Ñ0°Ó>ˆKØ�O‰OØ$Ø×3Ñ3Ø $§¡× ;Ñ ;Ü# N×$6Ñ$6Ð7GÓ$HÓIÜ! .×"4Ñ"4°]Ó"C×"JÐ"JÀsÓKØ#1×#5Ñ#5Ð6JÓ#KØ!,§¡°ÀÓ!DØ)Ÿo™o¨jÓ9Ø'ŸO™O¨HÓ5ð ô 
ñ Ø×Ñ˜sÓ#×#Ò#ò% (ñ 3ñ 	$ùs<   ‚*E-­E-ÁE&ÁAE-ÂE)ÂCE-ÅE+Å E-Å)E-Å+E-c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r2   r  r�   N©rV   )r   rX   s   "€r-   rY   rà  Í  s   ø€ ÷ 7ñ 7±ð 7¸$ñ 7r0   c              ƒ  óÈ   "  € Wn         R V n        RV n        V P                  e:   V P                  P                  '       g   V P                  V4      G Rj  x€L
  R# R# R#  L
5i)Úplayback_echo_windowFN)rï  rð  rñ  rÛ  r9  Ú_start_transcriber_capture©r+   r  s   &&r-   rÊ  Ú$VoicePipeline._start_barge_candidateÍ  sX   é € Ø+.Ô(Ø'=ˆÔ$Ø/4ˆÔ,Ø×ÑÒ'°×0@Ñ0@×0G×0GÐ0GØ×1Ñ1°#Ó6×6Ò6ñ 1HÑ'Ù6ùs   ‚>A"ÁA"ÁA ÁA"c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r2   r  r  )re   rV   )r   rX   s   "€r-   rY   rà  Ô  s   ø€ ÷ ñ Ù+ðÙ27ñr0   c              ƒ  óB  "  € V P                   e   VP                  '       g   R # W P                   ,
          R,          pW0P                  P                  8  d   R # V P                  '       g2   RV n        V P                  RVV P                  P                  R7       R # R # 5i)Nrè   TÚbarge_in_waiting_for_transcript)Ú
elapsed_msÚ	min_chars)rï  rh   r  rK   rñ  r  rP   )r+   r  r  r×  s   &&& r-   r¾  Ú,VoicePipeline._maybe_confirm_barge_candidateÔ  s„   é € ð ×+Ñ+Ò3¸8×;M×;MÐ;MÙØ×<Ñ<Õ<ÀÕFˆ
ØŸ™×3Ñ3Ô3ÙØ×3×3Ð3Ø37ˆDÔ0Ø�O‰OØ1Ø%ØŸ+™+×CÑCð ö ñ 4ùs   ‚ B£ABÁ,3Bc                óP   <€ V ^8„  d   QhRS[ RS[S[P                  ,          RS[/# )r2   r  r²   r�   )rV   r   r«   r³   rW   )r   rX   s   "€r-   rY   rà  ä  s.   ø€ ÷ ñ ÙðÙ#+©B¯J©JÕ#7ðá	ñr0   c              ƒ  óø  "  € V P                   e   V P                  f   R# \        V P                  RR4      P                  4       pV P	                  V4      w  rEVR8X  d   R# TpVfL   V P
                  '       d   V P
                  R
,          M%\        P                  ! ^ \        P                  R7      pVR8X  d   V P                  WQWcR7      G R j  x€L
  R# V P                  VVVVR	7      G R j  x€L
  R#  L% L5i)NFr0  r-  rN  r©   rP  )rq  T)rÆ  rq  r¶   )rï  rÛ  r  rV  rX  rì  r«   r¬   r­   r¿  Ú_confirm_barge_candidate)r+   r  r²   r0  r«  rÆ  Úsample_windows   &&&    r-   Ú$_evaluate_barge_candidate_transcriptÚ2VoicePipeline._evaluate_barge_candidate_transcriptä  s  é € ð ×+Ñ+Ò3°t×7GÑ7GÒ7OÙÜ�t×'Ñ'¨°Ó4×:Ñ:Ó<ˆØ×:Ñ:¸4Ó@‰ˆØ�[Ô ÙàˆØÒ ð ×#×#Ð#ð × Ñ  Ö$ä—X’X˜a¤r§z¡zÔ2ð ð
 �VÔØ×0Ñ0Ø˜]ð 1ó ÷ ð ñ à×+Ñ+ØØØØð	 ,ó 
÷ 	
ð 	
ñ ññ
	
ùs+   ‚A7C:Á:AC:ÃC6ÃC:Ã/C8Ã0C:Ã8C:rq  r×  rÌ  c                óœ   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[S[,          RS[S[ ,          RS[S[S[S[3,          ,          RR/# )	r2   r  r²   rÆ  rq  r×  rÌ  r�   N)rV   r«   r³   rU   r   rs  r   )r   rX   s   "€r-   rY   rà    sj   ø€ ÷ -
ñ -
áð-
ñ —‘ð-
ñ
 ð-
ñ ™S•Mð-
ñ ™U•Oð-
ñ ™d¡3© 8�nÕ-ð-
ð 
ñ-
r0   c             ƒ  ó¬  "  € V P                   f   R # V P                   pVf   W,
          R,          pVf   V P                  W!4      pRVRVRVP                  RR4      RVP                  R4      R	VP                  R
4      /pVe   WHR&   \        V4      VR&   V P                  ! R/ VB  R V n         R V n        RV n        V P                  P                  '       d   V P                  4       G R j  x€L
  V P                  e.   \        V P                  R4      '       d   RV P                  n        V P                  e6   V P                  P                  '       g   V P                  V4      G R j  x€L
  Wpn        R V n        V P	                  RV P                  P$                  V P                  P&                  V P                  P(                  R7       R #  Lâ Lf5i)Nrè   rÆ  r×  rÐ  rÌ  r.  rÇ  rÍ  rÈ  rÎ  r0  ÚcharsFrð   Tri   ©rA   r<   r>   )Úbarge_in_confirmed)rï  rB  r)   r[  r  rð  rñ  r  rJ   Ú_handle_barge_inrÙ  r  rð   rÛ  r9  rÑ  rí  rî  rA   r<   r>   )	r+   r  r²   rÆ  rq  r×  rÌ  Úcandidate_started_atr/  s	   &&&$$$$  r-   rÜ  Ú&VoicePipeline._confirm_barge_candidate  s¡  é € ð ×+Ñ+Ò3ÙØ#×?Ñ?ÐØÒØÕ4¸Õ>ˆJØÒØ×0Ñ0°Ó>ˆKà�fØ˜*Ø §¡°¸sÓ CØ˜[Ÿ_™_¨ZÓ8Ø˜;Ÿ?™?¨8Ó4ð
ˆ
ð Ò!Ø!+�vÑÜ"% j£/ˆJ�wÑØ�ŠÑ;°
Ò;à+/ˆÔ(Ø'+ˆÔ$Ø/4ˆÔ,Ø�;‰;××ÐØ×'Ñ'Ó)×)Ð)Ø×ÑÒ'¬G°D×4DÑ4DÀk×,RÒ,RØ)-ˆD×ÑÔ&Ø×ÑÒ'°×0@Ñ0@×0G×0GÐ0GØ×1Ñ1Ð2FÓG×GÐGØ 4ÔØ-1ˆÔ*Ø�‰ØØ—{‘{×-Ñ-Ø $§¡× ?Ñ ?Ø!Ÿ[™[×9Ñ9ð	 	ö 	
ñ *ñ Hùs,   ‚C+GÃ-GÃ.A(GÅGÅ+GÅ,A%GÇGc          
      óZ   <€ V ^8„  d   QhRS[ RS[RS[P                  RS[S[ ,          RR/# )r2   rÆ  r  r²   rq  r�   N)rU   rV   r«   r³   r   )r   rX   s   "€r-   rY   rà  2  sL   ø€ ÷ Bñ BáðBñ ðBñ —‘ð	Bñ ™S•MðBð 
ñBr0   c             ƒ  óx  a "  € S P                   f   R # VS P                   ,
          R,          pS P                  W24      pR S n         R S n        RS n        . S n        R S n        R S n        S P                  P                  4        S P                  eD   \        S P                  R4      '       d(   S P                  P                  V 3R l4      G R j  x€L
  RVRVRVP                  RR	4      R
VP                  R4      RVP                  R4      /pVe   WGR&   \        V4      VR&   S P                  ! R/ VB  R #  Lh5i)Nrè   Frö   c                  ó8   <€ S P                   P                  4       # r�   )rÛ  rö   r{   s   €r-   r0  Ú9VoicePipeline._suppress_barge_candidate.<locals>.<lambda>F  ó   ø€  t×'7Ñ'7×'=Ñ'=Ô'?r0   rÆ  r×  rÐ  rÌ  r.  rÇ  rÍ  rÈ  rÎ  r0  râ  )Úbarge_in_suppressed_echo)rï  rB  rð  rñ  rì  rí  rî  ró  rÜ   rÛ  r  rç  r”   r)   r[  r  )r+   rÆ  r  r²   rq  r×  rÌ  r/  s   f&&&$   r-   r¿  Ú'VoicePipeline._suppress_barge_candidate2  s!  øé € ð ×+Ñ+Ò3ÙØ˜D×<Ñ<Õ<ÀÕFˆ
Ø×,Ñ,¨WÓ:ˆØ+/ˆÔ(Ø'+ˆÔ$Ø/4ˆÔ,ØˆÔØ $ˆÔØ-1ˆÔ*Ø�‰×ÑÔØ×ÑÒ'¬G°D×4DÑ4DÀg×,NÒ,NØ—(‘(—,‘,Ô?Ó@×@Ð@à�fØ˜*Ø §¡°¸sÓ CØ˜[Ÿ_™_¨ZÓ8Ø˜;Ÿ?™?¨8Ó4ð
ˆ
ð Ò!Ø!+�vÑÜ"% j£/ˆJ�wÑØ�ŠÑA°jÔAñ Aùs   ƒCD:ÃD8ÃA)D:c                ó    <€ V ^8„  d   QhRS[ /# ©r2   r  rÎ  )r   rX   s   "€r-   rY   rà  S  s   ø€ ÷ 
ñ 
¡Uñ 
r0   c              ƒ  ó„  "  € R V n         R V n        RV n        V P                  e&   V P                  P                  '       d
   R V n        R # V P                  P                  '       d   V P                  4       G R j  x€L
  V P                  e.   \        V P                  R4      '       d   RV P                  n        V P                  f   R # V P                  V4      G R j  x€L
  Wn        V P                  RV P                  P                  V P                  P                   V P                  P"                  R7       R #  LÁ L_5i)NFrð   Tri   rã  )rï  rð  rñ  rÛ  r9  rî  r  rJ   rå  rÙ  r  rð   rÑ  rí  r  rA   r<   r>   rÒ  s   &&r-   rÉ  ÚVoicePipeline._start_turnS  s  é € Ø+/ˆÔ(Ø'+ˆÔ$Ø/4ˆÔ,Ø×ÑÒ'¨D×,<Ñ,<×,C×,CÐ,CØ15ˆDÔ.ÙØ�;‰;××ÐØ×'Ñ'Ó)×)Ð)Ø×ÑÒ'¬G°D×4DÑ4DÀk×,RÒ,RØ)-ˆD×ÑÔ&Ø×ÑÒ#ÙØ×-Ñ-¨cÓ2×2Ð2Ø #ÔØ�‰ØØ—{‘{×-Ñ-Ø $§¡× ?Ñ ?Ø!Ÿ[™[×9Ñ9ð	 	ö 	
ñ *ñ
 	3ùs1   ‚?E Á$E Á'E Á:D<Á;A#E ÃD>ÃAE Ä>E c                ó$   <€ V ^8„  d   QhRS[ RR/# rÍ  rÎ  )r   rX   s   "€r-   rY   rà  i  s   ø€ ÷ 
6ñ 
6±Eð 
6¸dñ 
6r0   c              ƒ  óº  a "  € S P                   f   R # S P                   P                  '       g¨   S P                  P                  V 3R l4      G R j  x€L
  S P                  P                  4       p. S n        VP                  '       dE   S P                   P                  V4       S P                  P                  VP                  4       4       R S n        R # R #  L†5i)Nc                  ó8   <€ S P                   P                  4       # r�   )rÛ  r?  r{   s   €r-   r0  Ú:VoicePipeline._start_transcriber_capture.<locals>.<lambda>m  rì  r0   )rÛ  r9  rç  r”   ró  r)   rì  r¹   r  r¼   r½   rî  )r+   r  Úprerolls   f& r-   rÑ  Ú(VoicePipeline._start_transcriber_capturei  sŸ   øé € Ø×ÑÒ#ÙØ×Ñ×&×&Ð&Ø—(‘(—,‘,Ô?Ó@×@Ð@Ø—m‘m×'Ñ'Ó)ˆGØ!ˆDÔØ�|�|ˆ|Ø× Ñ ×%Ñ% gÔ.Ø× Ñ ×'Ñ'¨¯©«Ô7Ø15ˆDÖ.ñ 'Ù@ùs   ƒ,C°"CÁCÁ6CÂ
ACc                ó    <€ V ^8„  d   QhRS[ /# rð  rÎ  )r   rX   s   "€r-   rY   rà  u  s   ø€ ÷ (ñ (©eñ (r0   c              ƒ  ó¨  a a"  € S P                   '       g   R # S P                  f   VS n        \        P                  ! S P                   4      P	                  \        P
                  RR7      oS P                  P                  VV 3R l4      G R j  x€L
 pVS P                  ,
          R,          pS P                  RVP                  VP                  VSP                  S P                  P                  ,          R,          R7       VP                  '       g   VS P                  P                  8¼  d   S P                  4       G R j  x€L
  R # R #  L½ L
5i)NFr×   c                  ó:   <€ SP                   P                  S 4      # r�   )rÚ  r!  r�  s   €€r-   r0  Ú4VoicePipeline._maybe_finalize_turn.<locals>.<lambda>|  s   ø€ ¨d×.DÑ.D×.LÑ.LÈUÔ.Sr0   rè   Úendpoint_candidate)rp   rg   Ú
silence_msÚaudio_ms)rì  rî  r«   rº   rØ   r­   rç  r”   r  rp   rg   r¹   r  r3   rD   rÁ  )r+   r  r  rþ  r  s   f&  @r-   rÀ  Ú"VoicePipeline._maybe_finalize_turnu  s  ùé € Ø××ÐÙØ×-Ñ-Ò5Ø14ˆDÔ.ä—’˜t×/Ñ/Ó0×7Ñ7¼¿
¹
ÈÐ7ÓOˆØŸ™Ÿ™Õ&SÓT×TˆØ˜D×>Ñ>Õ>À&ÕHˆ
Ø�‰Ø Ø×&Ñ&Ø ×,Ñ,Ø!Ø—Z‘Z $§+¡+×"?Ñ"?Õ?À&ÕHð 	ô 	
ð ××ÐØ˜TŸ[™[×GÑGÔGà×%Ñ%Ó'×'Ò'ñ Hñ Uñ (ùs+   „BEÂEÂBEÄ.EÅEÅ	EÅEc           	   ƒ  óÌ  a "  € S P                   e   S P                   P                  f   S P                  RRR7       R # S P                  '       d@   \        P
                  ! S P                  4      P                  \        P                  RR7      M%\        P                  ! ^ \        P                  R7      pVP                  S P                  P                  ,          R,          p\        \        S P                   RR	4      4      pS P                  R
VVS P                  P                  S P                  P                  R7       \         P"                  ! 4       pS P$                  P'                  V 3R l4      G R j  x€L
 p\         P"                  ! 4       V,
          R,          p\        S P                   R^ 4      p\        S P                   RR4      p. S n        R S n        R S n        S P,                  P/                  4        S P                  RV\        V4      VVVR7       V'       d&   S P0                  P3                  V4      G R j  x€L
  R # S P                  RRR7       R #  Læ L5i)NÚturn_finalization_skippedÚno_active_session)rÆ  Fr×   r©   rè   r0  r-  Úturn_finalization_started)rÿ  Úpartial_charsrS  r'  c                  ód   <€ S P                   P                  S P                  P                  R 7      # ))rS  )rÛ  r_  r  r:   r{   s   €r-   r0  Ú.VoicePipeline._finalize_turn.<locals>.<lambda>Ÿ  s(   ø€ �D×$Ñ$×+Ñ+ØŸ+™+×@Ñ@ð ,ô r0   r1  r3  Úturn_finalized)r0  râ  r×  Úfinish_stepsÚhit_max_stepsÚturn_droppedÚempty_transcript)rÛ  r/  r  rì  r«   rº   rØ   r­   r¬   r¹   r  r3   r[  r  r:   r9   rW  rX  rç  r”   rí  rî  ró  rÜ   rå  Úput)	r+   Ú
turn_audioÚturn_audio_msr  r\  r0  r×  r	  r
  s	   f        r-   rÁ  ÚVoicePipeline._finalize_turn‹  sæ  øé € Ø×ÑÒ# t×'7Ñ'7×'?Ñ'?Ò'GØ�O‰OÐ7Ð@SˆOÔTÙð ××Ðô �NŠN˜4×+Ñ+Ó,×3Ñ3´B·J±JÀUÐ3ÔKä—’˜!¤2§:¡:Ô.ð 	ð
 #Ÿ™¨$¯+©+×*GÑ*GÕGÈ&ÕPˆÜœG D×$4Ñ$4°f¸bÓAÓBˆØ�‰Ø'Ø"Ø'Ø—k‘k×<Ñ<Ø ŸK™K×;Ñ;ð 	ô 	
ô —^’^Ó%ˆ
Ø—X‘X—\‘\ôó
÷ 
ˆô
 —n’nÓ&¨Õ3°vÕ=ˆ
Ü˜t×/Ñ/Ð1DÀaÓHˆÜ × 0Ñ 0Ð2MÈuÓUˆØˆÔØ $ˆÔØ-1ˆÔ*Ø�‰×ÑÔØ�‰ØØÜ�d“)Ø!Ø%Ø'ð 	ô 	
÷ Ø×'Ñ'×+Ñ+¨DÓ1×1Ò1à�O‰O˜NÐ3EˆOÖFñ/
ñ* 2ùs,   ƒAI$ÁD(I$Å9I Å:C
I$ÉI"ÉI$É"I$c              ƒ  ó¾  "  € V P                   R J;'       d     V P                   P                  4       '       * pV P                  P                  4       pV P	                  4       pV P
                  e   V P
                  P                  4        V'       d   V P                   P                  4        V P                  4        / pV P                  e%   V P                  P                  4       ;'       g    / p\        VP                  R4      ;'       g    ^ 4      p\        VP                  R4      ;'       g+    VP                  R4      ;'       g    VP                  R4      4      pV'       g   V'       g	   V'       dd   T P                  RTTT\        VP                  R4      ;'       g    R4      \        VP                  R4      4      VP                  R4      R7       R # R # 5i)	Nr¢  rª  r   rJ   r£  r.  r»  )Úcancelled_ttsÚflushed_chunksÚflushed_buffered_samplesÚflushed_buffered_msÚplayback_was_playingr»  )rè  r8  ræ  Úqsizer9  ré  Úsetr†  Ú_clear_output_audio_queuerÞ  r¼  rT   r)   rW   r  rV   )r+   Ú
tts_activeÚqueued_audiorÄ  Úflush_statusr  Úplayback_was_actives   &      r-   rå  ÚVoicePipeline._handle_barge_in·  s•  é € à×"Ñ"¨$Ð.×TÐT°t×7MÑ7M×7RÑ7RÓ7TÔ3Tð 	ð ×.Ñ.×4Ñ4Ó6ˆØ×-Ñ-Ó/ˆØ×#Ñ#Ò/Ø×$Ñ$×(Ñ(Ô*ßØ×"Ñ"×)Ñ)Ô+Ø×&Ñ&Ô(ØˆØ×ÑÒ(Ø×,Ñ,×2Ñ2Ó4×:Ð:¸ˆLÜ#& |×'7Ñ'7Ð8JÓ'K×'PÐ'PÈqÓ#QÐ Ü"Ø×Ñ˜]Ó+÷ 6ð 6Ø×!Ñ!Ð"2Ó3÷6ð 6à×!Ñ!Ð"4Ó5ó
Ð÷
 Ÿ×)<Ø�O‰OØØ(Ø+Ø)AÜ$)¨,×*:Ñ*:¸=Ó*I×*PÐ*PÈSÓ$QÜ%)¨,×*:Ñ*:¸=Ó*IÓ%JØ#/×#3Ñ#3Ð4HÓ#Ið ö ñ *=ùs=   ‚BGÂAGÃ-GÄ#GÄ1GÅ
GÅ(GÅ0GÅ8+GÆ$9Gc                óª   €   V P                   P                  4        V P                   P                  4        K8    \        P                   d     R# i ; ir…   )ræ  Ú
get_nowaitr±  r�   Ú
QueueEmptyr{   s   &r-   r  Ú'VoicePipeline._clear_output_audio_queueÖ  sJ   € Øð4Ø×'Ñ'×2Ñ2Ô4ð ×'Ñ'×1Ñ1Ö3øô ×%Ñ%ô Úðús   ƒ9 ¹AÁAc              ƒ  óÄ  a "  €  \         P                  ! R4      G Rj  x€L
  S P                  e   S P                  P                  '       g   KK  S P                  P                  V 3R l4      G Rj  x€L
 pV F   pV'       g   K  S P                  RVR7       K"  	  S P                  f   K¨  S P                  \        P                  ! 4       4      G Rj  x€L
  KÖ   L» Lj L
5i)Tg{®Gáz”?Nc                  ó8   <€ S P                   P                  4       # r�   )rÛ  rG  r{   s   €r-   r0  Ú6VoicePipeline._transcription_stepper.<locals>.<lambda>ä  s   ø€ °×0@Ñ0@×0EÑ0EÔ0Gr0   Úpartial_transcript_deltarH  )r�   ÚsleeprÛ  r9  rç  r”   r  rï  rÞ  rW  rX  rH  s   f  r-   r‚  Ú$VoicePipeline._transcription_stepperß  s«   øé € ØÜ—-’- Ó%×%Ð%Ø×ÑÒ'¨t×/?Ñ/?×/F×/FÐ/FÙØŸ8™8Ÿ<™<Ô(GÓH×HˆFÛ�ß‘5Ø—O‘OÐ$>ÀU�OÖKñ  ð ×/Ñ/Ô;Ø×?Ñ?ÄÇÂÓ@PÓQ×QÒQñ &ñ Iñ
 RùsE   ƒC žCŸ-C Á$C Á1CÁ2C Â"C Â,'C ÃCÃC ÃC ÃC c              ƒ  ó.  "  €  V P                   P                  4       G Rj  x€L
 p\        P                  ! V P	                  V4      4      p VG Rj  x€L
  V P                   P                  4        Ko   LP L"  T P                   P                  4        i ; i5ir…   )rå  r)   r�   r€  Ú_respond_to_transcriptr±  )r+   rq  rˆ  s   &  r-   rƒ  Ú!VoicePipeline._response_processorë  su   é € ØØ#×4Ñ4×8Ñ8Ó:×:ˆJÜ×&Ò& t×'BÑ'BÀ:Ó'NÓOˆDð2Ø—
�
à×%Ñ%×/Ñ/Ö1ñ ;ñ øà×%Ñ%×/Ñ/Õ1üs9   ‚B¡A2¢)BÁA6 ÁA4ÁA6 ÁBÁ4A6 Á6BÂBc                ó    <€ V ^8„  d   QhRS[ /# )r2   rq  rf  )r   rX   s   "€r-   rY   rà  ô  s   ø€ ÷ 
ñ 
±sñ 
r0   c              ƒ  óü  a a"  € S P                   P                  V V3R  l4      G Rj  x€L
 pVP                  4       pV'       g   R# VS n        S P	                  RV\        V4      R7       S P                  P                  RRRS/4       S P                  P                  RRRV/4       \        P                  ! 4       S n
        \        P                  ! S P                  VS P                  4      4      S n        R#  LÑ5i)c                  óP   <€ S P                   P                  SS P                  4      # r�   )rÜ  r	   rë  )r+   rq  s   €€r-   r0  Ú6VoicePipeline._respond_to_transcript.<locals>.<lambda>ö  s   ø€ �D×(Ñ(×1Ñ1°*¸d×>PÑ>PÔQr0   NÚresponse_ready)r0  râ  ru  rx  rw  Ú	assistant)rç  r”   rV  rê  r  r[  rë  r¼   r�   ÚEventré  r€  Ú_speak_responserè  )r+   rq  Úresponse_texts   ff r-   r*  Ú$VoicePipeline._respond_to_transcriptô  sÌ   ùé € Ø"Ÿh™hŸl™lÝQó
÷ 
ˆð &×+Ñ+Ó-ˆßÙØ&3ˆÔ#Ø�‰Ð(¨}ÄCÈÓDVˆÔWØ×Ñ×!Ñ! 6¨6°9¸jÐ"IÔJØ×Ñ×!Ñ! 6¨;¸	À=Ð"QÔRÜ#*§=¢=£?ˆÔ Ü!(×!4Ò!4Ø× Ñ  °×0HÑ0HÓIó"
ˆÖñ
ùs   „$C<¨C:©C<ÁB6C<c                ó:   <€ V ^8„  d   QhRS[ RS[P                  /# )r2   r0  Úcancel_event)rU   r�   r2  )r   rX   s   "€r-   rY   rà    s   ø€ ÷ (ñ (©#ð (¹W¿]¹]ñ (r0   c              ƒ  óØ  a	a
"  € V P                  R \        V4      R7       RV n        V P                  P	                  V4      o	\        4       o
Rp^ p^ pV	V
3R lp VP                  4       '       g•   V P                  P                  V4      G Rj  x€L
 pVS
J d   RpMhVP                  4       '       d   MQV P                  P                  V4      G Rj  x€L
  V^,          pV\        VP                  ^ ,          4      ,          pKª  V'       dK   VP                  4       '       g5   V P                  P                  4       G Rj  x€L
  V P                  RR7       T P                  V'       d   RMRVV4       R#  Læ L¥ L9  \         P"                   d'    TP%                  4        T P                  RYE4        R# \&         d(   pT P                  R	\)        T4      R
7        Rp?R# Rp?ii ; i5i)Útts_started)râ  Fc                  ó‚   <€  \        S4      p \        P                  ! T P                  4      #   \         d    Su # i ; ir�   )ÚnextÚStopIterationr«   r·   r  )r   Ú	generatorÚsentinels    €€r-   Ú_next_chunkÚ2VoicePipeline._speak_response.<locals>._next_chunk  s<   ø€ ð Ü˜i›�ô —:’:˜fŸl™lÓ+Ð+øô !ô  Ø’ð ús   ƒ. ®>½>NTr²  Útts_finishedÚtts_cancelledÚ	tts_error)Úerror)r  r[  rò  rÝ  r�  ÚobjectÚis_setrç  r”   ræ  r  rT   r»   r  Ú_start_buffered_tts_playbackÚ_log_tts_doner�   r²  r  ru  rU   )r+   r0  r7  ÚfinishedÚchunk_countÚsample_countr?  r   rx  r=  r>  s   &&&      @@r-   r3  ÚVoicePipeline._speak_response  s�  ùé € Ø�‰˜¬S°«YˆÔ7Ø*/ˆÔ'Ø×&Ñ&×7Ñ7¸Ó=ˆ	Ü“8ˆØˆØˆØˆö	,ð	Ø"×)Ñ)×+Ò+Ø#Ÿx™xŸ|™|¨KÓ8×8�Ø˜XÓ%Ø#�HØØ×&Ñ&×(Ò(ØØ×-Ñ-×1Ñ1°&Ó9×9Ð9Ø˜qÕ �Ø¤ F§L¡L°¥OÓ 4Õ4’ß × 3Ñ 3× 5Ò 5Ø×-Ñ-×2Ñ2Ó4×4Ð4Ø×1Ñ1¸Ð1Ô=ð ×Ñß"*‘°ØØöñ% 9ñ :ñ 5øä×%Ñ%ô 	KØ×ÑÔØ×Ñ˜°×JÜô 	9Ø�O‰O˜K¬s°3«xˆO×8Ò8ûð	9üs�   „AG*ÁE< Á1E< ÂE6Â"E< Â3E< ÃE8Ã9E< ÄE< Ä#E< Å E:ÅE< ÅG*Å6E< Å8E< Å:E< Å<7G'Æ3G*Æ6G'Æ?G'Ç G"ÇG*Ç"G'Ç'G*c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r2   rø  rJ  rK  r�   N)rU   rT   )r   rX   s   "€r-   rY   rà  .  s*   ø€ ÷ )ñ )¡3ð )±Sð )Éð )ÐPTñ )r0   c                ó¾   € \        \        V P                  R ^ 4      ;'       g    ^ 4      pRVRV/pV^ 8”  d   W4,          R,          VR&   V P                  ! V3/ VB  R# )rà   r¾   r²   rè   rŸ  N)rT   r  rÝ  r  )r+   rø  rJ  rK  rà   rù  s   &&&&  r-   rH  ÚVoicePipeline._log_tts_done.  s`   € Üœ' $×"4Ñ"4°mÀQÓG×LÐLÈ1ÓMˆà�kØ�|ð"
ˆð ˜Œ?Ø$0Õ$>ÀÕ$GˆF�=Ñ!Ø�Š˜Ñ( Ô(r0   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r2   r­  r�   Nr6  )r   rX   s   "€r-   rY   rà  8  s   ø€ ÷ 
ñ 
±Tð 
¸dñ 
r0   c               óR  € V P                   e   \        V P                   R4      '       g   R # V P                   P                  VR7      ;'       g    / pV P                  P                  '       d   VP                  R4      '       g   R # V P                  RVP                  R4      VP                  R4      VP                  R4      VP                  R4      \        VP                  R	4      4      V P                  P                  4       \        P                  ! 4       R
,          R7       R # )Nr³  r²  r¡  Útts_playback_startedrà   r¢  r£  r¥  r°  rè   ©rà   r¢  r£  r¥  r°  Úoutput_queue_sizer!  )rÞ  r  r³  r  rS   r)   r  rW   ræ  r  rW  rX  )r+   r­  r«  s   &$ r-   rG  Ú*VoicePipeline._start_buffered_tts_playback8  sæ   € Ø×ÑÒ$¬GØ×ÑÐ;÷-
ò -
ñ Ø×"Ñ"×=Ñ=ÀEÐ=ÓJ×PÐPÈbˆØ�{‰{×"×"Ð"¨&¯*©*Ð5E×*FÒ*FÙØ�‰Ø"ØŸ
™
 =Ó1Ø#ŸZ™ZÐ(:Ó;ØŸ
™
 =Ó1Ø"ŸJ™JÐ'8Ó9Ü˜Ÿ
™
 8Ó,Ó-Ø"×5Ñ5×;Ñ;Ó=ÜŸšÓ)¨FÕ2ð 	ö 		
r0   c              ƒ  óô  "  €  V P                   P                  4       G Rj  x€L
 pV P                  Ee$   \        P                  ! 4       pV P                  P                  V4      ;'       g    / pV P                  P                  '       dÎ   VP                  RV P                   P                  4       4       VP                  RVR,          4       VP                  R4      '       dt   V P                  RVP                  R4      VP                  R4      VP                  R	4      VP                  R
4      RVP                  R4      VP                  R4      R7       V P                   P                  4        EKr   ELT5i)TNrT  r!  rè   r¡  rR  rà   r¢  r£  r¥  FrS  )ræ  r)   rÞ  rW  rX  r¨  r  rS   r2  r  r  r±  )r+   r  Ú	queued_atr«  s   &   r-   r„  Ú%VoicePipeline._audio_output_processorK  s)  é € ØØ×1Ñ1×5Ñ5Ó7×7ˆEØ× Ñ Ó,Ü ŸNšNÓ,�	Ø×*Ñ*×6Ñ6°uÓ=×CÐCÀ�Ø—;‘;×&×&Ð&Ø×%Ñ%Ø+¨T×-DÑ-D×-JÑ-JÓ-Lôð ×%Ñ% n°iÀ&Õ6HÔIØ—z‘zÐ"2×3Ò3ØŸ™Ø2Ø(.¯
©
°=Ó(AØ-3¯Z©ZÐ8JÓ-KØ(.¯
©
°=Ó(AØ,2¯J©JÐ7HÓ,IØ#(Ø.4¯j©jÐ9LÓ.MØ)/¯©°NÓ)Cð (ô 	ð ×#Ñ#×-Ñ-×/ò) 8ùs$   ‚E8¡E5¢A	E8Á,E8ÂAE8Ã%BE8)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�   )NN),r[   r\   r]   r^   r_   r|   r  rÖ  rþ  r(  r5  r9  r>  rB  rI  rX  rT  r|  r?  r–  r“  r�  r°  r½  rÊ  r¾  rÞ  rÜ  r¿  rÉ  rÑ  rÀ  rÁ  rå  r  r‚  rƒ  r*  r3  rH  rG  r„  ra   rb   rc   s   @r-   rØ  rØ  :  s×  ø‡ € ÙVñ+7ð ð	+7ð
 ð+7ð =Að+7ð *.ð+7ð 7;ð+7ð 59÷+7ó +7÷Z
'ð 
'ð ÷ó ð÷
ð 
÷21ð 1÷?ò ?÷Bò B÷
ð 
ð ÷@ó ð@÷	&ð 	&ð ÷ó ðò&EòN&ò(5÷5ð 5ò ÷<%(ð %(÷N$ð $÷,7ð 7÷ð ÷ ò ð>-
ð %)ð-
ð '+ð-
ð 15÷-
ò -
ð^Bð %)÷Bò B÷B
ð 
÷,
6ð 
6÷(ð (ò,*GòXò>4ò
Rò2÷
ð 
÷ (ð (÷T)ð )÷
ð 
÷&0ð 0r0   rØ  c               ƒ   ó&  "  € \         P                  ! R \         P                  R7      p V P                  R\        RRR7       V P                  R\        RRR7       V P                  R	\        R
RR7       V P                  R\        RRR7       V P                  R\        RRR7       V P                  R. R\ORRR7       V P                  R\        RRR7       V P                  R\
        RRR7       V P                  R\
        RRR7       V P                  R\
        ^`R R7       V P                  R!\        RR"R7       V P                  R#\        R$R%R7       V P                  R&\        R'R(R7       V P                  R)\
        ^R*R7       V P                  R+\
        R,R-R7       V P                  R.\        R/R0R7       V P                  R1\
        ^´R2R7       V P                  R3\
        R4R5R7       V P                  R6\
        ^úR7R7       V P                  R8\
        R9R:R7       V P                  R;\
        ^R<R7       V P                  R=R>R?R@RA7       V P                  RBR>RCRD7       V P                  4       pVP                  '       d3   \        P                  ! 4       P                  \        P                  4       \        R]/ REVP                  bRFVP                  bRGVP                   bRHVP"                  bRIVP$                  bRJVP&                  bRKVP(                  bRLVP*                  bRMVP,                  bRNVP.                  bROVP0                  bRPVP2                  bRQVP4                  bRRVP6                  bRSVP8                  bRTVP:                  bRUVP<                  bRVVP>                  bRWVP@                  bRXVPB                  bRYVPD                  bRZVP                  bR[VPF                  '       * b p\I        V4      pVPK                  4       G Rj  x€L
  R#  L5i)^zVoice Pipeline)ÚdescriptionÚformatter_classz--stt_modelr   z	STT model)ÚtypeÚdefaultÚhelpz--tts_modelr   z	TTS modelz--llm_modelr   z	LLM modelz--vad_modelr   zSpeech trigger VAD modelz--turn_modelr   zSmart Turn endpoint modelz--latency_profiler   zLatency profile)Úchoicesr]  r^  z--voicer   zPocket TTS voicez--transcription_delay_msNz-Override Voxtral Realtime transcription delayz--stt_max_turn_tokensr   z+Maximum Voxtral decode tokens per user turnz--stt_finalization_max_stepsz<Maximum bounded Voxtral finalization steps after endpointingz--tts_streaming_intervalz.Pocket TTS streaming chunk interval in secondsz--vad_start_thresholdr   z-Silero VAD probability needed to start a turnz--vad_stop_thresholdr   z9Silero VAD probability needed to keep an active turn openz--vad_start_framesz7Consecutive speech frames needed before starting a turnz--vad_end_silence_msr   z5Silence duration before asking Smart Turn to finalizez--turn_thresholdr   z)Smart Turn endpoint probability thresholdz--min_barge_in_mszASpeech duration required before confirming playback-time barge-inz--ignore_playback_echo_msr   z2Playback echo window after recent output callbacksz--echo_delay_min_mszBMinimum expected acoustic echo delay for output-reference matchingz--echo_delay_max_msr    zBMaximum expected acoustic echo delay for output-reference matchingz--barge_in_min_transcript_charsz@Minimum partial transcript characters needed to confirm barge-inz	--verboseÚ
store_trueFz+Enable structured voice pipeline debug logs)Úactionr]  r^  z	--no_playz#Run without playing generated audio)ra  r^  r&   r7   rG   rH   rE   r;   rB   r<   r=   r>   r?   rC   rK   rL   rM   rN   rP   r(   r9   r:   r*   rS   rQ   )r"   r   r$   rl   )&ÚargparseÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentrU   rT   rV   Ú
parse_argsrS   ÚloggingÚ	getLoggerÚsetLevelÚINFOr   r&   r7   rG   r„  Ú	llm_modelr;   rB   r<   r=   r>   r?   rC   rK   rL   rM   rN   rP   r%  r9   r:   r*   Úno_playrØ  r?  )ÚparserÚargsr  Úpipelines       r-   Úmainrp  d  sÎ  é € Ü×$Ò$Ø$Ü ×>Ñ>ô€Fð ×ÑØÜØBØð	 ô ð ×ÑØÜØ*Øð	 ô ð ×ÑØÜØCØð	 ô ð ×ÑØÜØ*Ø'ð	 ô ð ×ÑØÜØ-Ø(ð	 ô ð ×ÑØÚ/ØØð	 ô ð ×ÑØÜØØð	 ô ð ×ÑØ"ÜØØ<ð	 ô ð ×ÑØÜØØ:ð	 ô ð ×ÑØ&ÜØØKð	 ô ð ×ÑØ"ÜØØ=ð	 ô ð ×ÑØÜØØ<ð	 ô ð ×ÑØÜØØHð	 ô ð ×ÑØÜØØFð	 ô ð ×ÑØÜØØDð	 ô ð ×ÑØÜØØ8ð	 ô ð ×ÑØÜØØPð	 ô ð ×ÑØ#ÜØØAð	 ô ð ×ÑØÜØØQð	 ô ð ×ÑØÜØØQð	 ô ð ×ÑØ)ÜØØOð	 ô ð ×ÑØØØØ:ð	 ô ð ×ÑØØØ2ð ô ð
 ×ÑÓ€DØ‡|‡|€|Ü×ÒÓ×$Ñ$¤W§\¡\Ô2ä ò Ø×,Ò,ðà—.’.ðð —.’.ðð —*’*ð	ð
 —~’~ðð —.’.ðð —?’?ðð !×4Ò4ðð  ×2Ò2ðð ×.Ò.ðð  ×2Ò2ðð ×*Ò*ðð ×,Ò,ðð !%× <Ò <ðð ×0Ò0ðð  ×0Ò0ð!ð" '+×&HÒ&Hð#ð$ $(×#>Ò#>ð%ð& !×4Ò4ð'ð( $(×#BÒ#Bð)ð*  $×:Ò:ð+ð, —’ð-ð. —|‘|Õ#ð/€Fô2 ˜VÓ$€HØ
�.‰.Ó
×Ôùs   ‚PPÐPÐ	PÚ__main__)5rb  r�   rg  rF  rW  Úconcurrent.futuresr   Údataclassesr   Útypingr   r   r   r   Úmlx.coreÚcorer†   Únumpyr«   Úsounddevicer®  Úmlx_lm.generater	   r~  Úmlx_lm.utilsr   rn  Úmlx_audio.sts.audio_playerr   Úmlx_audio.tts.utilsr   rs  ÚbasicConfigÚWARNINGrh  r[   rY  r   re   rn   rs   r£   rÂ   rß   r  r$  rc  rƒ  r“  rØ  rp  r”   r³  rl   r0   r-   Ú<module>r     s^  ðÛ Û Û Û 	Û Ý 1Ý !ß 4Ó 4å Û Û Ý 5Ý )å 2Ý 6à × Ò Ø
�/‰/Ð"Xõð 
×	Ò	˜8Ó	$€ð ÷?!ð ?!ó ð?!ðD ÷"ð "ó ð"ð ÷ð ó ð÷
#Añ #A÷Lñ ÷$ ñ  ÷FW=ñ W=÷t
ñ 
÷*Sñ S÷lVñ V÷.3ñ 3÷6{ñ {÷|g0ñ g0òTlð^ ˆzÔðØ�Š‘D“FÖñ øð ô Úðús   ÄD: Ä:EÅE