iobroker.assistant 1.4.4 → 1.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +10 -0
  2. package/admin/custom/.vite/manifest.json +1 -1
  3. package/admin/custom/assets/Components-BR57MZLJ.js +2 -0
  4. package/admin/custom/customComponents.js +1 -1
  5. package/admin/custom/i18n/de.json +3 -0
  6. package/admin/custom/i18n/en.json +3 -0
  7. package/admin/custom/i18n/es.json +3 -0
  8. package/admin/custom/i18n/fr.json +3 -0
  9. package/admin/custom/i18n/it.json +3 -0
  10. package/admin/custom/i18n/nl.json +3 -0
  11. package/admin/custom/i18n/pl.json +3 -0
  12. package/admin/custom/i18n/pt.json +3 -0
  13. package/admin/custom/i18n/ru.json +3 -0
  14. package/admin/custom/i18n/uk.json +3 -0
  15. package/admin/custom/i18n/zh-cn.json +3 -0
  16. package/admin/custom/index.html +1 -1
  17. package/admin/custom/mf-manifest.json +1 -1
  18. package/admin/custom/mf-stats.json +1 -1
  19. package/admin/i18n/de.json +6 -2
  20. package/admin/i18n/en.json +6 -2
  21. package/admin/i18n/es.json +6 -2
  22. package/admin/i18n/fr.json +6 -2
  23. package/admin/i18n/it.json +6 -2
  24. package/admin/i18n/nl.json +6 -2
  25. package/admin/i18n/pl.json +6 -2
  26. package/admin/i18n/pt.json +6 -2
  27. package/admin/i18n/ru.json +6 -2
  28. package/admin/i18n/uk.json +6 -2
  29. package/admin/i18n/zh-cn.json +6 -2
  30. package/admin/jsonConfig.json +24 -2
  31. package/build/lib/voice/engines.js +3 -0
  32. package/build/lib/voice/engines.js.map +1 -1
  33. package/build/lib/voice/esphome.js +160 -19
  34. package/build/lib/voice/esphome.js.map +1 -1
  35. package/build/lib/voice/esphomeEntities.js +76 -6
  36. package/build/lib/voice/esphomeEntities.js.map +1 -1
  37. package/build/lib/voice/esphomeProto.js.map +1 -1
  38. package/build/lib/voice/flac.js +162 -0
  39. package/build/lib/voice/flac.js.map +1 -0
  40. package/build/lib/voice/mediaServer.js +8 -1
  41. package/build/lib/voice/mediaServer.js.map +1 -1
  42. package/build/lib/voice/replyFormat.js +158 -0
  43. package/build/lib/voice/replyFormat.js.map +1 -0
  44. package/build/lib/voice/stt.js +37 -6
  45. package/build/lib/voice/stt.js.map +1 -1
  46. package/build/main.js +165 -4
  47. package/build/main.js.map +1 -1
  48. package/io-package.json +33 -29
  49. package/package.json +1 -1
  50. package/admin/custom/assets/Components-CCl7INIF.js +0 -2
package/README.md CHANGED
@@ -235,6 +235,16 @@ train it twice.
235
235
  Placeholder for the next version (at the beginning of the line):
236
236
  ### **WORK IN PROGRESS**
237
237
  -->
238
+ ### 1.4.6 (2026-11-03)
239
+ * (@GermanBluefox) Speech recognition: own OpenAI-compatible server (Voice tab, provider OpenAI, "Speech recognition server"), e.g. a local whisper-large-v3-turbo in speaches, faster-whisper-server or LocalAI. It needs no OpenAI key and never gets it; an own key for the server is optional
240
+
241
+ ### 1.4.5 (2026-11-03)
242
+ * (@GermanBluefox) ESPHome satellites: spoken replies go out in the format the device's media player announces (FLAC at its sample rate, as Home Assistant does; MP3/Opus via ffmpeg). Since ESPHome 2026.10 the player is built with only the codecs its pipelines use, and a WAV reply did not play at all. Devices that announce no formats keep getting WAV
243
+ * (@GermanBluefox) ESPHome satellites: when the device ends the conversation itself (button, or the wake word said again), it now gets its RUN_END. It stayed in the conversation, and every further wake word only sent another stop
244
+ * (@GermanBluefox) ESPHome satellites: an utterance that is dropped (silence, or no text recognised) ends with the error `stt-no-text-recognized` before RUN_END, like Home Assistant. A RUN_END right after the end of speech was lost while the device was still stopping its microphone, and the device waited for an answer forever
245
+ * (@GermanBluefox) ESPHome satellites: device controls get their state names from the entity names again. ESPHome 2026 (API 1.19) no longer sends `object_id`, so every control ended up as `satellites.<id>.controls.` and the log filled with errors. Latin names give the same ids as before
246
+ * (@GermanBluefox) Satellites whose row was deleted from the ESPHome table are removed at the next start, and an offline satellite can be removed in the Satellites tab
247
+
238
248
  ### 1.4.4 (2026-11-03)
239
249
  * (@GermanBluefox) ESPHome satellites: a sound only counts as speech once it has lasted about 200 ms. After a false wake a single click opened the gate, and Whisper made "и все просят." of the amplified silence around it
240
250
  * (@GermanBluefox) ESPHome satellites: when a device stops sending audio without ending the stream, the recording is closed after 2 seconds instead of the 30-second pipeline timeout, during which the satellite showed "listening"
@@ -97,7 +97,7 @@
97
97
  ]
98
98
  },
99
99
  "src/Components.tsx": {
100
- "file": "assets/Components-CCl7INIF.js",
100
+ "file": "assets/Components-BR57MZLJ.js",
101
101
  "name": "Components",
102
102
  "src": "src/Components.tsx",
103
103
  "isEntry": true,
@@ -0,0 +1,2 @@
1
+ import{n as e}from"./rolldown-runtime-COiEfhsA.js";import{v as t}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__212234797318001__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BkH7fzDw.js";import{$r as n,$t as r,A as i,An as a,B as o,Bt as s,E as c,Fn as l,G as u,Gt as d,It as f,K as p,Ot as m,Pn as h,Pr as g,Pt as _,Qr as ee,Qt as v,R as y,Rn as b,Sn as te,T as x,Tn as ne,V as S,W as C,Wn as re,Wt as w,Xn as ie,Xt as T,Yt as E,Zn as ae,Zt as D,_n as O,an as k,bn as oe,cn as A,d as se,dn as j,dt as M,ei as N,en as ce,f as le,gn as P,hn as ue,in as F,j as de,kn as fe,kt as pe,ln as I,nn as me,p as L,pn as R,q as he,qn as ge,tn as _e,ut as ve,w as ye,wn as be,xn as xe,xt as Se,zn as Ce,zt as we}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__212234797318001__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Bh5IbNwb.js";import{t as z}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__212234797318001__loadShare__shared-D8mhEL60.js";var B=e({custom_assistant_Announcement:()=>Te,custom_assistant_Answer:()=>Ee,custom_assistant_Cancel:()=>De,custom_assistant_Chat:()=>Oe,custom_assistant_Close:()=>ke,custom_assistant_Context:()=>Ae,custom_assistant_Copied:()=>je,custom_assistant_Copy:()=>Me,custom_assistant_Delete:()=>Ne,custom_assistant_Error:()=>Pe,custom_assistant_Host:()=>Fe,custom_assistant_Question:()=>Ie,custom_assistant_Recognized:()=>Le,custom_assistant_Record:()=>Re,custom_assistant_Request:()=>ze,custom_assistant_Room:()=>Be,custom_assistant_Routine:()=>Ve,custom_assistant_Satellite:()=>He,custom_assistant_Satellites:()=>Ue,custom_assistant_Script:()=>We,custom_assistant_Source:()=>Ge,custom_assistant_Speak:()=>Ke,custom_assistant_Spoken:()=>qe,custom_assistant_State:()=>Je,custom_assistant_Status:()=>Ye,custom_assistant_Steps:()=>Xe,custom_assistant_Stop:()=>Ze,custom_assistant_Time:()=>Qe,custom_assistant_Tool:()=>$e,custom_assistant_Upload:()=>et,custom_assistant_auto:()=>tt,custom_assistant_delete_wake_word_confirm:()=>nt,custom_assistant_device:()=>rt,custom_assistant_filter:()=>it,custom_assistant_hint:()=>at,custom_assistant_llm_downloading:()=>ot,custom_assistant_llm_error:()=>st,custom_assistant_llm_idle:()=>ct,custom_assistant_llm_installing:()=>lt,custom_assistant_llm_loading:()=>ut,custom_assistant_llm_ready:()=>dt,custom_assistant_offline:()=>ft,custom_assistant_online:()=>pt,custom_assistant_read:()=>mt,custom_assistant_room:()=>ht,custom_assistant_sat_idle:()=>gt,custom_assistant_sat_listening:()=>_t,custom_assistant_sat_offline:()=>vt,custom_assistant_sat_processing:()=>yt,custom_assistant_sat_speaking:()=>bt,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_deleted:()=>xt,custom_assistant_wake_word_hint:()=>St,custom_assistant_wake_word_phrase_hint:()=>Ct,custom_assistant_wake_word_upload_hint:()=>wt,custom_assistant_wake_word_uploaded:()=>Tt,custom_assistant_write:()=>Et,default:()=>Dt}),Te=`Ansage`,Ee=`Antwort`,De=`Abbrechen`,Oe=`Chat`,ke=`Schließen`,Ae=`Kontext`,je=`Kopiert`,Me=`Kopieren`,Ne=`Löschen`,Pe=`Fehler`,Fe=`Host`,Ie=`Frage`,Le=`Erkannt`,Re=`Aufnehmen`,ze=`Anfrage`,Be=`Raum`,Ve=`Routine`,He=`Satellit`,Ue=`Satelliten`,We=`Skript`,Ge=`Quelle`,Ke=`Sprechen`,qe=`Gesprochen`,Je=`State`,Ye=`Status`,Xe=`Ablauf`,Ze=`Stopp`,Qe=`Zeit`,$e=`Tool`,et=`Hochladen`,tt=`automatisch`,nt=`„%s“ löschen? Es wird den Geräten nicht mehr angeboten; ein Gerät, das es schon heruntergeladen hat, behält es.`,rt=`Gerät`,it=`Filter`,at=`Deaktivieren Sie die Leseberechtigung, um ein Gerät vor dem Assistenten auszublenden, oder die Schreibberechtigung, um es schreibgeschützt zu halten (z. B. bei Sperren). Geräte sind standardmäßig vollständig zugelassen.`,ot=`Modell wird geladen …`,st=`Fehler`,ct=`inaktiv`,lt=`Engine wird installiert …`,ut=`lädt …`,dt=`bereit`,ft=`offline`,pt=`online`,mt=`Lesen`,ht=`Zimmer`,gt=`inaktiv`,_t=`hört zu`,vt=`offline`,yt=`verarbeitet`,bt=`spricht`,xt=`„%s“ wurde gelöscht. Ein Gerät, das es schon heruntergeladen hat, behält seine Kopie.`,St=`Das Wake-Word läuft auf dem Gerät. Mit der Maus über ein Wort siehst du die trainierten Sprachen — die meisten können nur Englisch.`,Ct=`Was man sagt, um das Gerät zu wecken — so erscheint es in der Liste.`,wt=`Ein microWakeWord-Modell: die .tflite-Datei, am besten zusammen mit ihrer .json. Andere Modelltypen (openWakeWord, Porcupine) lassen sich so nicht installieren.`,Tt=`„%s“ wurde hochgeladen. Oben auswählen, um es zu aktivieren — das Gerät lädt das Modell dann herunter.`,Et=`Schreiben`,Dt={"custom_assistant_%s of %s active":`%s von %s aktiv`,"custom_assistant_%s s audio":`%s s Audio`,"custom_assistant_(no spoken answer)":`(keine gesprochene Antwort)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Ein Satellit, der noch konfiguriert ist, erscheint wieder, sobald er sich verbindet.`,"custom_assistant_All sources":`Alle Quellen`,custom_assistant_Announcement:Te,custom_assistant_Answer:Ee,"custom_assistant_Audio file":`Audiodatei`,custom_assistant_Cancel:De,custom_assistant_Chat:Oe,"custom_assistant_Clear chat":`Chat leeren`,"custom_assistant_Click for details":`Klicken für Details`,custom_assistant_Close:ke,"custom_assistant_Cloud LLM":`Cloud-LLM`,"custom_assistant_Collapse all":`Alle zuklappen`,custom_assistant_Context:Ae,custom_assistant_Copied:je,custom_assistant_Copy:Me,"custom_assistant_Copy everything as JSON":`Alles als JSON kopieren`,custom_assistant_Delete:Ne,"custom_assistant_Delete the recorded history of all sources?":`Den aufgezeichneten Verlauf aller Quellen löschen?`,"custom_assistant_Device cache cleared.":`Gerätecache geleert.`,"custom_assistant_Device settings":`Geräte-Einstellungen`,"custom_assistant_Download as JSON":`Als JSON herunterladen`,custom_assistant_Error:Pe,"custom_assistant_Expand all":`Alle aufklappen`,"custom_assistant_Follow-up":`Rückfrage`,"custom_assistant_Hide disabled":`Deaktivierte ausblenden`,"custom_assistant_Hide processing details":`Verarbeitungsdetails ausblenden`,custom_assistant_Host:Fe,"custom_assistant_Last seen":`Zuletzt gesehen`,"custom_assistant_Listening…":`Höre zu …`,"custom_assistant_Loading…":`Wird geladen …`,"custom_assistant_Local LLM":`Lokales LLM`,"custom_assistant_Local model":`Lokales Modell`,"custom_assistant_Mic re-opened without wake word":`Mikrofon ohne Wake-Word wieder geöffnet (Nachfrage oder Rückfrage)`,"custom_assistant_Name language: %s":`Namens-Sprache: %s`,"custom_assistant_No answer":`Keine Antwort`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Es wurden keine Geräte erkannt. Weisen Sie Räumen und Funktionen in ioBroker Zustände zu.`,"custom_assistant_No messages yet. Type a question below.":`Noch keine Nachrichten. Geben Sie unten eine Frage ein.`,"custom_assistant_No processing steps were recorded for this request.":`Für diese Anfrage sind keine Verarbeitungsschritte gespeichert. Details werden für die letzten 200 Anfragen aufbewahrt.`,"custom_assistant_No satellites registered yet.":`Noch keine Satelliten registriert.`,"custom_assistant_Not understood":`Nicht verstanden`,"custom_assistant_Nothing recognized":`Nichts erkannt`,"custom_assistant_Per-device permissions":`Gerätespezifische Berechtigungen`,"custom_assistant_Play answer (backend TTS)":`Antwort abspielen (Backend-TTS)`,"custom_assistant_Please select a .tflite model file":`Bitte eine .tflite-Modelldatei auswählen`,custom_assistant_Question:Ie,"custom_assistant_Read answers aloud":`Antworten vorlesen`,custom_assistant_Recognized:Le,custom_assistant_Record:Re,"custom_assistant_Recorded audio":`Aufgenommenes Audio`,"custom_assistant_Refresh device cache":`Gerätecache aktualisieren`,"custom_assistant_Remove satellite":`Satellit entfernen`,"custom_assistant_Remove satellite %s and all its states?":`Satellit %s mit allen seinen States entfernen?`,"custom_assistant_Reply audio":`Antwort-Audio`,"custom_assistant_Reply to a question":`Antwort auf Rückfrage`,custom_assistant_Request:ze,"custom_assistant_Request details":`Anfrage-Details`,custom_assistant_Room:Be,custom_assistant_Routine:Ve,"custom_assistant_Rule-based NLU":`Regel-NLU (lokal)`,custom_assistant_Satellite:He,custom_assistant_Satellites:Ue,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Speichern Sie die Konfiguration (die Instanz startet neu), bevor Sie chatten.`,custom_assistant_Script:We,"custom_assistant_Send announcement":`Ansage senden`,"custom_assistant_Settings for %s":`Einstellungen für %s`,"custom_assistant_Show processing details":`Verarbeitungsdetails anzeigen`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Zeigt alle Anfragen live: Satelliten, Telegram, Skripte und diesen Chat.`,custom_assistant_Source:Ge,custom_assistant_Speak:Ke,"custom_assistant_Speak on all satellites":`Auf allen Satelliten ansagen`,"custom_assistant_Speak the test sentence and recognize it":`Testsatz sprechen und erkennen`,"custom_assistant_Speech output":`Sprachausgabe`,"custom_assistant_Speech recognition":`Spracherkennung`,"custom_assistant_Speech recognition time":`Dauer der Spracherkennung`,"custom_assistant_Speech synthesis":`Sprachausgabe`,custom_assistant_Spoken:qe,"custom_assistant_Start the assistant instance to chat.":`Starten Sie die Assistenteninstanz, um zu chatten.`,"custom_assistant_Start the assistant instance to load the device list.":`Starten Sie die Assistenteninstanz, um die Geräteliste zu laden.`,custom_assistant_State:Je,"custom_assistant_States read":`Gelesene States`,"custom_assistant_States written":`Geschriebene States`,custom_assistant_Status:Ye,custom_assistant_Steps:Xe,custom_assistant_Stop:Ze,"custom_assistant_Stop listening":`Zuhören beenden`,"custom_assistant_Stop reading answers aloud":`Vorlesen beenden`,"custom_assistant_Stop word":`Stopp-Wort`,"custom_assistant_Test chat":`Test-Chat`,"custom_assistant_Test sentence":`Testsatz`,"custom_assistant_Test voice":`Stimme testen`,"custom_assistant_The instance must be running to test the voice.":`Die Instanz muss laufen, um die Stimme zu testen.`,"custom_assistant_The microphone only works over https or on localhost.":`Das Mikrofon funktioniert nur über https oder auf localhost.`,"custom_assistant_Thinking…":`Denkt nach …`,"custom_assistant_This satellite exposes no settings.":`Dieser Satellit bietet keine Einstellungen.`,custom_assistant_Time:Qe,custom_assistant_Tool:$e,"custom_assistant_Tool calls":`Tool-Aufrufe`,"custom_assistant_Tool result":`Tool-Ergebnis`,"custom_assistant_Tools & states":`Tools & States`,"custom_assistant_Total duration":`Gesamtdauer`,"custom_assistant_Translate all missing (%s)":`Alle fehlenden übersetzen (%s)`,"custom_assistant_Translate name into %s":`Namen nach %s übersetzen`,"custom_assistant_Type a message…":`Nachricht eingeben …`,custom_assistant_Upload:et,"custom_assistant_Upload own wake word":`Eigenes Wake-Word hochladen`,"custom_assistant_Uploaded wake word":`Hochgeladenes Wake-Word`,"custom_assistant_Wake word":`Wake-Word`,"custom_assistant_Wake word phrase":`Wake-Word-Phrase`,"custom_assistant_Wake words":`Wake-Words`,custom_assistant_auto:tt,"custom_assistant_change it on the Voice tab":`im Voice-Tab umschalten`,custom_assistant_delete_wake_word_confirm:nt,custom_assistant_device:rt,custom_assistant_filter:it,"custom_assistant_follow-up":`Nachfrage`,custom_assistant_hint:at,"custom_assistant_in progress":`läuft`,custom_assistant_llm_downloading:ot,custom_assistant_llm_error:st,custom_assistant_llm_idle:ct,custom_assistant_llm_installing:lt,custom_assistant_llm_loading:ut,"custom_assistant_llm_not installed":`nicht installiert`,custom_assistant_llm_ready:dt,"custom_assistant_made in %s ms":`erzeugt in %s ms`,"custom_assistant_no name in %s (showing %s)":`Kein Name in "%s" — angezeigt: "%s"`,custom_assistant_offline:ft,custom_assistant_online:pt,custom_assistant_read:mt,"custom_assistant_recognized in %s ms":`erkannt in %s ms`,custom_assistant_room:ht,custom_assistant_sat_idle:gt,custom_assistant_sat_listening:_t,custom_assistant_sat_offline:vt,custom_assistant_sat_processing:yt,custom_assistant_sat_speaking:bt,custom_assistant_type:`Typ`,"custom_assistant_waits for reply":`wartet auf Antwort`,custom_assistant_wake_word_deleted:xt,custom_assistant_wake_word_hint:St,custom_assistant_wake_word_phrase_hint:Ct,custom_assistant_wake_word_upload_hint:wt,custom_assistant_wake_word_uploaded:Tt,custom_assistant_write:Et},V=e({custom_assistant_Announcement:()=>Ot,custom_assistant_Answer:()=>kt,custom_assistant_Cancel:()=>At,custom_assistant_Chat:()=>jt,custom_assistant_Close:()=>Mt,custom_assistant_Context:()=>Nt,custom_assistant_Copied:()=>Pt,custom_assistant_Copy:()=>Ft,custom_assistant_Delete:()=>It,custom_assistant_Error:()=>Lt,custom_assistant_Host:()=>Rt,custom_assistant_Question:()=>zt,custom_assistant_Recognized:()=>Bt,custom_assistant_Record:()=>Vt,custom_assistant_Request:()=>Ht,custom_assistant_Room:()=>Ut,custom_assistant_Routine:()=>Wt,custom_assistant_Satellite:()=>Gt,custom_assistant_Satellites:()=>Kt,custom_assistant_Script:()=>qt,custom_assistant_Source:()=>Jt,custom_assistant_Speak:()=>Yt,custom_assistant_Spoken:()=>Xt,custom_assistant_State:()=>Zt,custom_assistant_Status:()=>Qt,custom_assistant_Steps:()=>$t,custom_assistant_Stop:()=>en,custom_assistant_Time:()=>tn,custom_assistant_Tool:()=>nn,custom_assistant_Upload:()=>rn,custom_assistant_auto:()=>an,custom_assistant_delete_wake_word_confirm:()=>on,custom_assistant_device:()=>sn,custom_assistant_filter:()=>cn,custom_assistant_hint:()=>ln,custom_assistant_llm_downloading:()=>un,custom_assistant_llm_error:()=>dn,custom_assistant_llm_idle:()=>fn,custom_assistant_llm_installing:()=>pn,custom_assistant_llm_loading:()=>mn,custom_assistant_llm_ready:()=>hn,custom_assistant_offline:()=>gn,custom_assistant_online:()=>_n,custom_assistant_read:()=>vn,custom_assistant_room:()=>yn,custom_assistant_sat_idle:()=>bn,custom_assistant_sat_listening:()=>xn,custom_assistant_sat_offline:()=>Sn,custom_assistant_sat_processing:()=>Cn,custom_assistant_sat_speaking:()=>wn,custom_assistant_type:()=>Tn,custom_assistant_wake_word_deleted:()=>En,custom_assistant_wake_word_hint:()=>Dn,custom_assistant_wake_word_phrase_hint:()=>On,custom_assistant_wake_word_upload_hint:()=>kn,custom_assistant_wake_word_uploaded:()=>An,custom_assistant_write:()=>jn,default:()=>Mn}),Ot=`Announcement`,kt=`Answer`,At=`Cancel`,jt=`Chat`,Mt=`Close`,Nt=`Context`,Pt=`Copied`,Ft=`Copy`,It=`Delete`,Lt=`Error`,Rt=`Host`,zt=`Question`,Bt=`Recognized`,Vt=`Record`,Ht=`Request`,Ut=`Room`,Wt=`Routine`,Gt=`Satellite`,Kt=`Satellites`,qt=`Script`,Jt=`Source`,Yt=`Speak`,Xt=`Spoken`,Zt=`State`,Qt=`Status`,$t=`Steps`,en=`Stop`,tn=`Time`,nn=`Tool`,rn=`Upload`,an=`auto`,on=`Delete "%s"? It will no longer be offered to the devices; a device that already downloaded it keeps it.`,sn=`Device`,cn=`Filter`,ln=`Uncheck read to hide a device from the assistant, or uncheck write to keep it read-only (e.g. locks). Devices default to fully allowed.`,un=`downloading model…`,dn=`error`,fn=`idle`,pn=`installing engine…`,mn=`loading…`,hn=`ready`,gn=`offline`,_n=`online`,vn=`Read`,yn=`Room`,bn=`idle`,xn=`listening`,Sn=`offline`,Cn=`processing`,wn=`speaking`,Tn=`Type`,En=`"%s" was deleted. A device that already downloaded it keeps its copy.`,Dn=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,On=`What you say to wake the device — this is how it appears in the list.`,kn=`A microWakeWord model: the .tflite file, ideally together with its .json. Other model types (openWakeWord, Porcupine) cannot be installed this way.`,An=`"%s" was uploaded. Select it above to activate it — the device downloads the model then.`,jn=`Write`,Mn={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`A satellite that is still configured appears again when it connects.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Ot,custom_assistant_Answer:kt,"custom_assistant_Audio file":`Audio file`,custom_assistant_Cancel:At,custom_assistant_Chat:jt,"custom_assistant_Clear chat":`Clear chat`,"custom_assistant_Click for details":`Click for details`,custom_assistant_Close:Mt,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Collapse all`,custom_assistant_Context:Nt,custom_assistant_Copied:Pt,custom_assistant_Copy:Ft,"custom_assistant_Copy everything as JSON":`Copy everything as JSON`,custom_assistant_Delete:It,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Device cache cleared.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Download as JSON`,custom_assistant_Error:Lt,"custom_assistant_Expand all":`Expand all`,"custom_assistant_Follow-up":`Follow-up`,"custom_assistant_Hide disabled":`Hide disabled`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Rt,"custom_assistant_Last seen":`Last seen`,"custom_assistant_Listening…":`Listening…`,"custom_assistant_Loading…":`Loading…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Local model`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Name language: %s`,"custom_assistant_No answer":`No answer`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`No devices detected. Assign states to rooms and functions in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`No messages yet. Type a question below.`,"custom_assistant_No processing steps were recorded for this request.":`No processing steps were recorded for this request. Details are kept for the latest 200 requests.`,"custom_assistant_No satellites registered yet.":`No satellites registered yet.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Nothing recognized`,"custom_assistant_Per-device permissions":`Per-device permissions`,"custom_assistant_Play answer (backend TTS)":`Play answer (backend TTS)`,"custom_assistant_Please select a .tflite model file":`Please select a .tflite model file`,custom_assistant_Question:zt,"custom_assistant_Read answers aloud":`Read answers aloud`,custom_assistant_Recognized:Bt,custom_assistant_Record:Vt,"custom_assistant_Recorded audio":`Recorded audio`,"custom_assistant_Refresh device cache":`Refresh device cache`,"custom_assistant_Remove satellite":`Remove satellite`,"custom_assistant_Remove satellite %s and all its states?":`Remove satellite %s and all its states?`,"custom_assistant_Reply audio":`Reply audio`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Ht,"custom_assistant_Request details":`Request details`,custom_assistant_Room:Ut,custom_assistant_Routine:Wt,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Gt,custom_assistant_Satellites:Kt,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Save the configuration (the instance will restart) before chatting.`,custom_assistant_Script:qt,"custom_assistant_Send announcement":`Send announcement`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:Jt,custom_assistant_Speak:Yt,"custom_assistant_Speak on all satellites":`Speak on all satellites`,"custom_assistant_Speak the test sentence and recognize it":`Speak the test sentence and recognize it`,"custom_assistant_Speech output":`Speech output`,"custom_assistant_Speech recognition":`Speech recognition`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Speech synthesis`,custom_assistant_Spoken:Xt,"custom_assistant_Start the assistant instance to chat.":`Start the assistant instance to chat.`,"custom_assistant_Start the assistant instance to load the device list.":`Start the assistant instance to load the device list.`,custom_assistant_State:Zt,"custom_assistant_States read":`States read`,"custom_assistant_States written":`States written`,custom_assistant_Status:Qt,custom_assistant_Steps:$t,custom_assistant_Stop:en,"custom_assistant_Stop listening":`Stop listening`,"custom_assistant_Stop reading answers aloud":`Stop reading answers aloud`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Test chat`,"custom_assistant_Test sentence":`Test sentence`,"custom_assistant_Test voice":`Test voice`,"custom_assistant_The instance must be running to test the voice.":`The instance must be running to test the voice.`,"custom_assistant_The microphone only works over https or on localhost.":`The microphone only works over https or on localhost.`,"custom_assistant_Thinking…":`Thinking…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:tn,custom_assistant_Tool:nn,"custom_assistant_Tool calls":`Tool calls`,"custom_assistant_Tool result":`Tool result`,"custom_assistant_Tools & states":`Tools & states`,"custom_assistant_Total duration":`Total duration`,"custom_assistant_Translate all missing (%s)":`Translate all missing (%s)`,"custom_assistant_Translate name into %s":`Translate name into %s`,"custom_assistant_Type a message…":`Type a message…`,custom_assistant_Upload:rn,"custom_assistant_Upload own wake word":`Upload own wake word`,"custom_assistant_Uploaded wake word":`Uploaded wake word`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Wake word phrase`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:an,"custom_assistant_change it on the Voice tab":`change it on the Voice tab`,custom_assistant_delete_wake_word_confirm:on,custom_assistant_device:sn,custom_assistant_filter:cn,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:ln,"custom_assistant_in progress":`in progress`,custom_assistant_llm_downloading:un,custom_assistant_llm_error:dn,custom_assistant_llm_idle:fn,custom_assistant_llm_installing:pn,custom_assistant_llm_loading:mn,"custom_assistant_llm_not installed":`not installed`,custom_assistant_llm_ready:hn,"custom_assistant_made in %s ms":`made in %s ms`,"custom_assistant_no name in %s (showing %s)":`No name in "%s" — showing "%s"`,custom_assistant_offline:gn,custom_assistant_online:_n,custom_assistant_read:vn,"custom_assistant_recognized in %s ms":`recognized in %s ms`,custom_assistant_room:yn,custom_assistant_sat_idle:bn,custom_assistant_sat_listening:xn,custom_assistant_sat_offline:Sn,custom_assistant_sat_processing:Cn,custom_assistant_sat_speaking:wn,custom_assistant_type:Tn,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:En,custom_assistant_wake_word_hint:Dn,custom_assistant_wake_word_phrase_hint:On,custom_assistant_wake_word_upload_hint:kn,custom_assistant_wake_word_uploaded:An,custom_assistant_write:jn},H=e({custom_assistant_Announcement:()=>Nn,custom_assistant_Answer:()=>Pn,custom_assistant_Cancel:()=>Fn,custom_assistant_Chat:()=>In,custom_assistant_Close:()=>Ln,custom_assistant_Context:()=>Rn,custom_assistant_Copied:()=>zn,custom_assistant_Copy:()=>Bn,custom_assistant_Delete:()=>Vn,custom_assistant_Error:()=>Hn,custom_assistant_Host:()=>Un,custom_assistant_Question:()=>Wn,custom_assistant_Recognized:()=>Gn,custom_assistant_Record:()=>Kn,custom_assistant_Request:()=>qn,custom_assistant_Room:()=>Jn,custom_assistant_Routine:()=>Yn,custom_assistant_Satellite:()=>Xn,custom_assistant_Satellites:()=>Zn,custom_assistant_Script:()=>Qn,custom_assistant_Source:()=>$n,custom_assistant_Speak:()=>er,custom_assistant_Spoken:()=>tr,custom_assistant_State:()=>nr,custom_assistant_Status:()=>rr,custom_assistant_Steps:()=>ir,custom_assistant_Stop:()=>ar,custom_assistant_Time:()=>or,custom_assistant_Tool:()=>sr,custom_assistant_Upload:()=>cr,custom_assistant_auto:()=>lr,custom_assistant_delete_wake_word_confirm:()=>ur,custom_assistant_device:()=>dr,custom_assistant_filter:()=>fr,custom_assistant_hint:()=>pr,custom_assistant_llm_downloading:()=>mr,custom_assistant_llm_error:()=>hr,custom_assistant_llm_idle:()=>gr,custom_assistant_llm_installing:()=>_r,custom_assistant_llm_loading:()=>vr,custom_assistant_llm_ready:()=>yr,custom_assistant_offline:()=>br,custom_assistant_online:()=>xr,custom_assistant_read:()=>Sr,custom_assistant_room:()=>Cr,custom_assistant_sat_idle:()=>wr,custom_assistant_sat_listening:()=>Tr,custom_assistant_sat_offline:()=>Er,custom_assistant_sat_processing:()=>Dr,custom_assistant_sat_speaking:()=>Or,custom_assistant_type:()=>kr,custom_assistant_wake_word_deleted:()=>Ar,custom_assistant_wake_word_hint:()=>jr,custom_assistant_wake_word_phrase_hint:()=>Mr,custom_assistant_wake_word_upload_hint:()=>Nr,custom_assistant_wake_word_uploaded:()=>Pr,custom_assistant_write:()=>Fr,default:()=>Ir}),Nn=`Anuncio`,Pn=`Respuesta`,Fn=`Cancel`,In=`Chat`,Ln=`Close`,Rn=`Contexto`,zn=`Copiado`,Bn=`Copiar`,Vn=`Delete`,Hn=`Error`,Un=`Anfitrión`,Wn=`Pregunta`,Gn=`Reconocido`,Kn=`Grabar`,qn=`Solicitud`,Jn=`Room`,Yn=`Routine`,Xn=`Satélite`,Zn=`satélites`,Qn=`Script`,$n=`Source`,er=`Hablar`,tr=`Dicho`,nr=`State`,rr=`Estado`,ir=`Pasos`,ar=`Detener`,or=`Hora`,sr=`Herramienta`,cr=`Subir`,lr=`auto`,ur=`¿Eliminar "%s"? Ya no se ofrecerá a los dispositivos; un dispositivo que ya lo descargó lo conserva.`,dr=`Dispositivo`,fr=`Filtrar`,pr=`Desactive la opción de lectura para ocultar un dispositivo al asistente, o desactive la opción de escritura para mantenerlo en modo de solo lectura (por ejemplo, candados). Los dispositivos vienen configurados por defecto con acceso completo.`,mr=`Descargando modelo…`,hr=`error`,gr=`inactivo`,_r=`instalando el motor…`,vr=`cargando…`,yr=`listo`,br=`desconectado`,xr=`en línea`,Sr=`Leer`,Cr=`Habitación`,wr=`inactivo`,Tr=`escuchando`,Er=`desconectado`,Dr=`tratamiento`,Or=`discurso`,kr=`Tipo`,Ar=`"%s" se ha eliminado. Un dispositivo que ya lo descargó conserva su copia.`,jr=`La palabra de activación se procesa en el dispositivo. Pasa el ratón sobre una palabra para ver en qué idiomas se entrenó — la mayoría solo en inglés.`,Mr=`Lo que dices para activar el dispositivo: así aparece en la lista.`,Nr=`Un modelo microWakeWord: el archivo .tflite, idealmente junto con su .json. Otros tipos de modelo (openWakeWord, Porcupine) no se pueden instalar de esta forma.`,Pr=`"%s" se ha subido. Selecciónalo arriba para activarlo: el dispositivo descargará entonces el modelo.`,Fr=`Escribir`,Ir={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s de audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Un satélite que sigue configurado vuelve a aparecer cuando se conecta.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Nn,custom_assistant_Answer:Pn,"custom_assistant_Audio file":`Archivo de audio`,custom_assistant_Cancel:Fn,custom_assistant_Chat:In,"custom_assistant_Clear chat":`Chat claro`,"custom_assistant_Click for details":`Haz clic para ver detalles`,custom_assistant_Close:Ln,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Contraer todo`,custom_assistant_Context:Rn,custom_assistant_Copied:zn,custom_assistant_Copy:Bn,"custom_assistant_Copy everything as JSON":`Copiar todo como JSON`,custom_assistant_Delete:Vn,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Se ha borrado la caché del dispositivo.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Descargar como JSON`,custom_assistant_Error:Hn,"custom_assistant_Expand all":`Expandir todo`,"custom_assistant_Follow-up":`Seguimiento`,"custom_assistant_Hide disabled":`Ocultar deshabilitado`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Un,"custom_assistant_Last seen":`Última vez visto`,"custom_assistant_Listening…":`Escuchando…`,"custom_assistant_Loading…":`Cargando…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Modelo local`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Idioma del nombre: %s`,"custom_assistant_No answer":`Sin respuesta`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`No se detectaron dispositivos. Asigne estados a las salas y funciones en ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Aún no hay mensajes. Escribe tu pregunta a continuación.`,"custom_assistant_No processing steps were recorded for this request.":`No se registraron pasos de procesamiento para esta solicitud. Los detalles se guardan para las últimas 200 solicitudes.`,"custom_assistant_No satellites registered yet.":`Aún no se han registrado satélites.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`No se reconoció nada`,"custom_assistant_Per-device permissions":`Permisos por dispositivo`,"custom_assistant_Play answer (backend TTS)":`Reproducir respuesta (TTS de backend)`,"custom_assistant_Please select a .tflite model file":`Selecciona un archivo de modelo .tflite`,custom_assistant_Question:Wn,"custom_assistant_Read answers aloud":`Lee las respuestas en voz alta.`,custom_assistant_Recognized:Gn,custom_assistant_Record:Kn,"custom_assistant_Recorded audio":`Audio grabado`,"custom_assistant_Refresh device cache":`Actualizar la caché del dispositivo`,"custom_assistant_Remove satellite":`Eliminar satélite`,"custom_assistant_Remove satellite %s and all its states?":`¿Eliminar el satélite %s y todos sus estados?`,"custom_assistant_Reply audio":`Audio de la respuesta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:qn,"custom_assistant_Request details":`Detalles de la solicitud`,custom_assistant_Room:Jn,custom_assistant_Routine:Yn,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Xn,custom_assistant_Satellites:Zn,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Guarda la configuración (la instancia se reiniciará) antes de chatear.`,custom_assistant_Script:Qn,"custom_assistant_Send announcement":`Enviar anuncio`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:$n,custom_assistant_Speak:er,"custom_assistant_Speak on all satellites":`Hablar por todos los satélites`,"custom_assistant_Speak the test sentence and recognize it":`Decir la frase de prueba y reconocerla`,"custom_assistant_Speech output":`Salida de voz`,"custom_assistant_Speech recognition":`Reconocimiento de voz`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Síntesis de voz`,custom_assistant_Spoken:tr,"custom_assistant_Start the assistant instance to chat.":`Inicia la instancia del asistente para chatear.`,"custom_assistant_Start the assistant instance to load the device list.":`Inicie la instancia del asistente para cargar la lista de dispositivos.`,custom_assistant_State:nr,"custom_assistant_States read":`Estados leídos`,"custom_assistant_States written":`Estados escritos`,custom_assistant_Status:rr,custom_assistant_Steps:ir,custom_assistant_Stop:ar,"custom_assistant_Stop listening":`Deja de escuchar`,"custom_assistant_Stop reading answers aloud":`Deja de leer las respuestas en voz alta.`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Chat de prueba`,"custom_assistant_Test sentence":`Frase de prueba`,"custom_assistant_Test voice":`Probar voz`,"custom_assistant_The instance must be running to test the voice.":`La instancia debe estar en ejecución para probar la voz.`,"custom_assistant_The microphone only works over https or on localhost.":`El micrófono solo funciona con https o en localhost.`,"custom_assistant_Thinking…":`Pensamiento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:or,custom_assistant_Tool:sr,"custom_assistant_Tool calls":`Llamadas a herramientas`,"custom_assistant_Tool result":`Resultado de la herramienta`,"custom_assistant_Tools & states":`Herramientas y estados`,"custom_assistant_Total duration":`Duración total`,"custom_assistant_Translate all missing (%s)":`Traducir todos los (%s) faltantes`,"custom_assistant_Translate name into %s":`Traducir nombre a %s`,"custom_assistant_Type a message…":`Escribe un mensaje…`,custom_assistant_Upload:cr,"custom_assistant_Upload own wake word":`Subir palabra de activación propia`,"custom_assistant_Uploaded wake word":`Palabra de activación subida`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Frase de activación`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:lr,"custom_assistant_change it on the Voice tab":`Cámbialo en la pestaña Voz.`,custom_assistant_delete_wake_word_confirm:ur,custom_assistant_device:dr,custom_assistant_filter:fr,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:pr,"custom_assistant_in progress":`en curso`,custom_assistant_llm_downloading:mr,custom_assistant_llm_error:hr,custom_assistant_llm_idle:gr,custom_assistant_llm_installing:_r,custom_assistant_llm_loading:vr,"custom_assistant_llm_not installed":`no instalado`,custom_assistant_llm_ready:yr,"custom_assistant_made in %s ms":`generado en %s ms`,"custom_assistant_no name in %s (showing %s)":`No se encontró ningún nombre en "%s" — se muestra "%s"`,custom_assistant_offline:br,custom_assistant_online:xr,custom_assistant_read:Sr,"custom_assistant_recognized in %s ms":`reconocido en %s ms`,custom_assistant_room:Cr,custom_assistant_sat_idle:wr,custom_assistant_sat_listening:Tr,custom_assistant_sat_offline:Er,custom_assistant_sat_processing:Dr,custom_assistant_sat_speaking:Or,custom_assistant_type:kr,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:Ar,custom_assistant_wake_word_hint:jr,custom_assistant_wake_word_phrase_hint:Mr,custom_assistant_wake_word_upload_hint:Nr,custom_assistant_wake_word_uploaded:Pr,custom_assistant_write:Fr},U=e({custom_assistant_Announcement:()=>Lr,custom_assistant_Answer:()=>Rr,custom_assistant_Cancel:()=>zr,custom_assistant_Chat:()=>Br,custom_assistant_Close:()=>Vr,custom_assistant_Context:()=>Hr,custom_assistant_Copied:()=>Ur,custom_assistant_Copy:()=>Wr,custom_assistant_Delete:()=>Gr,custom_assistant_Error:()=>Kr,custom_assistant_Host:()=>qr,custom_assistant_Question:()=>Jr,custom_assistant_Recognized:()=>Yr,custom_assistant_Record:()=>Xr,custom_assistant_Request:()=>Zr,custom_assistant_Room:()=>Qr,custom_assistant_Routine:()=>$r,custom_assistant_Satellite:()=>ei,custom_assistant_Satellites:()=>ti,custom_assistant_Script:()=>ni,custom_assistant_Source:()=>ri,custom_assistant_Speak:()=>ii,custom_assistant_Spoken:()=>ai,custom_assistant_State:()=>oi,custom_assistant_Status:()=>si,custom_assistant_Steps:()=>ci,custom_assistant_Stop:()=>li,custom_assistant_Time:()=>ui,custom_assistant_Tool:()=>di,custom_assistant_Upload:()=>fi,custom_assistant_auto:()=>pi,custom_assistant_delete_wake_word_confirm:()=>mi,custom_assistant_device:()=>hi,custom_assistant_filter:()=>gi,custom_assistant_hint:()=>_i,custom_assistant_llm_downloading:()=>vi,custom_assistant_llm_error:()=>yi,custom_assistant_llm_idle:()=>bi,custom_assistant_llm_installing:()=>xi,custom_assistant_llm_loading:()=>Si,custom_assistant_llm_ready:()=>Ci,custom_assistant_offline:()=>wi,custom_assistant_online:()=>Ti,custom_assistant_read:()=>Ei,custom_assistant_room:()=>Di,custom_assistant_sat_idle:()=>Oi,custom_assistant_sat_listening:()=>ki,custom_assistant_sat_offline:()=>Ai,custom_assistant_sat_processing:()=>ji,custom_assistant_sat_speaking:()=>Mi,custom_assistant_type:()=>Ni,custom_assistant_wake_word_deleted:()=>Pi,custom_assistant_wake_word_hint:()=>Fi,custom_assistant_wake_word_phrase_hint:()=>Ii,custom_assistant_wake_word_upload_hint:()=>Li,custom_assistant_wake_word_uploaded:()=>Ri,custom_assistant_write:()=>zi,default:()=>Bi}),Lr=`Annonce`,Rr=`Réponse`,zr=`Cancel`,Br=`Chat`,Vr=`Close`,Hr=`Contexte`,Ur=`Copié`,Wr=`Copier`,Gr=`Delete`,Kr=`Erreur`,qr=`Hôte`,Jr=`Question`,Yr=`Reconnu`,Xr=`Enregistrer`,Zr=`Requête`,Qr=`Room`,$r=`Routine`,ei=`Satellite`,ti=`Satellites`,ni=`Script`,ri=`Source`,ii=`Parler`,ai=`Prononcé`,oi=`State`,si=`Statut`,ci=`Étapes`,li=`Arrêter`,ui=`Heure`,di=`Outil`,fi=`Téléverser`,pi=`auto`,mi=`Supprimer « %s » ? Il ne sera plus proposé aux appareils ; un appareil qui l'a déjà téléchargé le conserve.`,hi=`Appareil`,gi=`Filtre`,_i=`Décochez l'option «\xA0Lecture\xA0» pour masquer un périphérique à l'assistant, ou décochez l'option «\xA0Écriture\xA0» pour le rendre accessible en lecture seule (par exemple, les verrous). Par défaut, tous les périphériques sont autorisés.`,vi=`téléchargement du modèle…`,yi=`erreur`,bi=`inactif`,xi=`installation du moteur…`,Si=`chargement…`,Ci=`prêt`,wi=`hors ligne`,Ti=`en ligne`,Ei=`Lire`,Di=`Chambre`,Oi=`inactif`,ki=`écoute`,Ai=`hors ligne`,ji=`traitement`,Mi=`Parlant`,Ni=`Taper`,Pi=`« %s » a été supprimé. Un appareil qui l'a déjà téléchargé conserve sa copie.`,Fi=`Le mot d'activation s'exécute sur l'appareil. Survolez un mot pour voir dans quelles langues il a été entraîné — la plupart uniquement en anglais.`,Ii=`Ce que vous dites pour réveiller l'appareil — c'est ainsi qu'il apparaît dans la liste.`,Li=`Un modèle microWakeWord : le fichier .tflite, idéalement avec son .json. Les autres types de modèles (openWakeWord, Porcupine) ne peuvent pas être installés ainsi.`,Ri=`« %s » a été téléversé. Sélectionnez-le ci-dessus pour l'activer — l'appareil télécharge alors le modèle.`,zi=`Écrire`,Bi={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s d’audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Un satellite encore configuré réapparaît dès qu’il se connecte.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Lr,custom_assistant_Answer:Rr,"custom_assistant_Audio file":`Fichier audio`,custom_assistant_Cancel:zr,custom_assistant_Chat:Br,"custom_assistant_Clear chat":`Discussion claire`,"custom_assistant_Click for details":`Cliquer pour les détails`,custom_assistant_Close:Vr,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Tout réduire`,custom_assistant_Context:Hr,custom_assistant_Copied:Ur,custom_assistant_Copy:Wr,"custom_assistant_Copy everything as JSON":`Tout copier en JSON`,custom_assistant_Delete:Gr,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Cache du périphérique effacé.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Télécharger en JSON`,custom_assistant_Error:Kr,"custom_assistant_Expand all":`Tout développer`,"custom_assistant_Follow-up":`Relance`,"custom_assistant_Hide disabled":`Masquer les fonctions désactivées`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:qr,"custom_assistant_Last seen":`Dernière observation`,"custom_assistant_Listening…":`Écoute…`,"custom_assistant_Loading…":`Chargement…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Modèle local`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Langue du nom\xA0: %s`,"custom_assistant_No answer":`Pas de réponse`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Aucun appareil détecté. Attribuez des états aux salles et aux fonctions dans ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Aucun message pour l'instant. Posez votre question ci-dessous.`,"custom_assistant_No processing steps were recorded for this request.":`Aucune étape de traitement n'a été enregistrée pour cette requête. Les détails sont conservés pour les 200 dernières requêtes.`,"custom_assistant_No satellites registered yet.":`Aucun satellite enregistré pour le moment.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Rien de reconnu`,"custom_assistant_Per-device permissions":`Autorisations par appareil`,"custom_assistant_Play answer (backend TTS)":`Réponse de lecture (TTS backend)`,"custom_assistant_Please select a .tflite model file":`Veuillez sélectionner un fichier de modèle .tflite`,custom_assistant_Question:Jr,"custom_assistant_Read answers aloud":`Lisez les réponses à voix haute`,custom_assistant_Recognized:Yr,custom_assistant_Record:Xr,"custom_assistant_Recorded audio":`Audio enregistré`,"custom_assistant_Refresh device cache":`Actualiser le cache de l'appareil`,"custom_assistant_Remove satellite":`Supprimer le satellite`,"custom_assistant_Remove satellite %s and all its states?":`Supprimer le satellite %s et tous ses états ?`,"custom_assistant_Reply audio":`Audio de la réponse`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Zr,"custom_assistant_Request details":`Détails de la requête`,custom_assistant_Room:Qr,custom_assistant_Routine:$r,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:ei,custom_assistant_Satellites:ti,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Enregistrez la configuration (l'instance redémarrera) avant de discuter.`,custom_assistant_Script:ni,"custom_assistant_Send announcement":`Envoyer l'annonce`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:ri,custom_assistant_Speak:ii,"custom_assistant_Speak on all satellites":`Parlez sur tous les satellites`,"custom_assistant_Speak the test sentence and recognize it":`Prononcer la phrase de test et la reconnaître`,"custom_assistant_Speech output":`Synthèse vocale`,"custom_assistant_Speech recognition":`Reconnaissance vocale`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Synthèse vocale`,custom_assistant_Spoken:ai,"custom_assistant_Start the assistant instance to chat.":`Démarrez l'instance de l'assistant pour discuter.`,"custom_assistant_Start the assistant instance to load the device list.":`Démarrez l'instance de l'assistant pour charger la liste des périphériques.`,custom_assistant_State:oi,"custom_assistant_States read":`États lus`,"custom_assistant_States written":`États écrits`,custom_assistant_Status:si,custom_assistant_Steps:ci,custom_assistant_Stop:li,"custom_assistant_Stop listening":`Arrêtez d'écouter`,"custom_assistant_Stop reading answers aloud":`Arrêtez de lire les réponses à voix haute`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Chat de test`,"custom_assistant_Test sentence":`Phrase de test`,"custom_assistant_Test voice":`Tester la voix`,"custom_assistant_The instance must be running to test the voice.":`L’instance doit être en cours d’exécution pour tester la voix.`,"custom_assistant_The microphone only works over https or on localhost.":`Le microphone ne fonctionne qu’en https ou sur localhost.`,"custom_assistant_Thinking…":`Pensée…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:ui,custom_assistant_Tool:di,"custom_assistant_Tool calls":`Appels d'outils`,"custom_assistant_Tool result":`Résultat de l'outil`,"custom_assistant_Tools & states":`Outils et états`,"custom_assistant_Total duration":`Durée totale`,"custom_assistant_Translate all missing (%s)":`Traduire tout ce qui est manquant (%s)`,"custom_assistant_Translate name into %s":`Traduire le nom en %s`,"custom_assistant_Type a message…":`Saisissez un message…`,custom_assistant_Upload:fi,"custom_assistant_Upload own wake word":`Téléverser son propre mot d'activation`,"custom_assistant_Uploaded wake word":`Mot d'activation téléversé`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Phrase d'activation`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:pi,"custom_assistant_change it on the Voice tab":`modifiez-le dans l'onglet Voix`,custom_assistant_delete_wake_word_confirm:mi,custom_assistant_device:hi,custom_assistant_filter:gi,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:_i,"custom_assistant_in progress":`en cours`,custom_assistant_llm_downloading:vi,custom_assistant_llm_error:yi,custom_assistant_llm_idle:bi,custom_assistant_llm_installing:xi,custom_assistant_llm_loading:Si,"custom_assistant_llm_not installed":`non installé`,custom_assistant_llm_ready:Ci,"custom_assistant_made in %s ms":`généré en %s ms`,"custom_assistant_no name in %s (showing %s)":`Aucun nom dans « %s » — affichage de « %s »`,custom_assistant_offline:wi,custom_assistant_online:Ti,custom_assistant_read:Ei,"custom_assistant_recognized in %s ms":`reconnu en %s ms`,custom_assistant_room:Di,custom_assistant_sat_idle:Oi,custom_assistant_sat_listening:ki,custom_assistant_sat_offline:Ai,custom_assistant_sat_processing:ji,custom_assistant_sat_speaking:Mi,custom_assistant_type:Ni,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:Pi,custom_assistant_wake_word_hint:Fi,custom_assistant_wake_word_phrase_hint:Ii,custom_assistant_wake_word_upload_hint:Li,custom_assistant_wake_word_uploaded:Ri,custom_assistant_write:zi},W=e({custom_assistant_Announcement:()=>Vi,custom_assistant_Answer:()=>Hi,custom_assistant_Cancel:()=>Ui,custom_assistant_Chat:()=>Wi,custom_assistant_Close:()=>Gi,custom_assistant_Context:()=>Ki,custom_assistant_Copied:()=>qi,custom_assistant_Copy:()=>Ji,custom_assistant_Delete:()=>Yi,custom_assistant_Error:()=>Xi,custom_assistant_Host:()=>Zi,custom_assistant_Question:()=>Qi,custom_assistant_Recognized:()=>$i,custom_assistant_Record:()=>ea,custom_assistant_Request:()=>ta,custom_assistant_Room:()=>na,custom_assistant_Routine:()=>ra,custom_assistant_Satellite:()=>ia,custom_assistant_Satellites:()=>aa,custom_assistant_Script:()=>oa,custom_assistant_Source:()=>sa,custom_assistant_Speak:()=>ca,custom_assistant_Spoken:()=>la,custom_assistant_State:()=>ua,custom_assistant_Status:()=>da,custom_assistant_Steps:()=>fa,custom_assistant_Stop:()=>pa,custom_assistant_Time:()=>`Ora`,custom_assistant_Tool:()=>ma,custom_assistant_Upload:()=>ha,custom_assistant_auto:()=>ga,custom_assistant_delete_wake_word_confirm:()=>_a,custom_assistant_device:()=>va,custom_assistant_filter:()=>ya,custom_assistant_hint:()=>ba,custom_assistant_llm_downloading:()=>xa,custom_assistant_llm_error:()=>Sa,custom_assistant_llm_idle:()=>Ca,custom_assistant_llm_installing:()=>wa,custom_assistant_llm_loading:()=>Ta,custom_assistant_llm_ready:()=>Ea,custom_assistant_offline:()=>Da,custom_assistant_online:()=>Oa,custom_assistant_read:()=>ka,custom_assistant_room:()=>Aa,custom_assistant_sat_idle:()=>ja,custom_assistant_sat_listening:()=>Ma,custom_assistant_sat_offline:()=>Na,custom_assistant_sat_processing:()=>Pa,custom_assistant_sat_speaking:()=>Fa,custom_assistant_type:()=>Ia,custom_assistant_wake_word_deleted:()=>La,custom_assistant_wake_word_hint:()=>Ra,custom_assistant_wake_word_phrase_hint:()=>za,custom_assistant_wake_word_upload_hint:()=>Ba,custom_assistant_wake_word_uploaded:()=>Va,custom_assistant_write:()=>Ha,default:()=>Ua}),Vi=`Annuncio`,Hi=`Risposta`,Ui=`Cancel`,Wi=`Chat`,Gi=`Close`,Ki=`Contesto`,qi=`Copiato`,Ji=`Copia`,Yi=`Delete`,Xi=`Errore`,Zi=`Ospite`,Qi=`Domanda`,$i=`Riconosciuto`,ea=`Registra`,ta=`Richiesta`,na=`Room`,ra=`Routine`,ia=`Satellitare`,aa=`Satelliti`,oa=`Script`,sa=`Source`,ca=`Parlare`,la=`Pronunciato`,ua=`State`,da=`Stato`,fa=`Passaggi`,pa=`Stop`,ma=`Strumento`,ha=`Carica`,ga=`auto`,_a=`Eliminare "%s"? Non verrà più offerto ai dispositivi; un dispositivo che l'ha già scaricato lo conserva.`,va=`Dispositivo`,ya=`Filtro`,ba=`Deseleziona "Lettura" per nascondere un dispositivo all'assistente, oppure deseleziona "Scrittura" per mantenerlo in sola lettura (ad esempio, per bloccare le serrature). Per impostazione predefinita, i dispositivi sono completamente accessibili.`,xa=`modello di download…`,Sa=`errore`,Ca=`oziare`,wa=`installazione del motore…`,Ta=`caricamento…`,Ea=`pronto`,Da=`offline`,Oa=`online`,ka=`Leggere`,Aa=`Camera`,ja=`oziare`,Ma=`ascolto`,Na=`offline`,Pa=`elaborazione`,Fa=`A proposito di`,Ia=`Tipo`,La=`"%s" è stato eliminato. Un dispositivo che l'ha già scaricato ne conserva la copia.`,Ra=`La parola di attivazione viene elaborata sul dispositivo. Passa il mouse su una parola per vedere in quali lingue è stata addestrata — la maggior parte solo in inglese.`,za=`Ciò che dici per attivare il dispositivo: è così che appare nell'elenco.`,Ba=`Un modello microWakeWord: il file .tflite, preferibilmente insieme al suo .json. Altri tipi di modello (openWakeWord, Porcupine) non possono essere installati in questo modo.`,Va=`"%s" è stato caricato. Selezionalo qui sopra per attivarlo: il dispositivo scaricherà allora il modello.`,Ha=`Scrivere`,Ua={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s di audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Un satellite ancora configurato ricompare quando si connette.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Vi,custom_assistant_Answer:Hi,"custom_assistant_Audio file":`File audio`,custom_assistant_Cancel:Ui,custom_assistant_Chat:Wi,"custom_assistant_Clear chat":`Chat chiara`,"custom_assistant_Click for details":`Clicca per i dettagli`,custom_assistant_Close:Gi,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Comprimi tutto`,custom_assistant_Context:Ki,custom_assistant_Copied:qi,custom_assistant_Copy:Ji,"custom_assistant_Copy everything as JSON":`Copia tutto come JSON`,custom_assistant_Delete:Yi,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Cache del dispositivo svuotata.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Scarica come JSON`,custom_assistant_Error:Xi,"custom_assistant_Expand all":`Espandi tutto`,"custom_assistant_Follow-up":`Domanda di follow-up`,"custom_assistant_Hide disabled":`Nascondi disabilitato`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Zi,"custom_assistant_Last seen":`Ultimo avvistamento`,"custom_assistant_Listening…":`Ascolto…`,"custom_assistant_Loading…":`Caricamento…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Modello locale`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Lingua del nome: %s`,"custom_assistant_No answer":`Nessuna risposta`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nessun dispositivo rilevato. Assegna stati a stanze e funzioni in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Nessun messaggio ancora. Scrivi una domanda qui sotto.`,"custom_assistant_No processing steps were recorded for this request.":`Per questa richiesta non sono stati registrati passaggi di elaborazione. I dettagli vengono conservati per le ultime 200 richieste.`,"custom_assistant_No satellites registered yet.":`Nessun satellite ancora registrato.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Nulla riconosciuto`,"custom_assistant_Per-device permissions":`Autorizzazioni per dispositivo`,"custom_assistant_Play answer (backend TTS)":`Riproduci la risposta (TST di backend)`,"custom_assistant_Please select a .tflite model file":`Seleziona un file di modello .tflite`,custom_assistant_Question:Qi,"custom_assistant_Read answers aloud":`Leggi le risposte ad alta voce`,custom_assistant_Recognized:$i,custom_assistant_Record:ea,"custom_assistant_Recorded audio":`Audio registrato`,"custom_assistant_Refresh device cache":`Aggiorna la cache del dispositivo`,"custom_assistant_Remove satellite":`Rimuovi satellite`,"custom_assistant_Remove satellite %s and all its states?":`Rimuovere il satellite %s e tutti i suoi stati?`,"custom_assistant_Reply audio":`Audio della risposta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:ta,"custom_assistant_Request details":`Dettagli della richiesta`,custom_assistant_Room:na,custom_assistant_Routine:ra,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:ia,custom_assistant_Satellites:aa,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Salva la configurazione (l'istanza si riavvierà) prima di iniziare la chat.`,custom_assistant_Script:oa,"custom_assistant_Send announcement":`Invia annuncio`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:sa,custom_assistant_Speak:ca,"custom_assistant_Speak on all satellites":`Comunicare su tutti i satelliti`,"custom_assistant_Speak the test sentence and recognize it":`Pronuncia la frase di prova e riconoscila`,"custom_assistant_Speech output":`Sintesi vocale`,"custom_assistant_Speech recognition":`Riconoscimento vocale`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Sintesi vocale`,custom_assistant_Spoken:la,"custom_assistant_Start the assistant instance to chat.":`Avvia l'assistente per chattare.`,"custom_assistant_Start the assistant instance to load the device list.":`Avvia l'istanza dell'assistente per caricare l'elenco dei dispositivi.`,custom_assistant_State:ua,"custom_assistant_States read":`Stati letti`,"custom_assistant_States written":`Stati scritti`,custom_assistant_Status:da,custom_assistant_Steps:fa,custom_assistant_Stop:pa,"custom_assistant_Stop listening":`Smetti di ascoltare`,"custom_assistant_Stop reading answers aloud":`Smetti di leggere le risposte ad alta voce`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Chat di prova`,"custom_assistant_Test sentence":`Frase di prova`,"custom_assistant_Test voice":`Prova voce`,"custom_assistant_The instance must be running to test the voice.":`L’istanza deve essere in esecuzione per provare la voce.`,"custom_assistant_The microphone only works over https or on localhost.":`Il microfono funziona solo via https o su localhost.`,"custom_assistant_Thinking…":`Pensiero…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:`Ora`,custom_assistant_Tool:ma,"custom_assistant_Tool calls":`Chiamate agli strumenti`,"custom_assistant_Tool result":`Risultato dello strumento`,"custom_assistant_Tools & states":`Strumenti e stati`,"custom_assistant_Total duration":`Durata totale`,"custom_assistant_Translate all missing (%s)":`Traduci tutto ciò che manca (%s)`,"custom_assistant_Translate name into %s":`Traduci il nome in %s`,"custom_assistant_Type a message…":`Digita un messaggio…`,custom_assistant_Upload:ha,"custom_assistant_Upload own wake word":`Carica la tua parola di attivazione`,"custom_assistant_Uploaded wake word":`Parola di attivazione caricata`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Frase di attivazione`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:ga,"custom_assistant_change it on the Voice tab":`modificalo nella scheda Voce`,custom_assistant_delete_wake_word_confirm:_a,custom_assistant_device:va,custom_assistant_filter:ya,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:ba,"custom_assistant_in progress":`in corso`,custom_assistant_llm_downloading:xa,custom_assistant_llm_error:Sa,custom_assistant_llm_idle:Ca,custom_assistant_llm_installing:wa,custom_assistant_llm_loading:Ta,"custom_assistant_llm_not installed":`non installato`,custom_assistant_llm_ready:Ea,"custom_assistant_made in %s ms":`generato in %s ms`,"custom_assistant_no name in %s (showing %s)":`Nessun nome in "%s" — visualizzazione di "%s"`,custom_assistant_offline:Da,custom_assistant_online:Oa,custom_assistant_read:ka,"custom_assistant_recognized in %s ms":`riconosciuto in %s ms`,custom_assistant_room:Aa,custom_assistant_sat_idle:ja,custom_assistant_sat_listening:Ma,custom_assistant_sat_offline:Na,custom_assistant_sat_processing:Pa,custom_assistant_sat_speaking:Fa,custom_assistant_type:Ia,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:La,custom_assistant_wake_word_hint:Ra,custom_assistant_wake_word_phrase_hint:za,custom_assistant_wake_word_upload_hint:Ba,custom_assistant_wake_word_uploaded:Va,custom_assistant_write:Ha},G=e({custom_assistant_Announcement:()=>Wa,custom_assistant_Answer:()=>Ga,custom_assistant_Cancel:()=>Ka,custom_assistant_Chat:()=>qa,custom_assistant_Close:()=>Ja,custom_assistant_Context:()=>Ya,custom_assistant_Copied:()=>Xa,custom_assistant_Copy:()=>Za,custom_assistant_Delete:()=>Qa,custom_assistant_Error:()=>$a,custom_assistant_Host:()=>eo,custom_assistant_Question:()=>to,custom_assistant_Recognized:()=>no,custom_assistant_Record:()=>ro,custom_assistant_Request:()=>io,custom_assistant_Room:()=>ao,custom_assistant_Routine:()=>oo,custom_assistant_Satellite:()=>so,custom_assistant_Satellites:()=>co,custom_assistant_Script:()=>lo,custom_assistant_Source:()=>uo,custom_assistant_Speak:()=>fo,custom_assistant_Spoken:()=>po,custom_assistant_State:()=>mo,custom_assistant_Status:()=>ho,custom_assistant_Steps:()=>go,custom_assistant_Stop:()=>_o,custom_assistant_Time:()=>vo,custom_assistant_Tool:()=>yo,custom_assistant_Upload:()=>bo,custom_assistant_auto:()=>xo,custom_assistant_delete_wake_word_confirm:()=>So,custom_assistant_device:()=>Co,custom_assistant_filter:()=>wo,custom_assistant_hint:()=>To,custom_assistant_llm_downloading:()=>Eo,custom_assistant_llm_error:()=>Do,custom_assistant_llm_idle:()=>Oo,custom_assistant_llm_installing:()=>ko,custom_assistant_llm_loading:()=>Ao,custom_assistant_llm_ready:()=>jo,custom_assistant_offline:()=>Mo,custom_assistant_online:()=>No,custom_assistant_read:()=>Po,custom_assistant_room:()=>Fo,custom_assistant_sat_idle:()=>Io,custom_assistant_sat_listening:()=>Lo,custom_assistant_sat_offline:()=>Ro,custom_assistant_sat_processing:()=>zo,custom_assistant_sat_speaking:()=>Bo,custom_assistant_type:()=>Vo,custom_assistant_wake_word_deleted:()=>Ho,custom_assistant_wake_word_hint:()=>Uo,custom_assistant_wake_word_phrase_hint:()=>Wo,custom_assistant_wake_word_upload_hint:()=>Go,custom_assistant_wake_word_uploaded:()=>Ko,custom_assistant_write:()=>qo,default:()=>Jo}),Wa=`Aankondiging`,Ga=`Antwoord`,Ka=`Cancel`,qa=`Chat`,Ja=`Close`,Ya=`Context`,Xa=`Gekopieerd`,Za=`Kopiëren`,Qa=`Delete`,$a=`Fout`,eo=`Gastheer`,to=`Vraag`,no=`Herkend`,ro=`Opnemen`,io=`Verzoek`,ao=`Room`,oo=`Routine`,so=`Satelliet`,co=`Satellieten`,lo=`Script`,uo=`Source`,fo=`Spreken`,po=`Gesproken`,mo=`State`,ho=`Status`,go=`Stappen`,_o=`Stop`,vo=`Tijd`,yo=`Tool`,bo=`Uploaden`,xo=`auto`,So=`"%s" verwijderen? Het wordt niet meer aan de apparaten aangeboden; een apparaat dat het al heeft gedownload, houdt het.`,Co=`Apparaat`,wo=`Filter`,To=`Schakel de optie 'Lezen' uit om een apparaat voor de assistent te verbergen, of schakel de optie 'Schrijven' uit om het apparaat alleen-lezen te houden (bijv. sloten). Apparaten zijn standaard volledig toegestaan.`,Eo=`Model downloaden…`,Do=`fout`,Oo=`inactief`,ko=`motor installeren…`,Ao=`laden…`,jo=`klaar`,Mo=`offline`,No=`online`,Po=`Lezen`,Fo=`Kamer`,Io=`inactief`,Lo=`luisteren`,Ro=`offline`,zo=`verwerking`,Bo=`spreken`,Vo=`Type`,Ho=`"%s" is verwijderd. Een apparaat dat het al heeft gedownload, houdt zijn kopie.`,Uo=`Het activeringswoord draait op het apparaat. Beweeg de muis over een woord om te zien in welke talen het getraind is — de meeste alleen Engels.`,Wo=`Wat je zegt om het apparaat te wekken — zo verschijnt het in de lijst.`,Go=`Een microWakeWord-model: het .tflite-bestand, bij voorkeur samen met de bijbehorende .json. Andere modeltypen (openWakeWord, Porcupine) kunnen zo niet worden geïnstalleerd.`,Ko=`"%s" is geüpload. Selecteer het hierboven om het te activeren — het apparaat downloadt dan het model.`,qo=`Schrijven`,Jo={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Een satelliet die nog geconfigureerd is, verschijnt weer zodra hij verbinding maakt.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Wa,custom_assistant_Answer:Ga,"custom_assistant_Audio file":`Audiobestand`,custom_assistant_Cancel:Ka,custom_assistant_Chat:qa,"custom_assistant_Clear chat":`Duidelijke chat`,"custom_assistant_Click for details":`Klik voor details`,custom_assistant_Close:Ja,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Alles inklappen`,custom_assistant_Context:Ya,custom_assistant_Copied:Xa,custom_assistant_Copy:Za,"custom_assistant_Copy everything as JSON":`Alles als JSON kopiëren`,custom_assistant_Delete:Qa,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Apparaatcache gewist.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Downloaden als JSON`,custom_assistant_Error:$a,"custom_assistant_Expand all":`Alles uitklappen`,"custom_assistant_Follow-up":`Vervolgvraag`,"custom_assistant_Hide disabled":`Verberg uitgeschakeld`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:eo,"custom_assistant_Last seen":`Laatst gezien`,"custom_assistant_Listening…":`Luisteren…`,"custom_assistant_Loading…":`Laden…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Lokaal model`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Naamtaal: %s`,"custom_assistant_No answer":`Geen antwoord`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Geen apparaten gedetecteerd. Wijs statussen toe aan kamers en functies in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Nog geen berichten. Typ hieronder een vraag.`,"custom_assistant_No processing steps were recorded for this request.":`Voor dit verzoek zijn geen verwerkingsstappen vastgelegd. Details worden bewaard voor de laatste 200 verzoeken.`,"custom_assistant_No satellites registered yet.":`Er zijn nog geen satellieten geregistreerd.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Niets herkend`,"custom_assistant_Per-device permissions":`Machtigingen per apparaat`,"custom_assistant_Play answer (backend TTS)":`Speel antwoord (backend TTS)`,"custom_assistant_Please select a .tflite model file":`Selecteer een .tflite-modelbestand`,custom_assistant_Question:to,"custom_assistant_Read answers aloud":`Lees de antwoorden hardop voor.`,custom_assistant_Recognized:no,custom_assistant_Record:ro,"custom_assistant_Recorded audio":`Opgenomen audio`,"custom_assistant_Refresh device cache":`Vernieuw de apparaatcache.`,"custom_assistant_Remove satellite":`Satelliet verwijderen`,"custom_assistant_Remove satellite %s and all its states?":`Satelliet %s en al zijn states verwijderen?`,"custom_assistant_Reply audio":`Audio van het antwoord`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:io,"custom_assistant_Request details":`Details van het verzoek`,custom_assistant_Room:ao,custom_assistant_Routine:oo,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:so,custom_assistant_Satellites:co,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Sla de configuratie op (het apparaat zal opnieuw opstarten) voordat je gaat chatten.`,custom_assistant_Script:lo,"custom_assistant_Send announcement":`Aankondiging verzenden`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:uo,custom_assistant_Speak:fo,"custom_assistant_Speak on all satellites":`Communiceer via alle satellieten`,"custom_assistant_Speak the test sentence and recognize it":`Testzin uitspreken en herkennen`,"custom_assistant_Speech output":`Spraakuitvoer`,"custom_assistant_Speech recognition":`Spraakherkenning`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Spraaksynthese`,custom_assistant_Spoken:po,"custom_assistant_Start the assistant instance to chat.":`Start de assistent-instantie om te chatten.`,"custom_assistant_Start the assistant instance to load the device list.":`Start de assistent-instantie om de lijst met apparaten te laden.`,custom_assistant_State:mo,"custom_assistant_States read":`Gelezen states`,"custom_assistant_States written":`Geschreven states`,custom_assistant_Status:ho,custom_assistant_Steps:go,custom_assistant_Stop:_o,"custom_assistant_Stop listening":`Stop met luisteren`,"custom_assistant_Stop reading answers aloud":`Stop met het hardop voorlezen van antwoorden.`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Testchat`,"custom_assistant_Test sentence":`Testzin`,"custom_assistant_Test voice":`Stem testen`,"custom_assistant_The instance must be running to test the voice.":`De instantie moet draaien om de stem te testen.`,"custom_assistant_The microphone only works over https or on localhost.":`De microfoon werkt alleen via https of op localhost.`,"custom_assistant_Thinking…":`Aan het nadenken…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:vo,custom_assistant_Tool:yo,"custom_assistant_Tool calls":`Toolaanroepen`,"custom_assistant_Tool result":`Toolresultaat`,"custom_assistant_Tools & states":`Tools & states`,"custom_assistant_Total duration":`Totale duur`,"custom_assistant_Translate all missing (%s)":`Vertaal alle ontbrekende (%) tekens`,"custom_assistant_Translate name into %s":`Vertaal de naam naar %s`,"custom_assistant_Type a message…":`Typ een bericht…`,custom_assistant_Upload:bo,"custom_assistant_Upload own wake word":`Eigen wekwoord uploaden`,"custom_assistant_Uploaded wake word":`Geüpload wekwoord`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Wekwoordzin`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:xo,"custom_assistant_change it on the Voice tab":`Wijzig dit op het tabblad 'Stem'.`,custom_assistant_delete_wake_word_confirm:So,custom_assistant_device:Co,custom_assistant_filter:wo,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:To,"custom_assistant_in progress":`bezig`,custom_assistant_llm_downloading:Eo,custom_assistant_llm_error:Do,custom_assistant_llm_idle:Oo,custom_assistant_llm_installing:ko,custom_assistant_llm_loading:Ao,"custom_assistant_llm_not installed":`niet geïnstalleerd`,custom_assistant_llm_ready:jo,"custom_assistant_made in %s ms":`gemaakt in %s ms`,"custom_assistant_no name in %s (showing %s)":`Geen naam in "%s" — "%s" wordt weergegeven`,custom_assistant_offline:Mo,custom_assistant_online:No,custom_assistant_read:Po,"custom_assistant_recognized in %s ms":`herkend in %s ms`,custom_assistant_room:Fo,custom_assistant_sat_idle:Io,custom_assistant_sat_listening:Lo,custom_assistant_sat_offline:Ro,custom_assistant_sat_processing:zo,custom_assistant_sat_speaking:Bo,custom_assistant_type:Vo,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:Ho,custom_assistant_wake_word_hint:Uo,custom_assistant_wake_word_phrase_hint:Wo,custom_assistant_wake_word_upload_hint:Go,custom_assistant_wake_word_uploaded:Ko,custom_assistant_write:qo},K=e({custom_assistant_Announcement:()=>Yo,custom_assistant_Answer:()=>Xo,custom_assistant_Cancel:()=>Zo,custom_assistant_Chat:()=>Qo,custom_assistant_Close:()=>$o,custom_assistant_Context:()=>es,custom_assistant_Copied:()=>ts,custom_assistant_Copy:()=>ns,custom_assistant_Delete:()=>rs,custom_assistant_Error:()=>is,custom_assistant_Host:()=>as,custom_assistant_Question:()=>os,custom_assistant_Recognized:()=>ss,custom_assistant_Record:()=>cs,custom_assistant_Request:()=>ls,custom_assistant_Room:()=>us,custom_assistant_Routine:()=>ds,custom_assistant_Satellite:()=>fs,custom_assistant_Satellites:()=>ps,custom_assistant_Script:()=>ms,custom_assistant_Source:()=>hs,custom_assistant_Speak:()=>gs,custom_assistant_Spoken:()=>_s,custom_assistant_State:()=>vs,custom_assistant_Status:()=>ys,custom_assistant_Steps:()=>bs,custom_assistant_Stop:()=>xs,custom_assistant_Time:()=>Ss,custom_assistant_Tool:()=>Cs,custom_assistant_Upload:()=>ws,custom_assistant_auto:()=>Ts,custom_assistant_delete_wake_word_confirm:()=>Es,custom_assistant_device:()=>Ds,custom_assistant_filter:()=>Os,custom_assistant_hint:()=>ks,custom_assistant_llm_downloading:()=>As,custom_assistant_llm_error:()=>js,custom_assistant_llm_idle:()=>Ms,custom_assistant_llm_installing:()=>Ns,custom_assistant_llm_loading:()=>Ps,custom_assistant_llm_ready:()=>Fs,custom_assistant_offline:()=>Is,custom_assistant_online:()=>Ls,custom_assistant_read:()=>Rs,custom_assistant_room:()=>zs,custom_assistant_sat_idle:()=>Bs,custom_assistant_sat_listening:()=>Vs,custom_assistant_sat_offline:()=>Hs,custom_assistant_sat_processing:()=>Us,custom_assistant_sat_speaking:()=>Ws,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_deleted:()=>Gs,custom_assistant_wake_word_hint:()=>Ks,custom_assistant_wake_word_phrase_hint:()=>qs,custom_assistant_wake_word_upload_hint:()=>Js,custom_assistant_wake_word_uploaded:()=>Ys,custom_assistant_write:()=>Xs,default:()=>Zs}),Yo=`Ogłoszenie`,Xo=`Odpowiedź`,Zo=`Cancel`,Qo=`Chat`,$o=`Close`,es=`Kontekst`,ts=`Skopiowano`,ns=`Kopiuj`,rs=`Delete`,is=`Błąd`,as=`Gospodarz`,os=`Pytanie`,ss=`Rozpoznano`,cs=`Nagraj`,ls=`Żądanie`,us=`Room`,ds=`Routine`,fs=`Satelita`,ps=`Satelity`,ms=`Script`,hs=`Source`,gs=`Mówić`,_s=`Wypowiedziano`,vs=`State`,ys=`Status`,bs=`Kroki`,xs=`Stop`,Ss=`Czas`,Cs=`Narzędzie`,ws=`Prześlij`,Ts=`automatyczny`,Es=`Usunąć „%s”? Nie będzie już oferowane urządzeniom; urządzenie, które już je pobrało, zachowa je.`,Ds=`Urządzenie`,Os=`Filtr`,ks=`Odznacz opcję „Odczyt”, aby ukryć urządzenie przed asystentem, lub odznacz opcję „Zapis”, aby zachować je tylko do odczytu (np. blokady). Domyślnie urządzenia mają pełne uprawnienia.`,As=`pobieranie modelu…`,js=`błąd`,Ms=`bezczynny`,Ns=`instalowanie silnika…`,Ps=`załadunek…`,Fs=`gotowy`,Is=`nieaktywny`,Ls=`w sieci`,Rs=`Czytać`,zs=`Pokój`,Bs=`bezczynny`,Vs=`słuchający`,Hs=`nieaktywny`,Us=`przetwarzanie`,Ws=`mówiąc`,Gs=`„%s” zostało usunięte. Urządzenie, które już je pobrało, zachowuje swoją kopię.`,Ks=`Słowo aktywujące działa na urządzeniu. Najedź na słowo, aby zobaczyć, w jakich językach było trenowane — większość tylko po angielsku.`,qs=`To, co mówisz, aby wybudzić urządzenie — tak pojawi się na liście.`,Js=`Model microWakeWord: plik .tflite, najlepiej razem z jego plikiem .json. Innych typów modeli (openWakeWord, Porcupine) nie można zainstalować w ten sposób.`,Ys=`„%s” zostało przesłane. Wybierz je powyżej, aby je aktywować — urządzenie pobierze wtedy model.`,Xs=`Pisać`,Zs={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s audio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Satelita, który jest nadal skonfigurowany, pojawi się ponownie po połączeniu.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Yo,custom_assistant_Answer:Xo,"custom_assistant_Audio file":`Plik audio`,custom_assistant_Cancel:Zo,custom_assistant_Chat:Qo,"custom_assistant_Clear chat":`Wyczyść czat`,"custom_assistant_Click for details":`Kliknij, aby zobaczyć szczegóły`,custom_assistant_Close:$o,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Zwiń wszystko`,custom_assistant_Context:es,custom_assistant_Copied:ts,custom_assistant_Copy:ns,"custom_assistant_Copy everything as JSON":`Kopiuj wszystko jako JSON`,custom_assistant_Delete:rs,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Pamięć podręczna urządzenia została wyczyszczona.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Pobierz jako JSON`,custom_assistant_Error:is,"custom_assistant_Expand all":`Rozwiń wszystko`,"custom_assistant_Follow-up":`Pytanie zwrotne`,"custom_assistant_Hide disabled":`Ukryj wyłączone`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:as,"custom_assistant_Last seen":`Ostatnio widziany`,"custom_assistant_Listening…":`Słuchający…`,"custom_assistant_Loading…":`Ładowanie…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Model lokalny`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Język nazwy: %s`,"custom_assistant_No answer":`Brak odpowiedzi`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nie wykryto urządzeń. Przypisz stany do pomieszczeń i funkcji w ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Brak wiadomości. Wpisz pytanie poniżej.`,"custom_assistant_No processing steps were recorded for this request.":`Dla tego żądania nie zapisano kroków przetwarzania. Szczegóły są przechowywane dla ostatnich 200 żądań.`,"custom_assistant_No satellites registered yet.":`Nie zarejestrowano jeszcze żadnych satelitów.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Nic nie rozpoznano`,"custom_assistant_Per-device permissions":`Uprawnienia na urządzenie`,"custom_assistant_Play answer (backend TTS)":`Odtwórz odpowiedź (TTS w tle)`,"custom_assistant_Please select a .tflite model file":`Wybierz plik modelu .tflite`,custom_assistant_Question:os,"custom_assistant_Read answers aloud":`Przeczytaj odpowiedzi na głos`,custom_assistant_Recognized:ss,custom_assistant_Record:cs,"custom_assistant_Recorded audio":`Nagrane audio`,"custom_assistant_Refresh device cache":`Odśwież pamięć podręczną urządzenia`,"custom_assistant_Remove satellite":`Usuń satelitę`,"custom_assistant_Remove satellite %s and all its states?":`Usunąć satelitę %s i wszystkie jego stany?`,"custom_assistant_Reply audio":`Audio odpowiedzi`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:ls,"custom_assistant_Request details":`Szczegóły żądania`,custom_assistant_Room:us,custom_assistant_Routine:ds,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:fs,custom_assistant_Satellites:ps,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Przed rozpoczęciem czatu zapisz konfigurację (instancja zostanie uruchomiona ponownie).`,custom_assistant_Script:ms,"custom_assistant_Send announcement":`Wyślij ogłoszenie`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:hs,custom_assistant_Speak:gs,"custom_assistant_Speak on all satellites":`Mów na wszystkich satelitach`,"custom_assistant_Speak the test sentence and recognize it":`Wypowiedz zdanie testowe i je rozpoznaj`,"custom_assistant_Speech output":`Synteza mowy`,"custom_assistant_Speech recognition":`Rozpoznawanie mowy`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Synteza mowy`,custom_assistant_Spoken:_s,"custom_assistant_Start the assistant instance to chat.":`Uruchom asystenta, aby rozpocząć rozmowę.`,"custom_assistant_Start the assistant instance to load the device list.":`Uruchom instancję asystenta, aby załadować listę urządzeń.`,custom_assistant_State:vs,"custom_assistant_States read":`Odczytane stany`,"custom_assistant_States written":`Zapisane stany`,custom_assistant_Status:ys,custom_assistant_Steps:bs,custom_assistant_Stop:xs,"custom_assistant_Stop listening":`Przestań słuchać`,"custom_assistant_Stop reading answers aloud":`Przestań czytać odpowiedzi na głos`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Czat testowy`,"custom_assistant_Test sentence":`Zdanie testowe`,"custom_assistant_Test voice":`Testuj głos`,"custom_assistant_The instance must be running to test the voice.":`Aby przetestować głos, instancja musi działać.`,"custom_assistant_The microphone only works over https or on localhost.":`Mikrofon działa tylko przez https lub na localhost.`,"custom_assistant_Thinking…":`Myślący…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Ss,custom_assistant_Tool:Cs,"custom_assistant_Tool calls":`Wywołania narzędzi`,"custom_assistant_Tool result":`Wynik narzędzia`,"custom_assistant_Tools & states":`Narzędzia i stany`,"custom_assistant_Total duration":`Całkowity czas`,"custom_assistant_Translate all missing (%s)":`Przetłumacz wszystkie brakujące (%s)`,"custom_assistant_Translate name into %s":`Przetłumacz nazwę na %s`,"custom_assistant_Type a message…":`Wpisz wiadomość…`,custom_assistant_Upload:ws,"custom_assistant_Upload own wake word":`Prześlij własne słowo wybudzające`,"custom_assistant_Uploaded wake word":`Przesłane słowo wybudzające`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Fraza wybudzająca`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Ts,"custom_assistant_change it on the Voice tab":`zmień to na karcie Głos`,custom_assistant_delete_wake_word_confirm:Es,custom_assistant_device:Ds,custom_assistant_filter:Os,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:ks,"custom_assistant_in progress":`w toku`,custom_assistant_llm_downloading:As,custom_assistant_llm_error:js,custom_assistant_llm_idle:Ms,custom_assistant_llm_installing:Ns,custom_assistant_llm_loading:Ps,"custom_assistant_llm_not installed":`nie zainstalowano`,custom_assistant_llm_ready:Fs,"custom_assistant_made in %s ms":`wygenerowano w %s ms`,"custom_assistant_no name in %s (showing %s)":`Brak nazwy w "%s" — wyświetlanie "%s"`,custom_assistant_offline:Is,custom_assistant_online:Ls,custom_assistant_read:Rs,"custom_assistant_recognized in %s ms":`rozpoznano w %s ms`,custom_assistant_room:zs,custom_assistant_sat_idle:Bs,custom_assistant_sat_listening:Vs,custom_assistant_sat_offline:Hs,custom_assistant_sat_processing:Us,custom_assistant_sat_speaking:Ws,custom_assistant_type:`Typ`,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:Gs,custom_assistant_wake_word_hint:Ks,custom_assistant_wake_word_phrase_hint:qs,custom_assistant_wake_word_upload_hint:Js,custom_assistant_wake_word_uploaded:Ys,custom_assistant_write:Xs},Qs=e({custom_assistant_Announcement:()=>$s,custom_assistant_Answer:()=>ec,custom_assistant_Cancel:()=>tc,custom_assistant_Chat:()=>nc,custom_assistant_Close:()=>rc,custom_assistant_Context:()=>ic,custom_assistant_Copied:()=>ac,custom_assistant_Copy:()=>oc,custom_assistant_Delete:()=>sc,custom_assistant_Error:()=>cc,custom_assistant_Host:()=>lc,custom_assistant_Question:()=>uc,custom_assistant_Recognized:()=>dc,custom_assistant_Record:()=>fc,custom_assistant_Request:()=>pc,custom_assistant_Room:()=>mc,custom_assistant_Routine:()=>hc,custom_assistant_Satellite:()=>gc,custom_assistant_Satellites:()=>_c,custom_assistant_Script:()=>vc,custom_assistant_Source:()=>yc,custom_assistant_Speak:()=>bc,custom_assistant_Spoken:()=>xc,custom_assistant_State:()=>Sc,custom_assistant_Status:()=>Cc,custom_assistant_Steps:()=>wc,custom_assistant_Stop:()=>Tc,custom_assistant_Time:()=>Ec,custom_assistant_Tool:()=>Dc,custom_assistant_Upload:()=>Oc,custom_assistant_auto:()=>kc,custom_assistant_delete_wake_word_confirm:()=>Ac,custom_assistant_device:()=>jc,custom_assistant_filter:()=>Mc,custom_assistant_hint:()=>Nc,custom_assistant_llm_downloading:()=>Pc,custom_assistant_llm_error:()=>Fc,custom_assistant_llm_idle:()=>Ic,custom_assistant_llm_installing:()=>Lc,custom_assistant_llm_loading:()=>Rc,custom_assistant_llm_ready:()=>zc,custom_assistant_offline:()=>Bc,custom_assistant_online:()=>Vc,custom_assistant_read:()=>`Ler`,custom_assistant_room:()=>Hc,custom_assistant_sat_idle:()=>Uc,custom_assistant_sat_listening:()=>Wc,custom_assistant_sat_offline:()=>Gc,custom_assistant_sat_processing:()=>Kc,custom_assistant_sat_speaking:()=>qc,custom_assistant_type:()=>Jc,custom_assistant_wake_word_deleted:()=>Yc,custom_assistant_wake_word_hint:()=>Xc,custom_assistant_wake_word_phrase_hint:()=>Zc,custom_assistant_wake_word_upload_hint:()=>Qc,custom_assistant_wake_word_uploaded:()=>$c,custom_assistant_write:()=>el,default:()=>tl}),$s=`Anúncio`,ec=`Resposta`,tc=`Cancel`,nc=`Chat`,rc=`Close`,ic=`Contexto`,ac=`Copiado`,oc=`Copiar`,sc=`Delete`,cc=`Erro`,lc=`Hospedar`,uc=`Pergunta`,dc=`Reconhecido`,fc=`Gravar`,pc=`Pedido`,mc=`Room`,hc=`Routine`,gc=`Satélite`,_c=`Satélites`,vc=`Script`,yc=`Source`,bc=`Falar`,xc=`Falado`,Sc=`State`,Cc=`Status`,wc=`Passos`,Tc=`Parar`,Ec=`Hora`,Dc=`Ferramenta`,Oc=`Carregar`,kc=`auto`,Ac=`Eliminar "%s"? Deixará de ser oferecido aos dispositivos; um dispositivo que já o transferiu mantém-no.`,jc=`Dispositivo`,Mc=`Filtro`,Nc=`Desmarque a opção "Ler" para ocultar um dispositivo do assistente ou desmarque a opção "Gravar" para mantê-lo somente leitura (por exemplo, fechaduras). Os dispositivos são configurados por padrão para permitir totalmente o acesso.`,Pc=`baixando modelo…`,Fc=`erro`,Ic=`parado`,Lc=`Instalando o motor…`,Rc=`carregando…`,zc=`preparar`,Bc=`offline`,Vc=`on-line`,Hc=`Sala`,Uc=`parado`,Wc=`audição`,Gc=`offline`,Kc=`processamento`,qc=`Falando`,Jc=`Tipo`,Yc=`"%s" foi eliminado. Um dispositivo que já o transferiu mantém a sua cópia.`,Xc=`A palavra de ativação é processada no dispositivo. Passe o mouse sobre uma palavra para ver em quais idiomas ela foi treinada — a maioria apenas em inglês.`,Zc=`O que diz para acordar o dispositivo — é assim que aparece na lista.`,Qc=`Um modelo microWakeWord: o ficheiro .tflite, de preferência com o respetivo .json. Outros tipos de modelo (openWakeWord, Porcupine) não podem ser instalados desta forma.`,$c=`"%s" foi carregado. Selecione-o acima para o ativar — o dispositivo transfere então o modelo.`,el=`Escrever`,tl={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s s de áudio`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Um satélite que ainda está configurado reaparece quando se conecta.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:$s,custom_assistant_Answer:ec,"custom_assistant_Audio file":`Ficheiro de áudio`,custom_assistant_Cancel:tc,custom_assistant_Chat:nc,"custom_assistant_Clear chat":`Chat limpo`,"custom_assistant_Click for details":`Clique para ver detalhes`,custom_assistant_Close:rc,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Recolher tudo`,custom_assistant_Context:ic,custom_assistant_Copied:ac,custom_assistant_Copy:oc,"custom_assistant_Copy everything as JSON":`Copiar tudo como JSON`,custom_assistant_Delete:sc,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Cache do dispositivo limpo.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Transferir como JSON`,custom_assistant_Error:cc,"custom_assistant_Expand all":`Expandir tudo`,"custom_assistant_Follow-up":`Seguimento`,"custom_assistant_Hide disabled":`Ocultar desativado`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:lc,"custom_assistant_Last seen":`Última vez visto`,"custom_assistant_Listening…":`Audição…`,"custom_assistant_Loading…":`A carregar…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Modelo local`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Idioma do nome: %s`,"custom_assistant_No answer":`Sem resposta`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nenhum dispositivo detectado. Atribua estados a salas e funções no ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Ainda não há mensagens. Digite sua pergunta abaixo.`,"custom_assistant_No processing steps were recorded for this request.":`Não foram registados passos de processamento para este pedido. Os detalhes são guardados para os últimos 200 pedidos.`,"custom_assistant_No satellites registered yet.":`Nenhum satélite registrado ainda.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Nada reconhecido`,"custom_assistant_Per-device permissions":`Permissões por dispositivo`,"custom_assistant_Play answer (backend TTS)":`Reproduzir resposta (TTS em segundo plano)`,"custom_assistant_Please select a .tflite model file":`Selecione um ficheiro de modelo .tflite`,custom_assistant_Question:uc,"custom_assistant_Read answers aloud":`Leia as respostas em voz alta.`,custom_assistant_Recognized:dc,custom_assistant_Record:fc,"custom_assistant_Recorded audio":`Áudio gravado`,"custom_assistant_Refresh device cache":`Atualizar cache do dispositivo`,"custom_assistant_Remove satellite":`Remover satélite`,"custom_assistant_Remove satellite %s and all its states?":`Remover o satélite %s e todos os seus estados?`,"custom_assistant_Reply audio":`Áudio da resposta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:pc,"custom_assistant_Request details":`Detalhes do pedido`,custom_assistant_Room:mc,custom_assistant_Routine:hc,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:gc,custom_assistant_Satellites:_c,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Salve a configuração (a instância será reiniciada) antes de iniciar o chat.`,custom_assistant_Script:vc,"custom_assistant_Send announcement":`Enviar anúncio`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:yc,custom_assistant_Speak:bc,"custom_assistant_Speak on all satellites":`Fale em todos os satélites`,"custom_assistant_Speak the test sentence and recognize it":`Falar a frase de teste e reconhecê-la`,"custom_assistant_Speech output":`Saída de voz`,"custom_assistant_Speech recognition":`Reconhecimento de voz`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Síntese de voz`,custom_assistant_Spoken:xc,"custom_assistant_Start the assistant instance to chat.":`Inicie a instância do assistente para conversar.`,"custom_assistant_Start the assistant instance to load the device list.":`Inicie a instância do assistente para carregar a lista de dispositivos.`,custom_assistant_State:Sc,"custom_assistant_States read":`Estados lidos`,"custom_assistant_States written":`Estados escritos`,custom_assistant_Status:Cc,custom_assistant_Steps:wc,custom_assistant_Stop:Tc,"custom_assistant_Stop listening":`Pare de ouvir`,"custom_assistant_Stop reading answers aloud":`Pare de ler as respostas em voz alta.`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Chat de teste`,"custom_assistant_Test sentence":`Frase de teste`,"custom_assistant_Test voice":`Testar voz`,"custom_assistant_The instance must be running to test the voice.":`A instância tem de estar em execução para testar a voz.`,"custom_assistant_The microphone only works over https or on localhost.":`O microfone só funciona via https ou em localhost.`,"custom_assistant_Thinking…":`Pensamento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Ec,custom_assistant_Tool:Dc,"custom_assistant_Tool calls":`Chamadas de ferramentas`,"custom_assistant_Tool result":`Resultado da ferramenta`,"custom_assistant_Tools & states":`Ferramentas e estados`,"custom_assistant_Total duration":`Duração total`,"custom_assistant_Translate all missing (%s)":`Traduzir todos os (%s) ausentes`,"custom_assistant_Translate name into %s":`Traduzir nome para %s`,"custom_assistant_Type a message…":`Digite uma mensagem…`,custom_assistant_Upload:Oc,"custom_assistant_Upload own wake word":`Carregar palavra de ativação própria`,"custom_assistant_Uploaded wake word":`Palavra de ativação carregada`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Frase de ativação`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:kc,"custom_assistant_change it on the Voice tab":`Altere isso na guia Voz.`,custom_assistant_delete_wake_word_confirm:Ac,custom_assistant_device:jc,custom_assistant_filter:Mc,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Nc,"custom_assistant_in progress":`em curso`,custom_assistant_llm_downloading:Pc,custom_assistant_llm_error:Fc,custom_assistant_llm_idle:Ic,custom_assistant_llm_installing:Lc,custom_assistant_llm_loading:Rc,"custom_assistant_llm_not installed":`não instalado`,custom_assistant_llm_ready:zc,"custom_assistant_made in %s ms":`gerado em %s ms`,"custom_assistant_no name in %s (showing %s)":`Nenhum nome em "%s" — exibindo "%s"`,custom_assistant_offline:Bc,custom_assistant_online:Vc,custom_assistant_read:`Ler`,"custom_assistant_recognized in %s ms":`reconhecido em %s ms`,custom_assistant_room:Hc,custom_assistant_sat_idle:Uc,custom_assistant_sat_listening:Wc,custom_assistant_sat_offline:Gc,custom_assistant_sat_processing:Kc,custom_assistant_sat_speaking:qc,custom_assistant_type:Jc,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:Yc,custom_assistant_wake_word_hint:Xc,custom_assistant_wake_word_phrase_hint:Zc,custom_assistant_wake_word_upload_hint:Qc,custom_assistant_wake_word_uploaded:$c,custom_assistant_write:el},nl=e({custom_assistant_Announcement:()=>rl,custom_assistant_Answer:()=>il,custom_assistant_Cancel:()=>al,custom_assistant_Chat:()=>ol,custom_assistant_Close:()=>sl,custom_assistant_Context:()=>cl,custom_assistant_Copied:()=>ll,custom_assistant_Copy:()=>ul,custom_assistant_Delete:()=>dl,custom_assistant_Error:()=>fl,custom_assistant_Host:()=>pl,custom_assistant_Question:()=>ml,custom_assistant_Recognized:()=>hl,custom_assistant_Record:()=>gl,custom_assistant_Request:()=>_l,custom_assistant_Room:()=>vl,custom_assistant_Routine:()=>yl,custom_assistant_Satellite:()=>bl,custom_assistant_Satellites:()=>xl,custom_assistant_Script:()=>Sl,custom_assistant_Source:()=>Cl,custom_assistant_Speak:()=>wl,custom_assistant_Spoken:()=>Tl,custom_assistant_State:()=>El,custom_assistant_Status:()=>Dl,custom_assistant_Steps:()=>Ol,custom_assistant_Stop:()=>kl,custom_assistant_Time:()=>Al,custom_assistant_Tool:()=>jl,custom_assistant_Upload:()=>Ml,custom_assistant_auto:()=>Nl,custom_assistant_delete_wake_word_confirm:()=>Pl,custom_assistant_device:()=>Fl,custom_assistant_filter:()=>Il,custom_assistant_hint:()=>Ll,custom_assistant_llm_downloading:()=>Rl,custom_assistant_llm_error:()=>zl,custom_assistant_llm_idle:()=>Bl,custom_assistant_llm_installing:()=>Vl,custom_assistant_llm_loading:()=>Hl,custom_assistant_llm_ready:()=>Ul,custom_assistant_offline:()=>Wl,custom_assistant_online:()=>Gl,custom_assistant_read:()=>Kl,custom_assistant_room:()=>ql,custom_assistant_sat_idle:()=>Jl,custom_assistant_sat_listening:()=>Yl,custom_assistant_sat_offline:()=>Xl,custom_assistant_sat_processing:()=>Zl,custom_assistant_sat_speaking:()=>Ql,custom_assistant_type:()=>$l,custom_assistant_wake_word_deleted:()=>eu,custom_assistant_wake_word_hint:()=>tu,custom_assistant_wake_word_phrase_hint:()=>nu,custom_assistant_wake_word_upload_hint:()=>ru,custom_assistant_wake_word_uploaded:()=>iu,custom_assistant_write:()=>au,default:()=>ou}),rl=`Объявление`,il=`Ответ`,al=`Отмена`,ol=`Чат`,sl=`Закрыть`,cl=`Контекст`,ll=`Скопировано`,ul=`Копировать`,dl=`Удалить`,fl=`Ошибка`,pl=`Хозяин`,ml=`Вопрос`,hl=`Распознано`,gl=`Записать`,_l=`Запрос`,vl=`Комната`,yl=`Сценарий`,bl=`Спутник`,xl=`Спутники`,Sl=`Скрипт`,Cl=`Источник`,wl=`Говорить`,Tl=`Произнесено`,El=`Состояние`,Dl=`Статус`,Ol=`Шаги`,kl=`Стоп`,Al=`Время`,jl=`Инструмент`,Ml=`Загрузить`,Nl=`авто`,Pl=`Удалить «%s»? Оно больше не будет предлагаться устройствам; устройство, которое уже скачало его, сохранит его.`,Fl=`Устройство`,Il=`Фильтр`,Ll=`Снимите флажок «Чтение», чтобы скрыть устройство от голосового помощника, или снимите флажок «Запись», чтобы оставить его только для чтения (например, блокировка). По умолчанию устройствам разрешен полный доступ.`,Rl=`Загрузка модели…`,zl=`ошибка`,Bl=`праздный`,Vl=`установка двигателя…`,Hl=`Загрузка…`,Ul=`готовый`,Wl=`офлайн`,Gl=`онлайн`,Kl=`Читать`,ql=`Комната`,Jl=`праздный`,Yl=`слушание`,Xl=`офлайн`,Zl=`обработка`,Ql=`Говорящий`,$l=`Тип`,eu=`«%s» удалено. Устройство, которое уже скачало его, сохраняет свою копию.`,tu=`Слово активации обрабатывается на устройстве. Наведите курсор на слово, чтобы увидеть, на каких языках оно обучено — большинство только на английском.`,nu=`Что нужно сказать, чтобы разбудить устройство, — так оно будет показано в списке.`,ru=`Модель microWakeWord: файл .tflite, желательно вместе с его .json. Другие типы моделей (openWakeWord, Porcupine) так установить нельзя.`,iu=`«%s» загружено. Выберите его выше, чтобы активировать, — тогда устройство скачает модель.`,au=`Писать`,ou={"custom_assistant_%s of %s active":`активно %s из %s`,"custom_assistant_%s s audio":`%s с аудио`,"custom_assistant_(no spoken answer)":`(без голосового ответа)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Сателлит, который всё ещё настроен, снова появится при подключении.`,"custom_assistant_All sources":`Все источники`,custom_assistant_Announcement:rl,custom_assistant_Answer:il,"custom_assistant_Audio file":`Аудиофайл`,custom_assistant_Cancel:al,custom_assistant_Chat:ol,"custom_assistant_Clear chat":`Четкий чат`,"custom_assistant_Click for details":`Нажмите для подробностей`,custom_assistant_Close:sl,"custom_assistant_Cloud LLM":`Облачная LLM`,"custom_assistant_Collapse all":`Свернуть все`,custom_assistant_Context:cl,custom_assistant_Copied:ll,custom_assistant_Copy:ul,"custom_assistant_Copy everything as JSON":`Скопировать всё как JSON`,custom_assistant_Delete:dl,"custom_assistant_Delete the recorded history of all sources?":`Удалить записанную историю всех источников?`,"custom_assistant_Device cache cleared.":`Кэш устройства очищен.`,"custom_assistant_Device settings":`Настройки устройства`,"custom_assistant_Download as JSON":`Скачать как JSON`,custom_assistant_Error:fl,"custom_assistant_Expand all":`Развернуть все`,"custom_assistant_Follow-up":`Уточнение`,"custom_assistant_Hide disabled":`Скрыть отключено`,"custom_assistant_Hide processing details":`Скрыть детали обработки`,custom_assistant_Host:pl,"custom_assistant_Last seen":`Последний раз видели`,"custom_assistant_Listening…":`Слушаю…`,"custom_assistant_Loading…":`Загрузка…`,"custom_assistant_Local LLM":`Локальная LLM`,"custom_assistant_Local model":`Локальная модель`,"custom_assistant_Mic re-opened without wake word":`Микрофон снова открыт без слова активации (уточнение или вопрос)`,"custom_assistant_Name language: %s":`Название языка: %s`,"custom_assistant_No answer":`Нет ответа`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Устройства не обнаружены. Назначьте состояния комнатам и функциям в ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Сообщений пока нет. Задайте вопрос ниже.`,"custom_assistant_No processing steps were recorded for this request.":`Для этого запроса шаги обработки не сохранены. Подробности хранятся для последних 200 запросов.`,"custom_assistant_No satellites registered yet.":`Спутники пока не зарегистрированы.`,"custom_assistant_Not understood":`Не понято`,"custom_assistant_Nothing recognized":`Ничего не распознано`,"custom_assistant_Per-device permissions":`Разрешения для каждого устройства`,"custom_assistant_Play answer (backend TTS)":`Воспроизвести ответ (синтезатор речи на стороне сервера)`,"custom_assistant_Please select a .tflite model file":`Выберите файл модели .tflite`,custom_assistant_Question:ml,"custom_assistant_Read answers aloud":`Прочитайте ответы вслух.`,custom_assistant_Recognized:hl,custom_assistant_Record:gl,"custom_assistant_Recorded audio":`Записанное аудио`,"custom_assistant_Refresh device cache":`Обновить кэш устройства`,"custom_assistant_Remove satellite":`Удалить сателлит`,"custom_assistant_Remove satellite %s and all its states?":`Удалить сателлит %s со всеми его состояниями?`,"custom_assistant_Reply audio":`Аудио ответа`,"custom_assistant_Reply to a question":`Ответ на вопрос`,custom_assistant_Request:_l,"custom_assistant_Request details":`Подробности запроса`,custom_assistant_Room:vl,custom_assistant_Routine:yl,"custom_assistant_Rule-based NLU":`Правила NLU (локально)`,custom_assistant_Satellite:bl,custom_assistant_Satellites:xl,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Сохраните конфигурацию (при этом экземпляр перезапустится) перед началом чата.`,custom_assistant_Script:Sl,"custom_assistant_Send announcement":`Отправить объявление`,"custom_assistant_Settings for %s":`Настройки для %s`,"custom_assistant_Show processing details":`Показать детали обработки`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Показывает все запросы в реальном времени: сателлиты, Telegram, скрипты и этот чат.`,custom_assistant_Source:Cl,custom_assistant_Speak:wl,"custom_assistant_Speak on all satellites":`Выступить на всех спутниках`,"custom_assistant_Speak the test sentence and recognize it":`Произнести тестовую фразу и распознать`,"custom_assistant_Speech output":`Синтез речи`,"custom_assistant_Speech recognition":`Распознавание речи`,"custom_assistant_Speech recognition time":`Время распознавания речи`,"custom_assistant_Speech synthesis":`Синтез речи`,custom_assistant_Spoken:Tl,"custom_assistant_Start the assistant instance to chat.":`Запустите экземпляр ассистента для начала чата.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустите экземпляр помощника, чтобы загрузить список устройств.`,custom_assistant_State:El,"custom_assistant_States read":`Прочитанные состояния`,"custom_assistant_States written":`Записанные состояния`,custom_assistant_Status:Dl,custom_assistant_Steps:Ol,custom_assistant_Stop:kl,"custom_assistant_Stop listening":`Прекратите слушать`,"custom_assistant_Stop reading answers aloud":`Прекратите зачитывать ответы вслух.`,"custom_assistant_Stop word":`Стоп-слово`,"custom_assistant_Test chat":`Тестовый чат`,"custom_assistant_Test sentence":`Тестовая фраза`,"custom_assistant_Test voice":`Проверить голос`,"custom_assistant_The instance must be running to test the voice.":`Для проверки голоса экземпляр должен быть запущен.`,"custom_assistant_The microphone only works over https or on localhost.":`Микрофон работает только через https или на localhost.`,"custom_assistant_Thinking…":`Размышления…`,"custom_assistant_This satellite exposes no settings.":`Этот сателлит не предоставляет настроек.`,custom_assistant_Time:Al,custom_assistant_Tool:jl,"custom_assistant_Tool calls":`Вызовы инструментов`,"custom_assistant_Tool result":`Результат инструмента`,"custom_assistant_Tools & states":`Инструменты и состояния`,"custom_assistant_Total duration":`Общая длительность`,"custom_assistant_Translate all missing (%s)":`Переведите все отсутствующие (%s)`,"custom_assistant_Translate name into %s":`Переведите имя в %s`,"custom_assistant_Type a message…":`Введите сообщение…`,custom_assistant_Upload:Ml,"custom_assistant_Upload own wake word":`Загрузить своё слово активации`,"custom_assistant_Uploaded wake word":`Загруженное слово активации`,"custom_assistant_Wake word":`Слово активации`,"custom_assistant_Wake word phrase":`Фраза активации`,"custom_assistant_Wake words":`Слова активации`,custom_assistant_auto:Nl,"custom_assistant_change it on the Voice tab":`Измените это на вкладке «Голос».`,custom_assistant_delete_wake_word_confirm:Pl,custom_assistant_device:Fl,custom_assistant_filter:Il,"custom_assistant_follow-up":`продолжение`,custom_assistant_hint:Ll,"custom_assistant_in progress":`выполняется`,custom_assistant_llm_downloading:Rl,custom_assistant_llm_error:zl,custom_assistant_llm_idle:Bl,custom_assistant_llm_installing:Vl,custom_assistant_llm_loading:Hl,"custom_assistant_llm_not installed":`не установлен`,custom_assistant_llm_ready:Ul,"custom_assistant_made in %s ms":`создано за %s мс`,"custom_assistant_no name in %s (showing %s)":`Имя отсутствует в "%s" — отображается "%s"`,custom_assistant_offline:Wl,custom_assistant_online:Gl,custom_assistant_read:Kl,"custom_assistant_recognized in %s ms":`распознано за %s мс`,custom_assistant_room:ql,custom_assistant_sat_idle:Jl,custom_assistant_sat_listening:Yl,custom_assistant_sat_offline:Xl,custom_assistant_sat_processing:Zl,custom_assistant_sat_speaking:Ql,custom_assistant_type:$l,"custom_assistant_waits for reply":`ждёт ответа`,custom_assistant_wake_word_deleted:eu,custom_assistant_wake_word_hint:tu,custom_assistant_wake_word_phrase_hint:nu,custom_assistant_wake_word_upload_hint:ru,custom_assistant_wake_word_uploaded:iu,custom_assistant_write:au},su=e({custom_assistant_Announcement:()=>cu,custom_assistant_Answer:()=>lu,custom_assistant_Cancel:()=>uu,custom_assistant_Chat:()=>du,custom_assistant_Close:()=>fu,custom_assistant_Context:()=>pu,custom_assistant_Copied:()=>mu,custom_assistant_Copy:()=>hu,custom_assistant_Delete:()=>gu,custom_assistant_Error:()=>_u,custom_assistant_Host:()=>vu,custom_assistant_Question:()=>yu,custom_assistant_Recognized:()=>bu,custom_assistant_Record:()=>xu,custom_assistant_Request:()=>Su,custom_assistant_Room:()=>Cu,custom_assistant_Routine:()=>wu,custom_assistant_Satellite:()=>Tu,custom_assistant_Satellites:()=>Eu,custom_assistant_Script:()=>Du,custom_assistant_Source:()=>Ou,custom_assistant_Speak:()=>ku,custom_assistant_Spoken:()=>Au,custom_assistant_State:()=>ju,custom_assistant_Status:()=>Mu,custom_assistant_Steps:()=>Nu,custom_assistant_Stop:()=>Pu,custom_assistant_Time:()=>Fu,custom_assistant_Tool:()=>Iu,custom_assistant_Upload:()=>Lu,custom_assistant_auto:()=>Ru,custom_assistant_delete_wake_word_confirm:()=>zu,custom_assistant_device:()=>Bu,custom_assistant_filter:()=>Vu,custom_assistant_hint:()=>Hu,custom_assistant_llm_downloading:()=>Uu,custom_assistant_llm_error:()=>Wu,custom_assistant_llm_idle:()=>Gu,custom_assistant_llm_installing:()=>Ku,custom_assistant_llm_loading:()=>qu,custom_assistant_llm_ready:()=>Ju,custom_assistant_offline:()=>Yu,custom_assistant_online:()=>Xu,custom_assistant_read:()=>Zu,custom_assistant_room:()=>Qu,custom_assistant_sat_idle:()=>$u,custom_assistant_sat_listening:()=>ed,custom_assistant_sat_offline:()=>td,custom_assistant_sat_processing:()=>nd,custom_assistant_sat_speaking:()=>rd,custom_assistant_type:()=>id,custom_assistant_wake_word_deleted:()=>ad,custom_assistant_wake_word_hint:()=>od,custom_assistant_wake_word_phrase_hint:()=>sd,custom_assistant_wake_word_upload_hint:()=>cd,custom_assistant_wake_word_uploaded:()=>ld,custom_assistant_write:()=>ud,default:()=>dd}),cu=`Оголошення`,lu=`Відповідь`,uu=`Cancel`,du=`Chat`,fu=`Close`,pu=`Контекст`,mu=`Скопійовано`,hu=`Копіювати`,gu=`Delete`,_u=`Помилка`,vu=`Хост`,yu=`Питання`,bu=`Розпізнано`,xu=`Записати`,Su=`Запит`,Cu=`Room`,wu=`Routine`,Tu=`Супутник`,Eu=`Супутники`,Du=`Script`,Ou=`Source`,ku=`Говоріть`,Au=`Вимовлено`,ju=`State`,Mu=`Статус`,Nu=`Кроки`,Pu=`Стоп`,Fu=`Час`,Iu=`Інструмент`,Lu=`Завантажити`,Ru=`авто`,zu=`Видалити «%s»? Його більше не буде запропоновано пристроям; пристрій, який уже завантажив його, збереже його.`,Bu=`Пристрій`,Vu=`Фільтр`,Hu=`Зніміть позначку «Читання», щоб приховати пристрій від помічника, або «Запис», щоб залишити його в режимі лише для читання (наприклад, блокування). За замовчуванням пристрої повністю дозволені.`,Uu=`завантаження моделі…`,Wu=`помилка`,Gu=`бездіяльність`,Ku=`встановлення двигуна…`,qu=`завантаження…`,Ju=`готовий`,Yu=`офлайн`,Xu=`онлайн`,Zu=`Читати`,Qu=`Кімната`,$u=`бездіяльність`,ed=`прослуховування`,td=`офлайн`,nd=`обробка`,rd=`розмова`,id=`Тип`,ad=`«%s» видалено. Пристрій, який уже завантажив його, зберігає свою копію.`,od=`Слово активації обробляється на пристрої. Наведіть курсор на слово, щоб побачити, якими мовами його навчено — більшість лише англійською.`,sd=`Що потрібно сказати, щоб розбудити пристрій, — так воно з'явиться у списку.`,cd=`Модель microWakeWord: файл .tflite, бажано разом з його .json. Інші типи моделей (openWakeWord, Porcupine) так встановити не можна.`,ld=`«%s» завантажено. Виберіть його вище, щоб активувати, — тоді пристрій завантажить модель.`,ud=`Написати`,dd={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s с аудіо`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`Сателіт, який усе ще налаштований, знову з’явиться після підключення.`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:cu,custom_assistant_Answer:lu,"custom_assistant_Audio file":`Аудіофайл`,custom_assistant_Cancel:uu,custom_assistant_Chat:du,"custom_assistant_Clear chat":`Очистити чат`,"custom_assistant_Click for details":`Натисніть для подробиць`,custom_assistant_Close:fu,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Згорнути все`,custom_assistant_Context:pu,custom_assistant_Copied:mu,custom_assistant_Copy:hu,"custom_assistant_Copy everything as JSON":`Скопіювати все як JSON`,custom_assistant_Delete:gu,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`Кеш пристрою очищено.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`Завантажити як JSON`,custom_assistant_Error:_u,"custom_assistant_Expand all":`Розгорнути все`,"custom_assistant_Follow-up":`Уточнення`,"custom_assistant_Hide disabled":`Приховати вимкнено`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:vu,"custom_assistant_Last seen":`Бачили востаннє`,"custom_assistant_Listening…":`Слухання…`,"custom_assistant_Loading…":`Завантаження…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`Локальна модель`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`Мова назви: %s`,"custom_assistant_No answer":`Немає відповіді`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Пристроїв не виявлено. Призначте стани кімнатам та функціям в ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Поки що немає повідомлень. Введіть запитання нижче.`,"custom_assistant_No processing steps were recorded for this request.":`Для цього запиту кроки обробки не збережено. Подробиці зберігаються для останніх 200 запитів.`,"custom_assistant_No satellites registered yet.":`Поки що не зареєстровано жодного супутника.`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`Нічого не розпізнано`,"custom_assistant_Per-device permissions":`Дозволи для кожного пристрою`,"custom_assistant_Play answer (backend TTS)":`Відтворити відповідь (бекенд TTS)`,"custom_assistant_Please select a .tflite model file":`Виберіть файл моделі .tflite`,custom_assistant_Question:yu,"custom_assistant_Read answers aloud":`Прочитайте відповіді вголос`,custom_assistant_Recognized:bu,custom_assistant_Record:xu,"custom_assistant_Recorded audio":`Записане аудіо`,"custom_assistant_Refresh device cache":`Оновити кеш пристрою`,"custom_assistant_Remove satellite":`Видалити сателіт`,"custom_assistant_Remove satellite %s and all its states?":`Видалити сателіт %s з усіма його станами?`,"custom_assistant_Reply audio":`Аудіо відповіді`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Su,"custom_assistant_Request details":`Подробиці запиту`,custom_assistant_Room:Cu,custom_assistant_Routine:wu,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Tu,custom_assistant_Satellites:Eu,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Збережіть конфігурацію (екземпляр перезавантажиться) перед спілкуванням у чаті.`,custom_assistant_Script:Du,"custom_assistant_Send announcement":`Надіслати оголошення`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:Ou,custom_assistant_Speak:ku,"custom_assistant_Speak on all satellites":`Розмовляйте на всіх супутниках`,"custom_assistant_Speak the test sentence and recognize it":`Вимовити тестову фразу й розпізнати`,"custom_assistant_Speech output":`Синтез мовлення`,"custom_assistant_Speech recognition":`Розпізнавання мовлення`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Синтез мовлення`,custom_assistant_Spoken:Au,"custom_assistant_Start the assistant instance to chat.":`Запустіть екземпляр помічника для спілкування в чаті.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустіть екземпляр помічника, щоб завантажити список пристроїв.`,custom_assistant_State:ju,"custom_assistant_States read":`Прочитані стани`,"custom_assistant_States written":`Записані стани`,custom_assistant_Status:Mu,custom_assistant_Steps:Nu,custom_assistant_Stop:Pu,"custom_assistant_Stop listening":`Перестань слухати`,"custom_assistant_Stop reading answers aloud":`Перестаньте читати відповіді вголос`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Тестовий чат`,"custom_assistant_Test sentence":`Тестова фраза`,"custom_assistant_Test voice":`Перевірити голос`,"custom_assistant_The instance must be running to test the voice.":`Щоб перевірити голос, екземпляр має бути запущений.`,"custom_assistant_The microphone only works over https or on localhost.":`Мікрофон працює лише через https або на localhost.`,"custom_assistant_Thinking…":`Мислення…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Fu,custom_assistant_Tool:Iu,"custom_assistant_Tool calls":`Виклики інструментів`,"custom_assistant_Tool result":`Результат інструмента`,"custom_assistant_Tools & states":`Інструменти та стани`,"custom_assistant_Total duration":`Загальна тривалість`,"custom_assistant_Translate all missing (%s)":`Перекласти все, що відсутні (%s)`,"custom_assistant_Translate name into %s":`Перекладіть назву мовою %s`,"custom_assistant_Type a message…":`Введіть повідомлення…`,custom_assistant_Upload:Lu,"custom_assistant_Upload own wake word":`Завантажити власне слово активації`,"custom_assistant_Uploaded wake word":`Завантажене слово активації`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`Фраза активації`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Ru,"custom_assistant_change it on the Voice tab":`змінити це на вкладці «Голос»`,custom_assistant_delete_wake_word_confirm:zu,custom_assistant_device:Bu,custom_assistant_filter:Vu,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Hu,"custom_assistant_in progress":`виконується`,custom_assistant_llm_downloading:Uu,custom_assistant_llm_error:Wu,custom_assistant_llm_idle:Gu,custom_assistant_llm_installing:Ku,custom_assistant_llm_loading:qu,"custom_assistant_llm_not installed":`не встановлено`,custom_assistant_llm_ready:Ju,"custom_assistant_made in %s ms":`створено за %s мс`,"custom_assistant_no name in %s (showing %s)":`Немає імені в "%s" — відображається "%s"`,custom_assistant_offline:Yu,custom_assistant_online:Xu,custom_assistant_read:Zu,"custom_assistant_recognized in %s ms":`розпізнано за %s мс`,custom_assistant_room:Qu,custom_assistant_sat_idle:$u,custom_assistant_sat_listening:ed,custom_assistant_sat_offline:td,custom_assistant_sat_processing:nd,custom_assistant_sat_speaking:rd,custom_assistant_type:id,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:ad,custom_assistant_wake_word_hint:od,custom_assistant_wake_word_phrase_hint:sd,custom_assistant_wake_word_upload_hint:cd,custom_assistant_wake_word_uploaded:ld,custom_assistant_write:ud},fd=e({custom_assistant_Announcement:()=>pd,custom_assistant_Answer:()=>md,custom_assistant_Cancel:()=>hd,custom_assistant_Chat:()=>gd,custom_assistant_Close:()=>_d,custom_assistant_Context:()=>vd,custom_assistant_Copied:()=>yd,custom_assistant_Copy:()=>bd,custom_assistant_Delete:()=>xd,custom_assistant_Error:()=>Sd,custom_assistant_Host:()=>Cd,custom_assistant_Question:()=>wd,custom_assistant_Recognized:()=>Td,custom_assistant_Record:()=>Ed,custom_assistant_Request:()=>Dd,custom_assistant_Room:()=>Od,custom_assistant_Routine:()=>kd,custom_assistant_Satellite:()=>Ad,custom_assistant_Satellites:()=>jd,custom_assistant_Script:()=>Md,custom_assistant_Source:()=>Nd,custom_assistant_Speak:()=>Pd,custom_assistant_Spoken:()=>Fd,custom_assistant_State:()=>Id,custom_assistant_Status:()=>Ld,custom_assistant_Steps:()=>Rd,custom_assistant_Stop:()=>zd,custom_assistant_Time:()=>Bd,custom_assistant_Tool:()=>Vd,custom_assistant_Upload:()=>Hd,custom_assistant_auto:()=>Ud,custom_assistant_delete_wake_word_confirm:()=>Wd,custom_assistant_device:()=>Gd,custom_assistant_filter:()=>Kd,custom_assistant_hint:()=>qd,custom_assistant_llm_downloading:()=>Jd,custom_assistant_llm_error:()=>Yd,custom_assistant_llm_idle:()=>Xd,custom_assistant_llm_installing:()=>Zd,custom_assistant_llm_loading:()=>Qd,custom_assistant_llm_ready:()=>$d,custom_assistant_offline:()=>ef,custom_assistant_online:()=>tf,custom_assistant_read:()=>`读`,custom_assistant_room:()=>nf,custom_assistant_sat_idle:()=>rf,custom_assistant_sat_listening:()=>af,custom_assistant_sat_offline:()=>of,custom_assistant_sat_processing:()=>sf,custom_assistant_sat_speaking:()=>cf,custom_assistant_type:()=>lf,custom_assistant_wake_word_deleted:()=>uf,custom_assistant_wake_word_hint:()=>df,custom_assistant_wake_word_phrase_hint:()=>ff,custom_assistant_wake_word_upload_hint:()=>pf,custom_assistant_wake_word_uploaded:()=>mf,custom_assistant_write:()=>`写`,default:()=>hf}),pd=`公告`,md=`回答`,hd=`Cancel`,gd=`Chat`,_d=`Close`,vd=`上下文`,yd=`已复制`,bd=`复制`,xd=`Delete`,Sd=`错误`,Cd=`主持人`,wd=`问题`,Td=`识别结果`,Ed=`录音`,Dd=`请求`,Od=`Room`,kd=`Routine`,Ad=`卫星`,jd=`卫星`,Md=`Script`,Nd=`Source`,Pd=`说话`,Fd=`朗读内容`,Id=`State`,Ld=`地位`,Rd=`步骤`,zd=`停止`,Bd=`时间`,Vd=`工具`,Hd=`上传`,Ud=`汽车`,Wd=`删除“%s”?它将不再提供给设备;已下载它的设备会保留它。`,Gd=`设备`,Kd=`筛选`,qd=`取消勾选“读取”选项可将设备对语音助手隐藏,取消勾选“写入”选项可将其设置为只读(例如,锁定设备)。设备默认设置为完全允许访问。`,Jd=`正在下载模型…`,Yd=`错误`,Xd=`闲置的`,Zd=`安装发动机…`,Qd=`加载中…`,$d=`准备好`,ef=`离线`,tf=`在线的`,nf=`房间`,rf=`闲置的`,af=`聆听`,of=`离线`,sf=`加工`,cf=`请讲`,lf=`类型`,uf=`“%s”已删除。已下载它的设备会保留其副本。`,df=`唤醒词在设备上运行。将鼠标悬停在某个词上可查看它训练所用的语言——大多数仅支持英语。`,ff=`唤醒设备时要说的话——列表中会这样显示。`,pf=`microWakeWord 模型:.tflite 文件,最好连同其 .json 一起。其他模型类型(openWakeWord、Porcupine)无法通过此方式安装。`,mf=`“%s”已上传。在上方选择它即可启用——设备会在此时下载模型。`,hf={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_%s s audio":`%s 秒音频`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_A satellite that is still configured appears again when it connects.":`仍在配置中的卫星设备在重新连接后会再次出现。`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:pd,custom_assistant_Answer:md,"custom_assistant_Audio file":`音频文件`,custom_assistant_Cancel:hd,custom_assistant_Chat:gd,"custom_assistant_Clear chat":`清晰聊天`,"custom_assistant_Click for details":`点击查看详情`,custom_assistant_Close:_d,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`全部折叠`,custom_assistant_Context:vd,custom_assistant_Copied:yd,custom_assistant_Copy:bd,"custom_assistant_Copy everything as JSON":`全部复制为 JSON`,custom_assistant_Delete:xd,"custom_assistant_Delete the recorded history of all sources?":`Delete the recorded history of all sources?`,"custom_assistant_Device cache cleared.":`设备缓存已清除。`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Download as JSON":`下载为 JSON`,custom_assistant_Error:Sd,"custom_assistant_Expand all":`全部展开`,"custom_assistant_Follow-up":`追问`,"custom_assistant_Hide disabled":`隐藏已禁用`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Cd,"custom_assistant_Last seen":`最后一次出现`,"custom_assistant_Listening…":`正在听……`,"custom_assistant_Loading…":`加载中…`,"custom_assistant_Local LLM":`Local LLM`,"custom_assistant_Local model":`本地模型`,"custom_assistant_Mic re-opened without wake word":`Mic re-opened without wake word (follow-up or question)`,"custom_assistant_Name language: %s":`名称语言:%s`,"custom_assistant_No answer":`无应答`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`未检测到设备。请在ioBroker中为房间和功能分配状态。`,"custom_assistant_No messages yet. Type a question below.":`暂无消息。请在下方输入问题。`,"custom_assistant_No processing steps were recorded for this request.":`此请求没有记录处理步骤。仅保留最近 200 个请求的详细信息。`,"custom_assistant_No satellites registered yet.":`目前尚未注册任何卫星。`,"custom_assistant_Not understood":`Not understood`,"custom_assistant_Nothing recognized":`未识别到内容`,"custom_assistant_Per-device permissions":`每个设备的权限`,"custom_assistant_Play answer (backend TTS)":`播放答案(后端 TTS)`,"custom_assistant_Please select a .tflite model file":`请选择 .tflite 模型文件`,custom_assistant_Question:wd,"custom_assistant_Read answers aloud":`大声朗读答案`,custom_assistant_Recognized:Td,custom_assistant_Record:Ed,"custom_assistant_Recorded audio":`录制的音频`,"custom_assistant_Refresh device cache":`刷新设备缓存`,"custom_assistant_Remove satellite":`删除卫星设备`,"custom_assistant_Remove satellite %s and all its states?":`删除卫星设备 %s 及其所有状态?`,"custom_assistant_Reply audio":`回复音频`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Dd,"custom_assistant_Request details":`请求详情`,custom_assistant_Room:Od,custom_assistant_Routine:kd,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Ad,custom_assistant_Satellites:jd,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`聊天前请保存配置(实例将重启)。`,custom_assistant_Script:Md,"custom_assistant_Send announcement":`发送公告`,"custom_assistant_Settings for %s":`Settings for %s`,"custom_assistant_Show processing details":`Show processing details`,"custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.":`Shows all requests live: satellites, Telegram, scripts and this chat.`,custom_assistant_Source:Nd,custom_assistant_Speak:Pd,"custom_assistant_Speak on all satellites":`在所有卫星上通话`,"custom_assistant_Speak the test sentence and recognize it":`朗读测试句子并识别`,"custom_assistant_Speech output":`语音输出`,"custom_assistant_Speech recognition":`语音识别`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`语音合成`,custom_assistant_Spoken:Fd,"custom_assistant_Start the assistant instance to chat.":`启动助手实例进行聊天。`,"custom_assistant_Start the assistant instance to load the device list.":`启动助手实例以加载设备列表。`,custom_assistant_State:Id,"custom_assistant_States read":`读取的状态`,"custom_assistant_States written":`写入的状态`,custom_assistant_Status:Ld,custom_assistant_Steps:Rd,custom_assistant_Stop:zd,"custom_assistant_Stop listening":`别听了`,"custom_assistant_Stop reading answers aloud":`停止大声朗读答案`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`测试聊天`,"custom_assistant_Test sentence":`测试句子`,"custom_assistant_Test voice":`测试语音`,"custom_assistant_The instance must be running to test the voice.":`实例必须正在运行才能测试语音。`,"custom_assistant_The microphone only works over https or on localhost.":`麦克风仅在 https 或 localhost 下可用。`,"custom_assistant_Thinking…":`思维…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Bd,custom_assistant_Tool:Vd,"custom_assistant_Tool calls":`工具调用`,"custom_assistant_Tool result":`工具结果`,"custom_assistant_Tools & states":`工具和状态`,"custom_assistant_Total duration":`总耗时`,"custom_assistant_Translate all missing (%s)":`翻译所有缺失值(%s)`,"custom_assistant_Translate name into %s":`将名称翻译成 %s`,"custom_assistant_Type a message…":`输入消息…`,custom_assistant_Upload:Hd,"custom_assistant_Upload own wake word":`上传自定义唤醒词`,"custom_assistant_Uploaded wake word":`已上传的唤醒词`,"custom_assistant_Wake word":`Wake word`,"custom_assistant_Wake word phrase":`唤醒短语`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Ud,"custom_assistant_change it on the Voice tab":`在“语音”选项卡上更改。`,custom_assistant_delete_wake_word_confirm:Wd,custom_assistant_device:Gd,custom_assistant_filter:Kd,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:qd,"custom_assistant_in progress":`进行中`,custom_assistant_llm_downloading:Jd,custom_assistant_llm_error:Yd,custom_assistant_llm_idle:Xd,custom_assistant_llm_installing:Zd,custom_assistant_llm_loading:Qd,"custom_assistant_llm_not installed":`未安装`,custom_assistant_llm_ready:$d,"custom_assistant_made in %s ms":`用时 %s 毫秒`,"custom_assistant_no name in %s (showing %s)":`“%s”中没有名称——显示“%s”`,custom_assistant_offline:ef,custom_assistant_online:tf,custom_assistant_read:`读`,"custom_assistant_recognized in %s ms":`识别用时 %s 毫秒`,custom_assistant_room:nf,custom_assistant_sat_idle:rf,custom_assistant_sat_listening:af,custom_assistant_sat_offline:of,custom_assistant_sat_processing:sf,custom_assistant_sat_speaking:cf,custom_assistant_type:lf,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:uf,custom_assistant_wake_word_hint:df,custom_assistant_wake_word_phrase_hint:ff,custom_assistant_wake_word_upload_hint:pf,custom_assistant_wake_word_uploaded:mf,custom_assistant_write:`写`};le();var gf={},_f=Object.assign({"./i18n/de.json":B,"./i18n/en.json":V,"./i18n/es.json":H,"./i18n/fr.json":U,"./i18n/it.json":W,"./i18n/nl.json":G,"./i18n/pl.json":K,"./i18n/pt.json":Qs,"./i18n/ru.json":nl,"./i18n/uk.json":su,"./i18n/zh-cn.json":fd});for(let[e,t]of Object.entries(_f)){var vf;let n=((vf=e.split(`/`).pop())==null?void 0:vf.replace(`.json`,``))||`en`;gf[n]=t.default}L.extendTranslations(gf);var yf=new Set([`temperature`,`humidity`,`illuminance`,`motion`,`door`,`window`,`windowTilt`,`fireAlarm`,`floodAlarm`,`camera`,`weatherCurrent`,`weatherForecast`,`warning`,`location`,`info`,`chart`,`image`,`instance`]);function bf(e){return e===`lock`?{read:!0,write:!1}:{read:!0,write:!0}}var xf=[{value:`en`,label:`English`},{value:`de`,label:`Deutsch`},{value:`ru`,label:`Русский`},{value:`pt`,label:`Português`},{value:`nl`,label:`Nederlands`},{value:`fr`,label:`Français`},{value:`it`,label:`Italiano`},{value:`es`,label:`Español`},{value:`pl`,label:`Polski`},{value:`uk`,label:`Українська`},{value:`zh-cn`,label:`简体中文`}],Sf=class extends z{constructor(e){super(e),g(this,`aliveSubId`,``),g(this,`onAliveChange`,(e,t)=>{let n=!!(t!=null&&t.val);n!==this.state.alive&&this.setState({alive:n,loading:n},()=>{n&&this.loadDevices()})}),this.state={...this.state,devices:[],loading:!0,alive:!1,filter:``,edits:{},savingKey:``,translatingKeys:{},rowStatus:{},hideDisabled:!1}}rowColor(e){switch(this.state.rowStatus[e]){case`dirty`:return`rgba(128,128,128,0.20)`;case`saving`:return`rgba(244,67,54,0.20)`;case`saved`:return`rgba(76,175,80,0.28)`;default:return}}setRowStatus(e,t){this.setState(n=>{let r={...n.rowStatus};return t?r[e]=t:delete r[e],{rowStatus:r}})}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}get editLang(){return String(this.props.data.voiceLanguage||``)||L.getLanguage()}componentDidUpdate(e){String(e.data.voiceLanguage||``)!==String(this.props.data.voiceLanguage||``)&&Object.keys(this.state.edits).length&&this.setState({edits:{}})}async componentDidMount(){super.componentDidMount(),this.aliveSubId=`system.adapter.${this.instanceId}.alive`;let e=!1;try{let t=await this.props.oContext.socket.getState(this.aliveSubId);e=!!(t!=null&&t.val)}catch{e=!1}this.setState({alive:e},()=>void this.loadDevices()),this.props.oContext.socket.subscribeState(this.aliveSubId,this.onAliveChange)}componentWillUnmount(){var e;this.aliveSubId&&this.props.oContext.socket.unsubscribeState(this.aliveSubId,this.onAliveChange),(e=super.componentWillUnmount)==null||e.call(this)}async loadDevices(e=4){if(!this.state.alive){this.setState({loading:!1});return}let t=[];try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`getDevices`,{language:L.getLanguage()});t=(Array.isArray(e)?e:[]).filter(e=>e.type!==`button`)}catch{t=[]}!t.length&&e>0?setTimeout(()=>{this.state.alive&&this.loadDevices(e-1)},1200):this.setState({devices:t,edits:{},loading:!1})}nameFor(e){let t=this.editLang,n=e.smartName;if(typeof n==`string`&&n)return{value:n,exact:!0,from:``};if(n&&typeof n==`object`){if(n[t])return{value:n[t],exact:!0,from:t};let e=n.en?`en`:Object.keys(n)[0];if(e&&n[e])return{value:n[e],exact:!1,from:e}}return{value:e.autoName||e.name||``,exact:!1,from:`auto`}}fieldValue(e){return this.state.edits[e.key]??this.nameFor(e).value}onNameChange(e,t){let n=this.state.devices.find(t=>t.key===e),r=n?this.nameFor(n).value:``;this.setState(n=>{let i={...n.rowStatus};return t===r?i[e]===`dirty`&&delete i[e]:i[e]=`dirty`,{edits:{...n.edits,[e]:t},rowStatus:i}})}flashSaved(e){this.setRowStatus(e,`saved`),setTimeout(()=>{this.state.rowStatus[e]===`saved`&&this.setRowStatus(e,null)},2e3)}applyLocalName(e,t,n){this.setState(r=>({devices:r.devices.map(r=>{if(r.key!==e)return r;let i=r.smartName&&typeof r.smartName==`object`?{...r.smartName}:typeof r.smartName==`string`&&r.smartName?{en:r.smartName}:{};return n?i[t]=n:delete i[t],{...r,smartName:i}}),edits:(()=>{let t={...r.edits};return delete t[e],t})()}))}async saveName(e){let t=this.state.edits[e.key];if(t===void 0||t===this.nameFor(e).value)return;let n=this.editLang;this.setState({savingKey:e.key}),this.setRowStatus(e.key,`saving`);try{await this.props.oContext.socket.sendTo(this.instanceId,`setDeviceName`,{stateId:e.key,name:t,language:n}),this.applyLocalName(e.key,n,t.trim()),this.flashSaved(e.key)}catch{this.setRowStatus(e.key,`dirty`)}this.setState({savingKey:``})}async translateName(e){let t=this.nameFor(e).value,n=e.key;if(!t||this.state.translatingKeys[n])return;let r=this.editLang;this.setState(e=>({translatingKeys:{...e.translatingKeys,[n]:!0}})),this.setRowStatus(n,`saving`);try{var i;let e=await this.props.oContext.socket.sendTo(this.instanceId,`translateName`,{text:t,targetLang:r}),a=e==null||(i=e.translation)==null?void 0:i.trim();a?(await this.props.oContext.socket.sendTo(this.instanceId,`setDeviceName`,{stateId:n,name:a,language:r}),this.applyLocalName(n,r,a),this.flashSaved(n)):this.setRowStatus(n,null)}catch{this.setRowStatus(n,null)}this.setState(e=>{let t={...e.translatingKeys};return delete t[n],{translatingKeys:t}})}async translateAllMissing(){let e=this.state.devices.filter(e=>!this.nameFor(e).exact&&!this.state.translatingKeys[e.key]);await Promise.all(e.map(e=>this.translateName(e)))}getAcl(e){var t;return((t=this.props.data.deviceAcl)==null?void 0:t[e.key])||bf(e.type)}setAcl(e,t){let n=JSON.parse(JSON.stringify(this.props.data));n.deviceAcl=n.deviceAcl||{};let r=bf(e.type),i={...n.deviceAcl[e.key]||r,...t};i.read===r.read&&i.write===r.write?delete n.deviceAcl[e.key]:n.deviceAcl[e.key]=i,this.props.onChange(n)}renderItem(){var e;if(this.state.loading)return n(Ce,{});if(!this.state.alive)return n(I,{sx:{p:2},color:`warning.main`,children:L.t(`custom_assistant_Start the assistant instance to load the device list.`)});if(!this.state.devices.length)return n(I,{sx:{p:2},children:L.t(`custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.`)});let t=this.state.filter.trim().toLowerCase(),i=t?this.state.devices.filter(e=>`${e.name} ${e.type} ${e.room}`.toLowerCase().includes(t)):this.state.devices;this.state.hideDisabled&&(i=i.filter(e=>this.getAcl(e).read));let o=this.props.oContext.themeType===`dark`;return N(j,{sx:{width:`100%`},children:[n(I,{variant:`h6`,sx:{mt:1},children:L.t(`custom_assistant_Per-device permissions`)}),n(I,{variant:`body2`,sx:{mb:1},color:`text.secondary`,children:L.t(`custom_assistant_hint`)}),N(j,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1,flexWrap:`wrap`},children:[n(P,{size:`small`,color:`primary`,variant:`outlined`,label:L.t(`custom_assistant_Name language: %s`,((e=xf.find(e=>e.value===this.editLang))==null?void 0:e.label)||this.editLang)}),n(I,{variant:`caption`,color:`text.secondary`,children:L.t(`custom_assistant_change it on the Voice tab`)}),(()=>{let e=this.state.devices.filter(e=>!this.nameFor(e).exact).length,t=Object.keys(this.state.translatingKeys).length>0;return n(R,{size:`small`,variant:`outlined`,startIcon:t?n(O,{size:14}):n(d,{}),disabled:!e||t,onClick:()=>void this.translateAllMissing(),children:L.t(`custom_assistant_Translate all missing (%s)`,e)})})(),n(j,{sx:{flex:1}}),n(a,{control:n(E,{size:`small`,checked:this.state.hideDisabled,onChange:e=>this.setState({hideDisabled:e.target.checked})}),label:L.t(`custom_assistant_Hide disabled`)}),n(k,{variant:`standard`,size:`small`,label:`Filter`,value:this.state.filter,onChange:e=>this.setState({filter:e.target.value}),sx:{width:320}})]}),n(ce,{component:ge,sx:{width:`100%`},children:N(D,{size:`small`,children:[n(_e,{children:N(me,{sx:{background:o?`#333`:`#DDD`},children:[n(r,{children:L.t(`custom_assistant_device`)}),n(r,{children:L.t(`custom_assistant_type`)}),n(r,{children:L.t(`custom_assistant_room`)}),n(r,{align:`center`,children:L.t(`custom_assistant_read`)}),n(r,{align:`center`,children:L.t(`custom_assistant_write`)})]})}),n(v,{children:i.map(e=>{let t=this.getAcl(e),i=e.writableStateIds.length>0&&!yf.has(e.type),a=!t.read;return N(me,{sx:{background:this.rowColor(e.key),opacity:a?.5:1,transition:`background-color 0.4s`},children:[N(r,{children:[(()=>{let t=this.nameFor(e),r=!!this.state.translatingKeys[e.key],i=this.state.savingKey===e.key||r;return N(j,{sx:{display:`flex`,alignItems:`flex-start`,gap:.5},children:[n(k,{variant:`standard`,size:`small`,fullWidth:!0,value:this.fieldValue(e),disabled:i,error:!t.exact&&!this.state.edits[e.key],helperText:!t.exact&&!this.state.edits[e.key]?L.t(`custom_assistant_no name in %s (showing %s)`,this.editLang,t.from===`auto`?L.t(`custom_assistant_auto`):t.from):` `,onChange:t=>this.onNameChange(e.key,t.target.value),onBlur:()=>void this.saveName(e),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},slotProps:{input:{endAdornment:this.state.savingKey===e.key?n(O,{size:14}):null}}}),n(A,{title:L.t(`custom_assistant_Translate name into %s`,this.editLang),children:n(`span`,{children:n(l,{size:`small`,disabled:i,onClick:()=>void this.translateName(e),children:r?n(O,{size:16}):n(d,{fontSize:`small`})})})})]})})(),e.stateIds.length?n(I,{variant:`caption`,component:`div`,sx:{wordBreak:`break-all`,fontStyle:`italic`,opacity:.7,fontSize:`smaller`},children:e.stateIds.join(`, `)}):null]}),n(r,{children:N(j,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[n(se,{type:e.type,style:{width:20,height:20}}),n(`span`,{children:L.t(`type-${e.type}`)})]})}),n(r,{children:e.room&&e.room!==`No room`?e.room:`-`}),n(r,{align:`center`,children:n(ue,{checked:t.read,onChange:()=>this.setAcl(e,{read:!t.read})})}),n(r,{align:`center`,children:n(ue,{checked:t.write&&i,disabled:!i,onChange:()=>this.setAcl(e,{write:!t.write})})})]},e.key)})})]})})]})}},Cf={chat:`Chat`,script:`custom_assistant_Script`,state:`custom_assistant_State`,telegram:`Telegram`,esphome:`ESPHome`,udp:`UDP`,native:`ioBroker`,wyoming:`Wyoming`},wf={stop:`custom_assistant_Stop word`,askReply:`custom_assistant_Reply to a question`,routine:`custom_assistant_Routine`,nlu:`custom_assistant_Rule-based NLU`,localLlm:`custom_assistant_Local LLM`,cloud:`custom_assistant_Cloud LLM`,none:`custom_assistant_Not understood`},Tf={stop:`#78909c`,askReply:`#78909c`,routine:`#00897b`,nlu:`#43a047`,localLlm:`#8e24aa`,cloud:`#1e88e5`,none:`#e53935`},Ef={...wf,request:`custom_assistant_Request`,stt:`custom_assistant_Speech recognition`,context:`custom_assistant_Context`,youtube:`YouTube`,tool:`custom_assistant_Tool`,state:`custom_assistant_State`,answer:`custom_assistant_Answer`,tts:`custom_assistant_Speech synthesis`,error:`custom_assistant_Error`},Df={...Tf,request:`#607d8b`,stt:`#00838f`,context:`#8d6e63`,youtube:`#ff7043`,tool:`#fb8c00`,state:`#6d4c41`,answer:`#3949ab`,tts:`#00acc1`,error:`#c62828`};function Of(e){return typeof e==`string`?`"${e}"`:JSON.stringify(e)}function q(e){return e===void 0?``:Math.abs(e)<1e3?`${Math.round(e)} ms`:`${(e/1e3).toFixed(1)} s`}function kf(e){let t=e=>e.toLocaleString(),n=`${t(e.input)} in · ${t(e.output)} out`;return e.cacheRead&&(n+=` · ${t(e.cacheRead)} cached`),e.cacheWrite&&(n+=` · ${t(e.cacheWrite)} to cache`),n}var J=`ui-monospace, SFMono-Regular, Menlo, Consolas, monospace`;async function Af(e){try{return await navigator.clipboard.writeText(e),!0}catch{}let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=!1;try{n=document.execCommand(`copy`)}catch{n=!1}return document.body.removeChild(t),n}function jf(e,t){let n=URL.createObjectURL(new Blob([t],{type:`application/json`})),r=document.createElement(`a`);r.href=n,r.download=e,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Mf(e){return`${e<0?`−`:`+`}${q(Math.abs(e))}`}function Nf(e){let t=e.trim();if(/^[[{]/.test(t))try{return JSON.parse(t)}catch{return}}function Pf(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Ff(e){return Pf(e)&&typeof e.role==`string`&&(`content`in e||`tool_calls`in e)}function If(e){return Array.isArray(e)&&e.length>0&&e.every(e=>Pf(e)&&typeof e.type==`string`&&(`text`in e||`input`in e||`content`in e||`thinking`in e))}function Lf(e){return n(A,{title:L.t(`custom_assistant_Copy`),children:n(l,{size:`small`,onClick:t=>{t.stopPropagation(),e.ctx.onCopy(e.text)},sx:{position:`absolute`,top:2,right:2,p:.25,opacity:.5,"&:hover":{opacity:1}},children:n(C,{sx:{fontSize:`0.9rem`}})})})}function Y(e){return N(j,{sx:{position:`relative`},children:[n(j,{component:`pre`,sx:{m:0,p:1,pr:3.5,fontFamily:J,fontSize:`0.74rem`,lineHeight:1.45,whiteSpace:`pre-wrap`,wordBreak:`break-word`,maxHeight:e.maxHeight??360,overflow:`auto`,borderRadius:1,background:e.ctx.dark?`rgba(255,255,255,0.05)`:`rgba(0,0,0,0.04)`},children:e.text}),n(Lf,{text:e.text,ctx:e.ctx})]})}function X(e){return n(Y,{text:JSON.stringify(e.value,null,2),ctx:e.ctx})}function Rf(e){let t=Nf(e.text);return t===void 0?e.text.length>100||e.text.includes(`
2
+ `)?n(Y,{text:e.text,ctx:e.ctx}):n(`span`,{style:{fontFamily:J,fontSize:`0.78rem`},children:Of(e.text)}):n(X,{value:t,ctx:e.ctx})}var zf={system:`#757575`,user:`#1e88e5`,assistant:`#43a047`,tool:`#fb8c00`};function Z(e){return n(P,{size:`small`,label:e.label,sx:{height:18,fontSize:`0.68rem`,mr:.5,color:e.color?`#fff`:`inherit`,background:e.color||`rgba(127,127,127,0.25)`,"& .MuiChip-label":{px:.75}}})}function Bf(e){let{block:t,ctx:r}=e,i=t.cache_control?n(Z,{label:`cache_control`}):null,a=null,o;return t.type===`text`?o=n(Y,{text:String(t.text??``),ctx:r}):t.type===`tool_use`?(a=`🔧 ${String(t.name)}`,o=n(X,{value:t.input,ctx:r})):t.type===`tool_result`?(a=`↩ ${L.t(`custom_assistant_Tool result`)}`,o=typeof t.content==`string`?n(Rf,{text:t.content,ctx:r}):n(X,{value:t.content,ctx:r})):t.type===`thinking`?(a=`💭 thinking`,o=n(Y,{text:String(t.thinking??``),ctx:r})):o=n(X,{value:t,ctx:r}),N(j,{sx:{mb:.75},children:[a||i?N(j,{sx:{display:`flex`,alignItems:`center`,mb:.25,fontFamily:J,fontSize:`0.76rem`},children:[n(`span`,{style:{marginRight:6},children:a}),i]}):null,o]})}function Vf(e){let{msg:t,ctx:r}=e,i=String(t.role),a=t.content,o=Array.isArray(t.tool_calls)?t.tool_calls:[];return N(j,{sx:{mb:1,pl:1,borderLeft:`3px solid ${zf[i]||`#9e9e9e`}`},children:[n(j,{sx:{mb:.5},children:n(Z,{label:i,color:zf[i]})}),typeof a==`string`&&a?n(Rf,{text:a,ctx:r}):null,If(a)?a.map((e,t)=>n(Bf,{block:e,ctx:r},t)):null,o.map((e,t)=>{let i=Pf(e.function)?e.function:{},a=typeof i.arguments==`string`?Nf(i.arguments)??i.arguments:i.arguments;return N(j,{sx:{mb:.75},children:[N(j,{sx:{fontFamily:J,fontSize:`0.76rem`,mb:.25},children:[`🔧 `,String(i.name)]}),n(X,{value:a,ctx:r})]},t)})]})}function Hf(e){let{value:t,ctx:r,depth:i}=e;if(t==null)return n(`span`,{style:{opacity:.5},children:`—`});if(typeof t==`string`)return n(Rf,{text:t,ctx:r});if(typeof t!=`object`)return n(`span`,{style:{fontFamily:J,fontSize:`0.78rem`},children:String(t)});if(Array.isArray(t)&&t.length&&t.every(Ff))return n(j,{children:t.map((e,t)=>n(Vf,{msg:e,ctx:r},t))});if(If(t))return n(j,{children:t.map((e,t)=>n(Bf,{block:e,ctx:r},t))});if(Ff(t))return n(Vf,{msg:t,ctx:r});if(Array.isArray(t)&&t.every(e=>typeof e!=`object`||!e)){let e=t.map(e=>typeof e==`string`?e:JSON.stringify(e)).join(`, `);return e.length>160?n(Y,{text:e,ctx:r}):n(`span`,{style:{fontFamily:J,fontSize:`0.78rem`},children:e||`[]`})}return Pf(t)&&i<2?n(Uf,{data:t,ctx:r,depth:i+1}):n(X,{value:t,ctx:r})}function Uf(e){let r=Object.keys(e.data).filter(t=>e.data[t]!==void 0);return n(j,{sx:{display:`grid`,gridTemplateColumns:`minmax(90px, max-content) 1fr`,columnGap:1.5,rowGap:.5},children:r.map(r=>N(t.Fragment,{children:[n(j,{sx:{fontFamily:J,fontSize:`0.74rem`,opacity:.65,pt:`2px`},children:r}),n(j,{sx:{minWidth:0},children:n(Hf,{value:e.data[r],ctx:e.ctx,depth:e.depth})})]},r))})}function Q(e){return N(j,{sx:{minWidth:0},children:[n(I,{variant:`caption`,component:`div`,sx:{opacity:.6,lineHeight:1.2},children:e.label}),n(j,{sx:{fontSize:`0.85rem`,wordBreak:`break-word`},children:e.children})]})}function Wf(e){let{entry:r,dark:i}=e,[a,o]=t.useState(void 0),[s,c]=t.useState(``),[u,d]=t.useState(0),[f,p]=t.useState({}),[m,h]=t.useState(!1),g=t.useRef(!1),_=t.useRef(!1),{fetchTrace:ee}=e,v=t.useCallback(async()=>{if(g.current)_.current=!0;else{g.current=!0;try{do{_.current=!1;try{let e=await ee(r.id);c(e.error||``),o(e.error?null:e.steps??null)}catch(e){c(e.message)}}while(_.current)}finally{g.current=!1}}},[ee,r.id]);t.useEffect(()=>{v()},[r,v]);let y={dark:i,onCopy:e=>{Af(e).then(e=>{e&&(h(!0),setTimeout(()=>h(!1),1500))})}},b=[...a||[]].map((e,t)=>({...e,i:t})).sort((e,t)=>e.t-t.t||e.i-t.i),ne=Math.min(0,...b.map(e=>e.t)),re=Math.max(r.ms||0,...b.map(e=>e.t+(e.ms||0))),w=Math.max(1,re-ne),ie=b.length>0&&b.every(e=>f[e.i]||e.data===void 0),E=JSON.stringify({entry:r,steps:a??null},null,2),ae={p:1,borderRadius:1,background:i?`rgba(255,255,255,0.04)`:`rgba(0,0,0,0.03)`,whiteSpace:`pre-wrap`,wordBreak:`break-word`,fontSize:`0.9rem`},D=e=>{let t=e.level===`error`?`#c62828`:Df[e.stage]||`#9e9e9e`,r=e.data!==void 0||!!e.tokens,a=!!f[e.i],o=()=>p(t=>({...t,[e.i]:!t[e.i]})),s=(e.t-ne)/w*100,c=e.ms===void 0?0:Math.max(e.ms/w*100,.4);return N(j,{sx:{borderBottom:`1px solid ${i?`#333`:`#eee`}`,background:e.level===`error`?`rgba(198,40,40,0.08)`:e.level===`warn`?`rgba(251,140,0,0.08)`:void 0},children:[N(j,{role:r?`button`:void 0,tabIndex:r?0:void 0,onClick:r?o:void 0,onKeyDown:e=>{r&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},sx:{display:`grid`,gridTemplateColumns:`64px 132px 1fr 64px 16px`,alignItems:`center`,columnGap:1,px:1,pt:.6,cursor:r?`pointer`:`default`,"&:hover":r?{background:i?`rgba(255,255,255,0.04)`:`rgba(0,0,0,0.03)`}:{}},children:[n(j,{sx:{fontFamily:J,fontSize:`0.72rem`,opacity:.6,textAlign:`right`},children:Mf(e.t)}),n(j,{children:n(Z,{label:Ef[e.stage]?L.t(Ef[e.stage]):e.stage,color:Df[e.stage]})}),N(j,{sx:{fontSize:`0.82rem`,minWidth:0,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:a?`normal`:`nowrap`,color:e.level===`error`?`error.main`:e.level===`warn`?`warning.main`:void 0},title:e.title,children:[e.title,e.tokens?n(`span`,{style:{opacity:.6,fontSize:`0.72rem`,marginLeft:8},children:kf(e.tokens)}):null]}),n(j,{sx:{fontFamily:J,fontSize:`0.72rem`,textAlign:`right`,opacity:.8},children:q(e.ms)}),n(j,{sx:{fontSize:`0.7rem`,opacity:.5},children:r?a?`▾`:`▸`:``})]}),N(j,{sx:{position:`relative`,height:4,mx:1,mt:.4,mb:.6,ml:`calc(64px + 132px + 24px)`},children:[n(j,{sx:{position:`absolute`,inset:0,borderRadius:2,background:i?`rgba(255,255,255,0.05)`:`rgba(0,0,0,0.04)`}}),n(j,{sx:{position:`absolute`,top:c?0:-1,height:c?4:6,left:`${s}%`,width:c?`${c}%`:2,borderRadius:2,background:t}})]}),a&&r?N(j,{sx:{px:1,pb:1.5,ml:{xs:0,sm:`calc(64px + 8px)`}},children:[e.tokens?N(I,{variant:`caption`,component:`div`,sx:{mb:.5,opacity:.75},children:[`Tokens: `,kf(e.tokens)]}):null,e.data===void 0?null:n(Hf,{value:e.data,ctx:y,depth:0})]}):null]},e.i)},k=()=>a===void 0&&!s?N(j,{sx:{display:`flex`,alignItems:`center`,gap:1,p:2},children:[n(O,{size:18}),n(I,{variant:`body2`,children:L.t(`custom_assistant_Loading…`)})]}):b.length?n(j,{children:b.map(D)}):n(I,{variant:`body2`,sx:{p:2,opacity:.7},children:s||L.t(`custom_assistant_No processing steps were recorded for this request.`)}),se=()=>{let e={fontFamily:J,fontSize:`0.78rem`};return N(j,{sx:{p:1},children:[N(I,{variant:`subtitle2`,sx:{mb:.5},children:[L.t(`custom_assistant_Tool calls`),` (`,r.tools.length,`)`]}),r.tools.length?r.tools.map((t,r)=>N(j,{sx:{...e,mb:.75,color:t.error?`error.main`:void 0},children:[`🔧 `,n(`b`,{children:t.name}),`(`,JSON.stringify(t.args),`)`,` `,n(`span`,{style:{opacity:.6},children:q(t.ms)}),N(j,{sx:{pl:2.5,opacity:.85},children:[`→ `,t.error?`⚠ ${t.error}`:t.result]})]},r)):n(I,{variant:`body2`,sx:{opacity:.6,mb:1},children:`—`}),N(I,{variant:`subtitle2`,sx:{mt:2,mb:.5},children:[L.t(`custom_assistant_States read`),` (`,r.read.length,`)`]}),r.read.length?r.read.map(t=>N(j,{sx:e,children:[`📖 `,t]},t)):n(I,{variant:`body2`,sx:{opacity:.6},children:`—`}),N(I,{variant:`subtitle2`,sx:{mt:2,mb:.5},children:[L.t(`custom_assistant_States written`),` (`,r.written.length,`)`]}),r.written.length?r.written.map((t,n)=>N(j,{sx:e,children:[`✏️ `,t.id,` = `,Of(t.value)]},n)):n(I,{variant:`body2`,sx:{opacity:.6},children:`—`})]})},M=r.satellite||r.source,ce=new Date(r.ts).toLocaleString(void 0,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,fractionalSecondDigits:3});return N(oe,{open:!0,onClose:e.onClose,maxWidth:`lg`,fullWidth:!0,scroll:`paper`,slotProps:{paper:{sx:{height:`90vh`}}},children:[N(be,{sx:{display:`flex`,alignItems:`center`,gap:1,pr:1},children:[N(j,{sx:{flex:1,minWidth:0},children:[L.t(`custom_assistant_Request details`),n(I,{variant:`caption`,component:`span`,sx:{ml:1,opacity:.6,fontFamily:J},children:r.id})]}),m?n(I,{variant:`caption`,color:`success.main`,children:L.t(`custom_assistant_Copied`)}):null,n(A,{title:L.t(`custom_assistant_Copy everything as JSON`),children:n(l,{size:`small`,onClick:()=>y.onCopy(E),children:n(C,{fontSize:`small`})})}),n(A,{title:L.t(`custom_assistant_Download as JSON`),children:n(l,{size:`small`,onClick:()=>jf(`assistant-request-${r.id}.json`,E),children:n(he,{fontSize:`small`})})}),n(l,{size:`small`,onClick:e.onClose,children:n(S,{fontSize:`small`})})]}),N(te,{dividers:!0,children:[N(j,{sx:{display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:.5,mb:1},children:[n(Z,{label:L.t(Cf[r.transport]||r.transport)}),M&&M!==`chat`?n(Z,{label:M}):null,r.room&&r.room!==M?n(Z,{label:r.room}):null,r.wakeWord===void 0?null:n(Z,{label:`🎙 ${r.wakeWord||L.t(`custom_assistant_follow-up`)}`}),r.tier?n(Z,{label:L.t(wf[r.tier]),color:Tf[r.tier]}):null,r.detail?n(I,{variant:`caption`,sx:{fontFamily:J},children:r.detail}):null,r.done?null:N(j,{sx:{display:`flex`,alignItems:`center`,gap:.5,ml:1},children:[n(O,{size:12}),n(I,{variant:`caption`,children:L.t(`custom_assistant_in progress`)})]})]}),N(j,{sx:{display:`grid`,gridTemplateColumns:{xs:`1fr`,md:`1fr 1fr`},gap:1,mb:1.5},children:[N(j,{children:[n(I,{variant:`caption`,sx:{opacity:.6},children:L.t(`custom_assistant_Question`)}),n(j,{sx:ae,children:r.question})]}),N(j,{children:[n(I,{variant:`caption`,sx:{opacity:.6},children:L.t(r.error?`custom_assistant_Error`:`custom_assistant_Answer`)}),n(j,{sx:{...ae,color:r.error?`error.main`:void 0},children:r.error||r.answer||(r.done?n(`i`,{style:{opacity:.6},children:L.t(`custom_assistant_(no spoken answer)`)}):`…`)})]})]}),N(j,{sx:{display:`grid`,gridTemplateColumns:`repeat(auto-fill, minmax(150px, 1fr))`,gap:1.5,mb:1.5},children:[n(Q,{label:L.t(`custom_assistant_Time`),children:ce}),n(Q,{label:L.t(`custom_assistant_Total duration`),children:r.done?q(r.ms):`…`}),n(Q,{label:L.t(`custom_assistant_Source`),children:r.source||`—`}),r.audioMs===void 0?null:n(Q,{label:L.t(`custom_assistant_Recorded audio`),children:q(r.audioMs)}),r.sttMs===void 0?null:n(Q,{label:L.t(`custom_assistant_Speech recognition`),children:q(r.sttMs)}),r.ttsMs===void 0?null:n(Q,{label:L.t(`custom_assistant_Speech synthesis`),children:q(r.ttsMs)}),r.replyAudioMs===void 0?null:n(Q,{label:L.t(`custom_assistant_Reply audio`),children:q(r.replyAudioMs)}),r.tokens?n(Q,{label:`Tokens`,children:kf(r.tokens)}):null,n(Q,{label:L.t(`custom_assistant_Tool calls`),children:r.tools.length}),n(Q,{label:L.t(`custom_assistant_States read`),children:r.read.length}),n(Q,{label:L.t(`custom_assistant_States written`),children:r.written.length}),r.followUp?n(Q,{label:L.t(`custom_assistant_Follow-up`),children:L.t(`custom_assistant_waits for reply`)}):null]}),N(j,{sx:{display:`flex`,alignItems:`center`,borderBottom:`1px solid ${i?`#444`:`#ddd`}`,mb:.5},children:[N(F,{value:u,onChange:(e,t)=>d(t),sx:{flex:1,minHeight:36,"& .MuiTab-root":{minHeight:36,py:0}},children:[n(T,{label:`${L.t(`custom_assistant_Steps`)}${b.length?` (${b.length})`:``}`}),n(T,{label:L.t(`custom_assistant_Tools & states`)}),n(T,{label:`JSON`})]}),u===0&&b.length?n(A,{title:L.t(ie?`custom_assistant_Collapse all`:`custom_assistant_Expand all`),children:n(l,{size:`small`,onClick:()=>p(ie?{}:Object.fromEntries(b.map(e=>[e.i,!0]))),children:n(ie?ye:x,{fontSize:`small`})})}):null]}),u===0?k():null,u===1?se():null,u===2?n(Y,{text:E,ctx:y,maxHeight:1e4}):null]}),n(xe,{children:n(R,{onClick:e.onClose,children:L.t(`custom_assistant_Close`)})})]})}var Gf={},Kf=Object.assign({"./i18n/de.json":B,"./i18n/en.json":V,"./i18n/es.json":H,"./i18n/fr.json":U,"./i18n/it.json":W,"./i18n/nl.json":G,"./i18n/pl.json":K,"./i18n/pt.json":Qs,"./i18n/ru.json":nl,"./i18n/uk.json":su,"./i18n/zh-cn.json":fd});for(let[e,t]of Object.entries(Kf)){var qf;let n=((qf=e.split(`/`).pop())==null?void 0:qf.replace(`.json`,``))||`en`;Gf[n]=t.default}L.extendTranslations(Gf);function Jf(e){return e.satellite||e.source||e.transport}var Yf=class extends z{constructor(e){super(e),g(this,`scrollRef`,t.createRef()),g(this,`aliveSubId`,``),g(this,`journalSubId`,``),g(this,`recognition`,null),g(this,`scrollTimeout`,null),g(this,`onJournalChange`,(e,t)=>{if(!(t!=null&&t.val)||typeof t.val!=`string`)return;let n;try{n=JSON.parse(t.val)}catch{return}if(!(n!=null&&n.id))return;let r=this.isNearBottom();this.setState(e=>({entries:{...e.entries,[n.id]:n}}),()=>r&&this.scrollToBottom())}),g(this,`onAliveChange`,(e,t)=>{let n=!!(t!=null&&t.val),r=this.state.alive;this.setState({alive:n}),n&&!r&&(this.checkTtsAvailable(),this.loadJournal())}),g(this,`onKeyDown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),this.send())}),g(this,`fetchTrace`,async e=>await this.props.oContext.socket.sendTo(this.instanceId,`getJournalTrace`,{id:e})||{error:`no answer from the adapter`});let n=!0;try{n=window.localStorage.getItem(`assistant.chat.details`)!==`0`}catch{}this.state={...this.state,messages:[],entries:{},journalEnabled:null,showDetails:n,detailsId:``,filter:``,confirmClear:!1,input:``,sending:!1,alive:!1,listening:!1,speak:!1,ttsPlaying:``,ttsAvailable:!1}}async checkTtsAvailable(){try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`ttsAvailable`,{});this.setState({ttsAvailable:!!(e!=null&&e.available)})}catch{this.setState({ttsAvailable:!1})}}async loadJournal(){try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`getJournal`,{});if(!e||e.enabled===void 0){this.setState({journalEnabled:!1});return}let t={};for(let n of e.entries||[])t[n.id]=n;this.setState(n=>({journalEnabled:!!e.enabled,entries:{...t,...n.entries}}),()=>this.scrollToBottom())}catch{this.setState({journalEnabled:!1})}}get speechSupported(){let e=window;return(!!e.SpeechRecognition||!!e.webkitSpeechRecognition)&&window.isSecureContext}get ttsSupported(){return typeof window<`u`&&`speechSynthesis`in window}speechLang(){return{de:`de-DE`,en:`en-US`,ru:`ru-RU`,pt:`pt-PT`,nl:`nl-NL`,fr:`fr-FR`,it:`it-IT`,es:`es-ES`,pl:`pl-PL`,uk:`uk-UA`,"zh-cn":`zh-CN`}[L.getLanguage()]||`en-US`}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){await super.componentDidMount(),this.aliveSubId=`system.adapter.${this.instanceId}.alive`,this.journalSubId=`${this.instanceId}.journal.last`;let e=!1;try{let t=await this.props.oContext.socket.getState(this.aliveSubId);e=!!(t!=null&&t.val)}catch{e=!1}this.setState({alive:e}),e&&(this.checkTtsAvailable(),this.loadJournal()),await this.props.oContext.socket.subscribeState(this.aliveSubId,this.onAliveChange),await this.props.oContext.socket.subscribeState(this.journalSubId,this.onJournalChange)}componentWillUnmount(){var e;this.aliveSubId&&this.props.oContext.socket.unsubscribeState(this.aliveSubId,this.onAliveChange),this.journalSubId&&this.props.oContext.socket.unsubscribeState(this.journalSubId,this.onJournalChange),this.scrollTimeout&&=(clearTimeout(this.scrollTimeout),null);try{var t;(t=this.recognition)==null||t.stop()}catch{}this.ttsSupported&&window.speechSynthesis.cancel(),(e=super.componentWillUnmount)==null||e.call(this)}toggleListening(){if(this.state.listening){var e;(e=this.recognition)==null||e.stop();return}let t=window,n=t.SpeechRecognition||t.webkitSpeechRecognition;if(!n)return;let r=new n;r.lang=this.speechLang(),r.interimResults=!1,r.continuous=!1,r.onresult=e=>{var t;let n=((t=e.results)==null||(t=t[0])==null||(t=t[0])==null?void 0:t.transcript)||``;n&&this.setState({input:n},()=>void this.send())},r.onerror=()=>this.setState({listening:!1}),r.onend=()=>this.setState({listening:!1}),this.recognition=r,this.setState({listening:!0});try{r.start()}catch{this.setState({listening:!1})}}speak(e){if(!this.ttsSupported||!e)return;window.speechSynthesis.cancel();let t=new SpeechSynthesisUtterance(e);t.lang=this.speechLang(),window.speechSynthesis.speak(t)}async playViaBackend(e,t){if(this.ready&&t){this.setState({ttsPlaying:e});try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`tts`,{text:t});if(e!=null&&e.audio){let t=new Audio(`data:${e.mime||`audio/wav`};base64,${e.audio}`);t.onended=()=>this.setState({ttsPlaying:``}),t.onerror=()=>this.setState({ttsPlaying:``}),await t.play()}else this.setState({ttsPlaying:``})}catch{this.setState({ttsPlaying:``})}}}isNearBottom(){let e=this.scrollRef.current;return!e||e.scrollHeight-e.scrollTop-e.clientHeight<80}scrollToBottom(e){e||=0;let t=this.scrollRef.current;t?t.scrollTop=t.scrollHeight:e<15&&(this.scrollTimeout=setTimeout(()=>{this.scrollTimeout=null,this.scrollToBottom(e+1)},100))}get ready(){return this.state.alive&&!this.props.changed}addMessage(e){this.setState(t=>({messages:[...t.messages,e]}),()=>this.scrollToBottom())}async send(){let e=this.state.input.trim();if(!e||this.state.sending||!this.ready)return;let t=!!this.state.journalEnabled,n=this.state.filter&&this.state.filter!==`chat`?``:this.state.filter;this.setState({input:``,sending:!0,filter:n},()=>this.scrollToBottom()),t||this.addMessage({role:`user`,text:e,ts:Date.now()});try{let t=await this.props.oContext.socket.sendTo(this.instanceId,`ask`,{text:e});(t==null?void 0:t.error)===void 0?t!=null&&t.journaled||this.addMessage({role:`assistant`,text:(t==null?void 0:t.answer)??``,ts:Date.now()}):t.journaled||this.addMessage({role:`error`,text:t.error,ts:Date.now()}),this.state.speak&&t!=null&&t.answer&&this.speak(t.answer)}catch(e){this.addMessage({role:`error`,text:e.message,ts:Date.now()})}this.setState({sending:!1})}async refreshCache(){if(this.ready)try{await this.props.oContext.socket.sendTo(this.instanceId,`clearCache`,{}),this.addMessage({role:`info`,text:L.t(`custom_assistant_Device cache cleared.`),ts:Date.now()})}catch{}}async clearHistory(){if(this.setState({confirmClear:!1,messages:[],entries:{}}),this.state.journalEnabled&&this.state.alive)try{await this.props.oContext.socket.sendTo(this.instanceId,`clearJournal`,{})}catch{}}openDetails(e){var t;(t=window.getSelection())!=null&&t.toString()||this.setState({detailsId:e})}toggleDetails(){let e=!this.state.showDetails;this.setState({showDetails:e});try{window.localStorage.setItem(`assistant.chat.details`,e?`1`:`0`)}catch{}}bubbleColors(e){let t=this.props.oContext.themeType===`dark`;return e===`user`?{bg:t?`#1e88e5`:`#2196f3`,color:`#fff`}:e===`error`?{bg:t?`#5d1f1f`:`#f8d7da`,color:t?`#ffb4b4`:`#842029`}:{bg:t?`#3a3a3a`:`#eceff1`,color:t?`#eee`:`#111`}}renderBubble(e,t,r,i,a={}){let o=t===`user`,{bg:s,color:c}=this.bubbleColors(t);return n(j,{sx:{display:`flex`,justifyContent:o?`flex-end`:`flex-start`,mb:.5},children:N(ge,{elevation:1,onClick:a.onClick,title:a.onClick?L.t(`custom_assistant_Click for details`):void 0,sx:{px:1.5,py:1,maxWidth:`75%`,background:s,color:c,borderRadius:2,whiteSpace:`pre-wrap`,wordBreak:`break-word`,cursor:a.onClick?`pointer`:void 0,outline:`2px solid transparent`,transition:`outline-color 0.15s`,"&:hover":a.onClick?{outlineColor:`rgba(127,127,127,0.45)`}:void 0},children:[a.header,n(I,{variant:`body2`,component:`div`,children:r}),N(j,{sx:{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:.5},children:[a.footer,a.playText&&this.state.ttsAvailable?n(A,{title:L.t(`custom_assistant_Play answer (backend TTS)`),children:n(`span`,{children:n(l,{size:`small`,disabled:!this.ready||this.state.ttsPlaying===e,onClick:t=>{t.stopPropagation(),this.playViaBackend(e,a.playText||``)},sx:{p:.25,color:`inherit`,opacity:.7},children:this.state.ttsPlaying===e?n(O,{size:12}):n(pe,{sx:{fontSize:`0.9rem`}})})})}):null,n(I,{variant:`caption`,component:`div`,sx:{opacity:.6,fontSize:`0.65rem`},children:new Date(i).toLocaleTimeString()})]})]})},e)}renderMessage(e,t){return e.role===`info`?n(I,{variant:`caption`,component:`div`,sx:{textAlign:`center`,opacity:.6,my:1,fontStyle:`italic`},children:e.text},`m${t}`):this.renderBubble(`m${t}`,e.role,e.text,e.ts,{playText:e.role===`assistant`?e.text:void 0})}chip(e,r,i){let a=n(P,{size:`small`,label:e,sx:{height:18,fontSize:`0.68rem`,mr:.5,color:i?`#fff`:`inherit`,background:i||`rgba(127,127,127,0.25)`,"& .MuiChip-label":{px:.75}}});return r?n(A,{title:r,children:a},e):n(t.Fragment,{children:a},e)}renderOrigin(e){let t=[this.chip(L.t(Cf[e.transport]||e.transport))],r=e.satellite||(e.transport===`chat`||e.transport===`state`?``:e.source);return r&&t.push(this.chip(r,L.t(`custom_assistant_Source`))),e.room&&e.room!==r&&t.push(this.chip(e.room,L.t(`custom_assistant_Room`))),e.wakeWord!==void 0&&t.push(e.wakeWord?this.chip(`🎙 ${e.wakeWord}`,L.t(`custom_assistant_Wake word`)):this.chip(`🎙 ${L.t(`custom_assistant_follow-up`)}`,L.t(`custom_assistant_Mic re-opened without wake word`))),e.sttMs!==void 0&&t.push(this.chip(`STT ${q(e.sttMs)}`,L.t(`custom_assistant_Speech recognition time`))),n(j,{sx:{mb:.5,opacity:.9},children:t})}renderDetails(e){if(!this.state.showDetails)return null;let t={fontFamily:`monospace`,fontSize:`0.72rem`},r=[];for(let[i,a]of e.tools.entries())r.push(N(j,{sx:{...t,color:a.error?`error.main`:void 0},children:[`🔧 `,a.name,`(`,JSON.stringify(a.args),`) → `,a.error?`⚠ ${a.error}`:a.result,` `,``,n(`span`,{style:{opacity:.6},children:q(a.ms)})]},`t${i}`));e.read.length&&r.push(N(j,{sx:t,children:[`📖 `,e.read.join(`, `)]},`r`));for(let[n,i]of e.written.entries())r.push(N(j,{sx:t,children:[`✏️ `,i.id,` = `,Of(i.value)]},`w${n}`));return N(j,{onClick:()=>this.openDetails(e.id),title:L.t(`custom_assistant_Click for details`),sx:{ml:1,mb:1.5,pl:1,borderLeft:`2px solid rgba(127,127,127,0.35)`,opacity:.85,cursor:`pointer`,"&:hover":{opacity:1,borderLeftColor:`rgba(127,127,127,0.8)`}},children:[N(j,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,gap:.25},children:[e.tier?this.chip(L.t(wf[e.tier]),void 0,Tf[e.tier]):null,e.detail?n(I,{variant:`caption`,sx:{...t,mr:1},children:e.detail}):null,e.done?n(I,{variant:`caption`,sx:{opacity:.7,mr:1},children:q(e.ms)}):null,e.tokens?n(I,{variant:`caption`,sx:{opacity:.6,mr:1},children:kf(e.tokens)}):null,e.ttsMs===void 0?null:this.chip(`TTS ${q(e.ttsMs)}`,L.t(`custom_assistant_Speech synthesis`)),e.followUp?this.chip(L.t(`custom_assistant_waits for reply`)):null]}),r]})}renderEntry(e){let r=()=>this.openDetails(e.id),i;return i=e.done?e.error?this.renderBubble(`${e.id}a`,`error`,e.error,e.ts+(e.ms||0),{onClick:r}):this.renderBubble(`${e.id}a`,`assistant`,e.answer||n(`i`,{style:{opacity:.6},children:L.t(`custom_assistant_(no spoken answer)`)}),e.ts+(e.ms||0),{playText:e.answer||void 0,onClick:r}):N(j,{onClick:r,title:L.t(`custom_assistant_Click for details`),sx:{display:`flex`,alignItems:`center`,gap:1,p:1,opacity:.7,cursor:`pointer`},children:[n(O,{size:16}),n(I,{variant:`body2`,children:L.t(`custom_assistant_Thinking…`)})]},`${e.id}a`),N(t.Fragment,{children:[this.renderBubble(`${e.id}q`,`user`,e.question,e.ts,{header:this.renderOrigin(e),onClick:r}),i,this.renderDetails(e)]},e.id)}renderTimeline(){let{entries:e,messages:t,filter:n}=this.state,r=[];for(let t of Object.values(e))n&&Jf(t)!==n||r.push({ts:t.ts,el:()=>this.renderEntry(t)});return n&&n!==`chat`||t.forEach((e,t)=>r.push({ts:e.ts,el:()=>this.renderMessage(e,t)})),r.sort((e,t)=>e.ts-t.ts),r.map(e=>e.el())}renderFilter(){let e=[...new Set(Object.values(this.state.entries).map(Jf))].sort();return!this.state.journalEnabled||e.length<2?null:N(ie,{size:`small`,variant:`standard`,value:e.includes(this.state.filter)?this.state.filter:``,displayEmpty:!0,onChange:e=>this.setState({filter:String(e.target.value)}),sx:{mr:1,minWidth:140,fontSize:`0.85rem`},children:[n(re,{value:``,children:L.t(`custom_assistant_All sources`)}),e.map(e=>n(re,{value:e,children:e},e))]})}renderItem(){let e=this.props.oContext.themeType===`dark`,{alive:t,messages:r,entries:a,sending:o,input:s,listening:c,speak:u,journalEnabled:d,showDetails:f}=this.state,m=this.ready,h=this.renderTimeline(),g=!r.length&&!Object.keys(a).length;return N(j,{sx:{width:`100%`,display:`flex`,flexDirection:`column`,height:`calc(100vh - 300px)`},children:[N(j,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[N(j,{children:[n(I,{variant:`h6`,children:L.t(d?`custom_assistant_Chat`:`custom_assistant_Test chat`)}),d?n(I,{variant:`caption`,sx:{opacity:.7},children:L.t(`custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.`)}):null]}),N(j,{sx:{display:`flex`,alignItems:`center`},children:[this.renderFilter(),d?n(A,{title:L.t(f?`custom_assistant_Hide processing details`:`custom_assistant_Show processing details`),children:n(l,{size:`small`,color:f?`primary`:`default`,onClick:()=>this.toggleDetails(),children:n(f?ve:M,{})})}):null,this.ttsSupported?n(A,{title:L.t(u?`custom_assistant_Stop reading answers aloud`:`custom_assistant_Read answers aloud`),children:n(l,{size:`small`,color:u?`primary`:`default`,onClick:()=>{u&&window.speechSynthesis.cancel(),this.setState({speak:!u})},children:n(u?de:i,{})})}):null,n(A,{title:L.t(`custom_assistant_Refresh device cache`),children:n(`span`,{children:n(l,{size:`small`,disabled:!m,onClick:()=>void this.refreshCache(),children:n(_,{})})})}),n(A,{title:L.t(`custom_assistant_Clear chat`),children:n(`span`,{children:n(l,{size:`small`,disabled:g,onClick:()=>d?this.setState({confirmClear:!0}):void this.clearHistory(),children:n(p,{})})})})]})]}),m?null:n(I,{sx:{p:2},color:`warning.main`,children:t?L.t(`custom_assistant_Save the configuration (the instance will restart) before chatting.`):L.t(`custom_assistant_Start the assistant instance to chat.`)}),N(j,{ref:this.scrollRef,sx:{flex:1,overflowY:`auto`,p:1,border:`1px solid ${e?`#444`:`#ccc`}`,borderRadius:1,background:e?`#1e1e1e`:`#fafafa`,mb:1},children:[h.length?h:n(I,{sx:{p:2,textAlign:`center`,opacity:.6},variant:`body2`,children:L.t(`custom_assistant_No messages yet. Type a question below.`)}),o&&!d?N(j,{sx:{display:`flex`,alignItems:`center`,gap:1,p:1,opacity:.7},children:[n(O,{size:16}),n(I,{variant:`body2`,children:L.t(`custom_assistant_Thinking…`)})]}):null]}),N(j,{sx:{display:`flex`,alignItems:`flex-end`,gap:1},children:[this.speechSupported?n(A,{title:L.t(c?`custom_assistant_Stop listening`:`custom_assistant_Speak`),children:n(`span`,{children:n(l,{color:c?`error`:`primary`,disabled:!m||o,onClick:()=>this.toggleListening(),children:n(Se,{})})})}):null,n(k,{fullWidth:!0,multiline:!0,maxRows:4,size:`small`,variant:`outlined`,placeholder:L.t(c?`custom_assistant_Listening…`:`custom_assistant_Type a message…`),value:s,disabled:!m||o,onChange:e=>this.setState({input:e.target.value}),onKeyDown:this.onKeyDown}),n(l,{color:`primary`,disabled:!m||o||!s.trim(),onClick:()=>void this.send(),children:n(we,{})})]}),this.state.detailsId&&a[this.state.detailsId]?n(Wf,{entry:a[this.state.detailsId],fetchTrace:this.fetchTrace,dark:e,onClose:()=>this.setState({detailsId:``})}):null,N(oe,{open:this.state.confirmClear,onClose:()=>this.setState({confirmClear:!1}),children:[n(be,{children:L.t(`custom_assistant_Clear chat`)}),n(te,{children:n(I,{variant:`body2`,children:L.t(`custom_assistant_Delete the recorded history of all sources?`)})}),N(xe,{children:[n(R,{color:`error`,variant:`contained`,onClick:()=>void this.clearHistory(),children:L.t(`custom_assistant_Delete`)}),n(R,{onClick:()=>this.setState({confirmClear:!1}),children:L.t(`custom_assistant_Cancel`)})]})]})]})}},Xf={},Zf=Object.assign({"./i18n/de.json":B,"./i18n/en.json":V,"./i18n/es.json":H,"./i18n/fr.json":U,"./i18n/it.json":W,"./i18n/nl.json":G,"./i18n/pl.json":K,"./i18n/pt.json":Qs,"./i18n/ru.json":nl,"./i18n/uk.json":su,"./i18n/zh-cn.json":fd});for(let[e,t]of Object.entries(Zf)){var Qf;let n=((Qf=e.split(`/`).pop())==null?void 0:Qf.replace(`.json`,``))||`en`;Xf[n]=t.default}L.extendTranslations(Xf);var $f={ready:`success`,error:`error`,installing:`info`,downloading:`info`,loading:`info`},ep=class extends z{constructor(e){super(e),g(this,`statusId`,``),g(this,`progressId`,``),g(this,`onStatus`,(e,t)=>{this.setState({status:(t==null?void 0:t.val)||`idle`})}),g(this,`onProgress`,(e,t)=>{this.setState({progress:Number(t==null?void 0:t.val)||0})}),this.state={...this.state,status:`idle`,progress:0}}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){super.componentDidMount(),this.statusId=`${this.instanceId}.localLlm.status`,this.progressId=`${this.instanceId}.localLlm.progress`;let e=this.props.oContext.socket;try{let t=await e.getState(this.statusId),n=await e.getState(this.progressId);this.setState({status:(t==null?void 0:t.val)||`idle`,progress:Number(n==null?void 0:n.val)||0})}catch{}e.subscribeState(this.statusId,this.onStatus),e.subscribeState(this.progressId,this.onProgress)}componentWillUnmount(){var e;let t=this.props.oContext.socket;this.statusId&&(t.unsubscribeState(this.statusId,this.onStatus),t.unsubscribeState(this.progressId,this.onProgress)),(e=super.componentWillUnmount)==null||e.call(this)}renderItem(){let{status:e,progress:t}=this.state,r=e===`installing`||e===`downloading`||e===`loading`,i=e===`downloading`;return N(j,{sx:{width:`100%`,mt:.5,mb:1},children:[N(j,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.5},children:[N(I,{variant:`body2`,children:[L.t(`custom_assistant_Local model`),`:`]}),n(P,{size:`small`,color:$f[e]||`default`,variant:`outlined`,label:L.t(`custom_assistant_llm_${e}`)}),i?N(I,{variant:`body2`,children:[Math.round(t),`%`]}):null]}),r?n(Ce,{variant:i?`determinate`:`indeterminate`,value:i?t:void 0}):null]})}};function tp(e){return e.replace(/\.tflite$/i,``).split(/[_\-\s]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join(` `)}function np(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result).replace(/^data:[^,]*,/,``)),r.onerror=()=>n(r.error||Error(`read failed`)),r.readAsDataURL(e)})}function $(e,t){if(!Number.isFinite(e))return String(e);if(t&&t>0&&t<1){let n=Math.min(6,Math.ceil(-Math.log10(t)-1e-6));return String(Number(e.toFixed(n)))}return String(Number(e.toPrecision(7)))}function rp(e){let t=e.replace(/^controls\./,``),n=t.indexOf(`.`);return n<0?``:t.slice(n+1)}var ip=[`currentVersion`,`latestVersion`,`install`,`progress`];function ap(e){let t=e.map(rp);return t.includes(`latestVersion`)&&t.includes(`install`)&&t.includes(`progress`)}function op(e){return e.common.write===!1}function sp(e){var r,i;let{values:a,objects:o,loading:s,onWrite:l}=e,u=t.useMemo(()=>{try{let e=a.availableWakeWords;return e?JSON.parse(String(e)):null}catch{return null}},[a.availableWakeWords]),d=String(a.wakeWords??``).split(`,`).map(e=>e.trim()).filter(Boolean),f=e=>{let t=d.includes(e)?d.filter(t=>t!==e):[...d,e];l(`wakeWords`,t.join(`,`))},p=(u==null?void 0:u.max)||0,g=p>0&&d.length>=p,_=t.useRef(null),[v,y]=t.useState(null),[x,S]=t.useState(!1),[C,w]=t.useState(null),[T,D]=t.useState(null),se=async e=>{w(null);let t=Array.from(e||[]),n=t.find(e=>/\.tflite$/i.test(e.name)),r=t.find(e=>/\.json$/i.test(e.name));if(!n)w({severity:`error`,text:L.t(`custom_assistant_Please select a .tflite model file`)});else try{let e=r?await r.text():``,t=``;try{let n=e?JSON.parse(e):{};t=typeof n.wake_word==`string`?n.wake_word:``}catch{}y({fileName:n.name,model:await np(n),config:e,configName:(r==null?void 0:r.name)||``,phrase:t||tp(n.name)})}catch(e){w({severity:`error`,text:String(e.message||e)})}},M=async()=>{if(v){S(!0);try{let t=await e.sendTo(`uploadWakeWord`,{model:v.model,fileName:v.fileName,config:v.config||void 0,phrase:v.phrase.trim()});t!=null&&t.error?w({severity:`error`,text:t.error}):(y(null),w({severity:`success`,text:L.t(`custom_assistant_wake_word_uploaded`,(t==null?void 0:t.phrase)||v.phrase)}))}catch(e){w({severity:`error`,text:String(e.message||e)})}finally{S(!1)}}},ce=async t=>{D(null),S(!0);try{let n=await e.sendTo(`deleteWakeWord`,{id:t.id});w(n!=null&&n.error?{severity:`error`,text:n.error}:{severity:`success`,text:L.t(`custom_assistant_wake_word_deleted`,t.phrase)})}catch(e){w({severity:`error`,text:String(e.message||e)})}finally{S(!1)}};function le(e,t){let r=t=>a[`controls.${e}.${t}`],i=String(r(`currentVersion`)??``),s=String(r(`latestVersion`)??``),c=r(`inProgress`)===!0,l=Math.min(100,Math.max(0,Number(r(`progress`))||0)),u=e=>{let t=ip.indexOf(rp(e));return t<0?ip.length:t};return[...t].sort((e,t)=>u(e)-u(t)).map(e=>{let t=rp(e);if(t===`inProgress`)return null;if(t===`install`)return s&&s!==i&&!c?de(e):null;if(t===`progress`){var r;if(!c)return null;let i=(r=o[e])==null||(r=r.common)==null?void 0:r.name;return N(j,{children:[N(I,{variant:`caption`,sx:{opacity:.7},children:[typeof i==`string`?i:t,l>0?` ${Math.round(l)} %`:``]}),n(Ce,{variant:l>0?`determinate`:`indeterminate`,value:l,sx:{height:8,borderRadius:4}})]},e)}return de(e)})}let ue=Object.keys(o).sort(),F=new Map;for(let e of ue){let t=e.replace(/^controls\./,``),n=t.indexOf(`.`),r=n<0?t:t.slice(0,n);F.set(r,[...F.get(r)||[],e])}function de(e){let t=o[e],r=t.common,i=r.name&&typeof r.name==`string`?r.name:e,s=a[e];if(r.role===`button`)return n(R,{size:`small`,variant:`outlined`,onClick:()=>l(e,!0),children:i},e);if(op(t))return N(j,{children:[n(I,{variant:`caption`,sx:{opacity:.7},children:i}),n(I,{variant:`body2`,children:s==null?`—`:typeof s==`number`?$(s,r.step):String(s)})]},e);if(r.type===`boolean`)return N(j,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[n(I,{variant:`body2`,children:i}),n(E,{size:`small`,checked:!!s,onChange:t=>l(e,t.target.checked)})]},e);if(r.states){let t=Array.isArray(r.states)?Object.fromEntries(r.states.map(e=>[e,e])):r.states;return N(fe,{size:`small`,fullWidth:!0,children:[n(b,{children:i}),n(ie,{label:i,value:s==null?``:String(s),onChange:t=>l(e,t.target.value),children:Object.entries(t).map(([e,t])=>n(re,{value:e,children:t},e))})]},e)}if(r.type===`number`&&r.min!==void 0&&r.max!==void 0){let t=Number(s??r.min),a=r.step?Number(r.step.toPrecision(7)):1;return N(j,{children:[N(I,{variant:`body2`,children:[i,N(I,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:[$(t,a),r.unit||``,` (`,$(r.min,a),`…`,$(r.max,a),`)`]})]}),n(ae,{size:`small`,value:Number.isFinite(t)?t:r.min,min:r.min,max:r.max,step:a,onChangeCommitted:(t,n)=>{let r=Array.isArray(n)?n[0]:n;l(e,Number($(r,a)))},valueLabelDisplay:`auto`,valueLabelFormat:e=>$(e,a)})]},e)}return n(k,{size:`small`,fullWidth:!0,label:i,defaultValue:s==null?``:String(s),onBlur:t=>l(e,t.target.value),onKeyDown:t=>{t.key===`Enter`&&l(e,t.target.value)}},e)}return N(oe,{open:!0,onClose:e.onClose,maxWidth:`sm`,fullWidth:!0,children:[N(be,{children:[L.t(`custom_assistant_Settings for %s`,e.satId),e.room?n(I,{variant:`caption`,sx:{ml:1,opacity:.7},children:e.room}):null]}),n(te,{dividers:!0,children:s?n(j,{sx:{display:`flex`,justifyContent:`center`,p:3},children:n(O,{size:28})}):N(j,{sx:{display:`flex`,flexDirection:`column`,gap:2},children:[u!=null&&(r=u.words)!=null&&r.length?N(j,{children:[N(I,{variant:`subtitle2`,children:[L.t(`custom_assistant_Wake words`),n(I,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:L.t(`custom_assistant_%s of %s active`,d.length,p)})]}),n(j,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5,mt:1},children:u.words.map(e=>{let t=d.includes(e.id);return n(A,{title:e.custom?`${L.t(`custom_assistant_Uploaded wake word`)} · ${e.id}${e.languages.length?` · ${e.languages.join(`, `)}`:``}`:e.languages.join(`, `),children:n(P,{size:`small`,label:e.phrase||e.id,color:t?`primary`:`default`,variant:t?`filled`:`outlined`,icon:e.custom?n(m,{}):void 0,disabled:!t&&g||x,onClick:()=>f(e.id),onDelete:e.custom?()=>D(e):void 0,sx:{border:`1px solid`,borderColor:t?`primary.main`:`text.secondary`,bgcolor:t?void 0:`action.hover`,fontWeight:t?600:400}})},e.id)})}),n(I,{variant:`caption`,sx:{display:`block`,mt:.5,opacity:.7},children:L.t(`custom_assistant_wake_word_hint`)}),T?n(h,{severity:`warning`,sx:{mt:1},action:N(ee,{children:[n(R,{color:`inherit`,size:`small`,onClick:()=>void ce(T),children:L.t(`custom_assistant_Delete`)}),n(R,{color:`inherit`,size:`small`,onClick:()=>D(null),children:L.t(`custom_assistant_Cancel`)})]}),children:L.t(`custom_assistant_delete_wake_word_confirm`,T.phrase)}):null,n(`input`,{ref:_,type:`file`,accept:`.tflite,.json`,multiple:!0,style:{display:`none`},onChange:e=>{se(e.target.files),e.target.value=``}}),v?N(j,{sx:{mt:1,p:1.5,border:`1px solid`,borderColor:`divider`,borderRadius:1,display:`flex`,flexDirection:`column`,gap:1},children:[N(I,{variant:`caption`,sx:{opacity:.7},children:[v.fileName,v.configName?` + ${v.configName}`:``]}),n(k,{size:`small`,fullWidth:!0,autoFocus:!0,label:L.t(`custom_assistant_Wake word phrase`),helperText:L.t(`custom_assistant_wake_word_phrase_hint`),value:v.phrase,onChange:e=>y({...v,phrase:e.target.value}),onKeyDown:e=>{e.key===`Enter`&&v.phrase.trim()&&M()}}),N(j,{sx:{display:`flex`,gap:1,justifyContent:`flex-end`},children:[n(R,{size:`small`,disabled:x,onClick:()=>y(null),children:L.t(`custom_assistant_Cancel`)}),n(R,{size:`small`,variant:`contained`,disabled:x||!v.phrase.trim(),startIcon:x?n(O,{size:14}):n(c,{}),onClick:()=>void M(),children:L.t(`custom_assistant_Upload`)})]})]}):n(A,{title:L.t(`custom_assistant_wake_word_upload_hint`),children:n(R,{size:`small`,variant:`outlined`,sx:{mt:1},startIcon:n(c,{}),disabled:x,onClick:()=>{var e;return(e=_.current)==null?void 0:e.click()},children:L.t(`custom_assistant_Upload own wake word`)})}),C?n(h,{severity:C.severity,sx:{mt:1},onClose:()=>w(null),children:C.text}):null]}):null,u!=null&&(i=u.words)!=null&&i.length&&F.size?n(ne,{}):null,[...F.entries()].map(([t,r])=>{var i;return N(j,{sx:{display:`flex`,flexDirection:`column`,gap:1},children:[r.length>1?n(I,{variant:`subtitle2`,sx:{opacity:.8},children:((i=e.groupNames)==null?void 0:i[t])||t}):null,ap(r)?le(t,r):r.map(de)]},t)}),!F.size&&!u?n(I,{variant:`body2`,sx:{opacity:.7},children:L.t(`custom_assistant_This satellite exposes no settings.`)}):null]})}),n(xe,{children:n(R,{onClick:e.onClose,children:L.t(`custom_assistant_Close`)})})]})}var cp={},lp=Object.assign({"./i18n/de.json":B,"./i18n/en.json":V,"./i18n/es.json":H,"./i18n/fr.json":U,"./i18n/it.json":W,"./i18n/nl.json":G,"./i18n/pl.json":K,"./i18n/pt.json":Qs,"./i18n/ru.json":nl,"./i18n/uk.json":su,"./i18n/zh-cn.json":fd});for(let[e,t]of Object.entries(lp)){var up;let n=((up=e.split(`/`).pop())==null?void 0:up.replace(`.json`,``))||`en`;cp[n]=t.default}L.extendTranslations(cp);var dp={idle:`default`,listening:`info`,processing:`warning`,speaking:`success`,offline:`error`},fp=`__all__`,pp=class extends z{constructor(e){super(e),g(this,`pattern`,``),g(this,`onState`,(e,t)=>{this.setState(n=>{let r={...n.sats},i=this.parse(e);i&&r[i.satId]&&(r[i.satId]={...r[i.satId]}),this.applyToMap(r,e,t);let a={...n.vals};return this.applyToVals(a,e,t),{sats:r,vals:a}})}),this.state={...this.state,sats:{},speak:{},vals:{},settingsFor:null,settingsObjects:{},settingsGroupNames:{},settingsLoading:!1,confirmDelete:null,deleteError:``}}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){super.componentDidMount(),this.pattern=`${this.instanceId}.satellites.*`;try{let e=await this.props.oContext.socket.getForeignStates(this.pattern),t={},n={};for(let[r,i]of Object.entries(e||{}))this.applyToMap(t,r,i),this.applyToVals(n,r,i);this.setState({sats:t,vals:n})}catch{}this.props.oContext.socket.subscribeState(this.pattern,this.onState)}componentWillUnmount(){var e;this.pattern&&this.props.oContext.socket.unsubscribeState(this.pattern,this.onState),(e=super.componentWillUnmount)==null||e.call(this)}parse(e){let t=`${this.instanceId}.satellites.`;if(!e.startsWith(t))return null;let n=e.slice(t.length),r=n.indexOf(`.`);return r<0?null:{satId:n.slice(0,r),prop:n.slice(r+1)}}applyToMap(e,t,n){let r=this.parse(t);if(!r)return;let i=e[r.satId]||{status:`idle`,room:``,host:``,alive:!1,lastSeen:0};r.prop===`status`?i.status=String((n==null?void 0:n.val)??`idle`):r.prop===`room`?i.room=String((n==null?void 0:n.val)??``):r.prop===`host`?i.host=String((n==null?void 0:n.val)??``):r.prop===`alive`?i.alive=!!(n!=null&&n.val):r.prop===`lastSeen`&&(i.lastSeen=Number(n==null?void 0:n.val)||0),e[r.satId]=i}applyToVals(e,t,n){let r=this.parse(t);r&&(e[r.satId]={...e[r.satId]||{},[r.prop]:(n==null?void 0:n.val)??null})}async openSettings(e){this.setState({settingsFor:e,settingsObjects:{},settingsLoading:!0});let t=`${this.instanceId}.satellites.${e}.`;try{let e=await this.props.oContext.socket.getForeignObjects(`${t}controls.*`,`state`),r={};for(let[n,i]of Object.entries(e||{}))i!=null&&i.common&&(r[n.slice(t.length)]=i);let i=await this.props.oContext.socket.getForeignObjects(`${t}controls.*`,`channel`).catch(()=>({})),a={},o=L.getLanguage();for(let[e,r]of Object.entries(i||{})){var n;let i=r==null||(n=r.common)==null?void 0:n.name,s=typeof i==`string`?i:i&&(i[o]||i.en)||``;s&&(a[e.slice(`${t}controls.`.length)]=s)}this.setState({settingsObjects:r,settingsGroupNames:a,settingsLoading:!1})}catch{this.setState({settingsLoading:!1})}}writeSetting(e,t,n){this.props.oContext.socket.setState(`${this.instanceId}.satellites.${e}.${t}`,{val:n,ack:!1}).catch(()=>{})}announce(e){let t=(this.state.speak[e]||``).trim();if(!t)return;let n=e===fp?`${this.instanceId}.tts.text`:`${this.instanceId}.satellites.${e}.tts`;this.props.oContext.socket.setState(n,{val:t,ack:!1}).catch(()=>{}),this.setState(t=>({speak:{...t.speak,[e]:``}}))}async deleteSatellite(e){try{let t=await this.props.oContext.socket.sendTo(this.instanceId,`deleteSatellite`,{id:e});if(t!=null&&t.error){this.setState({deleteError:t.error});return}}catch(e){this.setState({deleteError:String((e==null?void 0:e.message)||e)});return}this.setState(t=>{let n={...t.sats},r={...t.vals};return delete n[e],delete r[e],{sats:n,vals:r,confirmDelete:null,deleteError:``}})}ago(e){if(!e)return`—`;let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t} s`:t<3600?`${Math.round(t/60)} min`:t<86400?`${Math.round(t/3600)} h`:`${Math.round(t/86400)} d`}renderComposer(e,t){let r=this.state.speak[e]||``;return N(j,{sx:{display:`flex`,alignItems:`center`,gap:.5},children:[n(k,{size:`small`,variant:`outlined`,placeholder:t,value:r,onChange:t=>this.setState(n=>({speak:{...n.speak,[e]:t.target.value}})),onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),this.announce(e))},sx:{minWidth:180}}),n(A,{title:L.t(`custom_assistant_Send announcement`),children:n(`span`,{children:n(l,{size:`small`,color:`primary`,disabled:!r.trim(),onClick:()=>this.announce(e),children:n(y,{})})})})]})}renderItem(){var e;let t=Object.keys(this.state.sats).sort();return N(j,{sx:{width:`100%`},children:[N(j,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[n(I,{variant:`h6`,children:L.t(`custom_assistant_Satellites`)}),t.length?this.renderComposer(fp,L.t(`custom_assistant_Speak on all satellites`)):null]}),t.length?N(D,{size:`small`,sx:{"& td, & th":{px:1}},children:[n(_e,{children:N(me,{children:[n(r,{}),n(r,{children:L.t(`custom_assistant_Satellite`)}),n(r,{children:L.t(`custom_assistant_room`)}),n(r,{children:L.t(`custom_assistant_Host`)}),n(r,{children:L.t(`custom_assistant_Status`)}),n(r,{children:L.t(`custom_assistant_Last seen`)}),n(r,{children:L.t(`custom_assistant_Announcement`)}),n(r,{})]})}),n(v,{children:t.map(e=>{let t=this.state.sats[e];return N(me,{children:[n(r,{sx:{width:24},children:n(A,{title:t.alive?L.t(`custom_assistant_online`):L.t(`custom_assistant_offline`),children:n(o,{sx:{fontSize:`0.8rem`,color:t.alive?`success.main`:`error.main`}})})}),n(r,{children:e}),n(r,{children:t.room||`—`}),n(r,{children:t.host||`—`}),n(r,{children:n(P,{size:`small`,variant:`outlined`,color:dp[t.status]||`default`,label:L.t(`custom_assistant_sat_${t.status}`)})}),n(r,{children:n(A,{title:t.lastSeen?new Date(t.lastSeen).toLocaleString():``,children:n(`span`,{children:this.ago(t.lastSeen)})})}),n(r,{children:this.renderComposer(e,L.t(`custom_assistant_Type a message…`))}),n(r,{sx:{width:40},children:t.alive?n(A,{title:L.t(`custom_assistant_Device settings`),children:n(l,{size:`small`,onClick:()=>void this.openSettings(e),children:n(s,{})})}):n(A,{title:L.t(`custom_assistant_Remove satellite`),children:n(l,{size:`small`,onClick:()=>this.setState({confirmDelete:e,deleteError:``}),children:n(u,{})})})})]},e)})})]}):n(I,{sx:{p:2,opacity:.7},variant:`body2`,children:L.t(`custom_assistant_No satellites registered yet.`)}),this.state.settingsFor?n(sp,{instanceId:this.instanceId,satId:this.state.settingsFor,room:((e=this.state.sats[this.state.settingsFor])==null?void 0:e.room)||``,values:this.state.vals[this.state.settingsFor]||{},objects:this.state.settingsObjects,groupNames:this.state.settingsGroupNames,loading:this.state.settingsLoading,onWrite:(e,t)=>this.writeSetting(this.state.settingsFor,e,t),sendTo:(e,t)=>this.props.oContext.socket.sendTo(this.instanceId,e,t),onClose:()=>this.setState({settingsFor:null,settingsObjects:{},settingsGroupNames:{}})}):null,N(oe,{open:!!this.state.confirmDelete,onClose:()=>this.setState({confirmDelete:null,deleteError:``}),children:[n(be,{children:L.t(`custom_assistant_Remove satellite`)}),N(te,{children:[n(I,{variant:`body2`,children:L.t(`custom_assistant_Remove satellite %s and all its states?`,this.state.confirmDelete||``)}),n(I,{variant:`body2`,sx:{mt:1,opacity:.7},children:L.t(`custom_assistant_A satellite that is still configured appears again when it connects.`)}),this.state.deleteError?n(I,{variant:`body2`,color:`error`,sx:{mt:1},children:this.state.deleteError}):null]}),N(xe,{children:[n(R,{color:`error`,variant:`contained`,onClick:()=>void this.deleteSatellite(this.state.confirmDelete),children:L.t(`custom_assistant_Delete`)}),n(R,{onClick:()=>this.setState({confirmDelete:null,deleteError:``}),children:L.t(`custom_assistant_Cancel`)})]})]})]})}},mp={},hp=Object.assign({"./i18n/de.json":B,"./i18n/en.json":V,"./i18n/es.json":H,"./i18n/fr.json":U,"./i18n/it.json":W,"./i18n/nl.json":G,"./i18n/pl.json":K,"./i18n/pt.json":Qs,"./i18n/ru.json":nl,"./i18n/uk.json":su,"./i18n/zh-cn.json":fd});for(let[e,t]of Object.entries(hp)){var gp;let n=((gp=e.split(`/`).pop())==null?void 0:gp.replace(`.json`,``))||`en`;mp[n]=t.default}L.extendTranslations(mp);var _p={de:`Hallo, ich bin dein ioBroker-Assistent. Im Wohnzimmer sind es 21,5 Grad.`,en:`Hello, I'm your ioBroker assistant. It is 21.5 degrees in the living room.`,ru:`Привет, я твой ассистент ioBroker. В гостиной 21,5 градуса.`,fr:`Bonjour, je suis ton assistant ioBroker. Il fait 21,5 degrés dans le salon.`,it:`Ciao, sono il tuo assistente ioBroker. In soggiorno ci sono 21,5 gradi.`,es:`Hola, soy tu asistente de ioBroker. En el salón hace 21,5 grados.`,nl:`Hallo, ik ben je ioBroker-assistent. In de woonkamer is het 21,5 graden.`,pl:`Cześć, jestem twoim asystentem ioBroker. W salonie jest 21,5 stopnia.`,pt:`Olá, sou o teu assistente ioBroker. Na sala estão 21,5 graus.`,uk:`Привіт, я твій асистент ioBroker. У вітальні 21,5 градуса.`,"zh-cn":`你好,我是你的 ioBroker 助手。客厅现在是 21.5 度。`},vp=16e3,yp=15e3;function bp(e,t){let n=e.reduce((e,t)=>e+t.length,0),r=new Float32Array(n),i=0;for(let t of e)r.set(t,i),i+=t.length;let a=t/vp,o=Math.floor(n/a),s=new DataView(new ArrayBuffer(44+o*2)),c=(e,t)=>[...t].forEach((t,n)=>s.setUint8(e+n,t.charCodeAt(0)));c(0,`RIFF`),s.setUint32(4,36+o*2,!0),c(8,`WAVE`),c(12,`fmt `),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,1,!0),s.setUint32(24,vp,!0),s.setUint32(28,vp*2,!0),s.setUint16(32,2,!0),s.setUint16(34,16,!0),c(36,`data`),s.setUint32(40,o*2,!0);for(let e=0;e<o;e++){let t=e*a,n=Math.floor(t),i=r[n]+((r[n+1]??r[n])-r[n])*(t-n);s.setInt16(44+e*2,Math.max(-1,Math.min(1,i))*32767,!0)}return new Uint8Array(s.buffer)}function xp(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}var Sp={DeviceAclComponent:Sf,ChatComponent:Yf,LocalLlmProgress:ep,SatellitesComponent:pp,VoiceTestComponent:class extends z{constructor(e){super(e),g(this,`aliveId`,``),g(this,`audio`,null),g(this,`recorder`,null),g(this,`fileInput`,null),g(this,`onAlive`,(e,t)=>{this.setState({alive:!!(t!=null&&t.val)})}),g(this,`test`,async()=>{this.stop(),this.setState({busy:!0,result:null});let e=await this.synthesize(this.sentence);this.setState({busy:!1,result:e}),e.audio&&this.play(e)}),g(this,`roundTrip`,async()=>{let e=this.sentence;this.setState({sttBusy:`roundTrip`,sttResult:null});let t=await this.synthesize(e);if(!t.audio){this.setState({sttBusy:``,sttResult:{error:t.error||L.t(`custom_assistant_No answer`)}});return}let n=await this.transcribe(t.audio,`wav`);this.setState({sttBusy:``,sttResult:{...n,spoken:e}})}),g(this,`startRecording`,async()=>{this.setState({sttResult:null});try{let e=await navigator.mediaDevices.getUserMedia({audio:!0}),t=new AudioContext,n=t.createMediaStreamSource(e),r=t.createScriptProcessor(4096,1,1),i=[];r.onaudioprocess=e=>i.push(new Float32Array(e.inputBuffer.getChannelData(0))),n.connect(r),r.connect(t.destination);let a=setTimeout(()=>void this.stopRecording(),yp);this.recorder={context:t,stream:e,node:r,chunks:i,timer:a},this.setState({recording:!0})}catch(e){this.setState({sttResult:{error:e.message}})}}),g(this,`stopRecording`,async()=>{let e=this.closeRecorder();if(this.setState({recording:!1}),!(e!=null&&e.chunks.length))return;this.setState({sttBusy:`record`});let t=await this.transcribe(xp(bp(e.chunks,e.rate)),`wav`);this.setState({sttBusy:``,sttResult:t})}),g(this,`onFile`,async e=>{var t;let n=(t=e.target.files)==null?void 0:t[0];if(e.target.value=``,!n)return;this.setState({sttBusy:`file`,sttResult:null});let r=new Uint8Array(await n.arrayBuffer()),i=(n.name.split(`.`).pop()||``).toLowerCase(),a=await this.transcribe(xp(r),i);this.setState({sttBusy:``,sttResult:a})}),this.state={...this.state,alive:!1,text:``,busy:!1,playing:!1,result:null,sttBusy:``,recording:!1,sttResult:null}}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}get language(){let e=this.props.data;return String(e.voiceLanguage||L.getLanguage()||`en`)}get sentence(){return this.state.text.trim()||_p[this.language]||_p.en}async componentDidMount(){super.componentDidMount(),this.aliveId=`system.adapter.${this.instanceId}.alive`;let e=this.props.oContext.socket;try{let t=await e.getState(this.aliveId);this.setState({alive:!!(t!=null&&t.val)})}catch{}e.subscribeState(this.aliveId,this.onAlive)}componentWillUnmount(){var e;this.aliveId&&this.props.oContext.socket.unsubscribeState(this.aliveId,this.onAlive),this.stop(),this.closeRecorder(),(e=super.componentWillUnmount)==null||e.call(this)}stop(){this.audio&&=(this.audio.pause(),null),this.state.playing&&this.setState({playing:!1})}synthesize(e){return this.props.oContext.socket.sendTo(this.instanceId,`tts`,{text:e,language:this.language,config:this.props.data}).then(e=>e||{error:L.t(`custom_assistant_No answer`)}).catch(e=>({error:e.message}))}transcribe(e,t){return this.props.oContext.socket.sendTo(this.instanceId,`stt`,{audio:e,format:t,language:this.language,config:this.props.data}).then(e=>e||{error:L.t(`custom_assistant_No answer`)}).catch(e=>({error:e.message}))}play(e){let t=new Audio(`data:${e.mime||`audio/wav`};base64,${e.audio}`);t.onended=()=>this.stop(),t.onerror=()=>this.stop(),this.audio=t,this.setState({playing:!0}),t.play().catch(t=>{this.stop(),this.setState({result:{...e,error:t.message}})})}closeRecorder(){let e=this.recorder;if(!e)return null;this.recorder=null,clearTimeout(e.timer),e.node.disconnect(),e.stream.getTracks().forEach(e=>e.stop());let t=e.context.sampleRate;return e.context.close(),{chunks:e.chunks,rate:t}}renderTtsResult(){let e=this.state.result;if(!e)return null;if(e.error)return n(I,{variant:`body2`,color:`error`,sx:{wordBreak:`break-word`},children:e.error});let t=[e.sampleRate?`${e.sampleRate} Hz`:``,e.audioMs===void 0?``:L.t(`custom_assistant_%s s audio`,(e.audioMs/1e3).toFixed(1)),e.ms===void 0?``:L.t(`custom_assistant_made in %s ms`,e.ms)].filter(Boolean);return n(I,{variant:`body2`,sx:{opacity:.7},children:t.join(` · `)})}renderSttResult(){let e=this.state.sttResult;if(!e)return null;if(e.error)return n(I,{variant:`body2`,color:`error`,sx:{wordBreak:`break-word`},children:e.error});let t=[e.audioMs===void 0?``:L.t(`custom_assistant_%s s audio`,(e.audioMs/1e3).toFixed(1)),e.ms===void 0?``:L.t(`custom_assistant_recognized in %s ms`,e.ms)].filter(Boolean);return N(j,{children:[e.spoken?N(I,{variant:`body2`,children:[L.t(`custom_assistant_Spoken`),`: „`,e.spoken,`“`]}):null,N(I,{variant:`body2`,children:[L.t(`custom_assistant_Recognized`),`:`,` `,e.text?`„${e.text}“`:n(`i`,{children:L.t(`custom_assistant_Nothing recognized`)})]}),n(I,{variant:`body2`,sx:{opacity:.7},children:t.join(` · `)})]})}renderItem(){var e;let{alive:t,busy:r,playing:i,text:a,sttBusy:o,recording:s}=this.state,l=window.isSecureContext&&!!((e=navigator.mediaDevices)!=null&&e.getUserMedia),u=!t||!!o,d=(e,t)=>o===e?n(O,{size:16}):t;return N(j,{sx:{width:`100%`,mt:1,mb:1},children:[n(I,{variant:`subtitle2`,sx:{mb:.5},children:L.t(`custom_assistant_Speech output`)}),N(j,{sx:{display:`flex`,alignItems:`center`,gap:1},children:[n(k,{variant:`standard`,fullWidth:!0,value:a,placeholder:_p[this.language]||_p.en,label:L.t(`custom_assistant_Test sentence`),onChange:e=>this.setState({text:e.target.value}),onKeyDown:e=>{e.key===`Enter`&&t&&!r&&this.test()}}),n(R,{variant:`contained`,sx:{whiteSpace:`nowrap`,flexShrink:0},disabled:!t||r,startIcon:r?n(O,{size:16}):n(i?w:pe,{}),onClick:()=>i?this.stop():void this.test(),children:L.t(i?`custom_assistant_Stop`:`custom_assistant_Test voice`)})]}),n(j,{sx:{mt:.5},children:this.renderTtsResult()}),n(I,{variant:`subtitle2`,sx:{mt:2,mb:.5},children:L.t(`custom_assistant_Speech recognition`)}),N(j,{sx:{display:`flex`,flexWrap:`wrap`,gap:1},children:[l?n(R,{variant:s?`contained`:`outlined`,color:s?`error`:`primary`,disabled:!t||!!o&&!s,startIcon:d(`record`,n(s?w:Se,{})),onClick:()=>void(s?this.stopRecording():this.startRecording()),children:L.t(s?`custom_assistant_Stop`:`custom_assistant_Record`)}):null,n(R,{variant:`outlined`,disabled:u||s,startIcon:d(`file`,n(c,{})),onClick:()=>{var e;return(e=this.fileInput)==null?void 0:e.click()},children:L.t(`custom_assistant_Audio file`)}),n(R,{variant:`outlined`,disabled:u||s,startIcon:d(`roundTrip`,n(f,{})),onClick:()=>void this.roundTrip(),children:L.t(`custom_assistant_Speak the test sentence and recognize it`)}),n(`input`,{ref:e=>{this.fileInput=e},type:`file`,accept:`audio/*`,style:{display:`none`},onChange:e=>void this.onFile(e)})]}),l?null:n(I,{variant:`body2`,sx:{opacity:.7,mt:.5},children:L.t(`custom_assistant_The microphone only works over https or on localhost.`)}),n(j,{sx:{mt:.5},children:this.renderSttResult()}),t?null:n(I,{variant:`body2`,sx:{opacity:.7,mt:1},children:L.t(`custom_assistant_The instance must be running to test the voice.`)})]})}}};export{Sp as default};