§
    Û×jÐ5  ã                  ó4  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZ  ej        ¦   «         Zdai Z ej        ¦   «         Zd	Zd
Zg d¢Zd„ Zddœd$d„Zddd„ d„ dœd„Z G d„ d¦  «        Zddd œd!„Z dd"œd#„Z!dS )%zIShared microphone upload/transcription endpoint for Gradio and Deepy web.é    )ÚannotationsN)ÚPath)Úopen_import_file)ÚHTTPExceptionÚRequestÚ
UploadFile)ÚDEEPY_VOICE_LANGUAGE_KEYÚnormalize_deepy_voice_languageFi   Úvoice_transcription_mode))ÚDisabledÚdisabled)z7CPU (Always available as runs on CPU but may be slower)Úcpu)z<Cuda (will need to wait GPU is available but will be faster)Úgpu)z5Auto (will pick CPU or GPU depending on availability)Úautoc                ó†   — |                       t          d¦  «        }|d„ t          D ¦   «         vrt          d|› �¦  «        ‚|S )Nr   c                ó   — h | ]\  }}|’ŒS © r   )Ú.0Ú_Úvalues      ú:C:\Users\johnn\OneDrive\Documents\AI\shared\deepy\voice.pyú	<setcomp>zvoice_mode.<locals>.<setcomp>   s   € Ð=Ð=Ð=™h˜a �EÐ=Ð=Ð=ó    z"Unknown voice transcription mode: )ÚgetÚVOICE_MODE_KEYÚVOICE_MODE_CHOICESÚ
ValueError)ÚconfigÚmodes     r   Ú
voice_moder       sL   € Ø�:Š:•n fÑ-Ô-€DØÐ=Ð=Õ*<Ð=Ñ=Ô=Ð=Ð=ÝÐD¸dÐDÐDÑEÔEÐEØ€Kr   )Úpreserve_filenameÚuploadr   Ú	directoryr   ÚlimitÚintÚ
extensionsúset[str]r!   ÚboolÚreturnc             ƒ  óþ  K  — t          | j        pd¦  «        j                             ¦   «         }||vrt	          dd¦  «        ‚t          ||r| j        nt          j        ¦   «         j        |z   ¦  «        \  }}d}	 |5  |  	                    d¦  «        ƒ d {V —†x}	rZ|t          |	¦  «        z  }||k    rt	          dd¦  «        ‚|                     |	¦  «         |  	                    d¦  «        ƒ d {V —†x}	°Zd d d ¦  «         n# 1 swxY w Y   |st	          dd	¦  «        ‚||                      ¦   «         ƒ d {V —† S # t          $ r |                     d
¬¦  «         ‚ w xY w# |                      ¦   «         ƒ d {V —† w xY w)NÚ iŸ  zUnsupported file type.r   i   i�  zFile is too large.i�  zThe recording is empty.T©Ú
missing_ok)r   ÚfilenameÚsuffixÚlowerr   r   ÚuuidÚuuid4ÚhexÚreadÚlenÚwriteÚcloseÚBaseExceptionÚunlink)
r"   r#   r$   r&   r!   r/   ÚpathÚwriterÚsizeÚchunks
             r   Úsave_uploadr>   !   s  è è € Ý�&”/Ð' RÑ(Ô(Ô/×5Ò5Ñ7Ô7€FØ�ZÐÐÝ˜CÐ!9Ñ:Ô:Ð:Ý# IÐBSÐ/r¨v¬¨ÕY]ÔYcÑYeÔYeÔYiÐlrÑYrÑsÔs�L€Dˆ&Ø€DðØð 	$ð 	$Ø!'§¢¨[Ñ!9Ô!9Ð9Ð9Ð9Ð9Ð9Ð9Ð9�%ð $Ø�˜E™
œ
Ñ"�Ø˜%’<�<Ý'¨Ð-AÑBÔBÐBØ—’˜UÑ#Ô#Ð#ð	 "(§¢¨[Ñ!9Ô!9Ð9Ð9Ð9Ð9Ð9Ð9Ð9�%ð $ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð ð 	@Ý Ð%>Ñ?Ô?Ð?Øð
 �lŠl‰nŒnÐÐÐÐÐÐÐÐøõ	 ð ð ð Ø�Š˜tˆÑ$Ô$Ð$Øðøøøøð �lŠl‰nŒnÐÐÐÐÐÐÐÐøøøs=   Á<D; Á>A8DÃ6D; ÄDÄD; Ä	DÄ
D; Ä;"EÅE  Å E<c                 ó   — d S ©Nr   r   r   r   ú<lambda>rA   8   s   € Ðgk€ r   c                ó   — d S r@   r   )r   s    r   rA   rA   8   s   € ð  JN€ r   )ÚlanguageÚprepared_modelÚcheck_cancelledÚreport_statusc               óê  — dd l }ddlm} ddlm} ddlm}	m}
 t          5   |¦   «          t          |j
                             ¦   «         ¦  «         ||j
                             ¦   «         ¦  «        }}|dk    rt          dd¦  «        ‚|j                             ¦   «         }|dk    r|st          d	d
¦  «        ‚d}t          j        ¦   «         }|rÍ|dv rÉ	  |¦   «          |j        5  |j        }|j        d uo|j        d         }|j        p|j        p|j        p|p|j        }|s! |	|j        dd¦  «        rd}	 d d d ¦  «         nXd d d ¦  «         n# 1 swxY w Y   |dk    rn:t          j        ¦   «         |z
  dk    r |d¦  «         t          j        d¦  «         ŒÈ	  |d¦  «         t5          d|› d|                     ¦   «         › d|› d|pd› dt          j        ¦   «         |z
  d›d�d¬¦  «         |€i n||d œ} |¦   «           |t9          | ¦  «        fd!|||d"œ|¤Žd#         |dk    r |
|j        d¦  «         cd d d ¦  «         S # |dk    r |
|j        d¦  «         w w xY w# 1 swxY w Y   d S )$Nr   ©Úwhisper_model_name)Útranscribe_media)Útry_acquire_GPU_ressourcesÚrelease_GPU_ressourcesr   é“  ú6Microphone transcription is disabled in Configuration.r   é™  z;CUDA is not available. Select CPU or Auto in Configuration.r   >   r   r   TÚpendingÚdeepy_voicezVoice transcriptionÚcudar   é   Úwaiting_gpuçš™™™™™¹?Útranscribingz[Voice] Whisper z: z; mode=z; language=ÚAutoz; GPU wait=z.2fzs.)Úflush)rD   rE   Únone)Útimestamp_typeÚdeviceÚ
model_namerC   Útext)ÚtorchÚshared.deepy.assetsrI   Úshared.deepy.transcriptionrJ   Úshared.utils.process_locksrK   rL   Ú_voice_lockr    Ú_depsÚget_server_configr   rR   Úis_availableÚtimeÚperf_counterÚ_mutation_lockÚ_sessionÚ_restorationÚ_threadsÚworker_activeÚqueued_job_countÚgeneration_runningÚ_stateÚsleepÚprintÚupperÚstr)r:   ÚservicerC   rD   rE   rF   r^   rI   rJ   rK   rL   r   r\   Úcuda_availabler[   ÚwaitingÚsessionÚ	restoringÚbusyÚprepareds                       r   Útranscribe_recordingr{   8   sd  € Ø€L€L€LØ6Ð6Ð6Ð6Ð6Ð6Ø;Ð;Ð;Ð;Ð;Ð;Ø]Ð]Ð]Ð]Ð]Ð]Ð]Ð]å	ð !Fð !FØˆÑÔÐÝ% g¤m×&EÒ&EÑ&GÔ&GÑHÔHÐJ\ÐJ\Ð]dÔ]j×]|Ò]|Ñ]~Ô]~ÑJÔJˆjˆØ�:ÒÐÝ Ð%]Ñ^Ô^Ð^Øœ×0Ò0Ñ2Ô2ˆØ�5Š=ˆ= ˆ=Ý Ð%bÑcÔcÐcØˆÝÔ#Ñ%Ô%ˆØð 	˜d oÐ5Ð5ðØ�Ñ!Ô!Ð!ØÔ+ð ð Ø%Ô.�GØ 'Ô 4¸DÐ @Ð dÀWÔEYÐZcÔEd�IØ"Ô+ð  L¨wÔ/Dð  LÈÔH`ð  LÐdmð  LÐqxô  rL�DØð Ð$>Ð$>¸w¼~È}Ð^sÑ$tÔ$tð Ø!'˜Øðð ð ñ ô ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˜6’>�>ØÝÔ$Ñ&Ô&¨Ñ0°AÒ5Ð5Ø!�M -Ñ0Ô0Ð0Ý”
˜2‘”�ðð	FØˆM˜.Ñ)Ô)Ð)Ýð  ` Zð  `ð  `°6·<²<±>´>ð  `ð  `È$ð  `ð  `Ð[cÐ[mÐgmð  `ð  `Õz~ô  {Lñ  {Nô  {Nð  QXñ  {Xð  `ð  `ð  `ð  `ð  hlð  mñ  mô  mð  mØ+Ð3�r�rÈNÐo~Ð9Ð9ˆHØˆOÑÔÐØ#Ð#¥C¨¡I¤Ið  K¸fÈVÐ`jÐu}ð  Kð  Kð  BJð  Kð  Kð  LRô  Sà˜ÒÐØ&Ð& w¤~°}ÑEÔEÐEðC!Fð !Fð !Fð !Fñ !Fô !Fð !Fð !Føð@ ˜ÒÐØ&Ð& w¤~°}ÑEÔEÐEÐEð  øøøðA!Fð !Fð !Fð !Føøøð !Fð !Fð !Fð !Fð !Fð !FsQ    CI(Ã'AEÄ:I(ÅE	ÅI(ÅE	ÅAI(ÆBIÈ'I(ÉI%É%I(É(I,É/I,c                  ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚRecordingPreparationzGOne bounded, cancellable CPU preload shared by both browser interfaces.c                óv  — ||c| _         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t          j	        ¦   «         | _
        d | _        d | _        d| _        d| _        d| _        g | _        d| _        d S )Nr+   FÚloading)Úidrt   Ú	threadingÚEventÚ	cancelledÚaudio_readyÚreadyÚdonerf   Ú	monotonicÚcreatedr:   rC   r]   ÚerrorÚ	submittedÚmodelÚstatus)ÚselfÚrecording_idrt   s      r   Ú__init__zRecordingPreparation.__init__d   s“   € Ø ,¨gÐˆŒ�”Ý"œÑ*Ô*ˆŒÝ$œ?Ñ,Ô,ˆÔÝ”_Ñ&Ô&ˆŒ
Ý”OÑ%Ô%ˆŒ	Ý”~Ñ'Ô'ˆŒØˆŒ	ØˆŒØˆŒ	ØˆŒ
ØˆŒØˆŒ
ØˆŒˆˆr   c                ó   — || _         d S r@   )rŒ   )r�   r   s     r   rF   z"RecordingPreparation.report_statuss   s   € ØˆŒˆˆr   c                óÊ   — | j                              ¦   «         s8| j                             ¦   «         s.t          j        ¦   «         | j        z
  dk    rt          d¦  «        ‚d S d S )Néð   úVoice recording cancelled.)rƒ   Úis_setr„   rf   r‡   rˆ   ÚInterruptedError)r�   s    r   rE   z$RecordingPreparation.check_cancelledv   so   € ð Œ>× Ò Ñ"Ô"ð 	A¨4Ô+;×+BÒ+BÑ+DÔ+Dð 	AÍÌÑIYÔIYÐ\`Ô\hÑIhÐknÒInÐInÝ"Ð#?Ñ@Ô@Ð@ð	Að 	AÐInÐInr   c                ó>  — ddl m} ddlm} dd l}	 t
                               d¬¦  «        s/|                      ¦   «          t
                               d¬¦  «        ¯/	 |                      ¦   «          | j         	                     | |¦   «         | 
                    d¦  «        | j        ¬¦  «        ¦  «         d| _        | j                             ¦   «          t
                               ¦   «          n# t
                               ¦   «          w xY w| j                             d¦  «        s.|                      ¦   «          | j                             d¦  «        ¯.|                      ¦   «          t#          | j        | j        | j        | j        | j        | j        ¬	¦  «        | _        n=# t.          $ r
 d
| _        Y n*t2          $ r}t5          |¦  «        | _        Y d }~nd }~ww xY w| j        s| j        r,| j                             ¦   «          t9          j        ¦   «          t<          5  | j        �| j                             d¬¦  «         | j                              ¦   «          | j                             ¦   «          tB           "                    | j#        ¦  «        | u rtB          | j#        = d d d ¦  «         d S # 1 swxY w Y   d S # | j        s| j        r,| j                             ¦   «          t9          j        ¦   «          t<          5  | j        �| j                             d¬¦  «         | j                              ¦   «          | j                             ¦   «          tB           "                    | j#        ¦  «        | u rtB          | j#        = d d d ¦  «         w # 1 swxY w Y   w xY w)Nr   rH   )Úload_whisperrU   )Útimeoutr   )rE   r…   )rt   rC   rD   rE   rF   r“   Tr,   )$r_   rI   r`   r—   r^   rb   ÚacquirerE   r‹   Úappendr[   rŒ   r…   ÚsetÚreleaser„   Úwaitr{   r:   rt   rC   rF   r]   r•   r‰   Ú	Exceptionrs   ÚclearÚgcÚcollectÚ_preparations_lockr9   r†   Ú_preparationsr   r€   )r�   rI   r—   r^   Úexcs        r   ÚrunzRecordingPreparation.run|   s  € Ø:Ð:Ð:Ð:Ð:Ð:Ø;Ð;Ð;Ð;Ð;Ð;Øˆˆˆð	/Ý!×)Ò)°"Ð)Ñ5Ô5ð 'Ø×$Ò$Ñ&Ô&Ð&õ "×)Ò)°"Ð)Ñ5Ô5ð 'ð&Ø×$Ò$Ñ&Ô&Ð&Ø”
×!Ò! , ,Ð/AÐ/AÑ/CÔ/CÀUÇ\Â\ÐRWÑEXÔEXÐjnÔj~Ð"Ñ"Ô"ñ  Aô  Að  AØ%�”Ø”
—’Ñ Ô Ð å×#Ò#Ñ%Ô%Ð%Ð%ø•×#Ò#Ñ%Ô%Ð%Ð%øøøØÔ&×+Ò+¨BÑ/Ô/ð 'Ø×$Ò$Ñ&Ô&Ð&ð Ô&×+Ò+¨BÑ/Ô/ð 'à× Ò Ñ"Ô"Ð"Ý,¨T¬YÀÄÐW[ÔWdÐuyÔuð  RVô  Rfð  vzô  vHð  Iñ  Iô  IˆDŒIˆIøÝð 	6ð 	6ð 	6Ø5ˆDŒJˆJˆJÝð 	"ð 	"ð 	"Ý˜S™œˆDŒJˆJˆJˆJˆJˆJøøøøð	"øøøð Œzð ˜TœZð Ø”
× Ò Ñ"Ô"Ð"Ý”
‘”�Ý#ð /ð /Ø”9Ð(Ø”I×$Ò$°Ð$Ñ5Ô5Ð5Ø”	—’‘”�Ø”
—’Ñ Ô Ð Ý ×$Ò$ T¤WÑ-Ô-°Ð5Ð5Ý% d¤gÐ.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /ð /øð Œzð ˜TœZð Ø”
× Ò Ñ"Ô"Ð"Ý”
‘”�Ý#ð /ð /Ø”9Ð(Ø”I×$Ò$°Ð$Ñ5Ô5Ð5Ø”	—’‘”�Ø”
—’Ñ Ô Ð Ý ×$Ò$ T¤WÑ-Ô-°Ð5Ð5Ý% d¤gÐ.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /øøøs�   ’A
F$ ÁA:C1 ÃF$ Ã1DÄBF$ Æ#J? Æ$GÆ5J? Æ7	GÇ GÇJ? ÇGÇJ? È"BJ2Ê2J6Ê9J6Ê?ANÌBNÎNÎNÎNÎNÎNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r�   rF   rE   r¥   r   r   r   r}   r}   b   sY   € € € € € ØQÐQð ð  ð  ðð ð ðAð Að Að /ð  /ð  /ð  /ð  /r   r}   )ÚdependenciesrC   c               ó   ‡‡‡‡— ddl m} ddlmŠ ˆˆfd„Š|                      d|pg ¬¦  «        ˆˆfd„¦   «         }|                      d|pg ¬¦  «        dˆfd„¦   «         }|                      d|pg ¬¦  «        dˆfd„¦   «         }|                      d|pg ¬¦  «        dˆfd„¦   «         }|                      d|pg ¬¦  «         |d¦  «        fdˆˆfd„¦   «         }	|                      d|pg ¬¦  «         |d¦  «        fdˆˆˆfd„¦   «         }
d S )Nr   )ÚFile)Úrun_in_threadpoolc                 ó²   •—  ‰¦   «         j                              ¦   «                              t          d¦  «        } t	          ‰€| n‰¦  «        }|dk    rd n|S )Nr   )rc   rd   r   r	   r
   )Ú
configuredr   Úget_servicerC   s     €€r   Úrecording_languagez.mount_voice_routes.<locals>.recording_language£   sX   ø€ Ø �[‘]”]Ô(×:Ò:Ñ<Ô<×@Ò@ÕAYÐ[aÑbÔbˆ
Ý.¸XÐ=M¨z¨zÐS[Ñ\Ô\ˆØ ’�ˆtˆt¨EÐ1r   z/deepy_api/voice)rª   c                 ó„  •— ddl m}  ddlm}m} ddlm}  | ‰¦   «         j                             ¦   «         ¦  «        }| 	                     ||¦  «        d         d         d¬¦  «        } | |rt          |¦  «        nd ¦  «         | ‰¦   «         t           ‰¦   «         j                             ¦   «         ¦  «        dœS )	Nr   )Ú_whisper_medium_files_present)Úwhisper_download_defrI   )Úfiles_locatorÚsourceFolderListF)Úerror_if_none)Údownload_requiredr‹   rC   r   )r`   r³   r_   r´   rI   Úshared.utilsrµ   rc   rd   Úlocate_folderr   r    )r³   r´   rI   rµ   r‹   r#   r°   r±   s         €€r   Úvoice_statusz(mount_voice_routes.<locals>.voice_status¨   s<  ø€ àLÐLÐLÐLÐLÐLØPÐPÐPÐPÐPÐPÐPÐPØ.Ð.Ð.Ð.Ð.Ð.à"Ð" ; ;¡=¤=Ô#6×#HÒ#HÑ#JÔ#JÑKÔKˆØ!×/Ò/Ð0DÐ0DÀUÑ0KÔ0KÐL^Ô0_Ð`aÔ0bÐrwÐ/ÑxÔxˆ	Ø)FÐ)FÐZcÐGmÅtÈIÁÄÀÐimÑ)nÔ)nÐ%nÐy~ð  M_ð  M_ñ  Maô  Maõ  kuð  vAð  vAñ  vCô  vCô  vI÷  v[ò  v[ñ  v]ô  v]ñ  k^ô  k^ð  _ð  _ð  	_r   z'/deepy_api/voice/{recording_id}/preparerŽ   ú	uuid.UUIDÚrequestr   c              “  ó¤  •K  —  ‰¦   «         }t          |j                             ¦   «         ¦  «        dk    rt          dd¦  «        ‚t	          | ¦  «        }t
          5  t          rt          dd¦  «        ‚t          ||¦  «        }|t          |<   t          j	        |j
        dd¬¦  «                             ¦   «          d d d ¦  «         n# 1 swxY w Y   	 |j                             ¦   «         s|                     ¦   «         ƒ d {V —†r|j                             ¦   «          nt#          j        ¦   «         |_        t)          j        d	¦  «        ƒ d {V —† |j                             ¦   «         ¯|j        r0t          |j                             ¦   «         rdnd
|j        ¦  «        ‚n(# t.          $ r |j                             ¦   «          ‚ w xY wd|iS )Nr   rM   rN   rO   zFAnother voice recording is being prepared or transcribed. Please wait.zwangp-voice-prepareT)ÚtargetÚnameÚdaemonrU   éô  r€   )r    rc   rd   r   rs   r¢   r£   r}   r�   ÚThreadr¥   Ústartr…   r”   Úis_disconnectedrƒ   r›   rf   r‡   rˆ   Úasynciorp   r‰   r8   )rŽ   r½   rt   ÚkeyÚjobr°   s        €r   Úpreparez#mount_voice_routes.<locals>.prepare²   s5  øè è € à�+‘-”-ˆÝ�g”m×5Ò5Ñ7Ô7Ñ8Ô8¸JÒFÐFÝ Ð%]Ñ^Ô^Ð^Ý�,ÑÔˆÝð 	^ð 	^Ýð sÝ# CÐ)qÑrÔrÐrÝ& s¨GÑ4Ô4ˆCØ!$�M˜#ÑÝÔ C¤GÐ2GÐPTÐUÑUÔU×[Ò[Ñ]Ô]Ð]ð	^ð 	^ð 	^ñ 	^ô 	^ð 	^ð 	^ð 	^ð 	^ð 	^ð 	^øøøð 	^ð 	^ð 	^ð 	^ð	Ø”i×&Ò&Ñ(Ô(ð (Ø ×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ð 3Ø”M×%Ò%Ñ'Ô'Ð'Ð'õ #'¤.Ñ"2Ô"2�C”KÝ”m BÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð ”i×&Ò&Ñ(Ô(ð (ð Œyð WÝ#¨3¬=×+?Ò+?Ñ+AÔ+AÐ$J C CÀsÈCÌIÑVÔVÐVðWøåð 	ð 	ð 	ØŒM×ÒÑÔÐØð	øøøð �cˆ{Ðs    ÁA C
Ã
CÃCÃCF& Æ&%Gz&/deepy_api/voice/{recording_id}/cancelc                óð   •— t           5  t                               t          | ¦  «        ¦  «        }|�*|j         ‰¦   «         u r|j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   ddiS )Nrƒ   T)r¢   r£   r   rs   rt   rƒ   r›   ©rŽ   rÈ   r°   s     €r   Úcancelz"mount_voice_routes.<locals>.cancelÎ   s±   ø€ åð 	$ð 	$Ý×#Ò#¥C¨Ñ$5Ô$5Ñ6Ô6ˆCØˆ 3¤;°+°+±-´-Ð#?Ð#?Ø”×!Ò!Ñ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð ˜TÐ"Ð"s   ‰AA)Á)A-Á0A-z/deepy_api/voice/{recording_id}c                óì   •— t           5  t                               t          | ¦  «        ¦  «        }|�|j         ‰¦   «         urt          dd¦  «        ‚d|j        icd d d ¦  «         S # 1 swxY w Y   d S )Néš  úVoice preparation ended.rŒ   )r¢   r£   r   rs   rt   r   rŒ   rË   s     €r   Úpreparation_statusz.mount_voice_routes.<locals>.preparation_statusÖ   sº   ø€ åð 	*ð 	*Ý×#Ò#¥C¨Ñ$5Ô$5Ñ6Ô6ˆCØˆ{˜cœk°°±´Ð>Ð>Ý# CÐ)CÑDÔDÐDØ˜cœjÐ)ð		*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ‰AA)Á)A-Á0A-z*/deepy_api/voice/{recording_id}/transcribe.Úfiler   c              “  ó–  •K  — t           5  t                               t          | ¦  «        ¦  «        }|�|j         ‰¦   «         urt          dd¦  «        ‚|j        rt          dd¦  «        ‚d|_        d d d ¦  «         n# 1 swxY w Y   	 t          |t          t          j
        ¦   «         ¦  «        dz  dz  t          h d£¬	¦  «        ƒ d {V —†}t           5  |j                             ¦   «         r-|                     d¬
¦  «         t          d|j        pd¦  «        ‚ ‰¦   «         |_        ||_        |j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   |j                             ¦   «         sf|                     ¦   «         ƒ d {V —†r|j                             ¦   «          t-          j        d¦  «        ƒ d {V —† |j                             ¦   «         ¯f|j        r0t          |j                             ¦   «         rdnd|j        ¦  «        ‚d|j        iS # t2          $ r |j                             ¦   «          ‚ w xY w)NrÎ   z6Voice preparation ended. Please start recording again.rO   z*This recording has already been submitted.TÚwangprQ   ¾   ú.m4aú.mp3ú.mp4ú.oggú.wavú.flacú.webm©r$   r&   r,   rÏ   rU   rÂ   r]   )r¢   r£   r   rs   rt   r   rŠ   r>   r   ÚtempfileÚ
gettempdirÚVOICE_LIMITr†   r”   r9   r‰   rC   r:   r„   r›   rÅ   rƒ   rÆ   rp   r]   r8   )rŽ   r½   rÑ   rÈ   r:   r°   r±   s        €€r   Útranscribe_preparedz/mount_voice_routes.<locals>.transcribe_preparedÞ   s  øè è € åð 	!ð 	!Ý×#Ò#¥C¨Ñ$5Ô$5Ñ6Ô6ˆCØˆ{˜cœk°°±´Ð>Ð>Ý# CÐ)aÑbÔbÐbØŒ}ð WÝ# CÐ)UÑVÔVÐVØ ˆCŒMð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð	Ý$ T­4µÔ0CÑ0EÔ0EÑ+FÔ+FÈÑ+PÐS`Ñ+`Õhsð  A{ð  A{ð  A{ð  |ñ  |ô  |ð  |ð  |ð  |ð  |ð  |ð  |ˆDÝ#ð &ð &Ø”8—?’?Ñ$Ô$ð VØ—K’K¨4�KÑ0Ô0Ð0Ý'¨¨S¬YÐ-TÐ:TÑUÔUÐUØ1Ð1Ñ3Ô3�”Ø�”Ø”×#Ò#Ñ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð ”h—o’oÑ'Ô'ð (Ø ×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ð (Ø”M×%Ò%Ñ'Ô'Ð'Ý”m BÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð ”h—o’oÑ'Ô'ð (ð Œyð WÝ#¨3¬=×+?Ò+?Ñ+AÔ+AÐ$J C CÀsÈCÌIÑVÔVÐVØ˜CœHÐ%Ð%øÝð 	ð 	ð 	ØŒM×ÒÑÔÐØð	øøøsE   ‹A)B Â BÂBÂAH# ÃA6EÅH# ÅEÅH# Å EÅ!CH# È#%Iz/deepy_api/transcribec              “  ól  •K  — t           ‰¦   «         j                             ¦   «         ¦  «        dk    r*|                      ¦   «         ƒ d {V —† t	          dd¦  «        ‚t          t          j        ¦   «         ¦  «        dz  dz  }t          | |t          h d£¬¦  «        ƒ d {V —†}	  ‰t          | ‰¦   «          ‰¦   «         ¬¦  «        ƒ d {V —†}d	|i|                     d
¬¦  «         S # t          $ r ‚ t          $ r}t	          dd|› �¦  «        |‚d }~ww xY w# |                     d
¬¦  «         w xY w)Nr   rM   rN   rÓ   rQ   rÔ   rÜ   )rt   rC   r]   Tr,   rÂ   zTranscription failed: )r    rc   rd   r7   r   r   rÝ   rÞ   r>   rß   r{   r9   rž   )rÑ   r#   r:   r]   r¤   r°   r±   r­   s        €€€r   Ú
transcribez&mount_voice_routes.<locals>.transcribeû   s©  øè è € å�k�k‘m”mÔ)×;Ò;Ñ=Ô=Ñ>Ô>À*ÒLÐLØ—*’*‘,”,ÐÐÐÐÐÐÐÝ Ð%]Ñ^Ô^Ð^Ý�Ô,Ñ.Ô.Ñ/Ô/°'Ñ9¸MÑIˆ	Ý   y½ð  QKð  QKð  QKð  Lñ  Lô  Lð  Lð  Lð  Lð  Lð  Lð  Lˆð	)Ø*Ð*Õ+?ÀÈ{È{É}Ì}ÐgyÐgyÑg{Ôg{Ð|Ñ|Ô|Ð|Ð|Ð|Ð|Ð|Ð|ˆDØ˜D�>ð �KŠK 4ˆKÑ(Ô(Ð(Ð(øõ ð 	ð 	ð 	ØÝð 	Nð 	Nð 	NÝ Ð%C¸cÐ%CÐ%CÑDÔDÈ#ÐMøøøøð	Nøøøøð �KŠK 4ˆKÑ(Ô(Ð(Ð(øøøs$   Â'-C+ Ã+DÃ?DÄDÄD ÄD3)rŽ   r¼   r½   r   )rŽ   r¼   )rŽ   r¼   r½   r   rÑ   r   )rÑ   r   )Úfastapir¬   Ústarlette.concurrencyr­   r   Úpost)Úappr°   rª   rC   r¬   r»   rÉ   rÌ   rÐ   rà   râ   r±   r­   s    ` `       @@r   Úmount_voice_routesrç   Ÿ   s  øøøø€ ØÐÐÐÐÐØ7Ð7Ð7Ð7Ð7Ð7ð2ð 2ð 2ð 2ð 2ð 2ð
 	‡W‚WÐ¨lÐ.@¸b€WÑAÔAð_ð _ð _ð _ð _ñ BÔAð_ð 	‡X‚XÐ7ÀlÐFXÐVX€XÑYÔYðð ð ð ð ñ ZÔYðð6 	‡X‚XÐ6À\ÐEWÐUW€XÑXÔXð#ð #ð #ð #ð #ñ YÔXð#ð 	‡W‚WÐ.¸\Ð=OÈR€WÑPÔPð*ð *ð *ð *ð *ñ QÔPð*ð 	‡X‚XÐ:ÈÐI[ÐY[€XÑ\Ô\Ø`dÐ`dÐehÑ`iÔ`ið ð ð ð ð ð ð ñ ]Ô\ðð8 	‡X‚XÐ%°LÐ4FÀB€XÑGÔGØ,0¨D°©I¬Ið )ð )ð )ð )ð )ð )ð )ð )ñ HÔGð)ð )ð )r   )rC   c                óš   ‡ ‡‡‡‡‡— t           rd S ddlmŠ ddlmŠm} ddlmŠ |j        Šˆˆˆ ˆˆˆfd„}t          |¦  «        |_        da d S )Nr   )ÚDepends)Ú
API_PREFIXÚApp)Úiter_app_routesc                 óš   •—  ‰	| i |¤Ž}t          ˆfd„ ‰|¦  «        D ¦   «         ¦  «        }t          | ‰|¦  «        g‰‰¬¦  «         |S )Nc              3  óV   •K  — | ]#}t          |d d¦  «        ‰› d�k    ¯|j        V — Œ$dS )r:   Nz/login_check)ÚgetattrÚendpoint)r   Úrouterê   s     €r   ú	<genexpr>z<install_gradio_routes.<locals>.create_app.<locals>.<genexpr>  sx   øè è € ð  Lð  L¨eÍwÐW\Ð^dÐfjÑOkÔOkÐr|ð  pKð  pKð  pKò  PKð  PK˜5œ>ð  PKð  PKð  PKð  PKð  Lð  Lr   )rª   r°   rC   )Únextrç   )
ÚargsÚkwargsræ   Úlogin_checkrê   ré   r°   rì   rC   Úoriginals
       €€€€€€r   Ú
create_appz)install_gradio_routes.<locals>.create_app  s‰   ø€ Øˆh˜Ð' Ð'Ð'ˆÝð  Lð  Lð  Lð  L°°ÀsÑ7KÔ7Kð  Lñ  Lô  Lñ  Lô  LˆÝ˜3¨g¨g°kÑ.BÔ.BÐ-CÐQ\ÐgoÐpÑpÔpÐpØˆ
r   T)
Ú
_installedrã   ré   Úgradio.routesrê   rë   Úshared.utils.fastapi_routesrì   rø   Ústaticmethod)r°   rC   rë   rø   rê   ré   rì   r÷   s   ``  @@@@r   Úinstall_gradio_routesrý     s¤   øøøøøø€ åð ØˆØÐÐÐÐÐØ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø;Ð;Ð;Ð;Ð;Ð;àŒ~€Hðð ð ð ð ð ð ð ð ð õ " *Ñ-Ô-€C„NØ€J€J€Jr   )r"   r   r#   r   r$   r%   r&   r'   r!   r(   r)   r   )"r©   Ú
__future__r   r�   rf   rÝ   r1   r    rÆ   Úpathlibr   Úshared.utils.media_importsr   rã   r   r   r   Úshared.deepy.configr	   r
   ÚLockrb   rù   r£   r¢   rß   r   r   r    r>   r{   r}   rç   rý   r   r   r   ú<module>r     sÝ  ðà OÐ OØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XàˆiŒnÑÔ€Ø€
Ø€Ø#�Y”^Ñ%Ô%Ð Ø€Ø+€ð @ð  @ð  @Ð ðð ð ð {@ð ð ð ð ð ð ð. 59ÈÐ_kÐ_kð  |Nð  |Nð 'Fð 'Fð 'Fð 'Fð 'FðT:/ð :/ð :/ð :/ð :/ñ :/ô :/ð :/ðz :>Èð k)ð k)ð k)ð k)ð k)ð\ 48ð ð ð ð ð ð ð r   