§
    	tÃjF9  ã                   óŠ  — 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
Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZmZmZ d d
lm Z  d dl!m"Z"m#Z#m$Z$m%Z%  G d„ d¦  «        Z& G d„ d¦  «        Z'dd„Z(dd„Z)e
j*         +                    dddg¦  «        d„ ¦   «         Z,d„ Z-d„ Z.d„ Z/d„ Z0dS )é    N)ÚSimpleNamespace)Úpatch)Ú
TestClient)ÚDeviceCredentialStore)ÚApprovalRegistry)ÚAgentSessionÚControlErrorÚProjectÚSettings)ÚProjectRegistry)Úquick_catalogÚvalidate_settingsÚsettings_view)ÚTargetStore)ÚVoiceManagerÚ	MAX_BYTESÚ
MAX_CHUNKSÚwav_pcmc                   ó@   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ dœd„Zd	„ Z	d
S )Ú	FakeAgentc                 ó”   — |t          |¦  «        c| _        | _        g | _        d| _        |dk    rdnd | _        d| _        d| _        d S )Númodel-0ÚcodexÚhighÚDORMANTr   )ÚstrÚagentÚpathÚinputsÚmodelÚeffortÚstateÚupdates)Úselfr   r   s      ú^/home/lighthouse/esp32-dev/.cache/physical-ui-cleanup-0.6a/server/tests/test_voice_settings.pyÚ__init__zFakeAgent.__init__   sM   € Ø %¥s¨4¡y¤yÐˆŒ
�D”IØˆŒØˆŒ
Ø %¨Ò 0Ð 0�f�f°dˆŒØˆŒ
ØˆŒˆˆó    c              ƒ   óh   K  — t          | j        |dd| j        d| j        | j        | j        ¬¦	  «	        S )NÚpúTest sessionz2026-10-03T00:00:00Z)	r   Ú
session_idÚ
project_idÚnameÚcwdÚ
updated_atr    r!   r"   )r   r   r   r    r!   r"   )r$   Úsids     r%   Úget_sessionzFakeAgent.get_session    sC   è è € Ý $¤*¸ÀsÐP^ÐcgÔclØ-°D´JÀdÄkÐX\ÔXbðdñ dô dð 	dr'   c              ƒ   ó>   K  — |                       d¦  «        ƒ d {V —†gS )NÚs)r1   )r$   Úprojects     r%   Úlist_sessionszFakeAgent.list_sessions$   s/   è è € Ø×&Ò& sÑ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð,Ð,r'   c              ƒ   ót   K  — | j                              ||f¦  «         t          d|| j        dk    ¬¦  «        S )NTr   )Úacceptedr+   Úresumed)r   ÚappendÚdictr"   )r$   r0   Útexts      r%   Ú
send_inputzFakeAgent.send_input'   s<   è è € ØŒ×Ò˜C ˜;Ñ'Ô'Ð'Ý˜T¨c¸4¼:ÀyÒ;PÐQÑQÔQÐQr'   c              ƒ   ó‚   ‡ K  — ˆ fd„t          d¦  «        D ¦   «         }t          ‰ j        |‰ j        ‰ j        |¦  «        S )Nc           
      ó„   •— g | ]<}t          d |› �d|› �|dk    ‰j        dk    rg d¢ng ‰j        dk    rdnd¬¦  «        ‘Œ=S )zmodel-zModel é   r   )Úlowr   Úultrar   N)Úidr-   Ú
is_defaultÚavailable_effortsÚdefault_effort)r:   r   )Ú.0Úir$   s     €r%   ú
<listcomp>z*FakeAgent.get_settings.<locals>.<listcomp>,   s†   ø€ ð Wð Wð WàHIõ ˜, 1˜,˜,¨L°Q¨L¨LÀAÀqÂDØ8<¼
ÀGÒ8KÐ8KÐ4Ð4Ð4Ð4ÐQSØ%)¤Z°Ò%8Ð%8˜6˜6¸dðDñ Dô Dð Wð Wð Wr'   é	   )Úranger   r   r    r!   )r$   r0   Úmodelss   `  r%   Úget_settingszFakeAgent.get_settings+   s[   øè è € ðWð Wð Wð WåMRÐSTÉXÌXðWñ Wô Wˆõ ˜TœZ¨¨D¬J°t´{À6ÑJÔJÐJr'   c                  ó   — dS ©NT© rO   r'   r%   ú<lambda>zFakeAgent.<lambda>1   s   € Àd€ r'   )Ústill_validc             ƒ   ó.  K  — | j         dv rt          dd¦  «        ‚ |¦   «         st          dd¦  «        ‚t          ||                      |¦  «        ƒ d {V —†¦  «        \  | _        | _        | xj        dz  c_        |                      |¦  «        ƒ d {V —†S )N)ÚRUNNINGÚWAITING_APPROVALzsession busyé™  Ú	cancelledé   )r"   r	   r   rL   r    r!   r#   )r$   r0   ÚvaluerQ   s       r%   Úupdate_settingszFakeAgent.update_settings1   s­   è è € ØŒ:Ð7Ð7Ð7½|ÈNÐ[^Ñ?_Ô?_Ð9_Øˆ{‰}Œ}ÐA¥L°¸SÑ$AÔ$AÐAÝ0°¸d×>OÒ>OÐPSÑ>TÔ>TÐ8TÐ8TÐ8TÐ8TÐ8TÐ8TÑUÔUÑˆŒ
�4”;ØˆŒ�a‰ˆŒØ×&Ò& sÑ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+r'   c              ƒ   ó
   K  — d S ©NrO   )r$   s    r%   ÚclosezFakeAgent.close8   s
   è è € € € r'   N)
Ú__name__Ú
__module__Ú__qualname__r&   r1   r5   r<   rL   rY   r\   rO   r'   r%   r   r      s‘   € € € € € ðð ð ðdð dð dð-ð -ð -ðRð Rð RðKð Kð Kð @K¸{ð ,ð ,ð ,ð ,ð ,ð  ÐÐÐÐr'   r   c                   ó   — e Zd Zdd„Zd„ ZdS )ÚFakeSTTFc                 ó$   — |d c| _         | _        d S r[   )ÚerrorÚwav)r$   rc   s     r%   r&   zFakeSTT.__init__<   s   € ¸EÀ4Ð%9 T¤Z°´°°r'   c              ƒ   óD   K  — || _         | j        rt          d¦  «        ‚dS )Nzprivate provider erroru(   æ£€æŸ¥ä¸€ä¸‹ admin åˆ‡æ�¢ä¸ºä»€ä¹ˆå¤±è´¥)rd   rc   ÚRuntimeError©r$   Údatas     r%   Ú
transcribezFakeSTT.transcribe=   s)   è è € ØˆŒØŒ:ÐC�\Ð*BÑCÔCÐCØ9Ð9r'   N)F)r]   r^   r_   r&   ri   rO   r'   r%   ra   ra   ;   s/   € € € € € ØGÐGÐGÐGð:ð :ð :ð :ð :r'   ra   Úvc                 ó*   — t          d| ddd¬¦  «        S )NÚvoice_startéD¬  é   rW   )ÚtypeÚvoice_idÚsample_rateÚbitsÚchannels)r:   ©Úvids    r%   Ústartrv   C   s   € Ý�]¨C¸EÀrÐSTÐUÑUÔUÐUr'   óÈ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          c                 óp   — t          d|| t          j        |¦  «                             ¦   «         ¬¦  «        S )NÚvoice_chunk©ro   rp   ÚsequenceÚaudio)r:   Úbase64Ú	b64encodeÚdecode)r{   ru   Úpcms      r%   Úchunkr�   G   s1   € Ý�]¨C¸ÍÔHXÐY\ÑH]ÔH]×HdÒHdÑHfÔHfÐgÑgÔgÐgr'   r   Úpir   c                 ó®  ‡‡— | dz  }|                      t          j        t          dd¬¦  «        ¦  «        ¦  «         |                     t
          dt          |¦  «        ¦  «         |                     t
          dt          | dz  ¦  «        ¦  «         |                     t
          di ¦  «         t          | d	z  ¦  «        }| 	                    t          d
dt          | ¦  «        ¬¦  «        ¦  «         |                     t
          d|¦  «         t          ‰| ¦  «        }t          ¦   «         }|                     t
          d‰|i¦  «         |                     t
          j        d|¦  «         t          t
          j        ¦  «        5 }|                     d¦  «        5 Šˆfd„}‰                     t          ddddd¬¦  «        ¦  «          |d¦  «          |d¦  «         ‰                     t'          d¦  «        ¦  «          |d¦  «        d         dk    sJ ‚d‰› d�}	|                     dd|	i¬ ¦  «        j        d!k    sJ ‚ |d"¦  «        d#         ‰k    sJ ‚‰                     t'          ¦   «         ¦  «          |d$¦  «        d%         d&k    sJ ‚‰                     t-          ¦   «         ¦  «         ‰                     t          d'd(¬)¦  «        ¦  «          |d*¦  «        }
|
d+         d,k    r|
d#         ‰k    sJ ‚|j        g k    sJ ‚t1          j        t5          j        |j        ¦  «        ¦  «        5 }|                     ¦   «         |                     ¦   «         |                     ¦   «         fd-k    sJ ‚|                      ¦   «         d.k    sJ ‚	 d d d ¦  «         n# 1 swxY w Y   ‰                     t          d/d0d1¬2¦  «        ¦  «         ‰                     t          d/d(d1¬2¦  «        ¦  «          |d$¦  «        d%         d3k    sJ ‚‰                     t          d/d(d1¬2¦  «        ¦  «         ‰                     t          d4d5¬6¦  «        ¦  «          |d7¦  «        }tC          |d8         ¦  «        d9k    r|d8         d:         d;         d<k    sJ ‚|j        d=|
d>         fgk    sJ ‚d?t          j        | "                    d@¦  «                             ¦   «         ¦  «        vsJ ‚‰                     t          dAd5|	dBdCi¬D¦  «        ¦  «          |dE¦  «        dB         dCk    sJ ‚‰                     t          dAd5|	dBdFi¬D¦  «        ¦  «         | "                    dG‰› dH�¦  «                             ¦   «         dB         dCk    sJ ‚|j#        dIk    sJ ‚dJ|_$        |                     dG‰› dH�dBdFi¬ ¦  «        j        dKk    sJ ‚dL|_$        |                     dG‰› dH�dBdFi¬ ¦  «        j        dKk    sJ ‚dM|_$        ‰                     t'          dN¦  «        ¦  «          |d$¦  «         |                     dddOi¬ ¦  «          |d$¦  «        d%         dPk    sJ ‚ |d¦  «         |                     dd|	i¬ ¦  «          |d"¦  «         ‰                     t'          dQ¦  «        ¦  «          |d$¦  «         ˆfdR„}|j%         &                    |¦  «        } |dS¦  «         t
          j        j'        rJ ‚‰                     t          d/dQd1¬2¦  «        ¦  «         tC          |j        ¦  «        dIk    sJ ‚‰                     t          dT|j(        dU¬V¦  «        ¦  «          |dW¦  «        d%         dXk    sJ ‚‰                     t'          dY¦  «        ¦  «          |d$¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   t
          j        j'        rJ ‚d S )ZNzdevice.jsonÚtestÚsecret)Ú	device_idÚdevice_tokenÚcredential_storeÚtarget_storeztargets.jsonÚdeviceszprojects.jsonr)   ÚP)rB   r-   r   Úproject_registryÚadaptersÚproviderz
/device/wsc                 óŽ   •— t          d¦  «        D ]&}‰                     ¦   «         }|d         | k    r|c S Œ't          | ¦  «        ‚)Né   ro   )rJ   Úreceive_jsonÚAssertionError)ÚkindÚ_rX   Úwss      €r%   ÚreceivezAtest_authenticated_device_voice_and_settings_e2e.<locals>.receiveX   sO   ø€ Ý˜r™œð 8ð 8�AØŸ/š/Ñ+Ô+�EØ˜V”} dÒ*Ð*°%¨<¨<¨<Ð*Ý$ TÑ*Ô*Ð*r'   ÚhelloÚ	syntheticz0.4.0)ro   r†   r‡   ÚboardÚfirmwareÚ	hello_ackÚtarget_stateÚoverviewÚvoice_errorÚmessagezNO AGENT SELECTEDzagent:z:sz/devices/test/targetÚtarget©ÚjsonéÈ   Úagent_stater   Úvoice_stater"   Ú	RECORDINGÚ	voice_endrj   ©ro   rp   Úvoice_transcriptr-   r*   )rm   r?   rW   iä  Úvoice_decisionÚstaleÚsend©ro   rp   ÚdecisionÚSENTÚsettings_getÚr)ro   Ú
request_idÚsettings_stateÚavailable_modelsé   r   rB   r   r3   Ú
transcriptr|   z/devicesÚsettings_applyr    zmodel-1)ro   r²   r    ÚsettingsÚsettings_updatedzmodel-2z/api/agents/z/sessions/s/settingsrW   rS   rU   rT   ÚDONEÚswitchÚserverÚ	CANCELLEDÚpreemptc            
   “   óV   •K  — t           j                             ‰ ddddddd¬¦  «        S )	Nr3   r)   ÚcommandzRun?Úpwdr„   Úone)r   r+   r,   r“   ÚtitleÚdetailÚownerÚrequest_identity)ÚgatewayÚ	approvalsÚcreate)r   s   €r%   ÚapprovezAtest_authenticated_device_voice_and_settings_e2e.<locals>.approve†   s=   øè è € ÝÔ(×/Ò/°eÀsÐVYÐ_hØ ¨°FÈEð 0ñ Sô Sð Sr'   Úapproval_requestÚapproval_responseÚreject)ro   Úapproval_idr®   Úapproval_cancelledÚREJECTEDÚ
disconnect))Ú
write_textr¢   Údumpsr:   ÚsetattrrÇ   r   r   r   Úaddr
   r   r   ra   Úvoicesr   ÚappÚwebsocket_connectÚ	send_jsonrv   ÚpostÚstatus_coder�   r   ÚwaveÚopenÚioÚBytesIOrd   ÚgetframerateÚgetsampwidthÚgetnchannelsÚ
getnframesÚlenÚgetr#   r"   ÚportalÚcallÚrequestsrÎ   )Útmp_pathÚmonkeypatchr   ÚcredÚprojectsÚadapterrŽ   Úclientr–   r    r¶   r|   r¸   rÊ   Úapprovalr•   s     `            @r%   Ú0test_authenticated_device_voice_and_settings_e2erð   K   s	  øø€ à	�-Ñ	€D §¢µ´
½4È&Ð^fÐ;gÑ;gÔ;gÑ0hÔ0hÑ iÔ iÐ iØ×Ò�Ð 2Õ3HÈÑ3NÔ3NÑOÔOÐOØ×Ò� ­{¸8ÀNÑ;RÑ/SÔ/SÑTÔTÐTØ×Ò� 	¨"Ñ-Ô-Ð-Ý˜X oÑ5Ñ6Ô6€H°x·|²|ÅGÈsÐX[ÕadÐemÑanÔanÐDoÑDoÔDoÑ7pÔ7pÐ7pØ×Ò�Ð 2°8Ñ<Ô<Ð<Ý�e˜HÑ%Ô%€G­w©y¬y hØ×Ò� 
¨E°'¨?Ñ;Ô;Ð;Ø×Ò�œ z°(Ñ;Ô;Ð;Ý	•G”KÑ	 Ô	 ð :E FØ×%Ò% lÑ3Ô3ð 9	E°rð+ð +ð +ð +ð +ð
 �LŠL� 7°VÈÐXcÐmtÐuÑuÔuÑvÔvÐvØˆG�KÑ Ô Ð   ¨Ñ!8Ô!8Ð!8à�LŠL�˜zÑ*Ô*Ñ+Ô+Ð+Ø�7˜=Ñ)Ô)¨)Ô4Ð6IÒIÐIÐIÐIØ%˜EÐ%Ð%Ð%ˆFØ—;’;Ð5¸HÀVÐ;L�;ÑMÔMÔYÐ[^Ò^Ð^Ð^Ð^Ø�7˜=Ñ)Ô)¨'Ô2°EÒ9Ð9Ð9Ð9Ø�LŠL�™œÑ!Ô!Ð!¨¨°Ñ)?Ô)?ÀÔ)HÈ+Ò)UÐ)UÐ)UÐ)UØ�LŠL�™œÑ!Ô!Ð! "§,¢,­t¸ÈcÐ/RÑ/RÔ/RÑ"SÔ"SÐ"SØ�wÐ1Ñ2Ô2ˆJØ˜fÔ% ~Ò5Ð5¸*ÀWÔ:MÈuÒ:TÐ:TÐ:TÐ:TØ”> 2Ò%Ð%Ð%Ð%Ý”�2œ: h¤lÑ3Ô3Ñ4Ô4ð 0¸Ø×*Ò*Ñ,Ô,¨U×-?Ò-?Ñ-AÔ-AÀ%×BTÒBTÑBVÔBVÐWÐYdÒdÐdÐdÐdØ×'Ò'Ñ)Ô)¨4Ò/Ð/Ð/Ð/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð �LŠL�Ð#3¸WÈfÐUÑUÔUÑVÔVÐVØ�LŠL�Ð#3¸SÈ&ÐQÑQÔQÑRÔRÐRØ�7˜=Ñ)Ô)¨'Ô2°FÒ:Ð:Ð:Ð:Ø�LŠL�Ð#3¸SÈ&ÐQÑQÔQÑRÔRÐRØ�LŠL� >¸SÐAÑAÔAÑBÔBÐBØ�WÐ-Ñ.Ô.ˆHÝ�xÐ 2Ô3Ñ4Ô4°aÒ7Ð7¸HÐEWÔ<XÐYZÔ<[Ð\`Ô<aÐclÒ<lÐ<lÐ<lÐ<lØ”> S¨°LÔ)AÐ$BÐ#CÒCÐCÐCÐCØ¥$¤*¨V¯ZªZ¸
Ñ-CÔ-C×-HÒ-HÑ-JÔ-JÑ"KÔ"KÐKÐKÐKÐKØ�LŠL�Ð#3¸sÈ&Ð[bÐclÐZmÐnÑnÔnÑoÔoÐoØ�7Ð-Ñ.Ô.¨wÔ7¸ÒBÐBÐBÐBØ�LŠL�Ð#3¸sÈ&Ð[bÐclÐZmÐnÑnÔnÑoÔoÐoØ—:’:ÐH¨UÐHÐHÐHÑIÔI×NÒNÑPÔPÐQXÔYÐ[dÒdÐdÐdÐdØ”? AÒ%Ð%Ð%Ð%Ø#ˆGŒMØ—;’;ÐI¨eÐIÐIÐIÐPWÐXaÐOb�;ÑcÔcÔoÐqtÒtÐtÐtÐtØ,ˆGŒMØ—;’;ÐI¨eÐIÐIÐIÐPWÐXaÐOb�;ÑcÔcÔoÐqtÒtÐtÐtÐtØ ˆGŒMØ�LŠL�˜x™œÑ)Ô)Ð)¨'¨'°-Ñ*@Ô*@Ð*@Ø�KŠKÐ.°X¸hÐ4GˆKÑHÔHÐHØ�7˜=Ñ)Ô)¨'Ô2°KÒ?Ð?Ð?Ð?ØˆG�NÑ#Ô#Ð#Ø�KŠKÐ.°X¸fÐ4EˆKÑFÔFÐFÀwÀwÈ}ÑG]ÔG]ÐG]Ø�LŠL�˜yÑ)Ô)Ñ*Ô*Ð*¨7¨7°=Ñ+AÔ+AÐ+AðSð Sð Sð Sð Sð ”]×'Ò'¨Ñ0Ô0ˆHØˆGÐ&Ñ'Ô'Ð'Ý”~Ô.Ð.Ð.Ð.Ø�LŠL�Ð#3¸YÐPVÐWÑWÔWÑXÔXÐXÝ�w”~Ñ&Ô&¨Ò)Ð)Ð)Ð)Ø�LŠL�Ð#6À8ÔCWÐaiÐjÑjÔjÑkÔkÐkØ�7Ð/Ñ0Ô0°Ô9¸:ÒEÐEÐEÐEØ�LŠL�˜|Ñ,Ô,Ñ-Ô-Ð-¨g¨g°mÑ.DÔ.DÐ.Dðs9	Eð 9	Eð 9	Eñ 9	Eô 9	Eð 9	Eð 9	Eð 9	Eð 9	Eð 9	Eð 9	Eøøøð 9	Eð 9	Eð 9	Eð 9	Eð:Eð :Eð :Eñ :Eô :Eð :Eð :Eð :Eð :Eð :Eð :Eøøøð :Eð :Eð :Eð :Eõx Œ~Ô&Ð&Ð&Ð&Ð&Ð&s]   Æ^7ÆF^ Ì2ANÎ^ ÎNÎ^ Î"NÎ#O1^ Þ^7Þ ^$	Þ$^7Þ'^$	Þ(^7Þ7^;Þ>^;c                  óD   — d„ } t          j         | ¦   «         ¦  «         d S )Nc               “   óê  ‡‡‡‡‡K  — g ŠdgŠdgŠdgŠt          dd¬¦  «        } t          dd¦  «        Šˆfd	„}t          t          ¦   «         ˆfd
„ˆfd„|ˆfd„ˆfd„¦  «        }	 t	          t          d¦  «        t          d¬¦  «        t          ddz  ¬¦  «        t          dddd¬¦  «        g¦  «        D ]‹\  }}d|› �}|                     | t          |¦  «        ¦  «        ƒ d {V —† ||d<   |                     | |¦  «        ƒ d {V —† t          j
        d¦  «        ƒ d {V —† |j        rJ ‚‰d         d         dk    sJ ‚ŒŒddt          t          ¦  «        fddt          ffD ]¥\  }}}d|› �}|                     | t          |¦  «        ¦  «        ƒ d {V —† |j        d         }t          |||¦  «         |                     | t          ||j        ¬¦  «        ¦  «        ƒ d {V —† |j        rJ ‚t#          |j        ¦  «        dk    sJ ‚Œ¦|                     | t          d ¦  «        ¦  «        ƒ d {V —† |                     | t          d ¬!¦  «        ¦  «        ƒ d {V —† t          d¬"¦  «        |_        |                     | t          d#d ¬$¦  «        ¦  «        ƒ d {V —† t          j        t+          |j        ¦  «        Ž ƒ d {V —† ‰d         d%         d&k    sJ ‚‰j        g k    sJ ‚ G d'„ d(¦  «        }	 |	¦   «         |_        d)D �]Q}
|                     | t          |
¦  «        ¦  «        ƒ d {V —† |                     | t          |
¬!¦  «        ¦  «        ƒ d {V —† |                     | t          d#|
¬$¦  «        ¦  «        ƒ d {V —† t          j
        d¦  «        ƒ d {V —† t          j
        d¦  «        ƒ d {V —† |j        d         }|
d*k    rd+‰d<   |
d,k    rd‰d<   |
d-k    rd‰d<   |                     | d¬.¦  «         t          j        t+          |j        ¦  «        d/diŽƒ d {V —† |j        dk    r|j        d0k    r|j        rJ ‚d‰d<   d‰d<   d‰d<   �ŒSt          ¦   «         |_        |                     | t          d1¦  «        ¦  «        ƒ d {V —† |                     | t          d1¬!¦  «        ¦  «        ƒ d {V —† |j        d         }|j                             ¦   «          t          j
        d¦  «        ƒ d {V —† t          j
        d¦  «        ƒ d {V —† t          j        t+          |j        ¦  «        Ž ƒ d {V —† |j        d2k    r‰j        g k    sJ ‚|                     | t          d3d1d4¬5¦  «        ¦  «        ƒ d {V —† |j        rJ ‚|                     | t          d1¦  «        ¦  «        ƒ d {V —† |j        rJ ‚	 |                     ¦   «         ƒ d {V —† d S # |                     ¦   «         ƒ d {V —† w xY w)6Nú
agent:pi:sFTÚ
connectionÚd©Úconnection_idr†   r‚   ú/tmpc              “   ó6   •K  — ‰                      |¦  «         d S r[   ©r9   ©rõ   ÚmÚsents     €r%   r¬   zQtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.sendš   ó   øè è € ˜DŸKšK¨™NœN˜N˜N˜Nr'   c                 ó   •— ‰d         S ©Nr   rO   )r”   r    s    €r%   rP   zUtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.<lambda>›   s   ø€ °°q´	€ r'   c                 ó   •— ‰S r[   rO   ©r”   rí   s    €r%   rP   zUtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.<lambda>›   s   ø€ À7€ r'   c                 ó   •— ‰d         S r   rO   )r”   Úcurrents    €r%   rP   zUtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.<lambda>›   s   ø€ ÐY`ÐabÔYc€ r'   c                  ó   •— ‰ d         S r   rO   )rï   s   €r%   rP   zUtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.<lambda>›   s   ø€ ÐksÐtuÔkv€ r'   rW   ó   x)r€   i<  ry   rj   r   z
not base64rz   Úbadrp   éÿÿÿÿr"   r½   r€   r{   Úoverflow)ru   r{   rc   rt   )rc   r§   r¨   rŸ   zTranscription failedc                   ó   — e Zd Zd„ ZdS )úTtest_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.Delayedc              “   óh   K  — t          j        ¦   «         ƒ d {V —† d S # t           j        $ r Y dS w xY w)Nzstale transcript)ÚasyncioÚFutureÚCancelledErrorrg   s     r%   ri   z_test_voice_limits_failures_and_async_invalidation.<locals>.exercise.<locals>.Delayed.transcribe®   sK   è è € Ý%œnÑ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.øÝ"Ô1ÐKÐKÐKÐ9KÐ9KÐ9KÐKøøøs   ƒ ž1°1N)r]   r^   r_   ri   rO   r'   r%   ÚDelayedr  ­   s(   € € € € € ðLð Lð Lð Lð Lr'   r  )r    rï   rÑ   Úcancelr    zagent:codex:otherrï   rÑ   )ÚnotifyÚreturn_exceptionsÚ ÚmaxÚAWAITING_CONFIRMATIONrª   r  r­   )r   r   r   ra   Ú	enumerater�   r:   Úhandlerv   r  Úsleeprè   Ú	bytearrayr   r   rÔ   r{   rä   r€   rŽ   ÚgatherÚlistÚtasksr   r  r"   r¶   ÚtimerÚ	_callbackr\   )Údevicer¬   ÚmanagerÚindexr  ru   ÚfieldrX   Úreqr  Úreasonrí   rï   r  rý   r    s              @@@@@r%   ÚexercisezCtest_voice_limits_failures_and_async_invalidation.<locals>.exercise–   s¦  øøøøøè è € Øˆ˜�~�°¨w hÀ¸v°wÝ¨\ÀCÐHÑHÔHˆÝ˜$˜vÑ&Ô&ˆØ*Ð*Ð*Ð*Ð*Ý�W™YœYÐ'9Ð'9Ð'9Ð'9Ð:JÐ:JÐ:JÐ:JÈ4ÐPcÐPcÐPcÐPcÐdvÐdvÐdvÐdvÑwÔwˆð,	&Ý&­¨a©¬µ¸4°±´ÅÈ4ÐPTÉ9ÐAUÑAUÔAUÕVZÐ`mÐwzð  EFð  MYð  WZñ  WZô  WZð  ([ñ  \ô  \ð 6ð 6‘	��cØ!˜%�M�M�¨¯ª°v½eÀC¹j¼jÑ(IÔ(IÐ"IÐ"IÐ"IÐ"IÐ"IÐ"IÐ"IÐZ]È#ÈjÉ/Ø—n’n V¨CÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0µw´}ÀQÑ7GÔ7GÐ1GÐ1GÐ1GÐ1GÐ1GÐ1GÐ1GØ"Ô+Ð+Ð+Ð+Ø˜B”x Ô(¨+Ò5Ð5Ð5Ð5Ð5Ø'(¨­y½Ñ/CÔ/CÐ&DÀaÈ
ÕS]ÐE^Ð%_ð 'ð 'Ñ!��e˜EØ&˜uÐ&Ð&�¨W¯^ª^¸FÅ5ÈÁ:Ä:Ñ-NÔ-NÐ'NÐ'NÐ'NÐ'NÐ'NÐ'NÐ'NØÔ$ \Ô2�µ7¸3¸uÀUÑ3KÔ3KÐ3KØ—n’n V­E°cÀ3Ä<Ð,PÑ,PÔ,PÑQÔQÐQÐQÐQÐQÐQÐQÐQÐ]dÔ]mÐRmÐRmÐRmÝ˜3œ7‘|”| Q’����Ø—.’. ­¨g©¬Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7¸g¿nºnÈVÕTYÐ^eÐTfÑTfÔTfÑ>gÔ>gÐ8gÐ8gÐ8gÐ8gÐ8gÐ8gÐ8gÝ$¨4Ð0Ñ0Ô0ˆGÔØ—.’. ­°+ÀwÐ(OÑ(OÔ(OÑPÔPÐPÐPÐPÐPÐPÐPÐPÝ”.¥$ w¤}Ñ"5Ô"5Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6¸dÀ2¼hÀyÔ>QÐSiÒ>iÐ>iÐ>iÐ>iØ”> 2Ò%Ð%Ð%Ð%ðLð Lð Lð Lð Lñ Lô Lð Lð %˜W™YœYˆGÔØEð 
Iñ 
I�Ø—n’n V­E°&©M¬MÑ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ÀÇÂÐPVÕW\ÐagÐWhÑWhÔWhÑAiÔAiÐ;iÐ;iÐ;iÐ;iÐ;iÐ;iÐ;iØ—n’n V­D°kÈ6Ð,RÑ,RÔ,RÑSÔSÐSÐSÐSÐSÐSÐSÐSÕZaÔZgÐhiÑZjÔZjÐTjÐTjÐTjÐTjÐTjÐTjÐTjÕqxÔq~ð  @Añ  rBô  rBð  lBð  lBð  lBð  lBð  lBð  lBð  lBØÔ$ \Ô2�Ø˜8Ò#Ð#Ð.A F¨1¡IØ˜:Ò%Ð%°$ h¨q¡kØ˜<Ò'Ð'°5¨°©
Ø—’˜v¨U�Ñ3Ô3Ð3Ý”n¥d¨7¬=Ñ&9Ô&9ÐRÈTÐRÐRÐRÐRÐRÐRÐRÐRÐRØ”y +Ò-Ð-°#´.À"Ò2DÐ2DÈSÌWÐ2DÐ2DÐ2DØ&��q‘	°5 x°¡{ÀD¸À¹¹å$™YœYˆGÔØ—.’. ­¨e©¬Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5¸G¿NºNÈ6ÕRWÐ\aÐRbÑRbÔRbÑ<cÔ<cÐ6cÐ6cÐ6cÐ6cÐ6cÐ6cÐ6cØÔ  Ô.ˆC¨s¬y×/BÒ/BÑ/DÔ/DÐ/DÝ”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"­¬°qÑ)9Ô)9Ð#9Ð#9Ð#9Ð#9Ð#9Ð#9Ð#9Ý”.¥$ w¤}Ñ"5Ô"5Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø”9Ð5Ò5Ð5¸'¼.È"Ò:LÐ:LÐ:LÐ:LØ—.’. ­Ð2BÈEÐ[cÐ(dÑ(dÔ(dÑeÔeÐeÐeÐeÐeÐeÐeÐeØÔ'Ð'Ð'Ð'Ø—.’. ­¨e©¬Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ'Ð'Ð'Ð'Ð'Ø—m’m‘o”oÐ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ø�g—m’m‘o”oÐ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%øøøs   Á&UW ×W2)r  Úrun)r&  s    r%   Ú1test_voice_limits_failures_and_async_invalidationr(  •   s0   € ð2&ð 2&ð 2&õf „K��‘
”
ÑÔÐÐÐr'   c                 ó”  — d„ }|                       t          j        d¬¦  «        5  t          j         |¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   d| j        v sJ ‚d| j        v sJ ‚d| j        v sJ ‚d| j        v sJ ‚d| j        v sJ ‚d	d
dt          j        d¦  «                             ¦   «         fD ]}|| j        vsJ ‚Œd S )Nc               “   óf  ‡‡K  — g Št          dd¬¦  «        } t          dd¦  «        Šˆfd„}t          t          ¦   «         d„ ˆfd„|d	„ d
„ ¦  «        }	 |                     | t          d¦  «        ¦  «        ƒ d {V —† |                     | t          d¬¦  «        ¦  «        ƒ d {V —† |                     | t          dd¬¦  «        ¦  «        ƒ d {V —† t          j	        t          |j        ¦  «        Ž ƒ d {V —† |                     ¦   «         ƒ d {V —† d S # |                     ¦   «         ƒ d {V —† w xY w)Nzconnection-private-suffixrõ   rö   r‚   rø   c              “   ó6   •K  — ‰                      |¦  «         d S r[   rú   rû   s     €r%   r¬   zJtest_voice_lifecycle_logs_are_content_free.<locals>.exercise.<locals>.sendÑ   rþ   r'   c                 ó   — dS )Nró   rO   ©r”   s    r%   rP   zNtest_voice_lifecycle_logs_are_content_free.<locals>.exercise.<locals>.<lambda>Ò   s   € °€ r'   c                 ó   •— ‰S r[   rO   r  s    €r%   rP   zNtest_voice_lifecycle_logs_are_content_free.<locals>.exercise.<locals>.<lambda>Ò   s   ø€ Àg€ r'   c                 ó   — dS rN   rO   r-  s    r%   rP   zNtest_voice_lifecycle_logs_are_content_free.<locals>.exercise.<locals>.<lambda>Ò   s   € Ð\`€ r'   c                  ó   — dS )NFrO   rO   r'   r%   rP   zNtest_voice_lifecycle_logs_are_content_free.<locals>.exercise.<locals>.<lambda>Ò   s   € Ðhm€ r'   ztrace-safe-idrt   r§   r¨   )r   r   r   ra   r  rv   r�   r:   r  r  r  r  r\   )r   r¬   r!  rí   rý   s      @@r%   r&  z<test_voice_lifecycle_logs_are_content_free.<locals>.exerciseÍ   s|  øøè è € ØˆÝÐ-HÐSVÐWÑWÔWˆÝ˜$˜vÑ&Ô&ˆØ*Ð*Ð*Ð*Ð*Ý�W™YœYÐ'<Ð'<Ð=MÐ=MÐ=MÐ=MÈdÐS`ÐS`ÐamÐamÑnÔnˆð	"Ø—.’. ­¨oÑ(>Ô(>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø—.’. ­°/Ð(BÑ(BÔ(BÑCÔCÐCÐCÐCÐCÐCÐCÐCØ—.’. ­°+ÀÐ(WÑ(WÔ(WÑXÔXÐXÐXÐXÐXÐXÐXÐXÝ”.¥$ w¤}Ñ"5Ô"5Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6à—-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ø�'—-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøs   ÁB$D ÄD0zdevice_gateway.voice)ÚloggerzI[VOICE_RX] event=start voice_id=trace-safe-id connection=connection-privaz_[VOICE_RX] event=end voice_id=trace-safe-id connection=connection-priva chunks=1 pcm_bytes=3528zb[VOICE_STT] event=start voice_id=trace-safe-id connection=connection-priva chunks=1 pcm_bytes=3528zM[VOICE_STT] event=complete voice_id=trace-safe-id connection=connection-privaz	success=1u   æ£€æŸ¥ä¸€ä¸‹Úadminu   åˆ‡æ�¢ä¸ºä»€ä¹ˆå¤±è´¥rw   )	Úat_levelÚloggingÚINFOr  r'  r;   r}   r~   r   )Úcaplogr&  Úprivates      r%   Ú*test_voice_lifecycle_logs_are_content_freer8  Ì   sO  € ð"ð "ð "ð 
�Š�œÐ.DˆÑ	EÔ	Eð  ð  ÝŒ�H�H‘J”JÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  àVÐZ`ÔZeÐeÐeÐeÐeØlÐpvÔp{Ð{Ð{Ð{Ð{ØoÐsyÔs~Ð~Ð~Ð~Ð~ØZÐ^dÔ^iÐiÐiÐiÐiØ˜&œ+Ð%Ð%Ð%Ð%Ø" GÐ-DÅfÔFVÐWcÑFdÔFd×FkÒFkÑFmÔFmÐnð *ð *ˆØ˜fœkÐ)Ð)Ð)Ð)Ð)ð*ð *s   ¥AÁAÁAc                  ót  — d„ t          d¦  «        D ¦   «         } t          dddd| ¦  «        }t          |g d¢¦  «        }d„ |d	         D ¦   «         g d
¢k    sJ ‚t          t	          dd¬¦  «        |¦  «        dk    sJ ‚t          j        t          ¦  «        5  t          t	          d¬¦  «        |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5  t          t	          dd¬¦  «        |¦  «         d d d ¦  «         n# 1 swxY w Y   t          |d	         ¦  «        dk    sJ ‚d S )Nc           	      óZ   — g | ](}t          t          |¦  «        d dgd |dk    ¬¦  «        ‘Œ)S )r@   Úexperimentalé   )rB   rD   rE   rC   )r:   r   )rF   rG   s     r%   rH   zPtest_settings_catalog_priorities_and_model_effort_validation.<locals>.<listcomp>ç   s=   € Ð}Ð}Ð}Ðno�D•C˜‘F”F¨e°NÐ-CÐSXÐdeÐghÒdhÐiÑiÔiÐ}Ð}Ð}r'   é   r   r3   Ú4r;  )Ú9r>  Ú8r?  c                 ó   — g | ]
}|d          ‘ŒS )rB   rO   )rF   rü   s     r%   rH   zPtest_settings_catalog_priorities_and_model_effort_validation.<locals>.<listcomp>ê   s   € Ð7Ð7Ð7˜ˆAˆdŒGÐ7Ð7Ð7r'   r´   )r>  r?  r@  Ú5Ú0Ú1rB  )r    r!   )rB  r;  Úmissing)r    Úinvented)	rJ   r   r   r   r   ÚpytestÚraisesr	   rä   )rK   r¸   Úquicks      r%   Ú<test_settings_catalog_priorities_and_model_effort_validationrJ  æ   s…  € Ø}Ð}ÕsxÐy{Ñs|Ôs|Ð}Ñ}Ô}€FÝ˜7 3 s¨>¸&ÑAÔA€HÝ
˜Ð!2Ð!2Ð!2Ñ
3Ô
3€EØ7Ð7˜UÐ#5Ô6Ð7Ñ7Ô7Ð9RÐ9RÐ9RÒRÐRÐRÐRÝ�X¨C°~ÐFÑFÔFÀxÑPÔPÐRfÒfÐfÐfÐfÝ	Œ•|Ñ	$Ô	$ÐZÐZÕ%6µxÀiÐ7PÑ7PÔ7PÐQYÑ%ZÔ%ZÐ%ZÐZÐZÐZÑZÔZÐZÐZÐZÐZÐZÐZøøøÐZÐZÐZÐZÝ	Œ•|Ñ	$Ô	$ÐfÐfÕ%6µxÀcÐQ[Ð7\Ñ7\Ô7\Ð]eÑ%fÔ%fÐ%fÐfÐfÐfÑfÔfÐfÐfÐfÐfÐfÐføøøÐfÐfÐfÐfÝˆxÐ*Ô+Ñ,Ô,¨bÒ0Ð0Ð0Ð0Ð0Ð0s$   ÂCÃCÃ	CÃ& DÄDÄDc                 óÂ   ‡‡‡‡‡— dd l ŠddlmŠ ‰j        Šg Šˆˆfd„Šˆˆˆfd„}|                      ‰d|¦  «         ˆˆfd„}t          j         |¦   «         ¦  «         d S )Nr   )ÚOpenAICompatibleSTTc                 óì   •— |                       ¦   «         }‰                     | ¦  «         | j        dk    sJ ‚| j        d         dk    sJ ‚d|v rd|v rd|v rd|v sJ ‚‰                     dd	d
i¬¦  «        S )Nz+https://stt.example/v1/audio/transcriptionsÚauthorizationzBearer test-keys   RIFFs   WAVEs	   voice.wavs   test-transcriberr£   r;   úpublic test phraser¡   )Úreadr9   ÚurlÚheadersÚResponse)ÚrequestÚbodyÚhttpxÚseens     €€r%   r  zItest_openai_compatible_stt_multipart_wav_and_safe_failure.<locals>.handleö   s—   ø€ Ø�\Š\‰^Œ^ˆ˜DŸKšK¨Ñ0Ô0Ð0ØŒ{ÐIÒIÐIÐIÐIØŒ˜Ô/Ð1BÒBÐBÐBÐBØ˜$ˆˆ 7¨d ? ?°|ÀtÐ7KÐ7KÐPcÐgkÐPkÐPkÐPkÐPkØ�~Š~˜c¨Ð/CÐ'Dˆ~ÑEÔEÐEr'   c                  ór   •— | d         dk    r
| d         du sJ ‚ ‰di | ¤d‰                      ‰¦  «        i¤ŽS )NÚtimeouté   Úfollow_redirectsFÚ	transportrO   )ÚMockTransport)ÚkwargsÚactual_clientr  rV  s    €€€r%   rî   zItest_openai_compatible_stt_multipart_wav_and_safe_failure.<locals>.clientü   sX   ø€ Ø�iÔ  "Ò$Ð$¨Ð0BÔ)CÀuÐ)LÐ)LÐ)LÐ)LØˆ}ÐLÐL˜vÐLÐL°×0CÒ0CÀFÑ0KÔ0KÐLÐLÐLÐLr'   ÚAsyncClientc               “   ó¬   •K  —  ‰ddd¦  «        } |                       t          d¦  «        ¦  «        ƒ d {V —†dk    sJ ‚t          ‰¦  «        dk    sJ ‚d S )Nzhttps://stt.example/v1/ztest-keyztest-transcriberrw   rO  rW   )ri   r   rä   )rŽ   rL  rW  s    €€r%   r&  zKtest_openai_compatible_stt_multipart_wav_and_safe_failure.<locals>.exercise   sn   øè è € Ø$Ð$Ð%>¸zÐJ\Ñ]Ô]ˆØ×(Ò(­°Ñ)>Ô)>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?ÐAUÒUÐUÐUÐUÝ�4‰yŒy˜!Š|ˆ|ˆ|ˆ|ˆ|ˆ|r'   )rV  Údevice_gateway.voicerL  r`  rÔ   r  r'  )rê   rî   r&  rL  r_  r  rV  rW  s      @@@@@r%   Ú9test_openai_compatible_stt_multipart_wav_and_safe_failurerc  ñ   sÓ   øøøøø€ Ø€L€L€LØ8Ð8Ð8Ð8Ð8Ð8ØÔ#€MØ	€DðFð Fð Fð Fð Fð FðMð Mð Mð Mð Mð Mð Mð ×Ò˜˜m¨FÑ3Ô3Ð3ðð ð ð ð ð õ „K��‘
”
ÑÔÐÐÐr'   )rj   )r   rj   rw   )1r  r}   rÞ   r¢   r4  rÜ   Útypesr   Úunittest.mockr   rG  Úfastapi.testclientr   Údevice_gateway.appr×   rÇ   Údevice_gateway.authr   Ú device_gateway.control.approvalsr   Údevice_gateway.control.modelsr   r	   r
   r   Údevice_gateway.control.projectsr   Údevice_gateway.control.settingsr   r   r   Údevice_gateway.stater   rb  r   r   r   r   r   ra   rv   r�   ÚmarkÚparametrizerð   r(  r8  rJ  rc  rO   r'   r%   ú<module>rp     s8  ðØ €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø )Ð )Ð )Ð )Ð )Ð )à $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø =Ð =Ð =Ð =Ð =Ð =Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð! ð ! ð ! ð ! ð ! ñ ! ô ! ð ! ðH:ð :ð :ð :ð :ñ :ô :ð :ðVð Vð Vð Vðhð hð hð hð „×Ò˜ $ w Ñ0Ô0ðF'ð F'ñ 1Ô0ðF'ðR4ð 4ð 4ðn*ð *ð *ð41ð 1ð 1ðð ð ð ð r'   