§
    é%Âj¬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	Z	ddl
Z
ddlZddlmZmZ ddlmZ ddlZddlmZ ddlmZ d	Zd
Zedz  ez  ZdZdZdZ ej        e¦  «        Z G d„ de¦  «        Z G d„ de ¦  «        Z! G d„ d¦  «        Z" G d„ de"¦  «        Z# G d„ de"¦  «        Z$d„ Z%d„ Z&e G d„ d¦  «        ¦   «         Z' G d„ d¦  «        Z(dS )zLBounded, memory-only push-to-talk. Identity is pinned before capture starts.é    )ÚannotationsN)Ú	dataclassÚfield)ÚProtocolé   )ÚControlError)Úsplit_targetéD¬  é   é   i:  iè  z!@cf/openai/whisper-large-v3-turboc                  ó   — e Zd Zdd„ZdS )ÚSpeechToTextProviderÚ	wav_bytesÚbytesÚreturnÚstrc              ƒ  ó
   K  — d S ©N© )Úselfr   s     ú^/home/lighthouse/esp32-dev/.cache/wifi-fallback-speech-ab-0.5.1/server/device_gateway/voice.pyÚ
transcribezSpeechToTextProvider.transcribe   s
   è è € € € ó    N)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   € € € € € Ø<Ð<Ð<Ð<Ð<Ð<r   r   c                  ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚTranscriptionErrorc                óJ   •— t          ¦   «                              d¦  «         d S )NúTranscription failed)ÚsuperÚ__init__)r   Ú	__class__s    €r   r"   zTranscriptionError.__init__#   s"   ø€ Ý‰Œ×ÒÐ/Ñ0Ô0Ð0Ð0Ð0r   )r   r   r   r"   Ú__classcell__)r#   s   @r   r   r   "   s8   ø€ € € € € ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r   r   c                  ó*   — e Zd ZU dZded<   ddœd„ZdS )Ú_HttpSTTProviderNzfloat | NoneÚlast_request_secondsF)Úunwrap_resultc          	   ‹  óÎ  K  — t          j        ¦   «         d }}d | _        	 t          j        d¦  «        4 ƒd {V —† t          j        dd¬¦  «        4 ƒd {V —†} |j        |fddd| j        z   ii|¤Žƒ d {V —†}|j	        }| 
                    ¦   «          |                     ¦   «         }|rB|                     d¦  «        dus|                     d	¦  «        rt          ¦   «         ‚|d
         }|d         }	t          |	t          ¦  «        st          ¦   «         ‚d                     d„ |	D ¦   «         ¦  «                             ¦   «         }	|	r&t%          |	                     d¦  «        ¦  «        dk    rt          ¦   «         ‚|	cd d d ¦  «        ƒd {V —† cd d d ¦  «        ƒd {V —† t          j        ¦   «         |z
  | _        t(                               d| j        || j        ¦  «         S # 1 ƒd {V —†swxY w Y   	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   nA# t
          j        t0          t          t2          t4          t6          f$ r t9          ¦   «         d ‚w xY wt          j        ¦   «         |z
  | _        t(                               d| j        || j        ¦  «         d S # t          j        ¦   «         |z
  | _        t(                               d| j        || j        ¦  «         w xY w)Né   F)ÚtimeoutÚfollow_redirectsÚheadersÚAuthorizationzBearer ÚsuccessTÚerrorsÚresultÚtextÚ c              3  óH   K  — | ]}|d v st          |¦  «        dk    ¯|V — ŒdS ©z
	é    N©Úord©Ú.0Úcs     r   ú	<genexpr>z)_HttpSTTProvider._post.<locals>.<genexpr>?   s4   è è € Ð"RÐ"R¨°a¸6°k°kÅSÈÁVÄVÈrÂ\À\ 1À\À\À\À\Ð"RÐ"Rr   úutf-8é   z.STT provider=%s status=%s request_seconds=%.3f)ÚtimeÚ	monotonicr'   Úasyncior+   ÚhttpxÚAsyncClientÚpostÚapi_keyÚstatus_codeÚraise_for_statusÚjsonÚgetÚ
ValueErrorÚ
isinstancer   ÚjoinÚstripÚlenÚencodeÚloggerÚinfoÚprovider_nameÚ	HTTPErrorÚTimeoutErrorÚKeyErrorÚ	TypeErrorÚAttributeErrorr   )
r   Úurlr(   ÚkwargsÚstartedÚstatusÚclientÚresponseÚpayloadr2   s
             r   Ú_postz_HttpSTTProvider._post+   sU  è è € Ýœ.Ñ*Ô*¨D�ˆØ$(ˆÔ!ð	Oõ ” rÑ*Ô*ð  ð  ð  ð  ð  ð  ð  ð  Ý Ô,°RÈ%ÐPÑPÔPð  ð  ð  ð  ð  ð  ð  ÐTZØ%0 V¤[°ð &Wð &WØ!0°)¸d¼lÑ2JÐ Kð&WØOUð&Wð &Wð  Wð  Wð  Wð  Wð  Wð  W�Hà%Ô1�FØ×-Ò-Ñ/Ô/Ð/Ø&Ÿmšm™oœo�GØ$ð 4Ø"Ÿ;š; yÑ1Ô1¸Ð=Ð=ÀÇÂÈXÑAVÔAVÐ=Ý",¡,¤,Ð.Ø")¨(Ô"3˜Ø" 6œ?�DÝ% d­CÑ0Ô0ð +Ý(™lœlÐ*ØŸ7š7Ð"RÐ"R¨dÐ"RÑ"RÔ"RÑRÔR×XÒXÑZÔZ�DØð +¥3 t§{¢{°7Ñ';Ô';Ñ#<Ô#<¸tÒ#CÐ#CÝ(™lœlÐ*Øð! ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  ð ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  õ, )-¬Ñ(8Ô(8¸7Ñ(BˆDÔ%Ý�KŠKÐHØÔ*¨F°DÔ4MñOô Oð Oð Oð- ð  ð  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øøõ$ ”¥­z½8ÅYÕP^Ð_ð 	1ð 	1ð 	1å$Ñ&Ô&¨DÐ0ð	1øøøõ )-¬Ñ(8Ô(8¸7Ñ(BˆDÔ%Ý�KŠKÐHØÔ*¨F°DÔ4MñOô Oð Oð Oð Oøõ )-¬Ñ(8Ô(8¸7Ñ(BˆDÔ%Ý�KŠKÐHØÔ*¨F°DÔ4MñOô Oð Oð Oøøøsl    H ºH	ÁD'G%Å>H	ÆH Ç%
G/	Ç/H	Ç2G/	Ç3H	Ç7H È	
HÈH ÈHÈH ÈJ  È>IÉJ  Ê AK$)r   r   r   r'   Ú__annotations__r_   r   r   r   r&   r&   '   sK   € € € € € € à)-ÐÐ-Ð-Ð-Ñ-à05ð Oð Oð Oð Oð Oð Oð Or   r&   c                  ó    — e Zd ZdZdd„Zd„ ZdS )ÚOpenAICompatibleSTTúopenai-compatibleNc                óf   — |                      d¦  «        ||c| _        | _        | _        || _        d S )Nú/)ÚrstripÚbase_urlrE   ÚmodelÚinitial_prompt)r   rg   rE   rh   ri   s        r   r"   zOpenAICompatibleSTT.__init__O   s3   € Ø2:·/²/À#Ñ2FÔ2FÈÐQVÐ/ˆŒ�t”| T¤ZØ,ˆÔÐÐr   c              ƒ  ó�   K  — d| j         i}| j        r
| j        |d<   |                      | j        dz   |dd|dfi¬¦  «        ƒ d {V —†S )Nrh   Úpromptz/audio/transcriptionsÚfilez	voice.wavz	audio/wav)ÚdataÚfiles)rh   ri   r_   rg   )r   r   rm   s      r   r   zOpenAICompatibleSTT.transcribeS   s†   è è € Ø˜œÐ$ˆØÔð 	1Ø!Ô0ˆD�‰NØ—Z’Z ¤Ð0GÑ GÈdØ˜K¨°KÐ@ÐAð  ñ Cô Cð Cð Cð Cð Cð Cð Cð 	Cr   r   )r   r   r   rR   r"   r   r   r   r   rb   rb   L   sA   € € € € € Ø'€Mð-ð -ð -ð -ðCð Cð Cð Cð Cr   rb   c                  ó$   — e Zd ZdZedfd„Zd„ ZdS )ÚCloudflareWorkersAISttProviderúcloudflare-workers-aiNc                ó@   — |||c| _         | _        | _        || _        d S r   )Ú
account_idrE   rh   ri   )r   rs   rE   rh   ri   s        r   r"   z'CloudflareWorkersAISttProvider.__init__^   s&   € Ø4>ÀÈÐ1ˆŒ˜œ t¤zØ,ˆÔÐÐr   c              ƒ  óØ   K  — t          j        |¦  «                             d¦  «        ddœ}| j        r
| j        |d<   |                      d| j        › d| j        › �d|¬¦  «        ƒ d {V —†S )	NÚasciir   )ÚaudioÚtaskri   z.https://api.cloudflare.com/client/v4/accounts/z/ai/run/T)r(   rH   )Úbase64Ú	b64encodeÚdecoderi   r_   rs   rh   )r   r   r^   s      r   r   z)CloudflareWorkersAISttProvider.transcribeb   s�   è è € å"Ô,¨YÑ7Ô7×>Ò>¸wÑGÔGÐQ]Ð^Ð^ˆØÔð 	<Ø(,Ô(;ˆGÐ$Ñ%à—Z’ZØb¸T¼_ÐbÐbÐVZÔV`ÐbÐbØ Wð  ñ .ô .ð .ð .ð .ð .ð .ð .ð 	.r   )r   r   r   rR   ÚCF_STT_MODELr"   r   r   r   r   rp   rp   [   sA   € € € € € Ø+€Mà2>Ètð -ð -ð -ð -ð.ð .ð .ð .ð .r   rp   c                 óŠ  — t           j                             d¦  «        } t           j                             d¦  «        pd }| dk    r|t           j                             d¦  «        }t           j                             d¦  «        }t           j                             d¦  «        pt          }|r|rt	          ||||¦  «        nd S | dk    rzd„ d	D ¦   «         }|d
         rI|d
                              d¦  «        dk    r*|d         s"t           j                             d¦  «        |d<   t          |¦  «        rt          |d|iŽnd S d S )NÚGATEWAY_STT_PROVIDERÚGATEWAY_STT_INITIAL_PROMPTrq   ÚGATEWAY_CF_ACCOUNT_IDÚGATEWAY_CF_API_TOKENÚGATEWAY_STT_MODELrc   c                óR   — g | ]$}t           j                             d |z   ¦  «        ‘Œ%S )ÚGATEWAY_STT_)ÚosÚenvironrI   )r:   Únames     r   ú
<listcomp>z"configured_stt.<locals>.<listcomp>v   s+   € ÐeÐeÐe¸D•"”*—.’. °$Ñ!6Ñ7Ô7ÐeÐeÐer   )ÚBASE_URLÚAPI_KEYÚMODELr   re   zhttps://api.groq.com/openai/v1r   ÚGROQ_API_KEYri   )r„   r…   rI   r{   rp   rf   Úallrb   )Úproviderrk   ÚaccountÚtokenrh   Úvaluess         r   Úconfigured_sttr‘   m   s8  € ÝŒz�~Š~Ð4Ñ5Ô5€HÝŒZ�^Š^Ð8Ñ9Ô9ÐA¸T€FØÐ*Ò*Ð*Ý”*—.’.Ð!8Ñ9Ô9ˆÝ”
—’Ð5Ñ6Ô6ˆÝ”
—’Ð2Ñ3Ô3ÐCµ|ˆØPWÐkÐ\aÐkÕ-¨g°u¸eÀVÑLÔLÐLÐgkÐkØÐ&Ò&Ð&ØeÐeÐDdÐeÑeÔeˆà�!Œ9ð 	7˜ œ×)Ò)¨#Ñ.Ô.Ð2RÒRÐRÐ[aÐbcÔ[dÐRÝœ
Ÿš ~Ñ6Ô6ˆF�1‰IÝFIÈ&ÁkÄkÐ[Õ" FÐB¸6ÐBÐBÐBÐW[Ð[Øˆ4r   c                ó\  — t          j        ¦   «         }t          j        |d¦  «        5 }|                     d¦  «         |                     d¦  «         |                     t          ¦  «         |                     | ¦  «         d d d ¦  «         n# 1 swxY w Y   | 	                    ¦   «         S )NÚwbr   r   )
ÚioÚBytesIOÚwaveÚopenÚsetnchannelsÚsetsampwidthÚsetframerateÚSAMPLE_RATEÚwriteframesÚgetvalue)ÚpcmÚoutputÚstreams      r   Úwav_pcmr¡   ~   sÓ   € ÝŒZ‰\Œ\€FÝ	Œ�6˜4Ñ	 Ô	 ð   FØ×Ò˜AÑÔÐØ×Ò˜AÑÔÐØ×Ò�KÑ(Ô(Ð(Ø×Ò˜3ÑÔÐð	 ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð
 �?Š?ÑÔÐs   ©ABÂBÂBc                  óø   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   dZded	<    eed
¬¦  «        Zded<   dZded<    edd
¬¦  «        Z	ded<    edd
¬¦  «        Z
ded<    edd
¬¦  «        Zded<   dS )ÚVoiceRequestr   Úvoice_idÚ
connectionÚtargetÚagentÚ
session_idr†   Ú	RECORDINGÚstateF)Údefault_factoryÚreprÚ	bytearrayrž   r   ÚintÚsequencer3   )Údefaultr¬   Ú
transcriptNzasyncio.Task | Nonerw   zasyncio.TimerHandle | NoneÚtimer)r   r   r   r`   rª   r   r­   rž   r¯   r±   rw   r²   r   r   r   r£   r£   ˆ   sê   € € € € € € à€M€M�MØ€O€O�OØ€K€K�KØ€J€J�JØ€O€O�OØ€I€I�IØ€EÐÐÐÑØ�U¨9¸5ÐAÑAÔA€CÐAÐAÐAÑAØ€HÐÐÐÑØ�e B¨UÐ3Ñ3Ô3€JÐ3Ð3Ð3Ñ3Ø % ¨d¸Ð ?Ñ ?Ô ?€DÐ?Ð?Ð?Ñ?Ø(-¨°dÀÐ(GÑ(GÔ(G€EÐGÐGÐGÑGÐGÐGr   r£   c                  óZ   — e Zd Zd„ Zd„ Zd„ Zdd„Zdddœd	„Zd
„ Zd„ Z	d„ Z
d„ Zd„ Zd„ ZdS )ÚVoiceManagerc                ó    — |||c| _         | _        | _        |||c| _        | _        | _        i | _        i | _        t          ¦   «         | _	        d S r   )
r�   Ú
target_forÚadapter_forÚsendÚ
is_currentÚapproval_pendingÚrequestsÚseenÚsetÚtasks)r   r�   r¶   r·   r¸   r¹   rº   s          r   r"   zVoiceManager.__init__™   sO   € Ø;CÀZÐQ\Ð8ˆŒ�t”¨Ô(8Ø<@À*ÐN^Ð9ˆŒ	�4”? DÔ$9ØˆŒØˆŒ	Ý‘U”UˆŒ
ˆ
ˆ
r   c                ó    — t          j        |¦  «        }| j                             |¦  «         |                     | j        j        ¦  «         |S r   )rA   Úcreate_taskr¾   ÚaddÚadd_done_callbackÚdiscard)r   Úcororw   s      r   ÚspawnzVoiceManager.spawn    sD   € ÝÔ" 4Ñ(Ô(ˆØŒ
�Š�tÑÔÐØ×Ò˜tœzÔ1Ñ2Ô2Ð2Øˆr   c                óÞ   — | j                              |j        ¦  «        |u oL|                      |¦  «        o7|                      |j        ¦  «        |j        k    o|                      ¦   «          S r   )r»   rI   Úconnection_idr¹   r¶   Ú	device_idr¦   rº   ©r   ÚdeviceÚrequests      r   ÚvalidzVoiceManager.valid¦   so   € Ø”×!Ò! &Ô"6Ñ7Ô7¸7ÐBð hÀtÇÂÐW]ÑG^ÔG^ð hØ—O’O FÔ$4Ñ5Ô5¸¼ÒGðhØPT×PeÒPeÑPgÔPgÐLgð	ir   Úvoice_statec              ‹  óÄ   K  — |                       |¦  «        rH|                      |t          d||j        |j        |j        |j        |j        dœ|¤Ž¦  «        ƒ d {V —† d S d S )N)Útyper¤   rª   r§   r¨   r†   r   )r¹   r¸   Údictr¤   rª   r§   r¨   r†   )r   rÊ   rË   ÚkindÚextras        r   ÚemitzVoiceManager.emitª   s°   è è € Ø�?Š?˜6Ñ"Ô"ð 	aØ—)’)˜F¥Dð %`¨d¸WÔ=MÐU\ÔUbØ”m°Ô0BÈÌð%`ð %`ØY^ð%`ð %`ñ aô að að að að að að að að að að	að 	ar   TF)ÚnotifyÚforgetc               óê  — | j                              |j        d ¦  «        }|r¬|j        r|j                             ¦   «          |j        r3|j        t          j        ¦   «         ur|j                             ¦   «          d|_        |j	         
                    ¦   «          d|_        |r)|                      |                      ||¦  «        ¦  «         |r"| j                             |j        d ¦  «         d S d S )NÚ	CANCELLEDr3   )r»   ÚpoprÇ   r²   Úcancelrw   rA   Úcurrent_taskrª   rž   Úclearr±   rÅ   Úemit_safelyr¼   )r   rÊ   rÔ   rÕ   rË   s        r   rÙ   zVoiceManager.cancel¯   só   € Ø”-×#Ò# FÔ$8¸$Ñ?Ô?ˆØð 		>ØŒ}ð 'Ø”×$Ò$Ñ&Ô&Ð&ØŒ|ð & ¤µGÔ4HÑ4JÔ4JÐ JÐ JØ”×#Ò#Ñ%Ô%Ð%Ø'ˆGŒMØŒK×ÒÑÔÐØ!#ˆGÔØð >Ø—
’
˜4×+Ò+¨F°GÑ<Ô<Ñ=Ô=Ð=Øð 	6ØŒI�MŠM˜&Ô.°Ñ5Ô5Ð5Ð5Ð5ð	6ð 	6r   c              ƒ  óf   K  — 	 |                       ||¦  «        ƒ d {V —† d S # t          $ r Y d S w xY wr   )rÓ   Ú	ExceptionrÉ   s      r   rÜ   zVoiceManager.emit_safely¾   sY   è è € ð	Ø—)’)˜F GÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øÝð 	ð 	ð 	ØˆDˆDð	øøøs   „" ¢
0¯0c              ƒ  óf  ‡ ‡‡‡K  — ‰                      d¦  «        ‰                      d¦  «        }}t          |t          ¦  «        rt          j        d|¦  «        sd S ‰                      ‰¦  «        sd S |dk    �r&‰ j                             ‰j        t          ¦   «         ¦  «        }||v st          |¦  «        dk    rd S |                     |¦  «         ‰                      ‰¦  «         ‰                      ‰j        ¦  «        }t          |¦  «        }|s"‰                      ‰d|ddœ¦  «        ƒ d {V —† d S ‰                      ¦   «         rd S |\  }}	t%          ˆfd	„d
D ¦   «         ¦  «        r"‰                      ‰d|ddœ¦  «        ƒ d {V —† d S t'          |‰j        |||	|	¦  «        Š‰‰ j        ‰j        <   	 ‰                      |¦  «                             |	¦  «        ƒ d {V —†}
‰                      ‰‰¦  «        s‰                      ‰¦  «         d S |
j        ‰_        t3          j        ¦   «                              t8          ˆˆˆ fd„¦  «        ‰_        ‰                      ‰‰¦  «        ƒ d {V —† n-# t>          $ r  ‰                       ‰‰d¦  «        ƒ d {V —† Y nw xY wd S ‰ j                              ‰j        ¦  «        Š‰r‰j!        |k    rd S ‰                      ‰‰¦  «        s‰                      ‰¦  «         d S |dk    s|dk    r0‰                      d¦  «        dk    r‰                      ‰¦  «         d S |dk    �r}‰j"        dk    �rq	 ‰                      d¦  «        }t          |t          ¦  «        rt          |¦  «        dk    rtG          ¦   «         ‚tI          j%        |d¬¦  «        }tM          ‰                      d¦  «        ¦  «        tN          usz‰d         ‰j(        k    si|rgt          |¦  «        dz  sUt          |¦  «        tR          k    s=t          ‰j*        ¦  «        t          |¦  «        z   tV          k    s‰j(        tX          k    rtG          ¦   «         ‚‰j*         -                    |¦  «         ‰xj(        dz  c_(        d S # tF          t\          j/        f$ r ‰                      ‰¦  «         Y d S w xY w|dk    r‰  0                    ‰‰¦  «        ƒ d {V —† d S |dk    rÇ‰                      d¦  «        dk    r°‰j"        dk    r§d‰_"        ‰j1        dc}‰_1        	 ‰                      ‰j2        ¦  «         3                    ‰j4        |¦  «        ƒ d {V —† d ‰_"        ‰                      ‰‰¦  «        ƒ d {V —† d S # t>          $ r! ‰                       ‰‰d!¦  «        ƒ d {V —† Y d S w xY wd S d S d S )"NrÏ   r¤   z[A-Za-z0-9_-]{1,64}Úvoice_starté   Úvoice_errorzNO AGENT SELECTED)rÏ   r¤   Úmessagec              3  óP   •K  — | ] \  }}‰                      |¦  «        |k    V — Œ!d S r   )rI   )r:   ÚkÚvÚevents      €r   r<   z&VoiceManager.handle.<locals>.<genexpr>Ø   s6   øè è € ÐdÐd©¨¨A�5—9’9˜Q‘<”< 1Ò$ÐdÐdÐdÐdÐdÐdr   ))Úsample_rater
   )Úbitsé   )Úchannelsr   zUnsupported audio formatc                 óV   •— ‰                      ‰                     ‰ ‰¦  «        ¦  «        S r   )rÅ   Úend)rÊ   Úreqr   s   €€€r   ú<lambda>z%VoiceManager.handle.<locals>.<lambda>æ   s!   ø€ ˜DŸJšJ t§x¢x°¸Ñ'<Ô'<Ñ=Ô=€ r   zAgent unavailableÚvoice_cancelÚvoice_decisionÚdecisionrÙ   Úvoice_chunkr©   rv   iø  T)Úvalidater¯   r   r   Ú	voice_endr¸   ÚAWAITING_CONFIRMATIONÚSENDINGr3   ÚSENTz0Input failed; check Agent status before retrying)5rI   rK   r   ÚreÚ	fullmatchr¹   r¼   Ú
setdefaultrÇ   r½   rN   rÁ   rÙ   r¶   rÈ   r	   r¸   rº   Úanyr£   r»   r·   Úget_sessionrÌ   r†   rA   Úget_running_loopÚ
call_laterÚMAX_SECONDSr²   rÓ   rÞ   Úfailr¤   rª   rJ   rx   Ú	b64decoderÏ   r®   r¯   ÚCHUNK_BYTESrž   Ú	MAX_BYTESÚ
MAX_CHUNKSÚextendÚbinasciiÚErrorrí   r±   r§   Ú
send_inputr¨   )r   rÊ   rç   rÑ   ÚvidÚusedr¦   Úparsedr§   ÚsidÚsessionrv   rž   r±   rî   s   ```           @r   ÚhandlezVoiceManager.handleÄ   s^  øøøøè è € Ø—I’I˜fÑ%Ô% u§y¢y°Ñ'<Ô'<ˆcˆÝ˜#�sÑ#Ô#ð 	­2¬<Ð8NÐPSÑ+TÔ+Tð 	ØˆFØ�Š˜vÑ&Ô&ð 	ØˆFØ�=Ò Ñ Ø”9×'Ò'¨Ô(<½c¹e¼eÑDÔDˆDØ�dˆ{ˆ{�c $™iœi¨3Ò.Ð.Ø�Ø�HŠH�S‰MŒMˆMØ�KŠK˜ÑÔÐØ—_’_ VÔ%5Ñ6Ô6ˆFÝ! &Ñ)Ô)ˆFØð Ø—i’i °ÈÐWjÐ(kÐ(kÑlÔlÐlÐlÐlÐlÐlÐlÐlØ�Ø×$Ò$Ñ&Ô&ð Ø�Ø‰JˆE�3ÝÐdÐdÐdÐdÐ1cÐdÑdÔdÑdÔdð Ø—i’i °ÈÐWqÐ(rÐ(rÑsÔsÐsÐsÐsÐsÐsÐsÐsØ�õ ˜s FÔ$8¸&À%ÈÈcÑRÔRˆCØ25ˆDŒM˜&Ô.Ñ/ð
BØ $× 0Ò 0°Ñ 7Ô 7× CÒ CÀCÑ HÔ HÐHÐHÐHÐHÐHÐH�Ø—z’z &¨#Ñ.Ô.ð Ø—K’K Ñ'Ô'Ð'Ø�FØ"œ<�”Ý#Ô4Ñ6Ô6×AÒAÅ+Ø=Ð=Ð=Ð=Ð=Ð=ñ?ô ?�”	à—i’i ¨Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øÝð Bð Bð BØ—i’i ¨Ð-@ÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAðBøøøàˆFØŒm×Ò Ô 4Ñ5Ô5ˆØð 	�c”l cÒ)Ð)ØˆFØ�zŠz˜& #Ñ&Ô&ð 	Ø�KŠK˜ÑÔÐØˆFØ�>Ò!Ð! dÐ.>Ò&>Ð&>À5Ç9Â9ÈZÑCXÔCXÐ\dÒCdÐCdØ�KŠK˜ÑÔÐÐÐØ�]Ò"Ñ" s¤y°KÒ'?Ñ'?ð$ØŸ	š	 'Ñ*Ô*�Ý! %­Ñ-Ô-ð 'µ°U±´¸dÒ1BÐ1BÝ$™,œ,Ð&ÝÔ& u°tÐ<Ñ<Ô<�Ý˜Ÿš :Ñ.Ô.Ñ/Ô/µsÐ:Ð:¸eÀJÔ>OÐSVÔS_Ò>_Ð>_Ø"ð ?`Ý&)¨#¡h¤h°¡lð ?`Ý69¸#±h´hÅÒ6LÐ6LÝ˜sœw™<œ<­#¨c©(¬(Ñ2µYÒ>Ð>À#Ä,ÕR\ÒB\ÐB\Ý$™,œ,Ð&Ø”—’˜sÑ#Ô#Ð#Ø�” Ñ!�”��øÝ¥¤Ð/ð $ð $ð $Ø—’˜FÑ#Ô#Ð#Ð#Ð#Ð#ð$øøøà�[Ò Ð Ø—(’(˜6 3Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÐ%Ò%Ð%¨%¯)ª)°JÑ*?Ô*?À6Ò*IÐ*IÈcÌiÐ[rÒNrÐNrà!ˆCŒIØ),¬¸Ð&ˆJ˜œðaØ×&Ò& s¤yÑ1Ô1×<Ò<¸S¼^ÈZÑXÔXÐXÐXÐXÐXÐXÐXÐXØ"�”	Ø—i’i ¨Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øÝð að að aØ—i’i ¨Ð-_Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ðaøøøð &Ð%Ð*IÐ*IÐNrÐNrs@   Æ8AI2 ÈAI2 É2'JÊJÍD<R
 Ò
+R9Ò8R9Ô!AU? Õ?'V*Ö)V*c              ƒ  ó2  K  — |j         dk    s|                      ||¦  «        sd S |j        r|j                             ¦   «          d|_         |                      ||¦  «        ƒ d {V —† |                      |                      ||¦  «        ¦  «        |_        d S )Nr©   ÚTRANSCRIBING)rª   rÌ   r²   rÙ   rÓ   rÅ   r   rw   )r   rÊ   rî   s      r   rí   zVoiceManager.end  s›   è è € ØŒ9˜Ò#Ð#¨4¯:ª:°f¸cÑ+BÔ+BÐ#ØˆFØŒ9ð 	ØŒI×ÒÑÔÐØ"ˆŒ	Ø�iŠi˜ Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø—:’:˜dŸošo¨f°cÑ:Ô:Ñ;Ô;ˆŒˆˆr   c              ƒ  ó(  K  — 	 | j         r|j        st          ¦   «         ‚t          |j        ¦  «        }|j                             ¦   «          t          j        | j                              |¦  «        d¦  «        ƒ d {V —†}t          |t          ¦  «        r1d 
                    d„ |D ¦   «         ¦  «                             ¦   «         }t          |t          ¦  «        r(|r&t          |                     d¦  «        ¦  «        dk    rt          ¦   «         ‚|                      ||¦  «        s	 |j                             ¦   «          d S |                     ¦   «         dc|_        |_        |                      ||d|j        ¬¦  «        ƒ d {V —† nR# t
          j        $ r ‚ t&          $ r6 |                      ||¦  «        r|                      ||d	¦  «        ƒ d {V —† Y nw xY w|j                             ¦   «          d S # |j                             ¦   «          w xY w)
Né   r3   c              3  óH   K  — | ]}|d v st          |¦  «        dk    ¯|V — ŒdS r5   r7   r9   s     r   r<   z*VoiceManager.transcribe.<locals>.<genexpr>  s4   è è € ÐNÐN Q°!°v°+°+ÅÀQÁÄÈ2ÂÀ˜qÀÀÀÀÐNÐNr   r=   r>   rö   Úvoice_transcript)r±   r    )r�   rž   rJ   r¡   rÛ   rA   Úwait_forr   rK   r   rL   rM   rN   rO   rÌ   r±   rª   rÓ   ÚCancelledErrorrÞ   r  )r   rÊ   rî   rv   r2   s        r   r   zVoiceManager.transcribe  s  è è € ð	Ø”=ð #¨¬ð #Ý ‘l”lÐ"Ý˜CœGÑ$Ô$ˆEØŒG�MŠM‰OŒOˆOÝ Ô)¨$¬-×*BÒ*BÀ5Ñ*IÔ*IÈ2ÑNÔNÐNÐNÐNÐNÐNÐNˆDÝ˜$¥Ñ$Ô$ð WØ—w’wÐNÐN¨$ÐNÑNÔNÑNÔN×TÒTÑVÔV�Ý˜d¥CÑ(Ô(ð #°ð #½¸D¿KºKÈÑ<PÔ<PÑ8QÔ8QÐTXÒ8XÐ8XÝ ‘l”lÐ"Ø—:’:˜f cÑ*Ô*ð Øð ŒG�MŠM‰OŒOˆOˆOˆOð )-¯
ª
©¬Ð6MÐ%ˆCŒN˜CœIØ—)’)˜F CÐ);ÈÌ�)ÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWøÝÔ%ð 	ð 	ð 	ØÝð 	Eð 	Eð 	EØ�zŠz˜& #Ñ&Ô&ð EØ—i’i ¨Ð-CÑDÔDÐDÐDÐDÐDÐDÐDÐDøøð	Eøøøð ŒG�MŠM‰OŒOˆOˆOˆOøˆCŒG�MŠM‰OŒOˆOˆOøøøs2   „D#F	 ÅAF	 ÆG6 Æ	AGÇG6 ÇGÇG6 Ç6Hc              ƒ  óØ   K  — d\  |_         |_        |j                             ¦   «          |j        r|j                             ¦   «          |                      ||d|¬¦  «        ƒ d {V —† d S )N)ÚFAILEDr3   râ   )rã   )rª   r±   rž   rÛ   r²   rÙ   rÓ   )r   rÊ   rî   rã   s       r   r  zVoiceManager.fail.  ss   è è € Ø$0Ñ!ˆŒ	�3”>ØŒ�Š‰ŒˆØŒ9ð 	ØŒI×ÒÑÔÐØ�iŠi˜  ]¸GˆiÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDr   c              ƒ  óš  K  — | j                              ¦   «         D ]B}|j        r|j                             ¦   «          |j                             ¦   «          d|_        ŒC| j                              ¦   «          | j                             ¦   «          | j        D ]}|                     ¦   «          Œt          j
        | j        ddiŽƒ d {V —† d S )Nr3   Úreturn_exceptionsT)r»   r�   r²   rÙ   rž   rÛ   r±   r¼   r¾   rA   Úgather)r   rî   rw   s      r   ÚclosezVoiceManager.close5  sÆ   è è € Ø”=×'Ò'Ñ)Ô)ð 	 ð 	 ˆCØŒyÐ,˜#œ)×*Ò*Ñ,Ô,Ð,ØŒG�MŠM‰OŒOˆOØˆCŒNˆNØŒ×ÒÑÔÐØŒ	�ŠÑÔÐØ”JÐ-Ð-ˆD §¢¡¤  ÝŒn˜dœjÐA¸DÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAr   N)rÍ   )r   r   r   r"   rÅ   rÌ   rÓ   rÙ   rÜ   r  rí   r   r  r  r   r   r   r´   r´   ˜   så   € € € € € ðð ð ðð ð ðið ið iðað að að að
 (,°Eð 6ð 6ð 6ð 6ð 6ðð ð ðHað Hað HaðT<ð <ð <ðð ð ð.Eð Eð EðBð Bð Bð Bð Br   r´   ))Ú__doc__Ú
__future__r   rA   rx   r  r”   Úloggingr„   rù   r?   r–   Údataclassesr   r   Útypingr   rB   Úcontrol.modelsr   rª   r	   r›   r   r  r  r  r{   Ú	getLoggerr   rP   r   ÚRuntimeErrorr   r&   rb   rp   r‘   r¡   r£   r´   r   r   r   ú<module>r&     s�  ðØ RÐ RØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð à €€€à (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð à€Ø€Ø˜!‰O˜kÑ)€	Ø€Ø€
Ø2€Ø	ˆÔ	˜8Ñ	$Ô	$€ð=ð =ð =ð =ð =˜8ñ =ô =ð =ð1ð 1ð 1ð 1ð 1˜ñ 1ô 1ð 1ð
"Oð "Oð "Oð "Oð "Oñ "Oô "Oð "OðJCð Cð Cð Cð CÐ*ñ Cô Cð Cð.ð .ð .ð .ð .Ð%5ñ .ô .ð .ð$ð ð ð"ð ð ð ðHð Hð Hð Hð Hñ Hô Hñ „ðHðeBð eBð eBð eBð eBñ eBô eBð eBð eBð eBr   