iobroker.assistant 1.2.0 → 1.3.0
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.
- package/README.md +11 -0
- package/admin/custom/.vite/manifest.json +18 -18
- package/admin/custom/assets/Components-x2Dfv8qE.js +2 -0
- package/admin/custom/assets/{_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-C5NPM0Of.js → _virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-B4YbqhBb.js} +1 -1
- package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Cdyjt5KT.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-o4EU_Ut5.js} +10 -10
- package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare__shared-Dsw5zWS8.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare__shared--be2hWbV.js} +1 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BsTz_EWE.js +122 -0
- package/admin/custom/assets/{hostInit-jJe8bIfV.js → hostInit-Blh7a-Qe.js} +1 -1
- package/admin/custom/assets/{lib-CL8mXvI6.js → lib-DBbNtolG.js} +1 -1
- package/admin/custom/assets/{mf-entry-bootstrap-0-ab227aa6.js → mf-entry-bootstrap-0-7abd30d3.js} +2 -2
- package/admin/custom/assets/{pendingShares-wrGtfliQ.js → pendingShares-U0D1MYK4.js} +1 -1
- package/admin/custom/customComponents.js +2 -2
- package/admin/custom/i18n/de.json +16 -0
- package/admin/custom/i18n/en.json +16 -0
- package/admin/custom/i18n/es.json +16 -0
- package/admin/custom/i18n/fr.json +16 -0
- package/admin/custom/i18n/it.json +16 -0
- package/admin/custom/i18n/nl.json +16 -0
- package/admin/custom/i18n/pl.json +16 -0
- package/admin/custom/i18n/pt.json +16 -0
- package/admin/custom/i18n/ru.json +16 -0
- package/admin/custom/i18n/uk.json +16 -0
- package/admin/custom/i18n/zh-cn.json +16 -0
- package/admin/custom/index.html +2 -2
- package/admin/custom/mf-manifest.json +1 -1
- package/admin/custom/mf-stats.json +1 -1
- package/admin/i18n/de.json +25 -2
- package/admin/i18n/en.json +25 -2
- package/admin/i18n/es.json +25 -2
- package/admin/i18n/fr.json +25 -2
- package/admin/i18n/it.json +25 -2
- package/admin/i18n/nl.json +25 -2
- package/admin/i18n/pl.json +25 -2
- package/admin/i18n/pt.json +25 -2
- package/admin/i18n/ru.json +25 -2
- package/admin/i18n/uk.json +25 -2
- package/admin/i18n/zh-cn.json +25 -2
- package/admin/jsonConfig.json +197 -13
- package/build/lib/credentials.js +11 -5
- package/build/lib/credentials.js.map +1 -1
- package/build/lib/llm.js +17 -3
- package/build/lib/llm.js.map +1 -1
- package/build/lib/nlu.js +249 -9
- package/build/lib/nlu.js.map +1 -1
- package/build/lib/piAgent.js +89 -0
- package/build/lib/piAgent.js.map +1 -0
- package/build/lib/systemAi.js +124 -0
- package/build/lib/systemAi.js.map +1 -0
- package/build/lib/voice/engines.js +31 -3
- package/build/lib/voice/engines.js.map +1 -1
- package/build/lib/voice/openrouter.js +220 -0
- package/build/lib/voice/openrouter.js.map +1 -0
- package/build/main.js +573 -59
- package/build/main.js.map +1 -1
- package/io-package.json +27 -17
- package/package.json +1 -1
- package/admin/custom/assets/Components-BSewCBfS.js +0 -2
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-SgSagTOv.js +0 -122
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "assistant",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.3.0": {
|
|
7
|
+
"en": "Commands for later: \"turn off the light in 2 hours\" or \"blinds to 50 % at 10 pm\" becomes an event in the calendar (fullcalendar adapter) instead of running now; the AI can plan, list and cancel events. Before, the rule engine switched such commands at once. Needs a fullcalendar version with the new event API (after 3.0.5)\nSettings: the state of a presence row is picked with the object browser, the kind of a presence row or announcement target is a dropdown\nNew provider \"System-wide AI settings (admin)\", the default for new instances: provider, model and key come from the AI settings of the admin system settings, a change there restarts the instance. An instance without a key of its own takes them too\nNew provider OpenRouter\nOpenRouter for speech recognition and voice: one key for the speech models of many vendors (Whisper, Deepgram, ElevenLabs, Gemini TTS, …), models and voices are listed in the settings (default voice model: ElevenLabs Flash v2.5)\nVoice test on the Voice tab: speak a test sentence, and test speech recognition with the browser microphone, an audio file or a round trip, all with the unsaved settings\n\"Confirm switch commands with a tone\" now also covers commands the AI (or pi-agent) carried out\nSpelled-out numbers up to 100 in commands (\"Lautstärke auf fünfzig Prozent\", \"twenty five percent\", \"двадцать пять процентов\"), and the AI sees the volume of each voice satellite, so it no longer turns up a media device of the room instead\nNew provider \"Adapter pi-agent\": the durable agent of the pi-agent adapter answers what the local tiers cannot, with one conversation per satellite/chat",
|
|
8
|
+
"de": "Befehle für später: „Mach das Licht in 2 Stunden aus“ oder „Um 22 Uhr auf 50%“ wird ein Ereignis im Kalender (Fullcalendar Adapter) statt jetzt; die KI kann Termine planen, auflisten und stornieren. Vorher hat das Rule Engine die Befehle sofort geändert. Benötigt eine Vollversion mit neuer Event-API (nach 3.0.5)\nEinstellungen: Der Status einer Präsenzzeile wird im Objektbrowser ausgewählt, ein Dropdown\nNeuer Anbieter „Systemweite KI-Einstellungen (admin)“, Standard für neue Instanzen: Anbieter, Modell und Schlüssel stammen aus den KI-Einstellungen. Eine Änderung dort startet die Instanz neu. Eine Instanz ohne eigenen Schlüssel nimmt sie auch\nNeuer Anbieter OpenRouter\nOpenRouter für Spracherkennung und Stimme: eine Taste für Sprachmodelle vieler Anbieter (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), Modelle und Stimmen sind in den Einstellungen aufgeführt (Standardmodell: ElevenLabs Flash v2.5)\nSprachtest im Tab Voice: Testsatz sprechen und Spracherkennung mit dem Browsermikrofon, Audiodatei oder Hin- und Rückfahrt testen, alles mit ungespeicherten Einstellungen\n„Schaltbefehle mit Ton bestätigen“ umfasst nun auch Befehle der KI (oder Pi-Agent)\nBuchstabiert Zahlen bis zu 100 in Befehlen („Lautstärke auf fünfzig Prozent“, „fünfundzwanzig Prozent“, „und die KI sieht die Lautstärke jedes Sprachsatelliten, also nicht mehr das Mediengerät des Raums)\nNeuer Anbieter „Adapter Pi-Agent“: Der dauerhafte Agent beantwortet, was lokale Ebenen nicht können, mit einem Gespräch pro Satellit/Chat",
|
|
9
|
+
"ru": "Команды на потом: «выключить свет через 2 часа» или «заглушить до 50% в 22:00» становятся событием в календаре (адаптер fullcalendar), а не запускаются сейчас; искусственный интеллект может планировать, перечислять и отменять события. Раньше движок правил сразу переключал такие команды. Требуется полная версия календаря с новым API событий (после версии 3.0.5)\nНастройки: состояние строки присутствия выбирается в браузере объектов, тип строки присутствия или цели объявления — выпадающий список\nНовый поставщик «Общесистемные настройки искусственного интеллекта (admin)», используемый по умолчанию для новых инстансов: поставщик, модель и ключ берутся из настроек искусственного интеллекта в настройках системы администратора, изменение которых перезапускает экземпляр. Инстанс, не имеющий собственного ключа, тоже принимает их\nНовый провайдер OpenRouter\nOpenRouter для распознавания речи и голоса: одна клавиша для речевых моделей многих производителей (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), модели и голоса указаны в настройках (модель голоса по умолчанию: ElevenLabs Flash v2.5)\nТест голоса на вкладке «Голос»: произнесите тестовое предложение и протестируйте распознавание речи с помощью микрофона браузера, аудиофайла или поездки туда и обратно — и все это с несохраненными настройками\n«Подтверждение команд переключателя тональным сигналом» теперь также охватывает команды, выполняемые искусственным интеллектом (или pi-agent)\nПрописанные в командах цифры до 100 («Lautstärke auf fünfzig Prozent», «двадцать пять процентов», «двадцать пять процентов»), а искусственный интеллект видит громкость каждого голосового спутника, поэтому он больше не включает мультимедийное устройство комнаты\nНовый провайдер «Adapter pi-agent»: надежный агент адаптера pi-agent отвечает на проблемы локальных уровней: один разговор на спутник/чат",
|
|
10
|
+
"pt": "Comandos para mais tarde: “apague a luz em 2 horas” ou “cega até 50% às 22h” se torna um evento no calendário em vez de rodar agora; a IA pode planejar, listar e cancelar eventos. Antes, o motor de regras trocava esses comandos de uma vez. Requer uma agenda completa com a nova API de eventos (após 3.0.5)\nConfigurações: o estado de uma linha de presença é escolhido com o navegador de objetos; o tipo de alvo do anúncio é suspenso\nO novo provedor “System-wide AI settings (admin)”, o padrão para novas instâncias: provedor, modelo e chave vêm das configurações de IA do sistema de administração. Uma instância sem chave própria também os usa\nNovo provedor OpenRouter\nOpenRouter para reconhecimento de voz e voz: uma chave para os modelos de voz de vários fornecedores (Whisper, Deepgram, ElevenLabs, Gemini TTS,...) (modelo de voz padrão: ElevenLabs Flash v2.5)\nTeste de voz na guia Voz: fale uma frase e teste o reconhecimento de voz com o microfone do navegador, um arquivo de áudio ou ida e volta, tudo sem salvar\n“Confirme comandos de switch com um tom” agora também inclui comandos executados por AI\nNúmeros soletrados de até 100 em comandos (“Lautstärke auf fünfzig Prozent”, “vinte e cinco por cento”, “”) e a IA vê o volume de cada satélite de voz, então não ativa mais um dispositivo de mídia da sala\nNovo provedor “Adapter pi-agent”: o agente durável do adaptador pi-agent responde o que os níveis locais não conseguem, com uma conversa por satélite/chat",
|
|
11
|
+
"nl": "Opdrachten voor later: „doe het licht uit over 2 uur” of „verblindt tot 50% om 22.00 uur” wordt een gebeurtenis in de agenda (adapter voor volledige agenda) in plaats van nu actief; de AI kan evenementen plannen, opsommen en annuleren. Vroeger schakelde de rule engine dergelijke commando's tegelijk om. Heeft een volledige kalenderversie nodig met de nieuwe API voor evenementen (na 3.0.5)\nInstellingen: de status van een aanwezigheidsrij wordt bepaald met de objectbrowser, het soort aanwezigheidsrij of aankondigingsdoel is een dropdown\nNieuwe provider „Systeembrede AI-instellingen (admin)”, de standaardinstelling voor nieuwe instanties: provider, model en sleutel zijn afkomstig van de AI-instellingen van de instellingen van het beheersysteem, een wijziging daar wordt de instance opnieuw gestart. Voor een exemplaar zonder eigen sleutel zijn ze ook nodig\nNieuwe provider OpenRouter\nOpenRouter voor spraakherkenning en spraak: één sleutel voor de spraakmodellen van veel leveranciers (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), modellen en stemmen worden vermeld in de instellingen (standaard stemmodel: ElevenLabs Flash v2.5)\nStemtest op het tabblad Stem: spreek een testzin uit en test de spraakherkenning met de microfoon van de browser, een audiobestand of een rondreis, allemaal met de instellingen die niet zijn opgeslagen\n„Schakelopdrachten met een toon bevestigen” omvat nu ook opdrachten die de AI (of pi-agent) heeft uitgevoerd\nGespelde getallen tot 100 in opdrachten („Lautstärke auf fünfzig Prozent”, „vijfentwintig procent”, „”), en de AI ziet het volume van elke spraaksatelliet, zodat in plaats daarvan niet langer een media-apparaat van de kamer wordt ingeschakeld\nNieuwe provider „Adapter pi-Agent”: de duurzame agent van de pi-Agent-adapter beantwoordt wat de lokale niveaus niet kunnen, met één gesprek per satelliet/chat",
|
|
12
|
+
"fr": "Commandes pour plus tard : « Éteignez la lumière dans 2 heures » ou « Les stores à 50 % à 22 h » sont ajoutés au calendrier (adaptateur complet) au lieu d'être lancé. L'IA peut planifier, lister et annuler des événements. Avant, le moteur de règles changeait ces commandes en même temps. A besoin d'un calendrier complet avec la nouvelle API (après 3.0.5)\nParamètres : l'état d'une ligne de présence est choisi avec le navigateur d'objets, le type de ligne de présence ou de cible d'annonce est un menu déroulant\nNouveau fournisseur « Paramètres d'IA à l'échelle du système (admin) », par défaut pour les nouvelles instances : le fournisseur, le modèle et la clé proviennent des paramètres d'IA du système d'administration. Une instance sans clé en a besoin aussi\nOpenRouter, nouveau hébergeur\nOpenRouter pour la reconnaissance vocale et la voix : une touche pour les modèles vocaux de nombreux fournisseurs (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), les modèles et les voix sont listés dans les paramètres (modèle vocal par défaut : ElevenLabs Flash v2.5)\nTest vocal sur l'onglet Voix : prononcez une phrase et testez la reconnaissance vocale avec le micro du navigateur, un fichier audio ou un aller-retour, le tout avec des paramètres non enregistrés\n« Confirmer les commandes par une tonalité » couvre désormais les commandes exécutées par l'IA (ou pi)\nChiffres épelés jusqu'à 100 dans les commandes (« Lautstärke auf fünfzig Prozent », « vingt-cinq pour cent », « тататати просентов »), et l'IA voit le volume de chaque satellite vocal, donc elle n'affiche plus un appareil multimédia de la pièce\nNouveau fournisseur « Adapter pi-agent » : l'agent durable de l'adaptateur pi-agent répond à ce que les tiers locaux ne peuvent pas faire, avec une conversation par satellite/chat",
|
|
13
|
+
"it": "Comandi per dopo: «spegne la luce tra 2 ore» o «tende al 50% alle 22» diventa un evento nel calendario invece che attivo ora; l'IA può pianificare, elencare e cancellare eventi. Prima, il rule engine cambiava subito tali comandi. Serve un calendario completo con la nuova API eventi (dopo 3.0.5)\nImpostazioni: lo stato di una riga di presenza è scelto dal browser, il tipo di riga di presenza o annuncio è un menu a discesa\nNuovo provider «System-wide AI settings (admin)», predefinito per le nuove istanze: provider, modello e chiave derivano dalle impostazioni AI del sistema admin, una modifica riavvia l'istanza. Anche un'istanza senza chiave li accetta\nNuovo provider OpenRouter\nOpenRouter per riconoscimento vocale e voce: una chiave per i modelli vocali di molti fornitori (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), i modelli e le voci sono elencati nelle impostazioni\nTest vocale nella scheda Voce: pronuncia una frase e prova il riconoscimento vocale con il microfono del browser, un file audio o andata e ritorno\n«Conferma i comandi con un tono» ora include anche i comandi eseguiti dall'AI (o pi-agent)\nHa scritto fino a 100 numeri nei comandi («Lautstärke auf fünfzig Prozent», «venticinque percento») e l'IA vede il volume di ogni satellite vocale, quindi non attiva più un dispositivo multimediale della stanza\nNuovo provider «Adapter pi-agent»: l'agente duraturo risponde a ciò che i livelli locali non possono fare, con una conversazione per satellite/chat",
|
|
14
|
+
"es": "Comandos para más adelante: «apague la luz en 2 horas» o «las persianas al 50% a las 10 p.m.» pasa a ser un evento del calendario (adaptador de calendario completo) en lugar de ejecutarse ahora; la IA puede planificar, enumerar y cancelar eventos. Antes, el motor de reglas cambiaba esos comandos a la vez. Necesita una versión completa con la nueva API de eventos (tras la 3.0.5)\nAjustes: el estado de una fila de presencia se elige con el explorador de objetos, el tipo de fila de presencia o objetivo de anuncio es un menú desplegable\nNuevo proveedor «Configuración de IA en todo el sistema (admin)», por defecto para las nuevas instancias: el proveedor, el modelo y la clave provienen de la configuración de IA del sistema de administración, un cambio allí reinicia la instancia. Una instancia sin clave propia también los lleva\nNuevo proveedor OpenRouter\nOpenRouter para reconocimiento de voz y voz: una tecla para los modelos de voz de muchos proveedores (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), los modelos y las voces aparecen en la configuración (modelo de voz predeterminado: Flash v2.5)\nPrueba de voz en la pestaña Voz: diga una frase de prueba y pruebe el reconocimiento de voz con el micrófono del navegador, un archivo de audio o ida y vuelta, todo con los ajustes sin guardar\n«Confirme los comandos con un tono» ahora también incluye los comandos que ejecutó la IA (o pi-agent)\nNúmeros deletreados de hasta el 100 en los comandos («Lautstärke auf fünfzig Prozent», «veinticinco por ciento», «дваденетенененененененеененененес»), y la IA ve el volumen de cada satélite de voz, por lo que ya no muestra un dispositivo multimedia de la sala\nNuevo proveedor «Adapter pi-agent»: el agente duradero del adaptador pi-agent responde a lo que los niveles locales no pueden, con una conversación por satélite/chat",
|
|
15
|
+
"pl": "Polecenia na później: „wyłącz światło w ciągu 2 godzin” lub „osłona do 50% o 22:00,” staje się wydarzeniem w kalendarzu (adapter pełnego kalendarza) zamiast działać teraz; sztuczna inteligencja może planować, wyświetlać i anulować wydarzenia. Wcześniej silnik reguł przełączał takie polecenia od razu. Wymaga pełnej wersji kalendarza z nowym interfejsem API zdarzeń (po wersji 3.0.5)\nUstawienia: stan wiersza obecności jest wybierany za pomocą przeglądarki obiektów, rodzaj wiersza obecności lub celu ogłoszenia jest rozwijaną\nNowy dostawca „System-wide AI settings (admin)”, domyślne dla nowych instancji: dostawca, model i klucz pochodzą z ustawień AI ustawień systemu administratora, zmiana tam ponownie uruchamia instancję. Instancja bez własnego klucza też je bierze\nNowy dostawca OpenRouter\nOpenRouter do rozpoznawania mowy i głosu: jeden klucz dla modeli mowy wielu dostawców (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), modele i głosy są wymienione w ustawieniach (domyślny model głosowy: ElevenLabs Flash v2.5)\nTest głosowy na karcie Głos: wypowiedz zdanie testowe i przetestuj rozpoznawanie mowy za pomocą mikrofonu przeglądarki, pliku audio lub podróży w obie strony, wszystko z niezapisanymi ustawieniami\n„Potwierdź polecenia przełączania za pomocą tonu” obejmuje teraz również polecenia wykonywane przez AI (lub pi-agent)\nW poleceniach („Lautstärke auf fünfzig Prozent”, „dwadzieścia pięć procent”, „практидцать пять известтов”), a sztuczna inteligencja widzi głośność każdego satelity głosowego, więc zamiast tego nie wyświetla już urządzenia multimedialnego pomieszczenia\nNowy dostawca „Adapter pi-agent”: trwały agent adaptera pi-agent odpowiada na to, czego nie mogą lokalne poziomy, z jedną rozmową na satelitę/czat",
|
|
16
|
+
"uk": "Команди на потім: «вимкнути світло через 2 години» або «заблокує до 50% о 22:00» стає подією в календарі (адаптер fullcalendar) замість запуску зараз; AI може планувати, перераховувати та скасовувати події. Раніше двигун правил перемикав такі команди відразу. Потрібна повнокалендарна версія з новим API подій (після 3.0.5)\nПараметри: стан рядка присутності вибирається за допомогою браузера об'єктів, тип рядка присутності або цілі оголошення - випадаючий список\nНовий провайдер «System-wide AI settings (admin)», за замовчуванням для нових екземплярів: провайдер, модель і ключ надходять з налаштувань AI налаштувань системи адміністратора, зміна там перезавантажує екземпляр. Примірник без власного ключа також приймає їх\nНовий провайдер OpenRouter\nOpenRouter для розпізнавання мовлення та голосу: одна клавіша для мовних моделей багатьох постачальників (Whisper, Deepgram, ElevenLabs, Gemini TTS,...), моделі та голоси перераховані в налаштуваннях (голосова модель за замовчуванням: ElevenLabs Flash v2.5)\nГолосовий тест на вкладці Голос: проговоріть тестове речення та перевірте розпізнавання мовлення за допомогою мікрофона браузера, аудіофайлу або туди й назад, все з незбереженими налаштуваннями\n«Підтвердження команд перемикання тоном» тепер також охоплює команди, які виконуються AI (або pi-агентом)\nВідтворюються числа до 100 в командах («Lautstärke auf fünfzig Prozent», «двадцять п'ять відсотків», «двадцять пать процентов»), і ШІ бачить гучність кожного голосового супутника, тому він більше не виводить медіа-пристрій кімнати замість цього\nНовий провайдер «Адаптер pi-agent»: довговічний агент адаптера pi-agent відповідає на те, що локальні рівні не можуть, з однією розмовою на супутник/чат",
|
|
17
|
+
"zh-cn": "稍后命令:“2 小时后关灯” 或 “晚上 10 点盲到 50%” 将成为日历中的一个事件(完整日历适配器),而不是现在运行;AI 可以计划、列出和取消活动。以前,规则引擎会立即切换此类命令。需要带有新活动 API 的完整日历版本(3.0.5 之后)\n设置:在线状态由对象浏览器选择,在线状态行或公告目标的类型是下拉列表\n新提供商 “系统级 AI 设置(管理员)”,新实例的默认设置:提供商、型号和密钥来自管理系统设置的 AI 设置,此处的更改会重新启动实例。没有自己的密钥的实例也会使用它们\n新供应商 OpenRouter\n用于语音识别和语音的 OpenRouter:许多供应商(Whisper、Deepgram、ElevenLabs、Gemini TTS 等)的语音模型都是一把钥匙,设置中列出了模型和语音(默认语音模型:ElevenLabs Flash v2.5)\n在 “语音” 选项卡上进行语音测试:说出测试句子,使用浏览器麦克风、音频文件或往返测试语音识别,所有这些都使用未保存的设置\n“用提示音确认交换机命令” 现在还涵盖了人工智能(或 pi-agent)执行的命令\n在命令中拼出最多 100 的数字(“Lautstärke auf fünfzig Prozent”、“百分之二十五”、“百分之二十五”、“páázátán”),人工智能可以看到每颗语音卫星的音量,因此它不再显示房间的媒体设备\n新提供商 “Adapter pi-agent”:pi-agent 适配器的耐用代理可以回答本地层无法解决的问题,每个卫星/聊天只能进行一次对话"
|
|
18
|
+
},
|
|
6
19
|
"1.2.0": {
|
|
7
20
|
"en": "Own wake words for ESPHome satellites: upload a microWakeWord model in the satellite settings, the device downloads it when it is activated. Models the device cannot run (e.g. openWakeWord) are rejected on upload with the reason\nVoice answers come faster: the device list for the offline rule engine is built once and shared for a minute instead of up to three times per spoken command\nThe local LLM is now the fallback for when the cloud LLM fails; \"Ask the local model first\" restores the old order. It is stopped after a configurable timeout, answers shorter and leaves one CPU core free\nWhen an answer asks back, UDP satellites now keep the microphone open for the reply too (needs `@iobroker/assistant-satellite` 0.2.0)\n\"Louder\", \"quieter\", \"volume 5\" change the volume of the satellite that heard it - ESPHome, ioBroker-native and UDP satellites\n\"How's the weather tomorrow?\" is answered from the weather adapter without an LLM\nFixed: Russian questions with \"будет\" (\"will it be …\") were taken for alarm queries",
|
|
8
21
|
"de": "Eigene Weckwörter für ESPhome: Laden Sie ein MicroWakeWord-Modell in den Sat-Einstellungen hoch, wenn es aktiviert ist. Geräteunfähige Modelle (z. B. OpenWakeWord) werden beim Upload abgelehnt\nSprachantworten schneller: Die Geräteliste für die Offline-Regel-Engine wird einmal erstellt und eine Minute lang geteilt, statt dreimal per Sprachbefehl\nDas lokale LLM ist nun die Lösung für Cloud-LLM-Fehler. „Fragen Sie zuerst das lokale Model“ Es stoppt nach einem Timeout, antwortet kürzer und lässt einen CPU-Kern frei\nWenn eine Antwort fragt, lassen UDP-Satelliten jetzt auch das Mikrofon offen (benötigt `@iobroker /assistant-satellite` 0.2.0)\n„Lauter“, „leiser“, „Lautstärke 5“ ändern die Lautstärke des Satelliten, der es gehört hat — ESPhome, IOBroker-native und UDP-Satelliten\n„Wie ist das Wetter morgen?“ wird vom Wetteradapter ohne LLM beantwortet\nBehoben: Russische Fragen mit „Wird es...“ galten als Alarmanfragen",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Silnik reguł offline rozumie teraz łączone polecenia: „włącz światło i ustaw rolety na 30%” oraz jedno polecenie dla kilku urządzeń („włącz światło i lampę”)\nNaprawiono: „50 procent” nie było uznawane za poziom w języku angielskim\nWybrany adapter pogodowy jest teraz przekazywany do LLM jako kontekst (bieżące warunki plus dziś/jutro), dzięki czemu na pytania dotyczące pogody można uzyskać odpowiedź bez konieczności korzystania z dodatkowych narzędzi.\nLokalny LLM również otrzymuje kontekst pogodowy, więc nie musi już tworzyć prognozy\nUdokumentowano wybór źródła pogody w dokumentacji użytkownika",
|
|
81
94
|
"uk": "Механізм правил для автономного режиму тепер розуміє комбіновані команди: «увімкнути світло та встановити жалюзі на 30 %» та одне дієслово для кількох пристроїв («увімкнути світло та лампу»).\nВиправлено: «50 відсотків» не розпізнавалося як рівень в англійській мові.\nВибраний погодний адаптер тепер передається до LLM як контекст (поточні умови плюс сьогодні/завтра), тому відповіді на питання щодо погоди отримуються без використання додаткового інструменту.\nЛокальний LLM також отримує інформацію про погоду, тому він більше не створює прогноз.\nВибір джерела погоди задокументовано в документації користувача",
|
|
82
95
|
"zh-cn": "离线规则引擎现在可以理解组合命令:“打开灯并将百叶窗设置为 30%”,以及一个动词控制多个设备(“打开灯和台灯”)。\n已修复:“50%”在英语中未被识别为一个等级\n现在,选定的天气适配器会作为上下文信息(当前天气状况以及今天/明天的天气状况)提供给 LLM,因此无需额外的工具往返即可回答天气问题。\n本地LLM也能接收到天气信息,因此不再自行预测天气。\n在用户文档中记录了天气源的选择过程。"
|
|
83
|
-
},
|
|
84
|
-
"0.1.5": {
|
|
85
|
-
"en": "Corrected credentials",
|
|
86
|
-
"de": "Korrigierte Zugangsdaten",
|
|
87
|
-
"ru": "Исправлены учетные данные",
|
|
88
|
-
"pt": "Credenciais corrigidas",
|
|
89
|
-
"nl": "Gecorrigeerde inloggegevens",
|
|
90
|
-
"fr": "Identifiants corrigés",
|
|
91
|
-
"it": "Credenziali corrette",
|
|
92
|
-
"es": "Credenciales corregidas",
|
|
93
|
-
"pl": "Poprawione dane uwierzytelniające",
|
|
94
|
-
"uk": "Виправлені облікові дані",
|
|
95
|
-
"zh-cn": "更正后的凭证"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -175,7 +175,9 @@
|
|
|
175
175
|
}
|
|
176
176
|
},
|
|
177
177
|
"native": {
|
|
178
|
-
"provider": "
|
|
178
|
+
"provider": "system",
|
|
179
|
+
"piAgentInstance": "",
|
|
180
|
+
"piAgentTimeoutSec": 60,
|
|
179
181
|
"credentialType": "manual",
|
|
180
182
|
"apiKey": "",
|
|
181
183
|
"credentialIdApiKey": "",
|
|
@@ -203,6 +205,7 @@
|
|
|
203
205
|
"triggerRephrase": false,
|
|
204
206
|
"notifyRephrase": true,
|
|
205
207
|
"weatherInstance": "",
|
|
208
|
+
"calendarInstance": "",
|
|
206
209
|
"presence": [],
|
|
207
210
|
"youtubePlayers": [],
|
|
208
211
|
"announceTargets": [],
|
|
@@ -232,6 +235,11 @@
|
|
|
232
235
|
"ttsVoice": "alloy",
|
|
233
236
|
"sttModel": "",
|
|
234
237
|
"ttsModel": "",
|
|
238
|
+
"openrouterSpeechKey": "",
|
|
239
|
+
"openrouterCredentialId": "",
|
|
240
|
+
"openrouterSttModel": "",
|
|
241
|
+
"openrouterTtsModel": "",
|
|
242
|
+
"openrouterVoice": "",
|
|
235
243
|
"sttProvider": "openai",
|
|
236
244
|
"ttsProvider": "openai",
|
|
237
245
|
"sttFallback": "",
|
|
@@ -254,13 +262,15 @@
|
|
|
254
262
|
"apiKey",
|
|
255
263
|
"voiceApiKey",
|
|
256
264
|
"azureSpeechKey",
|
|
257
|
-
"awsSecretAccessKey"
|
|
265
|
+
"awsSecretAccessKey",
|
|
266
|
+
"openrouterSpeechKey"
|
|
258
267
|
],
|
|
259
268
|
"protectedNative": [
|
|
260
269
|
"apiKey",
|
|
261
270
|
"voiceApiKey",
|
|
262
271
|
"azureSpeechKey",
|
|
263
|
-
"awsSecretAccessKey"
|
|
272
|
+
"awsSecretAccessKey",
|
|
273
|
+
"openrouterSpeechKey"
|
|
264
274
|
],
|
|
265
275
|
"objects": [],
|
|
266
276
|
"instanceObjects": [
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-COiEfhsA.js";import{v as t}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BkH7fzDw.js";import{$r as n,$t as r,A as i,B as a,Cn as o,E as s,Jt as c,K as l,Kn as u,Ln as d,Nn as f,Nr as p,On as m,Ot as h,Pn as g,Pt as _,Qr as v,Qt as y,R as b,Rn as x,Rt as S,T as C,Un as w,V as T,W as E,Wt as D,Xn as ee,Xt as O,Yn as k,Yt as A,Zr as te,Zt as j,bn as ne,cn as M,d as N,dt as re,en as P,f as F,fn as I,gn as L,hn as R,in as z,j as ie,kn as B,kt as ae,mn as oe,p as V,q as se,rn as ce,sn as H,tn as le,un as U,ut as ue,w as de,wn as fe,xn as pe,xt as me,yn as he,zt as ge}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Cdyjt5KT.js";import{t as _e}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare__shared-Dsw5zWS8.js";var ve=e({custom_assistant_Announcement:()=>ye,custom_assistant_Answer:()=>be,custom_assistant_Cancel:()=>xe,custom_assistant_Chat:()=>Se,custom_assistant_Close:()=>Ce,custom_assistant_Context:()=>we,custom_assistant_Copied:()=>Te,custom_assistant_Copy:()=>Ee,custom_assistant_Delete:()=>De,custom_assistant_Error:()=>Oe,custom_assistant_Host:()=>ke,custom_assistant_Question:()=>Ae,custom_assistant_Request:()=>je,custom_assistant_Room:()=>Me,custom_assistant_Routine:()=>Ne,custom_assistant_Satellite:()=>Pe,custom_assistant_Satellites:()=>Fe,custom_assistant_Script:()=>Ie,custom_assistant_Source:()=>Le,custom_assistant_Speak:()=>Re,custom_assistant_State:()=>ze,custom_assistant_Status:()=>Be,custom_assistant_Steps:()=>Ve,custom_assistant_Time:()=>He,custom_assistant_Tool:()=>Ue,custom_assistant_Upload:()=>We,custom_assistant_auto:()=>Ge,custom_assistant_delete_wake_word_confirm:()=>Ke,custom_assistant_device:()=>qe,custom_assistant_filter:()=>Je,custom_assistant_hint:()=>Ye,custom_assistant_llm_downloading:()=>Xe,custom_assistant_llm_error:()=>Ze,custom_assistant_llm_idle:()=>Qe,custom_assistant_llm_installing:()=>$e,custom_assistant_llm_loading:()=>et,custom_assistant_llm_ready:()=>tt,custom_assistant_offline:()=>nt,custom_assistant_online:()=>rt,custom_assistant_read:()=>it,custom_assistant_room:()=>at,custom_assistant_sat_idle:()=>ot,custom_assistant_sat_listening:()=>st,custom_assistant_sat_offline:()=>ct,custom_assistant_sat_processing:()=>lt,custom_assistant_sat_speaking:()=>ut,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_deleted:()=>dt,custom_assistant_wake_word_hint:()=>ft,custom_assistant_wake_word_phrase_hint:()=>pt,custom_assistant_wake_word_upload_hint:()=>mt,custom_assistant_wake_word_uploaded:()=>ht,custom_assistant_write:()=>gt,default:()=>_t}),ye=`Ansage`,be=`Antwort`,xe=`Abbrechen`,Se=`Chat`,Ce=`Schließen`,we=`Kontext`,Te=`Kopiert`,Ee=`Kopieren`,De=`Löschen`,Oe=`Fehler`,ke=`Host`,Ae=`Frage`,je=`Anfrage`,Me=`Raum`,Ne=`Routine`,Pe=`Satellit`,Fe=`Satelliten`,Ie=`Skript`,Le=`Quelle`,Re=`Sprechen`,ze=`State`,Be=`Status`,Ve=`Ablauf`,He=`Zeit`,Ue=`Tool`,We=`Hochladen`,Ge=`automatisch`,Ke=`„%s“ löschen? Es wird den Geräten nicht mehr angeboten; ein Gerät, das es schon heruntergeladen hat, behält es.`,qe=`Gerät`,Je=`Filter`,Ye=`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.`,Xe=`Modell wird geladen …`,Ze=`Fehler`,Qe=`inaktiv`,$e=`Engine wird installiert …`,et=`lädt …`,tt=`bereit`,nt=`offline`,rt=`online`,it=`Lesen`,at=`Zimmer`,ot=`inaktiv`,st=`hört zu`,ct=`offline`,lt=`verarbeitet`,ut=`spricht`,dt=`„%s“ wurde gelöscht. Ein Gerät, das es schon heruntergeladen hat, behält seine Kopie.`,ft=`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.`,pt=`Was man sagt, um das Gerät zu wecken — so erscheint es in der Liste.`,mt=`Ein microWakeWord-Modell: die .tflite-Datei, am besten zusammen mit ihrer .json. Andere Modelltypen (openWakeWord, Porcupine) lassen sich so nicht installieren.`,ht=`„%s“ wurde hochgeladen. Oben auswählen, um es zu aktivieren — das Gerät lädt das Modell dann herunter.`,gt=`Schreiben`,_t={"custom_assistant_%s of %s active":`%s von %s aktiv`,"custom_assistant_(no spoken answer)":`(keine gesprochene Antwort)`,"custom_assistant_All sources":`Alle Quellen`,custom_assistant_Announcement:ye,custom_assistant_Answer:be,custom_assistant_Cancel:xe,custom_assistant_Chat:Se,"custom_assistant_Clear chat":`Chat leeren`,"custom_assistant_Click for details":`Klicken für Details`,custom_assistant_Close:Ce,"custom_assistant_Cloud LLM":`Cloud-LLM`,"custom_assistant_Collapse all":`Alle zuklappen`,custom_assistant_Context:we,custom_assistant_Copied:Te,custom_assistant_Copy:Ee,"custom_assistant_Copy everything as JSON":`Alles als JSON kopieren`,custom_assistant_Delete:De,"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:Oe,"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:ke,"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 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_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:Ae,"custom_assistant_Read answers aloud":`Antworten vorlesen`,"custom_assistant_Recorded audio":`Aufgenommenes Audio`,"custom_assistant_Refresh device cache":`Gerätecache aktualisieren`,"custom_assistant_Reply audio":`Antwort-Audio`,"custom_assistant_Reply to a question":`Antwort auf Rückfrage`,custom_assistant_Request:je,"custom_assistant_Request details":`Anfrage-Details`,custom_assistant_Room:Me,custom_assistant_Routine:Ne,"custom_assistant_Rule-based NLU":`Regel-NLU (lokal)`,custom_assistant_Satellite:Pe,custom_assistant_Satellites:Fe,"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:Ie,"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:Le,custom_assistant_Speak:Re,"custom_assistant_Speak on all satellites":`Auf allen Satelliten ansagen`,"custom_assistant_Speech recognition":`Spracherkennung`,"custom_assistant_Speech recognition time":`Dauer der Spracherkennung`,"custom_assistant_Speech synthesis":`Sprachausgabe`,"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:ze,"custom_assistant_States read":`Gelesene States`,"custom_assistant_States written":`Geschriebene States`,custom_assistant_Status:Be,custom_assistant_Steps:Ve,"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_Thinking…":`Denkt nach …`,"custom_assistant_This satellite exposes no settings.":`Dieser Satellit bietet keine Einstellungen.`,custom_assistant_Time:He,custom_assistant_Tool:Ue,"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:We,"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:Ge,"custom_assistant_change it on the Voice tab":`im Voice-Tab umschalten`,custom_assistant_delete_wake_word_confirm:Ke,custom_assistant_device:qe,custom_assistant_filter:Je,"custom_assistant_follow-up":`Nachfrage`,custom_assistant_hint:Ye,"custom_assistant_in progress":`läuft`,custom_assistant_llm_downloading:Xe,custom_assistant_llm_error:Ze,custom_assistant_llm_idle:Qe,custom_assistant_llm_installing:$e,custom_assistant_llm_loading:et,"custom_assistant_llm_not installed":`nicht installiert`,custom_assistant_llm_ready:tt,"custom_assistant_no name in %s (showing %s)":`Kein Name in "%s" — angezeigt: "%s"`,custom_assistant_offline:nt,custom_assistant_online:rt,custom_assistant_read:it,custom_assistant_room:at,custom_assistant_sat_idle:ot,custom_assistant_sat_listening:st,custom_assistant_sat_offline:ct,custom_assistant_sat_processing:lt,custom_assistant_sat_speaking:ut,custom_assistant_type:`Typ`,"custom_assistant_waits for reply":`wartet auf Antwort`,custom_assistant_wake_word_deleted:dt,custom_assistant_wake_word_hint:ft,custom_assistant_wake_word_phrase_hint:pt,custom_assistant_wake_word_upload_hint:mt,custom_assistant_wake_word_uploaded:ht,custom_assistant_write:gt},vt=e({custom_assistant_Announcement:()=>yt,custom_assistant_Answer:()=>bt,custom_assistant_Cancel:()=>xt,custom_assistant_Chat:()=>St,custom_assistant_Close:()=>Ct,custom_assistant_Context:()=>wt,custom_assistant_Copied:()=>Tt,custom_assistant_Copy:()=>Et,custom_assistant_Delete:()=>Dt,custom_assistant_Error:()=>Ot,custom_assistant_Host:()=>kt,custom_assistant_Question:()=>At,custom_assistant_Request:()=>jt,custom_assistant_Room:()=>Mt,custom_assistant_Routine:()=>Nt,custom_assistant_Satellite:()=>Pt,custom_assistant_Satellites:()=>Ft,custom_assistant_Script:()=>It,custom_assistant_Source:()=>Lt,custom_assistant_Speak:()=>Rt,custom_assistant_State:()=>zt,custom_assistant_Status:()=>Bt,custom_assistant_Steps:()=>Vt,custom_assistant_Time:()=>Ht,custom_assistant_Tool:()=>Ut,custom_assistant_Upload:()=>Wt,custom_assistant_auto:()=>Gt,custom_assistant_delete_wake_word_confirm:()=>Kt,custom_assistant_device:()=>qt,custom_assistant_filter:()=>Jt,custom_assistant_hint:()=>Yt,custom_assistant_llm_downloading:()=>Xt,custom_assistant_llm_error:()=>Zt,custom_assistant_llm_idle:()=>Qt,custom_assistant_llm_installing:()=>$t,custom_assistant_llm_loading:()=>en,custom_assistant_llm_ready:()=>tn,custom_assistant_offline:()=>nn,custom_assistant_online:()=>rn,custom_assistant_read:()=>an,custom_assistant_room:()=>on,custom_assistant_sat_idle:()=>sn,custom_assistant_sat_listening:()=>cn,custom_assistant_sat_offline:()=>ln,custom_assistant_sat_processing:()=>un,custom_assistant_sat_speaking:()=>dn,custom_assistant_type:()=>fn,custom_assistant_wake_word_deleted:()=>pn,custom_assistant_wake_word_hint:()=>mn,custom_assistant_wake_word_phrase_hint:()=>hn,custom_assistant_wake_word_upload_hint:()=>gn,custom_assistant_wake_word_uploaded:()=>_n,custom_assistant_write:()=>vn,default:()=>yn}),yt=`Announcement`,bt=`Answer`,xt=`Cancel`,St=`Chat`,Ct=`Close`,wt=`Context`,Tt=`Copied`,Et=`Copy`,Dt=`Delete`,Ot=`Error`,kt=`Host`,At=`Question`,jt=`Request`,Mt=`Room`,Nt=`Routine`,Pt=`Satellite`,Ft=`Satellites`,It=`Script`,Lt=`Source`,Rt=`Speak`,zt=`State`,Bt=`Status`,Vt=`Steps`,Ht=`Time`,Ut=`Tool`,Wt=`Upload`,Gt=`auto`,Kt=`Delete "%s"? It will no longer be offered to the devices; a device that already downloaded it keeps it.`,qt=`Device`,Jt=`Filter`,Yt=`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.`,Xt=`downloading model…`,Zt=`error`,Qt=`idle`,$t=`installing engine…`,en=`loading…`,tn=`ready`,nn=`offline`,rn=`online`,an=`Read`,on=`Room`,sn=`idle`,cn=`listening`,ln=`offline`,un=`processing`,dn=`speaking`,fn=`Type`,pn=`"%s" was deleted. A device that already downloaded it keeps its copy.`,mn=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,hn=`What you say to wake the device — this is how it appears in the list.`,gn=`A microWakeWord model: the .tflite file, ideally together with its .json. Other model types (openWakeWord, Porcupine) cannot be installed this way.`,_n=`"%s" was uploaded. Select it above to activate it — the device downloads the model then.`,vn=`Write`,yn={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:yt,custom_assistant_Answer:bt,custom_assistant_Cancel:xt,custom_assistant_Chat:St,"custom_assistant_Clear chat":`Clear chat`,"custom_assistant_Click for details":`Click for details`,custom_assistant_Close:Ct,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Collapse all`,custom_assistant_Context:wt,custom_assistant_Copied:Tt,custom_assistant_Copy:Et,"custom_assistant_Copy everything as JSON":`Copy everything as JSON`,custom_assistant_Delete:Dt,"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:Ot,"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:kt,"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 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_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:At,"custom_assistant_Read answers aloud":`Read answers aloud`,"custom_assistant_Recorded audio":`Recorded audio`,"custom_assistant_Refresh device cache":`Refresh device cache`,"custom_assistant_Reply audio":`Reply audio`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:jt,"custom_assistant_Request details":`Request details`,custom_assistant_Room:Mt,custom_assistant_Routine:Nt,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Pt,custom_assistant_Satellites:Ft,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Save the configuration (the instance will restart) before chatting.`,custom_assistant_Script:It,"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:Lt,custom_assistant_Speak:Rt,"custom_assistant_Speak on all satellites":`Speak on all satellites`,"custom_assistant_Speech recognition":`Speech recognition`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Speech synthesis`,"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:Bt,custom_assistant_Steps:Vt,"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_Thinking…":`Thinking…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Ht,custom_assistant_Tool:Ut,"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:Wt,"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:Gt,"custom_assistant_change it on the Voice tab":`change it on the Voice tab`,custom_assistant_delete_wake_word_confirm:Kt,custom_assistant_device:qt,custom_assistant_filter:Jt,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Yt,"custom_assistant_in progress":`in progress`,custom_assistant_llm_downloading:Xt,custom_assistant_llm_error:Zt,custom_assistant_llm_idle:Qt,custom_assistant_llm_installing:$t,custom_assistant_llm_loading:en,"custom_assistant_llm_not installed":`not installed`,custom_assistant_llm_ready:tn,"custom_assistant_no name in %s (showing %s)":`No name in "%s" — showing "%s"`,custom_assistant_offline:nn,custom_assistant_online:rn,custom_assistant_read:an,custom_assistant_room:on,custom_assistant_sat_idle:sn,custom_assistant_sat_listening:cn,custom_assistant_sat_offline:ln,custom_assistant_sat_processing:un,custom_assistant_sat_speaking:dn,custom_assistant_type:fn,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:pn,custom_assistant_wake_word_hint:mn,custom_assistant_wake_word_phrase_hint:hn,custom_assistant_wake_word_upload_hint:gn,custom_assistant_wake_word_uploaded:_n,custom_assistant_write:vn},W=e({custom_assistant_Announcement:()=>bn,custom_assistant_Answer:()=>xn,custom_assistant_Cancel:()=>Sn,custom_assistant_Chat:()=>Cn,custom_assistant_Close:()=>wn,custom_assistant_Context:()=>Tn,custom_assistant_Copied:()=>En,custom_assistant_Copy:()=>Dn,custom_assistant_Delete:()=>On,custom_assistant_Error:()=>kn,custom_assistant_Host:()=>An,custom_assistant_Question:()=>jn,custom_assistant_Request:()=>Mn,custom_assistant_Room:()=>Nn,custom_assistant_Routine:()=>Pn,custom_assistant_Satellite:()=>Fn,custom_assistant_Satellites:()=>In,custom_assistant_Script:()=>Ln,custom_assistant_Source:()=>Rn,custom_assistant_Speak:()=>zn,custom_assistant_State:()=>Bn,custom_assistant_Status:()=>Vn,custom_assistant_Steps:()=>Hn,custom_assistant_Time:()=>Un,custom_assistant_Tool:()=>Wn,custom_assistant_Upload:()=>Gn,custom_assistant_auto:()=>Kn,custom_assistant_delete_wake_word_confirm:()=>qn,custom_assistant_device:()=>Jn,custom_assistant_filter:()=>Yn,custom_assistant_hint:()=>Xn,custom_assistant_llm_downloading:()=>Zn,custom_assistant_llm_error:()=>Qn,custom_assistant_llm_idle:()=>$n,custom_assistant_llm_installing:()=>er,custom_assistant_llm_loading:()=>tr,custom_assistant_llm_ready:()=>nr,custom_assistant_offline:()=>rr,custom_assistant_online:()=>ir,custom_assistant_read:()=>ar,custom_assistant_room:()=>or,custom_assistant_sat_idle:()=>sr,custom_assistant_sat_listening:()=>cr,custom_assistant_sat_offline:()=>lr,custom_assistant_sat_processing:()=>ur,custom_assistant_sat_speaking:()=>dr,custom_assistant_type:()=>fr,custom_assistant_wake_word_deleted:()=>pr,custom_assistant_wake_word_hint:()=>mr,custom_assistant_wake_word_phrase_hint:()=>hr,custom_assistant_wake_word_upload_hint:()=>gr,custom_assistant_wake_word_uploaded:()=>_r,custom_assistant_write:()=>vr,default:()=>yr}),bn=`Anuncio`,xn=`Respuesta`,Sn=`Cancel`,Cn=`Chat`,wn=`Close`,Tn=`Contexto`,En=`Copiado`,Dn=`Copiar`,On=`Delete`,kn=`Error`,An=`Anfitrión`,jn=`Pregunta`,Mn=`Solicitud`,Nn=`Room`,Pn=`Routine`,Fn=`Satélite`,In=`satélites`,Ln=`Script`,Rn=`Source`,zn=`Hablar`,Bn=`State`,Vn=`Estado`,Hn=`Pasos`,Un=`Hora`,Wn=`Herramienta`,Gn=`Subir`,Kn=`auto`,qn=`¿Eliminar "%s"? Ya no se ofrecerá a los dispositivos; un dispositivo que ya lo descargó lo conserva.`,Jn=`Dispositivo`,Yn=`Filtrar`,Xn=`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.`,Zn=`Descargando modelo…`,Qn=`error`,$n=`inactivo`,er=`instalando el motor…`,tr=`cargando…`,nr=`listo`,rr=`desconectado`,ir=`en línea`,ar=`Leer`,or=`Habitación`,sr=`inactivo`,cr=`escuchando`,lr=`desconectado`,ur=`tratamiento`,dr=`discurso`,fr=`Tipo`,pr=`"%s" se ha eliminado. Un dispositivo que ya lo descargó conserva su copia.`,mr=`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.`,hr=`Lo que dices para activar el dispositivo: así aparece en la lista.`,gr=`Un modelo microWakeWord: el archivo .tflite, idealmente junto con su .json. Otros tipos de modelo (openWakeWord, Porcupine) no se pueden instalar de esta forma.`,_r=`"%s" se ha subido. Selecciónalo arriba para activarlo: el dispositivo descargará entonces el modelo.`,vr=`Escribir`,yr={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:bn,custom_assistant_Answer:xn,custom_assistant_Cancel:Sn,custom_assistant_Chat:Cn,"custom_assistant_Clear chat":`Chat claro`,"custom_assistant_Click for details":`Haz clic para ver detalles`,custom_assistant_Close:wn,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Contraer todo`,custom_assistant_Context:Tn,custom_assistant_Copied:En,custom_assistant_Copy:Dn,"custom_assistant_Copy everything as JSON":`Copiar todo como JSON`,custom_assistant_Delete:On,"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:kn,"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:An,"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 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_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:jn,"custom_assistant_Read answers aloud":`Lee las respuestas en voz alta.`,"custom_assistant_Recorded audio":`Audio grabado`,"custom_assistant_Refresh device cache":`Actualizar la caché del dispositivo`,"custom_assistant_Reply audio":`Audio de la respuesta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Mn,"custom_assistant_Request details":`Detalles de la solicitud`,custom_assistant_Room:Nn,custom_assistant_Routine:Pn,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Fn,custom_assistant_Satellites:In,"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:Ln,"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:Rn,custom_assistant_Speak:zn,"custom_assistant_Speak on all satellites":`Hablar por todos los satélites`,"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_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:Bn,"custom_assistant_States read":`Estados leídos`,"custom_assistant_States written":`Estados escritos`,custom_assistant_Status:Vn,custom_assistant_Steps:Hn,"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_Thinking…":`Pensamiento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Un,custom_assistant_Tool:Wn,"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:Gn,"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:Kn,"custom_assistant_change it on the Voice tab":`Cámbialo en la pestaña Voz.`,custom_assistant_delete_wake_word_confirm:qn,custom_assistant_device:Jn,custom_assistant_filter:Yn,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Xn,"custom_assistant_in progress":`en curso`,custom_assistant_llm_downloading:Zn,custom_assistant_llm_error:Qn,custom_assistant_llm_idle:$n,custom_assistant_llm_installing:er,custom_assistant_llm_loading:tr,"custom_assistant_llm_not installed":`no instalado`,custom_assistant_llm_ready:nr,"custom_assistant_no name in %s (showing %s)":`No se encontró ningún nombre en "%s" — se muestra "%s"`,custom_assistant_offline:rr,custom_assistant_online:ir,custom_assistant_read:ar,custom_assistant_room:or,custom_assistant_sat_idle:sr,custom_assistant_sat_listening:cr,custom_assistant_sat_offline:lr,custom_assistant_sat_processing:ur,custom_assistant_sat_speaking:dr,custom_assistant_type:fr,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:pr,custom_assistant_wake_word_hint:mr,custom_assistant_wake_word_phrase_hint:hr,custom_assistant_wake_word_upload_hint:gr,custom_assistant_wake_word_uploaded:_r,custom_assistant_write:vr},G=e({custom_assistant_Announcement:()=>br,custom_assistant_Answer:()=>xr,custom_assistant_Cancel:()=>Sr,custom_assistant_Chat:()=>Cr,custom_assistant_Close:()=>wr,custom_assistant_Context:()=>Tr,custom_assistant_Copied:()=>Er,custom_assistant_Copy:()=>Dr,custom_assistant_Delete:()=>Or,custom_assistant_Error:()=>kr,custom_assistant_Host:()=>Ar,custom_assistant_Question:()=>jr,custom_assistant_Request:()=>Mr,custom_assistant_Room:()=>Nr,custom_assistant_Routine:()=>Pr,custom_assistant_Satellite:()=>Fr,custom_assistant_Satellites:()=>Ir,custom_assistant_Script:()=>Lr,custom_assistant_Source:()=>Rr,custom_assistant_Speak:()=>zr,custom_assistant_State:()=>Br,custom_assistant_Status:()=>Vr,custom_assistant_Steps:()=>Hr,custom_assistant_Time:()=>Ur,custom_assistant_Tool:()=>Wr,custom_assistant_Upload:()=>Gr,custom_assistant_auto:()=>Kr,custom_assistant_delete_wake_word_confirm:()=>qr,custom_assistant_device:()=>Jr,custom_assistant_filter:()=>Yr,custom_assistant_hint:()=>Xr,custom_assistant_llm_downloading:()=>Zr,custom_assistant_llm_error:()=>Qr,custom_assistant_llm_idle:()=>$r,custom_assistant_llm_installing:()=>ei,custom_assistant_llm_loading:()=>ti,custom_assistant_llm_ready:()=>ni,custom_assistant_offline:()=>ri,custom_assistant_online:()=>ii,custom_assistant_read:()=>ai,custom_assistant_room:()=>oi,custom_assistant_sat_idle:()=>si,custom_assistant_sat_listening:()=>ci,custom_assistant_sat_offline:()=>li,custom_assistant_sat_processing:()=>ui,custom_assistant_sat_speaking:()=>di,custom_assistant_type:()=>fi,custom_assistant_wake_word_deleted:()=>pi,custom_assistant_wake_word_hint:()=>mi,custom_assistant_wake_word_phrase_hint:()=>hi,custom_assistant_wake_word_upload_hint:()=>gi,custom_assistant_wake_word_uploaded:()=>_i,custom_assistant_write:()=>vi,default:()=>yi}),br=`Annonce`,xr=`Réponse`,Sr=`Cancel`,Cr=`Chat`,wr=`Close`,Tr=`Contexte`,Er=`Copié`,Dr=`Copier`,Or=`Delete`,kr=`Erreur`,Ar=`Hôte`,jr=`Question`,Mr=`Requête`,Nr=`Room`,Pr=`Routine`,Fr=`Satellite`,Ir=`Satellites`,Lr=`Script`,Rr=`Source`,zr=`Parler`,Br=`State`,Vr=`Statut`,Hr=`Étapes`,Ur=`Heure`,Wr=`Outil`,Gr=`Téléverser`,Kr=`auto`,qr=`Supprimer « %s » ? Il ne sera plus proposé aux appareils ; un appareil qui l'a déjà téléchargé le conserve.`,Jr=`Appareil`,Yr=`Filtre`,Xr=`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.`,Zr=`téléchargement du modèle…`,Qr=`erreur`,$r=`inactif`,ei=`installation du moteur…`,ti=`chargement…`,ni=`prêt`,ri=`hors ligne`,ii=`en ligne`,ai=`Lire`,oi=`Chambre`,si=`inactif`,ci=`écoute`,li=`hors ligne`,ui=`traitement`,di=`Parlant`,fi=`Taper`,pi=`« %s » a été supprimé. Un appareil qui l'a déjà téléchargé conserve sa copie.`,mi=`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.`,hi=`Ce que vous dites pour réveiller l'appareil — c'est ainsi qu'il apparaît dans la liste.`,gi=`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.`,_i=`« %s » a été téléversé. Sélectionnez-le ci-dessus pour l'activer — l'appareil télécharge alors le modèle.`,vi=`Écrire`,yi={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:br,custom_assistant_Answer:xr,custom_assistant_Cancel:Sr,custom_assistant_Chat:Cr,"custom_assistant_Clear chat":`Discussion claire`,"custom_assistant_Click for details":`Cliquer pour les détails`,custom_assistant_Close:wr,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Tout réduire`,custom_assistant_Context:Tr,custom_assistant_Copied:Er,custom_assistant_Copy:Dr,"custom_assistant_Copy everything as JSON":`Tout copier en JSON`,custom_assistant_Delete:Or,"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:Ar,"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 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_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_Recorded audio":`Audio enregistré`,"custom_assistant_Refresh device cache":`Actualiser le cache de l'appareil`,"custom_assistant_Reply audio":`Audio de la réponse`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Mr,"custom_assistant_Request details":`Détails de la requête`,custom_assistant_Room:Nr,custom_assistant_Routine:Pr,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Fr,custom_assistant_Satellites:Ir,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Enregistrez la configuration (l'instance redémarrera) avant de discuter.`,custom_assistant_Script:Lr,"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:Rr,custom_assistant_Speak:zr,"custom_assistant_Speak on all satellites":`Parlez sur tous les satellites`,"custom_assistant_Speech recognition":`Reconnaissance vocale`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Synthèse vocale`,"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:Br,"custom_assistant_States read":`États lus`,"custom_assistant_States written":`États écrits`,custom_assistant_Status:Vr,custom_assistant_Steps:Hr,"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_Thinking…":`Pensée…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Ur,custom_assistant_Tool:Wr,"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:Gr,"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:Kr,"custom_assistant_change it on the Voice tab":`modifiez-le dans l'onglet Voix`,custom_assistant_delete_wake_word_confirm:qr,custom_assistant_device:Jr,custom_assistant_filter:Yr,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Xr,"custom_assistant_in progress":`en cours`,custom_assistant_llm_downloading:Zr,custom_assistant_llm_error:Qr,custom_assistant_llm_idle:$r,custom_assistant_llm_installing:ei,custom_assistant_llm_loading:ti,"custom_assistant_llm_not installed":`non installé`,custom_assistant_llm_ready:ni,"custom_assistant_no name in %s (showing %s)":`Aucun nom dans « %s » — affichage de « %s »`,custom_assistant_offline:ri,custom_assistant_online:ii,custom_assistant_read:ai,custom_assistant_room:oi,custom_assistant_sat_idle:si,custom_assistant_sat_listening:ci,custom_assistant_sat_offline:li,custom_assistant_sat_processing:ui,custom_assistant_sat_speaking:di,custom_assistant_type:fi,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:pi,custom_assistant_wake_word_hint:mi,custom_assistant_wake_word_phrase_hint:hi,custom_assistant_wake_word_upload_hint:gi,custom_assistant_wake_word_uploaded:_i,custom_assistant_write:vi},K=e({custom_assistant_Announcement:()=>bi,custom_assistant_Answer:()=>xi,custom_assistant_Cancel:()=>Si,custom_assistant_Chat:()=>Ci,custom_assistant_Close:()=>wi,custom_assistant_Context:()=>Ti,custom_assistant_Copied:()=>Ei,custom_assistant_Copy:()=>Di,custom_assistant_Delete:()=>Oi,custom_assistant_Error:()=>ki,custom_assistant_Host:()=>Ai,custom_assistant_Question:()=>ji,custom_assistant_Request:()=>Mi,custom_assistant_Room:()=>Ni,custom_assistant_Routine:()=>Pi,custom_assistant_Satellite:()=>Fi,custom_assistant_Satellites:()=>Ii,custom_assistant_Script:()=>Li,custom_assistant_Source:()=>Ri,custom_assistant_Speak:()=>zi,custom_assistant_State:()=>Bi,custom_assistant_Status:()=>Vi,custom_assistant_Steps:()=>Hi,custom_assistant_Time:()=>`Ora`,custom_assistant_Tool:()=>Ui,custom_assistant_Upload:()=>Wi,custom_assistant_auto:()=>Gi,custom_assistant_delete_wake_word_confirm:()=>Ki,custom_assistant_device:()=>qi,custom_assistant_filter:()=>Ji,custom_assistant_hint:()=>Yi,custom_assistant_llm_downloading:()=>Xi,custom_assistant_llm_error:()=>Zi,custom_assistant_llm_idle:()=>Qi,custom_assistant_llm_installing:()=>$i,custom_assistant_llm_loading:()=>ea,custom_assistant_llm_ready:()=>ta,custom_assistant_offline:()=>na,custom_assistant_online:()=>ra,custom_assistant_read:()=>ia,custom_assistant_room:()=>aa,custom_assistant_sat_idle:()=>oa,custom_assistant_sat_listening:()=>sa,custom_assistant_sat_offline:()=>ca,custom_assistant_sat_processing:()=>la,custom_assistant_sat_speaking:()=>ua,custom_assistant_type:()=>da,custom_assistant_wake_word_deleted:()=>fa,custom_assistant_wake_word_hint:()=>pa,custom_assistant_wake_word_phrase_hint:()=>ma,custom_assistant_wake_word_upload_hint:()=>ha,custom_assistant_wake_word_uploaded:()=>ga,custom_assistant_write:()=>_a,default:()=>va}),bi=`Annuncio`,xi=`Risposta`,Si=`Cancel`,Ci=`Chat`,wi=`Close`,Ti=`Contesto`,Ei=`Copiato`,Di=`Copia`,Oi=`Delete`,ki=`Errore`,Ai=`Ospite`,ji=`Domanda`,Mi=`Richiesta`,Ni=`Room`,Pi=`Routine`,Fi=`Satellitare`,Ii=`Satelliti`,Li=`Script`,Ri=`Source`,zi=`Parlare`,Bi=`State`,Vi=`Stato`,Hi=`Passaggi`,Ui=`Strumento`,Wi=`Carica`,Gi=`auto`,Ki=`Eliminare "%s"? Non verrà più offerto ai dispositivi; un dispositivo che l'ha già scaricato lo conserva.`,qi=`Dispositivo`,Ji=`Filtro`,Yi=`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.`,Xi=`modello di download…`,Zi=`errore`,Qi=`oziare`,$i=`installazione del motore…`,ea=`caricamento…`,ta=`pronto`,na=`offline`,ra=`online`,ia=`Leggere`,aa=`Camera`,oa=`oziare`,sa=`ascolto`,ca=`offline`,la=`elaborazione`,ua=`A proposito di`,da=`Tipo`,fa=`"%s" è stato eliminato. Un dispositivo che l'ha già scaricato ne conserva la copia.`,pa=`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.`,ma=`Ciò che dici per attivare il dispositivo: è così che appare nell'elenco.`,ha=`Un modello microWakeWord: il file .tflite, preferibilmente insieme al suo .json. Altri tipi di modello (openWakeWord, Porcupine) non possono essere installati in questo modo.`,ga=`"%s" è stato caricato. Selezionalo qui sopra per attivarlo: il dispositivo scaricherà allora il modello.`,_a=`Scrivere`,va={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:bi,custom_assistant_Answer:xi,custom_assistant_Cancel:Si,custom_assistant_Chat:Ci,"custom_assistant_Clear chat":`Chat chiara`,"custom_assistant_Click for details":`Clicca per i dettagli`,custom_assistant_Close:wi,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Comprimi tutto`,custom_assistant_Context:Ti,custom_assistant_Copied:Ei,custom_assistant_Copy:Di,"custom_assistant_Copy everything as JSON":`Copia tutto come JSON`,custom_assistant_Delete:Oi,"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:ki,"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:Ai,"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 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_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:ji,"custom_assistant_Read answers aloud":`Leggi le risposte ad alta voce`,"custom_assistant_Recorded audio":`Audio registrato`,"custom_assistant_Refresh device cache":`Aggiorna la cache del dispositivo`,"custom_assistant_Reply audio":`Audio della risposta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Mi,"custom_assistant_Request details":`Dettagli della richiesta`,custom_assistant_Room:Ni,custom_assistant_Routine:Pi,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Fi,custom_assistant_Satellites:Ii,"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:Li,"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:Ri,custom_assistant_Speak:zi,"custom_assistant_Speak on all satellites":`Comunicare su tutti i satelliti`,"custom_assistant_Speech recognition":`Riconoscimento vocale`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Sintesi vocale`,"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:Bi,"custom_assistant_States read":`Stati letti`,"custom_assistant_States written":`Stati scritti`,custom_assistant_Status:Vi,custom_assistant_Steps:Hi,"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_Thinking…":`Pensiero…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:`Ora`,custom_assistant_Tool:Ui,"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:Wi,"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:Gi,"custom_assistant_change it on the Voice tab":`modificalo nella scheda Voce`,custom_assistant_delete_wake_word_confirm:Ki,custom_assistant_device:qi,custom_assistant_filter:Ji,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Yi,"custom_assistant_in progress":`in corso`,custom_assistant_llm_downloading:Xi,custom_assistant_llm_error:Zi,custom_assistant_llm_idle:Qi,custom_assistant_llm_installing:$i,custom_assistant_llm_loading:ea,"custom_assistant_llm_not installed":`non installato`,custom_assistant_llm_ready:ta,"custom_assistant_no name in %s (showing %s)":`Nessun nome in "%s" — visualizzazione di "%s"`,custom_assistant_offline:na,custom_assistant_online:ra,custom_assistant_read:ia,custom_assistant_room:aa,custom_assistant_sat_idle:oa,custom_assistant_sat_listening:sa,custom_assistant_sat_offline:ca,custom_assistant_sat_processing:la,custom_assistant_sat_speaking:ua,custom_assistant_type:da,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:fa,custom_assistant_wake_word_hint:pa,custom_assistant_wake_word_phrase_hint:ma,custom_assistant_wake_word_upload_hint:ha,custom_assistant_wake_word_uploaded:ga,custom_assistant_write:_a},ya=e({custom_assistant_Announcement:()=>ba,custom_assistant_Answer:()=>xa,custom_assistant_Cancel:()=>Sa,custom_assistant_Chat:()=>Ca,custom_assistant_Close:()=>wa,custom_assistant_Context:()=>Ta,custom_assistant_Copied:()=>Ea,custom_assistant_Copy:()=>Da,custom_assistant_Delete:()=>Oa,custom_assistant_Error:()=>ka,custom_assistant_Host:()=>Aa,custom_assistant_Question:()=>ja,custom_assistant_Request:()=>Ma,custom_assistant_Room:()=>Na,custom_assistant_Routine:()=>Pa,custom_assistant_Satellite:()=>Fa,custom_assistant_Satellites:()=>Ia,custom_assistant_Script:()=>La,custom_assistant_Source:()=>Ra,custom_assistant_Speak:()=>za,custom_assistant_State:()=>Ba,custom_assistant_Status:()=>Va,custom_assistant_Steps:()=>Ha,custom_assistant_Time:()=>Ua,custom_assistant_Tool:()=>Wa,custom_assistant_Upload:()=>Ga,custom_assistant_auto:()=>Ka,custom_assistant_delete_wake_word_confirm:()=>qa,custom_assistant_device:()=>Ja,custom_assistant_filter:()=>Ya,custom_assistant_hint:()=>Xa,custom_assistant_llm_downloading:()=>Za,custom_assistant_llm_error:()=>Qa,custom_assistant_llm_idle:()=>$a,custom_assistant_llm_installing:()=>eo,custom_assistant_llm_loading:()=>to,custom_assistant_llm_ready:()=>no,custom_assistant_offline:()=>ro,custom_assistant_online:()=>io,custom_assistant_read:()=>ao,custom_assistant_room:()=>oo,custom_assistant_sat_idle:()=>so,custom_assistant_sat_listening:()=>co,custom_assistant_sat_offline:()=>lo,custom_assistant_sat_processing:()=>uo,custom_assistant_sat_speaking:()=>fo,custom_assistant_type:()=>po,custom_assistant_wake_word_deleted:()=>mo,custom_assistant_wake_word_hint:()=>ho,custom_assistant_wake_word_phrase_hint:()=>go,custom_assistant_wake_word_upload_hint:()=>_o,custom_assistant_wake_word_uploaded:()=>vo,custom_assistant_write:()=>yo,default:()=>bo}),ba=`Aankondiging`,xa=`Antwoord`,Sa=`Cancel`,Ca=`Chat`,wa=`Close`,Ta=`Context`,Ea=`Gekopieerd`,Da=`Kopiëren`,Oa=`Delete`,ka=`Fout`,Aa=`Gastheer`,ja=`Vraag`,Ma=`Verzoek`,Na=`Room`,Pa=`Routine`,Fa=`Satelliet`,Ia=`Satellieten`,La=`Script`,Ra=`Source`,za=`Spreken`,Ba=`State`,Va=`Status`,Ha=`Stappen`,Ua=`Tijd`,Wa=`Tool`,Ga=`Uploaden`,Ka=`auto`,qa=`"%s" verwijderen? Het wordt niet meer aan de apparaten aangeboden; een apparaat dat het al heeft gedownload, houdt het.`,Ja=`Apparaat`,Ya=`Filter`,Xa=`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.`,Za=`Model downloaden…`,Qa=`fout`,$a=`inactief`,eo=`motor installeren…`,to=`laden…`,no=`klaar`,ro=`offline`,io=`online`,ao=`Lezen`,oo=`Kamer`,so=`inactief`,co=`luisteren`,lo=`offline`,uo=`verwerking`,fo=`spreken`,po=`Type`,mo=`"%s" is verwijderd. Een apparaat dat het al heeft gedownload, houdt zijn kopie.`,ho=`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.`,go=`Wat je zegt om het apparaat te wekken — zo verschijnt het in de lijst.`,_o=`Een microWakeWord-model: het .tflite-bestand, bij voorkeur samen met de bijbehorende .json. Andere modeltypen (openWakeWord, Porcupine) kunnen zo niet worden geïnstalleerd.`,vo=`"%s" is geüpload. Selecteer het hierboven om het te activeren — het apparaat downloadt dan het model.`,yo=`Schrijven`,bo={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:ba,custom_assistant_Answer:xa,custom_assistant_Cancel:Sa,custom_assistant_Chat:Ca,"custom_assistant_Clear chat":`Duidelijke chat`,"custom_assistant_Click for details":`Klik voor details`,custom_assistant_Close:wa,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Alles inklappen`,custom_assistant_Context:Ta,custom_assistant_Copied:Ea,custom_assistant_Copy:Da,"custom_assistant_Copy everything as JSON":`Alles als JSON kopiëren`,custom_assistant_Delete:Oa,"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:ka,"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:Aa,"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 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_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:ja,"custom_assistant_Read answers aloud":`Lees de antwoorden hardop voor.`,"custom_assistant_Recorded audio":`Opgenomen audio`,"custom_assistant_Refresh device cache":`Vernieuw de apparaatcache.`,"custom_assistant_Reply audio":`Audio van het antwoord`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Ma,"custom_assistant_Request details":`Details van het verzoek`,custom_assistant_Room:Na,custom_assistant_Routine:Pa,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Fa,custom_assistant_Satellites:Ia,"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:La,"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:Ra,custom_assistant_Speak:za,"custom_assistant_Speak on all satellites":`Communiceer via alle satellieten`,"custom_assistant_Speech recognition":`Spraakherkenning`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Spraaksynthese`,"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:Ba,"custom_assistant_States read":`Gelezen states`,"custom_assistant_States written":`Geschreven states`,custom_assistant_Status:Va,custom_assistant_Steps:Ha,"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_Thinking…":`Aan het nadenken…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Ua,custom_assistant_Tool:Wa,"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:Ga,"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:Ka,"custom_assistant_change it on the Voice tab":`Wijzig dit op het tabblad 'Stem'.`,custom_assistant_delete_wake_word_confirm:qa,custom_assistant_device:Ja,custom_assistant_filter:Ya,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Xa,"custom_assistant_in progress":`bezig`,custom_assistant_llm_downloading:Za,custom_assistant_llm_error:Qa,custom_assistant_llm_idle:$a,custom_assistant_llm_installing:eo,custom_assistant_llm_loading:to,"custom_assistant_llm_not installed":`niet geïnstalleerd`,custom_assistant_llm_ready:no,"custom_assistant_no name in %s (showing %s)":`Geen naam in "%s" — "%s" wordt weergegeven`,custom_assistant_offline:ro,custom_assistant_online:io,custom_assistant_read:ao,custom_assistant_room:oo,custom_assistant_sat_idle:so,custom_assistant_sat_listening:co,custom_assistant_sat_offline:lo,custom_assistant_sat_processing:uo,custom_assistant_sat_speaking:fo,custom_assistant_type:po,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:mo,custom_assistant_wake_word_hint:ho,custom_assistant_wake_word_phrase_hint:go,custom_assistant_wake_word_upload_hint:_o,custom_assistant_wake_word_uploaded:vo,custom_assistant_write:yo},xo=e({custom_assistant_Announcement:()=>So,custom_assistant_Answer:()=>Co,custom_assistant_Cancel:()=>wo,custom_assistant_Chat:()=>To,custom_assistant_Close:()=>Eo,custom_assistant_Context:()=>Do,custom_assistant_Copied:()=>Oo,custom_assistant_Copy:()=>ko,custom_assistant_Delete:()=>Ao,custom_assistant_Error:()=>jo,custom_assistant_Host:()=>Mo,custom_assistant_Question:()=>No,custom_assistant_Request:()=>Po,custom_assistant_Room:()=>Fo,custom_assistant_Routine:()=>Io,custom_assistant_Satellite:()=>Lo,custom_assistant_Satellites:()=>Ro,custom_assistant_Script:()=>zo,custom_assistant_Source:()=>Bo,custom_assistant_Speak:()=>Vo,custom_assistant_State:()=>Ho,custom_assistant_Status:()=>Uo,custom_assistant_Steps:()=>Wo,custom_assistant_Time:()=>Go,custom_assistant_Tool:()=>Ko,custom_assistant_Upload:()=>qo,custom_assistant_auto:()=>Jo,custom_assistant_delete_wake_word_confirm:()=>Yo,custom_assistant_device:()=>Xo,custom_assistant_filter:()=>Zo,custom_assistant_hint:()=>Qo,custom_assistant_llm_downloading:()=>$o,custom_assistant_llm_error:()=>es,custom_assistant_llm_idle:()=>ts,custom_assistant_llm_installing:()=>ns,custom_assistant_llm_loading:()=>rs,custom_assistant_llm_ready:()=>is,custom_assistant_offline:()=>as,custom_assistant_online:()=>os,custom_assistant_read:()=>ss,custom_assistant_room:()=>cs,custom_assistant_sat_idle:()=>ls,custom_assistant_sat_listening:()=>us,custom_assistant_sat_offline:()=>ds,custom_assistant_sat_processing:()=>fs,custom_assistant_sat_speaking:()=>ps,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_deleted:()=>ms,custom_assistant_wake_word_hint:()=>hs,custom_assistant_wake_word_phrase_hint:()=>gs,custom_assistant_wake_word_upload_hint:()=>_s,custom_assistant_wake_word_uploaded:()=>vs,custom_assistant_write:()=>ys,default:()=>bs}),So=`Ogłoszenie`,Co=`Odpowiedź`,wo=`Cancel`,To=`Chat`,Eo=`Close`,Do=`Kontekst`,Oo=`Skopiowano`,ko=`Kopiuj`,Ao=`Delete`,jo=`Błąd`,Mo=`Gospodarz`,No=`Pytanie`,Po=`Żądanie`,Fo=`Room`,Io=`Routine`,Lo=`Satelita`,Ro=`Satelity`,zo=`Script`,Bo=`Source`,Vo=`Mówić`,Ho=`State`,Uo=`Status`,Wo=`Kroki`,Go=`Czas`,Ko=`Narzędzie`,qo=`Prześlij`,Jo=`automatyczny`,Yo=`Usunąć „%s”? Nie będzie już oferowane urządzeniom; urządzenie, które już je pobrało, zachowa je.`,Xo=`Urządzenie`,Zo=`Filtr`,Qo=`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.`,$o=`pobieranie modelu…`,es=`błąd`,ts=`bezczynny`,ns=`instalowanie silnika…`,rs=`załadunek…`,is=`gotowy`,as=`nieaktywny`,os=`w sieci`,ss=`Czytać`,cs=`Pokój`,ls=`bezczynny`,us=`słuchający`,ds=`nieaktywny`,fs=`przetwarzanie`,ps=`mówiąc`,ms=`„%s” zostało usunięte. Urządzenie, które już je pobrało, zachowuje swoją kopię.`,hs=`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.`,gs=`To, co mówisz, aby wybudzić urządzenie — tak pojawi się na liście.`,_s=`Model microWakeWord: plik .tflite, najlepiej razem z jego plikiem .json. Innych typów modeli (openWakeWord, Porcupine) nie można zainstalować w ten sposób.`,vs=`„%s” zostało przesłane. Wybierz je powyżej, aby je aktywować — urządzenie pobierze wtedy model.`,ys=`Pisać`,bs={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:So,custom_assistant_Answer:Co,custom_assistant_Cancel:wo,custom_assistant_Chat:To,"custom_assistant_Clear chat":`Wyczyść czat`,"custom_assistant_Click for details":`Kliknij, aby zobaczyć szczegóły`,custom_assistant_Close:Eo,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Zwiń wszystko`,custom_assistant_Context:Do,custom_assistant_Copied:Oo,custom_assistant_Copy:ko,"custom_assistant_Copy everything as JSON":`Kopiuj wszystko jako JSON`,custom_assistant_Delete:Ao,"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:jo,"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:Mo,"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 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_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:No,"custom_assistant_Read answers aloud":`Przeczytaj odpowiedzi na głos`,"custom_assistant_Recorded audio":`Nagrane audio`,"custom_assistant_Refresh device cache":`Odśwież pamięć podręczną urządzenia`,"custom_assistant_Reply audio":`Audio odpowiedzi`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Po,"custom_assistant_Request details":`Szczegóły żądania`,custom_assistant_Room:Fo,custom_assistant_Routine:Io,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Lo,custom_assistant_Satellites:Ro,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Przed rozpoczęciem czatu zapisz konfigurację (instancja zostanie uruchomiona ponownie).`,custom_assistant_Script:zo,"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:Bo,custom_assistant_Speak:Vo,"custom_assistant_Speak on all satellites":`Mów na wszystkich satelitach`,"custom_assistant_Speech recognition":`Rozpoznawanie mowy`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Synteza mowy`,"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:Ho,"custom_assistant_States read":`Odczytane stany`,"custom_assistant_States written":`Zapisane stany`,custom_assistant_Status:Uo,custom_assistant_Steps:Wo,"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_Thinking…":`Myślący…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Go,custom_assistant_Tool:Ko,"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:qo,"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:Jo,"custom_assistant_change it on the Voice tab":`zmień to na karcie Głos`,custom_assistant_delete_wake_word_confirm:Yo,custom_assistant_device:Xo,custom_assistant_filter:Zo,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Qo,"custom_assistant_in progress":`w toku`,custom_assistant_llm_downloading:$o,custom_assistant_llm_error:es,custom_assistant_llm_idle:ts,custom_assistant_llm_installing:ns,custom_assistant_llm_loading:rs,"custom_assistant_llm_not installed":`nie zainstalowano`,custom_assistant_llm_ready:is,"custom_assistant_no name in %s (showing %s)":`Brak nazwy w "%s" — wyświetlanie "%s"`,custom_assistant_offline:as,custom_assistant_online:os,custom_assistant_read:ss,custom_assistant_room:cs,custom_assistant_sat_idle:ls,custom_assistant_sat_listening:us,custom_assistant_sat_offline:ds,custom_assistant_sat_processing:fs,custom_assistant_sat_speaking:ps,custom_assistant_type:`Typ`,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:ms,custom_assistant_wake_word_hint:hs,custom_assistant_wake_word_phrase_hint:gs,custom_assistant_wake_word_upload_hint:_s,custom_assistant_wake_word_uploaded:vs,custom_assistant_write:ys},xs=e({custom_assistant_Announcement:()=>Ss,custom_assistant_Answer:()=>Cs,custom_assistant_Cancel:()=>ws,custom_assistant_Chat:()=>Ts,custom_assistant_Close:()=>Es,custom_assistant_Context:()=>Ds,custom_assistant_Copied:()=>Os,custom_assistant_Copy:()=>ks,custom_assistant_Delete:()=>As,custom_assistant_Error:()=>js,custom_assistant_Host:()=>Ms,custom_assistant_Question:()=>Ns,custom_assistant_Request:()=>Ps,custom_assistant_Room:()=>Fs,custom_assistant_Routine:()=>Is,custom_assistant_Satellite:()=>Ls,custom_assistant_Satellites:()=>Rs,custom_assistant_Script:()=>zs,custom_assistant_Source:()=>Bs,custom_assistant_Speak:()=>Vs,custom_assistant_State:()=>Hs,custom_assistant_Status:()=>Us,custom_assistant_Steps:()=>Ws,custom_assistant_Time:()=>Gs,custom_assistant_Tool:()=>Ks,custom_assistant_Upload:()=>qs,custom_assistant_auto:()=>Js,custom_assistant_delete_wake_word_confirm:()=>Ys,custom_assistant_device:()=>Xs,custom_assistant_filter:()=>Zs,custom_assistant_hint:()=>Qs,custom_assistant_llm_downloading:()=>$s,custom_assistant_llm_error:()=>ec,custom_assistant_llm_idle:()=>tc,custom_assistant_llm_installing:()=>nc,custom_assistant_llm_loading:()=>rc,custom_assistant_llm_ready:()=>ic,custom_assistant_offline:()=>ac,custom_assistant_online:()=>oc,custom_assistant_read:()=>`Ler`,custom_assistant_room:()=>sc,custom_assistant_sat_idle:()=>cc,custom_assistant_sat_listening:()=>lc,custom_assistant_sat_offline:()=>uc,custom_assistant_sat_processing:()=>dc,custom_assistant_sat_speaking:()=>fc,custom_assistant_type:()=>pc,custom_assistant_wake_word_deleted:()=>mc,custom_assistant_wake_word_hint:()=>hc,custom_assistant_wake_word_phrase_hint:()=>gc,custom_assistant_wake_word_upload_hint:()=>_c,custom_assistant_wake_word_uploaded:()=>vc,custom_assistant_write:()=>yc,default:()=>bc}),Ss=`Anúncio`,Cs=`Resposta`,ws=`Cancel`,Ts=`Chat`,Es=`Close`,Ds=`Contexto`,Os=`Copiado`,ks=`Copiar`,As=`Delete`,js=`Erro`,Ms=`Hospedar`,Ns=`Pergunta`,Ps=`Pedido`,Fs=`Room`,Is=`Routine`,Ls=`Satélite`,Rs=`Satélites`,zs=`Script`,Bs=`Source`,Vs=`Falar`,Hs=`State`,Us=`Status`,Ws=`Passos`,Gs=`Hora`,Ks=`Ferramenta`,qs=`Carregar`,Js=`auto`,Ys=`Eliminar "%s"? Deixará de ser oferecido aos dispositivos; um dispositivo que já o transferiu mantém-no.`,Xs=`Dispositivo`,Zs=`Filtro`,Qs=`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.`,$s=`baixando modelo…`,ec=`erro`,tc=`parado`,nc=`Instalando o motor…`,rc=`carregando…`,ic=`preparar`,ac=`offline`,oc=`on-line`,sc=`Sala`,cc=`parado`,lc=`audição`,uc=`offline`,dc=`processamento`,fc=`Falando`,pc=`Tipo`,mc=`"%s" foi eliminado. Um dispositivo que já o transferiu mantém a sua cópia.`,hc=`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.`,gc=`O que diz para acordar o dispositivo — é assim que aparece na lista.`,_c=`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.`,vc=`"%s" foi carregado. Selecione-o acima para o ativar — o dispositivo transfere então o modelo.`,yc=`Escrever`,bc={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Ss,custom_assistant_Answer:Cs,custom_assistant_Cancel:ws,custom_assistant_Chat:Ts,"custom_assistant_Clear chat":`Chat limpo`,"custom_assistant_Click for details":`Clique para ver detalhes`,custom_assistant_Close:Es,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Recolher tudo`,custom_assistant_Context:Ds,custom_assistant_Copied:Os,custom_assistant_Copy:ks,"custom_assistant_Copy everything as JSON":`Copiar tudo como JSON`,custom_assistant_Delete:As,"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:js,"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:Ms,"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 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_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:Ns,"custom_assistant_Read answers aloud":`Leia as respostas em voz alta.`,"custom_assistant_Recorded audio":`Áudio gravado`,"custom_assistant_Refresh device cache":`Atualizar cache do dispositivo`,"custom_assistant_Reply audio":`Áudio da resposta`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Ps,"custom_assistant_Request details":`Detalhes do pedido`,custom_assistant_Room:Fs,custom_assistant_Routine:Is,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Ls,custom_assistant_Satellites:Rs,"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:zs,"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:Bs,custom_assistant_Speak:Vs,"custom_assistant_Speak on all satellites":`Fale em todos os satélites`,"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_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:Hs,"custom_assistant_States read":`Estados lidos`,"custom_assistant_States written":`Estados escritos`,custom_assistant_Status:Us,custom_assistant_Steps:Ws,"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_Thinking…":`Pensamento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Gs,custom_assistant_Tool:Ks,"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:qs,"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:Js,"custom_assistant_change it on the Voice tab":`Altere isso na guia Voz.`,custom_assistant_delete_wake_word_confirm:Ys,custom_assistant_device:Xs,custom_assistant_filter:Zs,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:Qs,"custom_assistant_in progress":`em curso`,custom_assistant_llm_downloading:$s,custom_assistant_llm_error:ec,custom_assistant_llm_idle:tc,custom_assistant_llm_installing:nc,custom_assistant_llm_loading:rc,"custom_assistant_llm_not installed":`não instalado`,custom_assistant_llm_ready:ic,"custom_assistant_no name in %s (showing %s)":`Nenhum nome em "%s" — exibindo "%s"`,custom_assistant_offline:ac,custom_assistant_online:oc,custom_assistant_read:`Ler`,custom_assistant_room:sc,custom_assistant_sat_idle:cc,custom_assistant_sat_listening:lc,custom_assistant_sat_offline:uc,custom_assistant_sat_processing:dc,custom_assistant_sat_speaking:fc,custom_assistant_type:pc,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:mc,custom_assistant_wake_word_hint:hc,custom_assistant_wake_word_phrase_hint:gc,custom_assistant_wake_word_upload_hint:_c,custom_assistant_wake_word_uploaded:vc,custom_assistant_write:yc},xc=e({custom_assistant_Announcement:()=>Sc,custom_assistant_Answer:()=>Cc,custom_assistant_Cancel:()=>wc,custom_assistant_Chat:()=>Tc,custom_assistant_Close:()=>Ec,custom_assistant_Context:()=>Dc,custom_assistant_Copied:()=>Oc,custom_assistant_Copy:()=>kc,custom_assistant_Delete:()=>Ac,custom_assistant_Error:()=>jc,custom_assistant_Host:()=>Mc,custom_assistant_Question:()=>Nc,custom_assistant_Request:()=>Pc,custom_assistant_Room:()=>Fc,custom_assistant_Routine:()=>Ic,custom_assistant_Satellite:()=>Lc,custom_assistant_Satellites:()=>Rc,custom_assistant_Script:()=>zc,custom_assistant_Source:()=>Bc,custom_assistant_Speak:()=>Vc,custom_assistant_State:()=>Hc,custom_assistant_Status:()=>Uc,custom_assistant_Steps:()=>Wc,custom_assistant_Time:()=>Gc,custom_assistant_Tool:()=>Kc,custom_assistant_Upload:()=>qc,custom_assistant_auto:()=>Jc,custom_assistant_delete_wake_word_confirm:()=>Yc,custom_assistant_device:()=>Xc,custom_assistant_filter:()=>Zc,custom_assistant_hint:()=>Qc,custom_assistant_llm_downloading:()=>$c,custom_assistant_llm_error:()=>el,custom_assistant_llm_idle:()=>tl,custom_assistant_llm_installing:()=>nl,custom_assistant_llm_loading:()=>rl,custom_assistant_llm_ready:()=>il,custom_assistant_offline:()=>al,custom_assistant_online:()=>ol,custom_assistant_read:()=>sl,custom_assistant_room:()=>cl,custom_assistant_sat_idle:()=>ll,custom_assistant_sat_listening:()=>ul,custom_assistant_sat_offline:()=>dl,custom_assistant_sat_processing:()=>fl,custom_assistant_sat_speaking:()=>pl,custom_assistant_type:()=>ml,custom_assistant_wake_word_deleted:()=>hl,custom_assistant_wake_word_hint:()=>gl,custom_assistant_wake_word_phrase_hint:()=>_l,custom_assistant_wake_word_upload_hint:()=>vl,custom_assistant_wake_word_uploaded:()=>yl,custom_assistant_write:()=>bl,default:()=>xl}),Sc=`Объявление`,Cc=`Ответ`,wc=`Отмена`,Tc=`Чат`,Ec=`Закрыть`,Dc=`Контекст`,Oc=`Скопировано`,kc=`Копировать`,Ac=`Удалить`,jc=`Ошибка`,Mc=`Хозяин`,Nc=`Вопрос`,Pc=`Запрос`,Fc=`Комната`,Ic=`Сценарий`,Lc=`Спутник`,Rc=`Спутники`,zc=`Скрипт`,Bc=`Источник`,Vc=`Говорить`,Hc=`Состояние`,Uc=`Статус`,Wc=`Шаги`,Gc=`Время`,Kc=`Инструмент`,qc=`Загрузить`,Jc=`авто`,Yc=`Удалить «%s»? Оно больше не будет предлагаться устройствам; устройство, которое уже скачало его, сохранит его.`,Xc=`Устройство`,Zc=`Фильтр`,Qc=`Снимите флажок «Чтение», чтобы скрыть устройство от голосового помощника, или снимите флажок «Запись», чтобы оставить его только для чтения (например, блокировка). По умолчанию устройствам разрешен полный доступ.`,$c=`Загрузка модели…`,el=`ошибка`,tl=`праздный`,nl=`установка двигателя…`,rl=`Загрузка…`,il=`готовый`,al=`офлайн`,ol=`онлайн`,sl=`Читать`,cl=`Комната`,ll=`праздный`,ul=`слушание`,dl=`офлайн`,fl=`обработка`,pl=`Говорящий`,ml=`Тип`,hl=`«%s» удалено. Устройство, которое уже скачало его, сохраняет свою копию.`,gl=`Слово активации обрабатывается на устройстве. Наведите курсор на слово, чтобы увидеть, на каких языках оно обучено — большинство только на английском.`,_l=`Что нужно сказать, чтобы разбудить устройство, — так оно будет показано в списке.`,vl=`Модель microWakeWord: файл .tflite, желательно вместе с его .json. Другие типы моделей (openWakeWord, Porcupine) так установить нельзя.`,yl=`«%s» загружено. Выберите его выше, чтобы активировать, — тогда устройство скачает модель.`,bl=`Писать`,xl={"custom_assistant_%s of %s active":`активно %s из %s`,"custom_assistant_(no spoken answer)":`(без голосового ответа)`,"custom_assistant_All sources":`Все источники`,custom_assistant_Announcement:Sc,custom_assistant_Answer:Cc,custom_assistant_Cancel:wc,custom_assistant_Chat:Tc,"custom_assistant_Clear chat":`Четкий чат`,"custom_assistant_Click for details":`Нажмите для подробностей`,custom_assistant_Close:Ec,"custom_assistant_Cloud LLM":`Облачная LLM`,"custom_assistant_Collapse all":`Свернуть все`,custom_assistant_Context:Dc,custom_assistant_Copied:Oc,custom_assistant_Copy:kc,"custom_assistant_Copy everything as JSON":`Скопировать всё как JSON`,custom_assistant_Delete:Ac,"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:jc,"custom_assistant_Expand all":`Развернуть все`,"custom_assistant_Follow-up":`Уточнение`,"custom_assistant_Hide disabled":`Скрыть отключено`,"custom_assistant_Hide processing details":`Скрыть детали обработки`,custom_assistant_Host:Mc,"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 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_Per-device permissions":`Разрешения для каждого устройства`,"custom_assistant_Play answer (backend TTS)":`Воспроизвести ответ (синтезатор речи на стороне сервера)`,"custom_assistant_Please select a .tflite model file":`Выберите файл модели .tflite`,custom_assistant_Question:Nc,"custom_assistant_Read answers aloud":`Прочитайте ответы вслух.`,"custom_assistant_Recorded audio":`Записанное аудио`,"custom_assistant_Refresh device cache":`Обновить кэш устройства`,"custom_assistant_Reply audio":`Аудио ответа`,"custom_assistant_Reply to a question":`Ответ на вопрос`,custom_assistant_Request:Pc,"custom_assistant_Request details":`Подробности запроса`,custom_assistant_Room:Fc,custom_assistant_Routine:Ic,"custom_assistant_Rule-based NLU":`Правила NLU (локально)`,custom_assistant_Satellite:Lc,custom_assistant_Satellites:Rc,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Сохраните конфигурацию (при этом экземпляр перезапустится) перед началом чата.`,custom_assistant_Script:zc,"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:Bc,custom_assistant_Speak:Vc,"custom_assistant_Speak on all satellites":`Выступить на всех спутниках`,"custom_assistant_Speech recognition":`Распознавание речи`,"custom_assistant_Speech recognition time":`Время распознавания речи`,"custom_assistant_Speech synthesis":`Синтез речи`,"custom_assistant_Start the assistant instance to chat.":`Запустите экземпляр ассистента для начала чата.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустите экземпляр помощника, чтобы загрузить список устройств.`,custom_assistant_State:Hc,"custom_assistant_States read":`Прочитанные состояния`,"custom_assistant_States written":`Записанные состояния`,custom_assistant_Status:Uc,custom_assistant_Steps:Wc,"custom_assistant_Stop listening":`Прекратите слушать`,"custom_assistant_Stop reading answers aloud":`Прекратите зачитывать ответы вслух.`,"custom_assistant_Stop word":`Стоп-слово`,"custom_assistant_Test chat":`Тестовый чат`,"custom_assistant_Thinking…":`Размышления…`,"custom_assistant_This satellite exposes no settings.":`Этот сателлит не предоставляет настроек.`,custom_assistant_Time:Gc,custom_assistant_Tool:Kc,"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:qc,"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:Jc,"custom_assistant_change it on the Voice tab":`Измените это на вкладке «Голос».`,custom_assistant_delete_wake_word_confirm:Yc,custom_assistant_device:Xc,custom_assistant_filter:Zc,"custom_assistant_follow-up":`продолжение`,custom_assistant_hint:Qc,"custom_assistant_in progress":`выполняется`,custom_assistant_llm_downloading:$c,custom_assistant_llm_error:el,custom_assistant_llm_idle:tl,custom_assistant_llm_installing:nl,custom_assistant_llm_loading:rl,"custom_assistant_llm_not installed":`не установлен`,custom_assistant_llm_ready:il,"custom_assistant_no name in %s (showing %s)":`Имя отсутствует в "%s" — отображается "%s"`,custom_assistant_offline:al,custom_assistant_online:ol,custom_assistant_read:sl,custom_assistant_room:cl,custom_assistant_sat_idle:ll,custom_assistant_sat_listening:ul,custom_assistant_sat_offline:dl,custom_assistant_sat_processing:fl,custom_assistant_sat_speaking:pl,custom_assistant_type:ml,"custom_assistant_waits for reply":`ждёт ответа`,custom_assistant_wake_word_deleted:hl,custom_assistant_wake_word_hint:gl,custom_assistant_wake_word_phrase_hint:_l,custom_assistant_wake_word_upload_hint:vl,custom_assistant_wake_word_uploaded:yl,custom_assistant_write:bl},Sl=e({custom_assistant_Announcement:()=>Cl,custom_assistant_Answer:()=>wl,custom_assistant_Cancel:()=>Tl,custom_assistant_Chat:()=>El,custom_assistant_Close:()=>Dl,custom_assistant_Context:()=>Ol,custom_assistant_Copied:()=>kl,custom_assistant_Copy:()=>Al,custom_assistant_Delete:()=>jl,custom_assistant_Error:()=>Ml,custom_assistant_Host:()=>Nl,custom_assistant_Question:()=>Pl,custom_assistant_Request:()=>Fl,custom_assistant_Room:()=>Il,custom_assistant_Routine:()=>Ll,custom_assistant_Satellite:()=>Rl,custom_assistant_Satellites:()=>zl,custom_assistant_Script:()=>Bl,custom_assistant_Source:()=>Vl,custom_assistant_Speak:()=>Hl,custom_assistant_State:()=>Ul,custom_assistant_Status:()=>Wl,custom_assistant_Steps:()=>Gl,custom_assistant_Time:()=>Kl,custom_assistant_Tool:()=>ql,custom_assistant_Upload:()=>Jl,custom_assistant_auto:()=>Yl,custom_assistant_delete_wake_word_confirm:()=>Xl,custom_assistant_device:()=>Zl,custom_assistant_filter:()=>Ql,custom_assistant_hint:()=>$l,custom_assistant_llm_downloading:()=>eu,custom_assistant_llm_error:()=>tu,custom_assistant_llm_idle:()=>nu,custom_assistant_llm_installing:()=>ru,custom_assistant_llm_loading:()=>iu,custom_assistant_llm_ready:()=>au,custom_assistant_offline:()=>ou,custom_assistant_online:()=>su,custom_assistant_read:()=>cu,custom_assistant_room:()=>lu,custom_assistant_sat_idle:()=>uu,custom_assistant_sat_listening:()=>du,custom_assistant_sat_offline:()=>fu,custom_assistant_sat_processing:()=>pu,custom_assistant_sat_speaking:()=>mu,custom_assistant_type:()=>hu,custom_assistant_wake_word_deleted:()=>gu,custom_assistant_wake_word_hint:()=>_u,custom_assistant_wake_word_phrase_hint:()=>vu,custom_assistant_wake_word_upload_hint:()=>yu,custom_assistant_wake_word_uploaded:()=>bu,custom_assistant_write:()=>xu,default:()=>Su}),Cl=`Оголошення`,wl=`Відповідь`,Tl=`Cancel`,El=`Chat`,Dl=`Close`,Ol=`Контекст`,kl=`Скопійовано`,Al=`Копіювати`,jl=`Delete`,Ml=`Помилка`,Nl=`Хост`,Pl=`Питання`,Fl=`Запит`,Il=`Room`,Ll=`Routine`,Rl=`Супутник`,zl=`Супутники`,Bl=`Script`,Vl=`Source`,Hl=`Говоріть`,Ul=`State`,Wl=`Статус`,Gl=`Кроки`,Kl=`Час`,ql=`Інструмент`,Jl=`Завантажити`,Yl=`авто`,Xl=`Видалити «%s»? Його більше не буде запропоновано пристроям; пристрій, який уже завантажив його, збереже його.`,Zl=`Пристрій`,Ql=`Фільтр`,$l=`Зніміть позначку «Читання», щоб приховати пристрій від помічника, або «Запис», щоб залишити його в режимі лише для читання (наприклад, блокування). За замовчуванням пристрої повністю дозволені.`,eu=`завантаження моделі…`,tu=`помилка`,nu=`бездіяльність`,ru=`встановлення двигуна…`,iu=`завантаження…`,au=`готовий`,ou=`офлайн`,su=`онлайн`,cu=`Читати`,lu=`Кімната`,uu=`бездіяльність`,du=`прослуховування`,fu=`офлайн`,pu=`обробка`,mu=`розмова`,hu=`Тип`,gu=`«%s» видалено. Пристрій, який уже завантажив його, зберігає свою копію.`,_u=`Слово активації обробляється на пристрої. Наведіть курсор на слово, щоб побачити, якими мовами його навчено — більшість лише англійською.`,vu=`Що потрібно сказати, щоб розбудити пристрій, — так воно з'явиться у списку.`,yu=`Модель microWakeWord: файл .tflite, бажано разом з його .json. Інші типи моделей (openWakeWord, Porcupine) так встановити не можна.`,bu=`«%s» завантажено. Виберіть його вище, щоб активувати, — тоді пристрій завантажить модель.`,xu=`Написати`,Su={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:Cl,custom_assistant_Answer:wl,custom_assistant_Cancel:Tl,custom_assistant_Chat:El,"custom_assistant_Clear chat":`Очистити чат`,"custom_assistant_Click for details":`Натисніть для подробиць`,custom_assistant_Close:Dl,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`Згорнути все`,custom_assistant_Context:Ol,custom_assistant_Copied:kl,custom_assistant_Copy:Al,"custom_assistant_Copy everything as JSON":`Скопіювати все як JSON`,custom_assistant_Delete:jl,"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:Ml,"custom_assistant_Expand all":`Розгорнути все`,"custom_assistant_Follow-up":`Уточнення`,"custom_assistant_Hide disabled":`Приховати вимкнено`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Nl,"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 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_Per-device permissions":`Дозволи для кожного пристрою`,"custom_assistant_Play answer (backend TTS)":`Відтворити відповідь (бекенд TTS)`,"custom_assistant_Please select a .tflite model file":`Виберіть файл моделі .tflite`,custom_assistant_Question:Pl,"custom_assistant_Read answers aloud":`Прочитайте відповіді вголос`,"custom_assistant_Recorded audio":`Записане аудіо`,"custom_assistant_Refresh device cache":`Оновити кеш пристрою`,"custom_assistant_Reply audio":`Аудіо відповіді`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Fl,"custom_assistant_Request details":`Подробиці запиту`,custom_assistant_Room:Il,custom_assistant_Routine:Ll,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:Rl,custom_assistant_Satellites:zl,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Збережіть конфігурацію (екземпляр перезавантажиться) перед спілкуванням у чаті.`,custom_assistant_Script:Bl,"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:Vl,custom_assistant_Speak:Hl,"custom_assistant_Speak on all satellites":`Розмовляйте на всіх супутниках`,"custom_assistant_Speech recognition":`Розпізнавання мовлення`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`Синтез мовлення`,"custom_assistant_Start the assistant instance to chat.":`Запустіть екземпляр помічника для спілкування в чаті.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустіть екземпляр помічника, щоб завантажити список пристроїв.`,custom_assistant_State:Ul,"custom_assistant_States read":`Прочитані стани`,"custom_assistant_States written":`Записані стани`,custom_assistant_Status:Wl,custom_assistant_Steps:Gl,"custom_assistant_Stop listening":`Перестань слухати`,"custom_assistant_Stop reading answers aloud":`Перестаньте читати відповіді вголос`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`Тестовий чат`,"custom_assistant_Thinking…":`Мислення…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:Kl,custom_assistant_Tool:ql,"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:Jl,"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:Yl,"custom_assistant_change it on the Voice tab":`змінити це на вкладці «Голос»`,custom_assistant_delete_wake_word_confirm:Xl,custom_assistant_device:Zl,custom_assistant_filter:Ql,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:$l,"custom_assistant_in progress":`виконується`,custom_assistant_llm_downloading:eu,custom_assistant_llm_error:tu,custom_assistant_llm_idle:nu,custom_assistant_llm_installing:ru,custom_assistant_llm_loading:iu,"custom_assistant_llm_not installed":`не встановлено`,custom_assistant_llm_ready:au,"custom_assistant_no name in %s (showing %s)":`Немає імені в "%s" — відображається "%s"`,custom_assistant_offline:ou,custom_assistant_online:su,custom_assistant_read:cu,custom_assistant_room:lu,custom_assistant_sat_idle:uu,custom_assistant_sat_listening:du,custom_assistant_sat_offline:fu,custom_assistant_sat_processing:pu,custom_assistant_sat_speaking:mu,custom_assistant_type:hu,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:gu,custom_assistant_wake_word_hint:_u,custom_assistant_wake_word_phrase_hint:vu,custom_assistant_wake_word_upload_hint:yu,custom_assistant_wake_word_uploaded:bu,custom_assistant_write:xu},Cu=e({custom_assistant_Announcement:()=>wu,custom_assistant_Answer:()=>Tu,custom_assistant_Cancel:()=>Eu,custom_assistant_Chat:()=>Du,custom_assistant_Close:()=>Ou,custom_assistant_Context:()=>ku,custom_assistant_Copied:()=>Au,custom_assistant_Copy:()=>ju,custom_assistant_Delete:()=>Mu,custom_assistant_Error:()=>Nu,custom_assistant_Host:()=>Pu,custom_assistant_Question:()=>Fu,custom_assistant_Request:()=>Iu,custom_assistant_Room:()=>Lu,custom_assistant_Routine:()=>Ru,custom_assistant_Satellite:()=>zu,custom_assistant_Satellites:()=>Bu,custom_assistant_Script:()=>Vu,custom_assistant_Source:()=>Hu,custom_assistant_Speak:()=>Uu,custom_assistant_State:()=>Wu,custom_assistant_Status:()=>Gu,custom_assistant_Steps:()=>Ku,custom_assistant_Time:()=>qu,custom_assistant_Tool:()=>Ju,custom_assistant_Upload:()=>Yu,custom_assistant_auto:()=>Xu,custom_assistant_delete_wake_word_confirm:()=>Zu,custom_assistant_device:()=>Qu,custom_assistant_filter:()=>$u,custom_assistant_hint:()=>ed,custom_assistant_llm_downloading:()=>td,custom_assistant_llm_error:()=>nd,custom_assistant_llm_idle:()=>rd,custom_assistant_llm_installing:()=>id,custom_assistant_llm_loading:()=>ad,custom_assistant_llm_ready:()=>od,custom_assistant_offline:()=>sd,custom_assistant_online:()=>cd,custom_assistant_read:()=>`读`,custom_assistant_room:()=>ld,custom_assistant_sat_idle:()=>ud,custom_assistant_sat_listening:()=>dd,custom_assistant_sat_offline:()=>fd,custom_assistant_sat_processing:()=>pd,custom_assistant_sat_speaking:()=>md,custom_assistant_type:()=>hd,custom_assistant_wake_word_deleted:()=>gd,custom_assistant_wake_word_hint:()=>_d,custom_assistant_wake_word_phrase_hint:()=>vd,custom_assistant_wake_word_upload_hint:()=>yd,custom_assistant_wake_word_uploaded:()=>bd,custom_assistant_write:()=>`写`,default:()=>xd}),wu=`公告`,Tu=`回答`,Eu=`Cancel`,Du=`Chat`,Ou=`Close`,ku=`上下文`,Au=`已复制`,ju=`复制`,Mu=`Delete`,Nu=`错误`,Pu=`主持人`,Fu=`问题`,Iu=`请求`,Lu=`Room`,Ru=`Routine`,zu=`卫星`,Bu=`卫星`,Vu=`Script`,Hu=`Source`,Uu=`说话`,Wu=`State`,Gu=`地位`,Ku=`步骤`,qu=`时间`,Ju=`工具`,Yu=`上传`,Xu=`汽车`,Zu=`删除“%s”?它将不再提供给设备;已下载它的设备会保留它。`,Qu=`设备`,$u=`筛选`,ed=`取消勾选“读取”选项可将设备对语音助手隐藏,取消勾选“写入”选项可将其设置为只读(例如,锁定设备)。设备默认设置为完全允许访问。`,td=`正在下载模型…`,nd=`错误`,rd=`闲置的`,id=`安装发动机…`,ad=`加载中…`,od=`准备好`,sd=`离线`,cd=`在线的`,ld=`房间`,ud=`闲置的`,dd=`聆听`,fd=`离线`,pd=`加工`,md=`请讲`,hd=`类型`,gd=`“%s”已删除。已下载它的设备会保留其副本。`,_d=`唤醒词在设备上运行。将鼠标悬停在某个词上可查看它训练所用的语言——大多数仅支持英语。`,vd=`唤醒设备时要说的话——列表中会这样显示。`,yd=`microWakeWord 模型:.tflite 文件,最好连同其 .json 一起。其他模型类型(openWakeWord、Porcupine)无法通过此方式安装。`,bd=`“%s”已上传。在上方选择它即可启用——设备会在此时下载模型。`,xd={"custom_assistant_%s of %s active":`%s of %s active`,"custom_assistant_(no spoken answer)":`(no spoken answer)`,"custom_assistant_All sources":`All sources`,custom_assistant_Announcement:wu,custom_assistant_Answer:Tu,custom_assistant_Cancel:Eu,custom_assistant_Chat:Du,"custom_assistant_Clear chat":`清晰聊天`,"custom_assistant_Click for details":`点击查看详情`,custom_assistant_Close:Ou,"custom_assistant_Cloud LLM":`Cloud LLM`,"custom_assistant_Collapse all":`全部折叠`,custom_assistant_Context:ku,custom_assistant_Copied:Au,custom_assistant_Copy:ju,"custom_assistant_Copy everything as JSON":`全部复制为 JSON`,custom_assistant_Delete:Mu,"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:Nu,"custom_assistant_Expand all":`全部展开`,"custom_assistant_Follow-up":`追问`,"custom_assistant_Hide disabled":`隐藏已禁用`,"custom_assistant_Hide processing details":`Hide processing details`,custom_assistant_Host:Pu,"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 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_Per-device permissions":`每个设备的权限`,"custom_assistant_Play answer (backend TTS)":`播放答案(后端 TTS)`,"custom_assistant_Please select a .tflite model file":`请选择 .tflite 模型文件`,custom_assistant_Question:Fu,"custom_assistant_Read answers aloud":`大声朗读答案`,"custom_assistant_Recorded audio":`录制的音频`,"custom_assistant_Refresh device cache":`刷新设备缓存`,"custom_assistant_Reply audio":`回复音频`,"custom_assistant_Reply to a question":`Reply to a question`,custom_assistant_Request:Iu,"custom_assistant_Request details":`请求详情`,custom_assistant_Room:Lu,custom_assistant_Routine:Ru,"custom_assistant_Rule-based NLU":`Rule-based NLU (local)`,custom_assistant_Satellite:zu,custom_assistant_Satellites:Bu,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`聊天前请保存配置(实例将重启)。`,custom_assistant_Script:Vu,"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:Hu,custom_assistant_Speak:Uu,"custom_assistant_Speak on all satellites":`在所有卫星上通话`,"custom_assistant_Speech recognition":`语音识别`,"custom_assistant_Speech recognition time":`Speech recognition time`,"custom_assistant_Speech synthesis":`语音合成`,"custom_assistant_Start the assistant instance to chat.":`启动助手实例进行聊天。`,"custom_assistant_Start the assistant instance to load the device list.":`启动助手实例以加载设备列表。`,custom_assistant_State:Wu,"custom_assistant_States read":`读取的状态`,"custom_assistant_States written":`写入的状态`,custom_assistant_Status:Gu,custom_assistant_Steps:Ku,"custom_assistant_Stop listening":`别听了`,"custom_assistant_Stop reading answers aloud":`停止大声朗读答案`,"custom_assistant_Stop word":`Stop word`,"custom_assistant_Test chat":`测试聊天`,"custom_assistant_Thinking…":`思维…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,custom_assistant_Time:qu,custom_assistant_Tool:Ju,"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:Yu,"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:Xu,"custom_assistant_change it on the Voice tab":`在“语音”选项卡上更改。`,custom_assistant_delete_wake_word_confirm:Zu,custom_assistant_device:Qu,custom_assistant_filter:$u,"custom_assistant_follow-up":`follow-up`,custom_assistant_hint:ed,"custom_assistant_in progress":`进行中`,custom_assistant_llm_downloading:td,custom_assistant_llm_error:nd,custom_assistant_llm_idle:rd,custom_assistant_llm_installing:id,custom_assistant_llm_loading:ad,"custom_assistant_llm_not installed":`未安装`,custom_assistant_llm_ready:od,"custom_assistant_no name in %s (showing %s)":`“%s”中没有名称——显示“%s”`,custom_assistant_offline:sd,custom_assistant_online:cd,custom_assistant_read:`读`,custom_assistant_room:ld,custom_assistant_sat_idle:ud,custom_assistant_sat_listening:dd,custom_assistant_sat_offline:fd,custom_assistant_sat_processing:pd,custom_assistant_sat_speaking:md,custom_assistant_type:hd,"custom_assistant_waits for reply":`waits for reply`,custom_assistant_wake_word_deleted:gd,custom_assistant_wake_word_hint:_d,custom_assistant_wake_word_phrase_hint:vd,custom_assistant_wake_word_upload_hint:yd,custom_assistant_wake_word_uploaded:bd,custom_assistant_write:`写`};F();var Sd={},Cd=Object.assign({"./i18n/de.json":ve,"./i18n/en.json":vt,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":ya,"./i18n/pl.json":xo,"./i18n/pt.json":xs,"./i18n/ru.json":xc,"./i18n/uk.json":Sl,"./i18n/zh-cn.json":Cu});for(let[e,t]of Object.entries(Cd)){var wd;let n=((wd=e.split(`/`).pop())==null?void 0:wd.replace(`.json`,``))||`en`;Sd[n]=t.default}V.extendTranslations(Sd);var Td=new Set([`temperature`,`humidity`,`illuminance`,`motion`,`door`,`window`,`windowTilt`,`fireAlarm`,`floodAlarm`,`camera`,`weatherCurrent`,`weatherForecast`,`warning`,`location`,`info`,`chart`,`image`,`instance`]);function Ed(e){return e===`lock`?{read:!0,write:!1}:{read:!0,write:!0}}var Dd=[{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:`简体中文`}],Od=class extends _e{constructor(e){super(e),p(this,`aliveSubId`,``),p(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||``)||V.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:V.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])||Ed(e.type)}setAcl(e,t){let n=JSON.parse(JSON.stringify(this.props.data));n.deviceAcl=n.deviceAcl||{};let r=Ed(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 v(x,{});if(!this.state.alive)return v(M,{sx:{p:2},color:`warning.main`,children:V.t(`custom_assistant_Start the assistant instance to load the device list.`)});if(!this.state.devices.length)return v(M,{sx:{p:2},children:V.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 a=this.props.oContext.themeType===`dark`;return n(U,{sx:{width:`100%`},children:[v(M,{variant:`h6`,sx:{mt:1},children:V.t(`custom_assistant_Per-device permissions`)}),v(M,{variant:`body2`,sx:{mb:1},color:`text.secondary`,children:V.t(`custom_assistant_hint`)}),n(U,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1,flexWrap:`wrap`},children:[v(R,{size:`small`,color:`primary`,variant:`outlined`,label:V.t(`custom_assistant_Name language: %s`,((e=Dd.find(e=>e.value===this.editLang))==null?void 0:e.label)||this.editLang)}),v(M,{variant:`caption`,color:`text.secondary`,children:V.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 v(I,{size:`small`,variant:`outlined`,startIcon:t?v(L,{size:14}):v(D,{}),disabled:!e||t,onClick:()=>void this.translateAllMissing(),children:V.t(`custom_assistant_Translate all missing (%s)`,e)})})(),v(U,{sx:{flex:1}}),v(B,{control:v(c,{size:`small`,checked:this.state.hideDisabled,onChange:e=>this.setState({hideDisabled:e.target.checked})}),label:V.t(`custom_assistant_Hide disabled`)}),v(z,{variant:`standard`,size:`small`,label:`Filter`,value:this.state.filter,onChange:e=>this.setState({filter:e.target.value}),sx:{width:320}})]}),v(r,{component:u,sx:{width:`100%`},children:n(O,{size:`small`,children:[v(P,{children:n(le,{sx:{background:a?`#333`:`#DDD`},children:[v(y,{children:V.t(`custom_assistant_device`)}),v(y,{children:V.t(`custom_assistant_type`)}),v(y,{children:V.t(`custom_assistant_room`)}),v(y,{align:`center`,children:V.t(`custom_assistant_read`)}),v(y,{align:`center`,children:V.t(`custom_assistant_write`)})]})}),v(j,{children:i.map(e=>{let t=this.getAcl(e),r=e.writableStateIds.length>0&&!Td.has(e.type),i=!t.read;return n(le,{sx:{background:this.rowColor(e.key),opacity:i?.5:1,transition:`background-color 0.4s`},children:[n(y,{children:[(()=>{let t=this.nameFor(e),r=!!this.state.translatingKeys[e.key],i=this.state.savingKey===e.key||r;return n(U,{sx:{display:`flex`,alignItems:`flex-start`,gap:.5},children:[v(z,{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]?V.t(`custom_assistant_no name in %s (showing %s)`,this.editLang,t.from===`auto`?V.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?v(L,{size:14}):null}}}),v(H,{title:V.t(`custom_assistant_Translate name into %s`,this.editLang),children:v(`span`,{children:v(g,{size:`small`,disabled:i,onClick:()=>void this.translateName(e),children:r?v(L,{size:16}):v(D,{fontSize:`small`})})})})]})})(),e.stateIds.length?v(M,{variant:`caption`,component:`div`,sx:{wordBreak:`break-all`,fontStyle:`italic`,opacity:.7,fontSize:`smaller`},children:e.stateIds.join(`, `)}):null]}),v(y,{children:n(U,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[v(N,{type:e.type,style:{width:20,height:20}}),v(`span`,{children:V.t(`type-${e.type}`)})]})}),v(y,{children:e.room&&e.room!==`No room`?e.room:`-`}),v(y,{align:`center`,children:v(oe,{checked:t.read,onChange:()=>this.setAcl(e,{read:!t.read})})}),v(y,{align:`center`,children:v(oe,{checked:t.write&&r,disabled:!r,onChange:()=>this.setAcl(e,{write:!t.write})})})]},e.key)})})]})})]})}},kd={chat:`Chat`,script:`custom_assistant_Script`,state:`custom_assistant_State`,telegram:`Telegram`,esphome:`ESPHome`,udp:`UDP`,native:`ioBroker`,wyoming:`Wyoming`},Ad={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`},jd={stop:`#78909c`,askReply:`#78909c`,routine:`#00897b`,nlu:`#43a047`,localLlm:`#8e24aa`,cloud:`#1e88e5`,none:`#e53935`},Md={...Ad,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`},Nd={...jd,request:`#607d8b`,stt:`#00838f`,context:`#8d6e63`,youtube:`#ff7043`,tool:`#fb8c00`,state:`#6d4c41`,answer:`#3949ab`,tts:`#00acc1`,error:`#c62828`};function Pd(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 J(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 Y=`ui-monospace, SFMono-Regular, Menlo, Consolas, monospace`;async function Fd(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 Id(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 Ld(e){return`${e<0?`−`:`+`}${q(Math.abs(e))}`}function Rd(e){let t=e.trim();if(/^[[{]/.test(t))try{return JSON.parse(t)}catch{return}}function zd(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Bd(e){return zd(e)&&typeof e.role==`string`&&(`content`in e||`tool_calls`in e)}function Vd(e){return Array.isArray(e)&&e.length>0&&e.every(e=>zd(e)&&typeof e.type==`string`&&(`text`in e||`input`in e||`content`in e||`thinking`in e))}function Hd(e){return v(H,{title:V.t(`custom_assistant_Copy`),children:v(g,{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:v(E,{sx:{fontSize:`0.9rem`}})})})}function X(e){return n(U,{sx:{position:`relative`},children:[v(U,{component:`pre`,sx:{m:0,p:1,pr:3.5,fontFamily:Y,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}),v(Hd,{text:e.text,ctx:e.ctx})]})}function Z(e){return v(X,{text:JSON.stringify(e.value,null,2),ctx:e.ctx})}function Ud(e){let t=Rd(e.text);return t===void 0?e.text.length>100||e.text.includes(`
|
|
2
|
-
`)?v(X,{text:e.text,ctx:e.ctx}):v(`span`,{style:{fontFamily:Y,fontSize:`0.78rem`},children:Pd(e.text)}):v(Z,{value:t,ctx:e.ctx})}var Wd={system:`#757575`,user:`#1e88e5`,assistant:`#43a047`,tool:`#fb8c00`};function Q(e){return v(R,{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 Gd(e){let{block:t,ctx:r}=e,i=t.cache_control?v(Q,{label:`cache_control`}):null,a=null,o;return t.type===`text`?o=v(X,{text:String(t.text??``),ctx:r}):t.type===`tool_use`?(a=`🔧 ${String(t.name)}`,o=v(Z,{value:t.input,ctx:r})):t.type===`tool_result`?(a=`↩ ${V.t(`custom_assistant_Tool result`)}`,o=typeof t.content==`string`?v(Ud,{text:t.content,ctx:r}):v(Z,{value:t.content,ctx:r})):t.type===`thinking`?(a=`💭 thinking`,o=v(X,{text:String(t.thinking??``),ctx:r})):o=v(Z,{value:t,ctx:r}),n(U,{sx:{mb:.75},children:[a||i?n(U,{sx:{display:`flex`,alignItems:`center`,mb:.25,fontFamily:Y,fontSize:`0.76rem`},children:[v(`span`,{style:{marginRight:6},children:a}),i]}):null,o]})}function Kd(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(U,{sx:{mb:1,pl:1,borderLeft:`3px solid ${Wd[i]||`#9e9e9e`}`},children:[v(U,{sx:{mb:.5},children:v(Q,{label:i,color:Wd[i]})}),typeof a==`string`&&a?v(Ud,{text:a,ctx:r}):null,Vd(a)?a.map((e,t)=>v(Gd,{block:e,ctx:r},t)):null,o.map((e,t)=>{let i=zd(e.function)?e.function:{},a=typeof i.arguments==`string`?Rd(i.arguments)??i.arguments:i.arguments;return n(U,{sx:{mb:.75},children:[n(U,{sx:{fontFamily:Y,fontSize:`0.76rem`,mb:.25},children:[`🔧 `,String(i.name)]}),v(Z,{value:a,ctx:r})]},t)})]})}function qd(e){let{value:t,ctx:n,depth:r}=e;if(t==null)return v(`span`,{style:{opacity:.5},children:`—`});if(typeof t==`string`)return v(Ud,{text:t,ctx:n});if(typeof t!=`object`)return v(`span`,{style:{fontFamily:Y,fontSize:`0.78rem`},children:String(t)});if(Array.isArray(t)&&t.length&&t.every(Bd))return v(U,{children:t.map((e,t)=>v(Kd,{msg:e,ctx:n},t))});if(Vd(t))return v(U,{children:t.map((e,t)=>v(Gd,{block:e,ctx:n},t))});if(Bd(t))return v(Kd,{msg:t,ctx:n});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?v(X,{text:e,ctx:n}):v(`span`,{style:{fontFamily:Y,fontSize:`0.78rem`},children:e||`[]`})}return zd(t)&&r<2?v(Jd,{data:t,ctx:n,depth:r+1}):v(Z,{value:t,ctx:n})}function Jd(e){let r=Object.keys(e.data).filter(t=>e.data[t]!==void 0);return v(U,{sx:{display:`grid`,gridTemplateColumns:`minmax(90px, max-content) 1fr`,columnGap:1.5,rowGap:.5},children:r.map(r=>n(t.Fragment,{children:[v(U,{sx:{fontFamily:Y,fontSize:`0.74rem`,opacity:.65,pt:`2px`},children:r}),v(U,{sx:{minWidth:0},children:v(qd,{value:e.data[r],ctx:e.ctx,depth:e.depth})})]},r))})}function $(e){return n(U,{sx:{minWidth:0},children:[v(M,{variant:`caption`,component:`div`,sx:{opacity:.6,lineHeight:1.2},children:e.label}),v(U,{sx:{fontSize:`0.85rem`,wordBreak:`break-word`},children:e.children})]})}function Yd(e){let{entry:r,dark:i}=e,[a,s]=t.useState(void 0),[c,l]=t.useState(``),[u,d]=t.useState(0),[f,p]=t.useState({}),[m,h]=t.useState(!1),_=t.useRef(!1),y=t.useRef(!1),{fetchTrace:b}=e,x=t.useCallback(async()=>{if(_.current)y.current=!0;else{_.current=!0;try{do{y.current=!1;try{let e=await b(r.id);l(e.error||``),s(e.error?null:e.steps??null)}catch(e){l(e.message)}}while(y.current)}finally{_.current=!1}}},[b,r.id]);t.useEffect(()=>{x()},[r,x]);let S={dark:i,onCopy:e=>{Fd(e).then(e=>{e&&(h(!0),setTimeout(()=>h(!1),1500))})}},w=[...a||[]].map((e,t)=>({...e,i:t})).sort((e,t)=>e.t-t.t||e.i-t.i),D=Math.min(0,...w.map(e=>e.t)),ee=Math.max(r.ms||0,...w.map(e=>e.t+(e.ms||0))),O=Math.max(1,ee-D),k=w.length>0&&w.every(e=>f[e.i]||e.data===void 0),te=JSON.stringify({entry:r,steps:a??null},null,2),j={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`},N=e=>{let t=e.level===`error`?`#c62828`:Nd[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-D)/O*100,c=e.ms===void 0?0:Math.max(e.ms/O*100,.4);return n(U,{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(U,{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:[v(U,{sx:{fontFamily:Y,fontSize:`0.72rem`,opacity:.6,textAlign:`right`},children:Ld(e.t)}),v(U,{children:v(Q,{label:Md[e.stage]?V.t(Md[e.stage]):e.stage,color:Nd[e.stage]})}),n(U,{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?v(`span`,{style:{opacity:.6,fontSize:`0.72rem`,marginLeft:8},children:J(e.tokens)}):null]}),v(U,{sx:{fontFamily:Y,fontSize:`0.72rem`,textAlign:`right`,opacity:.8},children:q(e.ms)}),v(U,{sx:{fontSize:`0.7rem`,opacity:.5},children:r?a?`▾`:`▸`:``})]}),n(U,{sx:{position:`relative`,height:4,mx:1,mt:.4,mb:.6,ml:`calc(64px + 132px + 24px)`},children:[v(U,{sx:{position:`absolute`,inset:0,borderRadius:2,background:i?`rgba(255,255,255,0.05)`:`rgba(0,0,0,0.04)`}}),v(U,{sx:{position:`absolute`,top:c?0:-1,height:c?4:6,left:`${s}%`,width:c?`${c}%`:2,borderRadius:2,background:t}})]}),a&&r?n(U,{sx:{px:1,pb:1.5,ml:{xs:0,sm:`calc(64px + 8px)`}},children:[e.tokens?n(M,{variant:`caption`,component:`div`,sx:{mb:.5,opacity:.75},children:[`Tokens: `,J(e.tokens)]}):null,e.data===void 0?null:v(qd,{value:e.data,ctx:S,depth:0})]}):null]},e.i)},re=()=>a===void 0&&!c?n(U,{sx:{display:`flex`,alignItems:`center`,gap:1,p:2},children:[v(L,{size:18}),v(M,{variant:`body2`,children:V.t(`custom_assistant_Loading…`)})]}):w.length?v(U,{children:w.map(N)}):v(M,{variant:`body2`,sx:{p:2,opacity:.7},children:c||V.t(`custom_assistant_No processing steps were recorded for this request.`)}),P=()=>{let e={fontFamily:Y,fontSize:`0.78rem`};return n(U,{sx:{p:1},children:[n(M,{variant:`subtitle2`,sx:{mb:.5},children:[V.t(`custom_assistant_Tool calls`),` (`,r.tools.length,`)`]}),r.tools.length?r.tools.map((t,r)=>n(U,{sx:{...e,mb:.75,color:t.error?`error.main`:void 0},children:[`🔧 `,v(`b`,{children:t.name}),`(`,JSON.stringify(t.args),`)`,` `,v(`span`,{style:{opacity:.6},children:q(t.ms)}),n(U,{sx:{pl:2.5,opacity:.85},children:[`→ `,t.error?`⚠ ${t.error}`:t.result]})]},r)):v(M,{variant:`body2`,sx:{opacity:.6,mb:1},children:`—`}),n(M,{variant:`subtitle2`,sx:{mt:2,mb:.5},children:[V.t(`custom_assistant_States read`),` (`,r.read.length,`)`]}),r.read.length?r.read.map(t=>n(U,{sx:e,children:[`📖 `,t]},t)):v(M,{variant:`body2`,sx:{opacity:.6},children:`—`}),n(M,{variant:`subtitle2`,sx:{mt:2,mb:.5},children:[V.t(`custom_assistant_States written`),` (`,r.written.length,`)`]}),r.written.length?r.written.map((t,r)=>n(U,{sx:e,children:[`✏️ `,t.id,` = `,Pd(t.value)]},r)):v(M,{variant:`body2`,sx:{opacity:.6},children:`—`})]})},F=r.satellite||r.source,R=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(he,{open:!0,onClose:e.onClose,maxWidth:`lg`,fullWidth:!0,scroll:`paper`,slotProps:{paper:{sx:{height:`90vh`}}},children:[n(o,{sx:{display:`flex`,alignItems:`center`,gap:1,pr:1},children:[n(U,{sx:{flex:1,minWidth:0},children:[V.t(`custom_assistant_Request details`),v(M,{variant:`caption`,component:`span`,sx:{ml:1,opacity:.6,fontFamily:Y},children:r.id})]}),m?v(M,{variant:`caption`,color:`success.main`,children:V.t(`custom_assistant_Copied`)}):null,v(H,{title:V.t(`custom_assistant_Copy everything as JSON`),children:v(g,{size:`small`,onClick:()=>S.onCopy(te),children:v(E,{fontSize:`small`})})}),v(H,{title:V.t(`custom_assistant_Download as JSON`),children:v(g,{size:`small`,onClick:()=>Id(`assistant-request-${r.id}.json`,te),children:v(se,{fontSize:`small`})})}),v(g,{size:`small`,onClick:e.onClose,children:v(T,{fontSize:`small`})})]}),n(pe,{dividers:!0,children:[n(U,{sx:{display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:.5,mb:1},children:[v(Q,{label:V.t(kd[r.transport]||r.transport)}),F&&F!==`chat`?v(Q,{label:F}):null,r.room&&r.room!==F?v(Q,{label:r.room}):null,r.wakeWord===void 0?null:v(Q,{label:`🎙 ${r.wakeWord||V.t(`custom_assistant_follow-up`)}`}),r.tier?v(Q,{label:V.t(Ad[r.tier]),color:jd[r.tier]}):null,r.detail?v(M,{variant:`caption`,sx:{fontFamily:Y},children:r.detail}):null,r.done?null:n(U,{sx:{display:`flex`,alignItems:`center`,gap:.5,ml:1},children:[v(L,{size:12}),v(M,{variant:`caption`,children:V.t(`custom_assistant_in progress`)})]})]}),n(U,{sx:{display:`grid`,gridTemplateColumns:{xs:`1fr`,md:`1fr 1fr`},gap:1,mb:1.5},children:[n(U,{children:[v(M,{variant:`caption`,sx:{opacity:.6},children:V.t(`custom_assistant_Question`)}),v(U,{sx:j,children:r.question})]}),n(U,{children:[v(M,{variant:`caption`,sx:{opacity:.6},children:V.t(r.error?`custom_assistant_Error`:`custom_assistant_Answer`)}),v(U,{sx:{...j,color:r.error?`error.main`:void 0},children:r.error||r.answer||(r.done?v(`i`,{style:{opacity:.6},children:V.t(`custom_assistant_(no spoken answer)`)}):`…`)})]})]}),n(U,{sx:{display:`grid`,gridTemplateColumns:`repeat(auto-fill, minmax(150px, 1fr))`,gap:1.5,mb:1.5},children:[v($,{label:V.t(`custom_assistant_Time`),children:R}),v($,{label:V.t(`custom_assistant_Total duration`),children:r.done?q(r.ms):`…`}),v($,{label:V.t(`custom_assistant_Source`),children:r.source||`—`}),r.audioMs===void 0?null:v($,{label:V.t(`custom_assistant_Recorded audio`),children:q(r.audioMs)}),r.sttMs===void 0?null:v($,{label:V.t(`custom_assistant_Speech recognition`),children:q(r.sttMs)}),r.ttsMs===void 0?null:v($,{label:V.t(`custom_assistant_Speech synthesis`),children:q(r.ttsMs)}),r.replyAudioMs===void 0?null:v($,{label:V.t(`custom_assistant_Reply audio`),children:q(r.replyAudioMs)}),r.tokens?v($,{label:`Tokens`,children:J(r.tokens)}):null,v($,{label:V.t(`custom_assistant_Tool calls`),children:r.tools.length}),v($,{label:V.t(`custom_assistant_States read`),children:r.read.length}),v($,{label:V.t(`custom_assistant_States written`),children:r.written.length}),r.followUp?v($,{label:V.t(`custom_assistant_Follow-up`),children:V.t(`custom_assistant_waits for reply`)}):null]}),n(U,{sx:{display:`flex`,alignItems:`center`,borderBottom:`1px solid ${i?`#444`:`#ddd`}`,mb:.5},children:[n(ce,{value:u,onChange:(e,t)=>d(t),sx:{flex:1,minHeight:36,"& .MuiTab-root":{minHeight:36,py:0}},children:[v(A,{label:`${V.t(`custom_assistant_Steps`)}${w.length?` (${w.length})`:``}`}),v(A,{label:V.t(`custom_assistant_Tools & states`)}),v(A,{label:`JSON`})]}),u===0&&w.length?v(H,{title:V.t(k?`custom_assistant_Collapse all`:`custom_assistant_Expand all`),children:v(g,{size:`small`,onClick:()=>p(k?{}:Object.fromEntries(w.map(e=>[e.i,!0]))),children:v(k?de:C,{fontSize:`small`})})}):null]}),u===0?re():null,u===1?P():null,u===2?v(X,{text:te,ctx:S,maxHeight:1e4}):null]}),v(ne,{children:v(I,{onClick:e.onClose,children:V.t(`custom_assistant_Close`)})})]})}var Xd={},Zd=Object.assign({"./i18n/de.json":ve,"./i18n/en.json":vt,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":ya,"./i18n/pl.json":xo,"./i18n/pt.json":xs,"./i18n/ru.json":xc,"./i18n/uk.json":Sl,"./i18n/zh-cn.json":Cu});for(let[e,t]of Object.entries(Zd)){var Qd;let n=((Qd=e.split(`/`).pop())==null?void 0:Qd.replace(`.json`,``))||`en`;Xd[n]=t.default}V.extendTranslations(Xd);function $d(e){return e.satellite||e.source||e.transport}var ef=class extends _e{constructor(e){super(e),p(this,`scrollRef`,t.createRef()),p(this,`aliveSubId`,``),p(this,`journalSubId`,``),p(this,`recognition`,null),p(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()}),p(this,`onAliveChange`,(e,t)=>{let n=!!(t!=null&&t.val),r=this.state.alive;this.setState({alive:n}),n&&!r&&(this.checkTtsAvailable(),this.loadJournal())}),p(this,`onKeyDown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),this.send())}),p(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`}[V.getLanguage()]||`en-US`}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){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()),this.props.oContext.socket.subscribeState(this.aliveSubId,this.onAliveChange),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);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(){setTimeout(()=>{let e=this.scrollRef.current;e&&(e.scrollTop=e.scrollHeight)},0)}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;this.setState({input:``,sending:!0}),t||this.addMessage({role:`user`,text:e,ts:Date.now()}),this.state.filter&&this.state.filter!==`chat`&&this.setState({filter:``}),this.scrollToBottom();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:V.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 v(U,{sx:{display:`flex`,justifyContent:o?`flex-end`:`flex-start`,mb:.5},children:n(u,{elevation:1,onClick:a.onClick,title:a.onClick?V.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,v(M,{variant:`body2`,component:`div`,children:r}),n(U,{sx:{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:.5},children:[a.footer,a.playText&&this.state.ttsAvailable?v(H,{title:V.t(`custom_assistant_Play answer (backend TTS)`),children:v(`span`,{children:v(g,{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?v(L,{size:12}):v(ae,{sx:{fontSize:`0.9rem`}})})})}):null,v(M,{variant:`caption`,component:`div`,sx:{opacity:.6,fontSize:`0.65rem`},children:new Date(i).toLocaleTimeString()})]})]})},e)}renderMessage(e,t){return e.role===`info`?v(M,{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,n,r){let i=v(R,{size:`small`,label:e,sx:{height:18,fontSize:`0.68rem`,mr:.5,color:r?`#fff`:`inherit`,background:r||`rgba(127,127,127,0.25)`,"& .MuiChip-label":{px:.75}}});return n?v(H,{title:n,children:i},e):v(t.Fragment,{children:i},e)}renderOrigin(e){let t=[this.chip(V.t(kd[e.transport]||e.transport))],n=e.satellite||(e.transport===`chat`||e.transport===`state`?``:e.source);return n&&t.push(this.chip(n,V.t(`custom_assistant_Source`))),e.room&&e.room!==n&&t.push(this.chip(e.room,V.t(`custom_assistant_Room`))),e.wakeWord!==void 0&&t.push(e.wakeWord?this.chip(`🎙 ${e.wakeWord}`,V.t(`custom_assistant_Wake word`)):this.chip(`🎙 ${V.t(`custom_assistant_follow-up`)}`,V.t(`custom_assistant_Mic re-opened without wake word`))),e.sttMs!==void 0&&t.push(this.chip(`STT ${q(e.sttMs)}`,V.t(`custom_assistant_Speech recognition time`))),v(U,{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(U,{sx:{...t,color:a.error?`error.main`:void 0},children:[`🔧 `,a.name,`(`,JSON.stringify(a.args),`) → `,a.error?`⚠ ${a.error}`:a.result,` `,``,v(`span`,{style:{opacity:.6},children:q(a.ms)})]},`t${i}`));e.read.length&&r.push(n(U,{sx:t,children:[`📖 `,e.read.join(`, `)]},`r`));for(let[i,a]of e.written.entries())r.push(n(U,{sx:t,children:[`✏️ `,a.id,` = `,Pd(a.value)]},`w${i}`));return n(U,{onClick:()=>this.openDetails(e.id),title:V.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(U,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,gap:.25},children:[e.tier?this.chip(V.t(Ad[e.tier]),void 0,jd[e.tier]):null,e.detail?v(M,{variant:`caption`,sx:{...t,mr:1},children:e.detail}):null,e.done?v(M,{variant:`caption`,sx:{opacity:.7,mr:1},children:q(e.ms)}):null,e.tokens?v(M,{variant:`caption`,sx:{opacity:.6,mr:1},children:J(e.tokens)}):null,e.ttsMs===void 0?null:this.chip(`TTS ${q(e.ttsMs)}`,V.t(`custom_assistant_Speech synthesis`)),e.followUp?this.chip(V.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||v(`i`,{style:{opacity:.6},children:V.t(`custom_assistant_(no spoken answer)`)}),e.ts+(e.ms||0),{playText:e.answer||void 0,onClick:r}):n(U,{onClick:r,title:V.t(`custom_assistant_Click for details`),sx:{display:`flex`,alignItems:`center`,gap:1,p:1,opacity:.7,cursor:`pointer`},children:[v(L,{size:16}),v(M,{variant:`body2`,children:V.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&&$d(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($d))].sort();return!this.state.journalEnabled||e.length<2?null:n(k,{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:[v(w,{value:``,children:V.t(`custom_assistant_All sources`)}),e.map(e=>v(w,{value:e,children:e},e))]})}renderItem(){let e=this.props.oContext.themeType===`dark`,{alive:t,messages:r,entries:a,sending:s,input:c,listening:u,speak:d,journalEnabled:f,showDetails:p}=this.state,m=this.ready,h=this.renderTimeline(),y=!r.length&&!Object.keys(a).length;return n(U,{sx:{width:`100%`,display:`flex`,flexDirection:`column`,height:`calc(100vh - 300px)`},children:[n(U,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[n(U,{children:[v(M,{variant:`h6`,children:V.t(f?`custom_assistant_Chat`:`custom_assistant_Test chat`)}),f?v(M,{variant:`caption`,sx:{opacity:.7},children:V.t(`custom_assistant_Shows all requests live: satellites, Telegram, scripts and this chat.`)}):null]}),n(U,{sx:{display:`flex`,alignItems:`center`},children:[this.renderFilter(),f?v(H,{title:V.t(p?`custom_assistant_Hide processing details`:`custom_assistant_Show processing details`),children:v(g,{size:`small`,color:p?`primary`:`default`,onClick:()=>this.toggleDetails(),children:v(p?ue:re,{})})}):null,this.ttsSupported?v(H,{title:V.t(d?`custom_assistant_Stop reading answers aloud`:`custom_assistant_Read answers aloud`),children:v(g,{size:`small`,color:d?`primary`:`default`,onClick:()=>{d&&window.speechSynthesis.cancel(),this.setState({speak:!d})},children:v(d?ie:i,{})})}):null,v(H,{title:V.t(`custom_assistant_Refresh device cache`),children:v(`span`,{children:v(g,{size:`small`,disabled:!m,onClick:()=>void this.refreshCache(),children:v(_,{})})})}),v(H,{title:V.t(`custom_assistant_Clear chat`),children:v(`span`,{children:v(g,{size:`small`,disabled:y,onClick:()=>f?this.setState({confirmClear:!0}):void this.clearHistory(),children:v(l,{})})})})]})]}),m?null:v(M,{sx:{p:2},color:`warning.main`,children:t?V.t(`custom_assistant_Save the configuration (the instance will restart) before chatting.`):V.t(`custom_assistant_Start the assistant instance to chat.`)}),n(U,{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:v(M,{sx:{p:2,textAlign:`center`,opacity:.6},variant:`body2`,children:V.t(`custom_assistant_No messages yet. Type a question below.`)}),s&&!f?n(U,{sx:{display:`flex`,alignItems:`center`,gap:1,p:1,opacity:.7},children:[v(L,{size:16}),v(M,{variant:`body2`,children:V.t(`custom_assistant_Thinking…`)})]}):null]}),n(U,{sx:{display:`flex`,alignItems:`flex-end`,gap:1},children:[this.speechSupported?v(H,{title:V.t(u?`custom_assistant_Stop listening`:`custom_assistant_Speak`),children:v(`span`,{children:v(g,{color:u?`error`:`primary`,disabled:!m||s,onClick:()=>this.toggleListening(),children:v(me,{})})})}):null,v(z,{fullWidth:!0,multiline:!0,maxRows:4,size:`small`,variant:`outlined`,placeholder:V.t(u?`custom_assistant_Listening…`:`custom_assistant_Type a message…`),value:c,disabled:!m||s,onChange:e=>this.setState({input:e.target.value}),onKeyDown:this.onKeyDown}),v(g,{color:`primary`,disabled:!m||s||!c.trim(),onClick:()=>void this.send(),children:v(S,{})})]}),this.state.detailsId&&a[this.state.detailsId]?v(Yd,{entry:a[this.state.detailsId],fetchTrace:this.fetchTrace,dark:e,onClose:()=>this.setState({detailsId:``})}):null,n(he,{open:this.state.confirmClear,onClose:()=>this.setState({confirmClear:!1}),children:[v(o,{children:V.t(`custom_assistant_Clear chat`)}),v(pe,{children:v(M,{variant:`body2`,children:V.t(`custom_assistant_Delete the recorded history of all sources?`)})}),n(ne,{children:[v(I,{color:`error`,variant:`contained`,onClick:()=>void this.clearHistory(),children:V.t(`custom_assistant_Delete`)}),v(I,{onClick:()=>this.setState({confirmClear:!1}),children:V.t(`custom_assistant_Cancel`)})]})]})]})}},tf={},nf=Object.assign({"./i18n/de.json":ve,"./i18n/en.json":vt,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":ya,"./i18n/pl.json":xo,"./i18n/pt.json":xs,"./i18n/ru.json":xc,"./i18n/uk.json":Sl,"./i18n/zh-cn.json":Cu});for(let[e,t]of Object.entries(nf)){var rf;let n=((rf=e.split(`/`).pop())==null?void 0:rf.replace(`.json`,``))||`en`;tf[n]=t.default}V.extendTranslations(tf);var af={ready:`success`,error:`error`,installing:`info`,downloading:`info`,loading:`info`},of=class extends _e{constructor(e){super(e),p(this,`statusId`,``),p(this,`progressId`,``),p(this,`onStatus`,(e,t)=>{this.setState({status:(t==null?void 0:t.val)||`idle`})}),p(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(U,{sx:{width:`100%`,mt:.5,mb:1},children:[n(U,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.5},children:[n(M,{variant:`body2`,children:[V.t(`custom_assistant_Local model`),`:`]}),v(R,{size:`small`,color:af[e]||`default`,variant:`outlined`,label:V.t(`custom_assistant_llm_${e}`)}),i?n(M,{variant:`body2`,children:[Math.round(t),`%`]}):null]}),r?v(x,{variant:i?`determinate`:`indeterminate`,value:i?t:void 0}):null]})}};function sf(e){return e.replace(/\.tflite$/i,``).split(/[_\-\s]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join(` `)}function cf(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 lf(e){return e.common.write===!1}function uf(e){var r,i;let{values:a,objects:l,loading:u,onWrite:p}=e,g=t.useMemo(()=>{try{let e=a.availableWakeWords;return e?JSON.parse(String(e)):null}catch{return null}},[a.availableWakeWords]),_=String(a.wakeWords??``).split(`,`).map(e=>e.trim()).filter(Boolean),y=e=>{let t=_.includes(e)?_.filter(t=>t!==e):[..._,e];p(`wakeWords`,t.join(`,`))},b=(g==null?void 0:g.max)||0,x=b>0&&_.length>=b,S=t.useRef(null),[C,T]=t.useState(null),[E,D]=t.useState(!1),[O,A]=t.useState(null),[j,N]=t.useState(null),re=async e=>{A(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)A({severity:`error`,text:V.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{}T({fileName:n.name,model:await cf(n),config:e,configName:(r==null?void 0:r.name)||``,phrase:t||sf(n.name)})}catch(e){A({severity:`error`,text:String(e.message||e)})}},P=async()=>{if(C){D(!0);try{let t=await e.sendTo(`uploadWakeWord`,{model:C.model,fileName:C.fileName,config:C.config||void 0,phrase:C.phrase.trim()});t!=null&&t.error?A({severity:`error`,text:t.error}):(T(null),A({severity:`success`,text:V.t(`custom_assistant_wake_word_uploaded`,(t==null?void 0:t.phrase)||C.phrase)}))}catch(e){A({severity:`error`,text:String(e.message||e)})}finally{D(!1)}}},F=async t=>{N(null),D(!0);try{let n=await e.sendTo(`deleteWakeWord`,{id:t.id});A(n!=null&&n.error?{severity:`error`,text:n.error}:{severity:`success`,text:V.t(`custom_assistant_wake_word_deleted`,t.phrase)})}catch(e){A({severity:`error`,text:String(e.message||e)})}finally{D(!1)}},ie=Object.keys(l).sort(),B=new Map;for(let e of ie){let t=e.replace(/^controls\./,``),n=t.indexOf(`.`),r=n<0?t:t.slice(0,n);B.set(r,[...B.get(r)||[],e])}function ae(e){let t=l[e],r=t.common,i=r.name&&typeof r.name==`string`?r.name:e,o=a[e];if(r.role===`button`)return v(I,{size:`small`,variant:`outlined`,onClick:()=>p(e,!0),children:i},e);if(lf(t))return n(U,{children:[v(M,{variant:`caption`,sx:{opacity:.7},children:i}),v(M,{variant:`body2`,children:o==null?`—`:String(o)})]},e);if(r.type===`boolean`)return n(U,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[v(M,{variant:`body2`,children:i}),v(c,{size:`small`,checked:!!o,onChange:t=>p(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(m,{size:`small`,fullWidth:!0,children:[v(d,{children:i}),v(k,{label:i,value:o==null?``:String(o),onChange:t=>p(e,t.target.value),children:Object.entries(t).map(([e,t])=>v(w,{value:e,children:t},e))})]},e)}if(r.type===`number`&&r.min!==void 0&&r.max!==void 0){let t=Number(o??r.min);return n(U,{children:[n(M,{variant:`body2`,children:[i,n(M,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:[t,r.unit||``,` (`,r.min,`…`,r.max,`)`]})]}),v(ee,{size:`small`,value:Number.isFinite(t)?t:r.min,min:r.min,max:r.max,step:r.step||1,onChangeCommitted:(t,n)=>p(e,Array.isArray(n)?n[0]:n),valueLabelDisplay:`auto`})]},e)}return v(z,{size:`small`,fullWidth:!0,label:i,defaultValue:o==null?``:String(o),onBlur:t=>p(e,t.target.value),onKeyDown:t=>{t.key===`Enter`&&p(e,t.target.value)}},e)}return n(he,{open:!0,onClose:e.onClose,maxWidth:`sm`,fullWidth:!0,children:[n(o,{children:[V.t(`custom_assistant_Settings for %s`,e.satId),e.room?v(M,{variant:`caption`,sx:{ml:1,opacity:.7},children:e.room}):null]}),v(pe,{dividers:!0,children:u?v(U,{sx:{display:`flex`,justifyContent:`center`,p:3},children:v(L,{size:28})}):n(U,{sx:{display:`flex`,flexDirection:`column`,gap:2},children:[g!=null&&(r=g.words)!=null&&r.length?n(U,{children:[n(M,{variant:`subtitle2`,children:[V.t(`custom_assistant_Wake words`),v(M,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:V.t(`custom_assistant_%s of %s active`,_.length,b)})]}),v(U,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5,mt:1},children:g.words.map(e=>{let t=_.includes(e.id);return v(H,{title:e.custom?`${V.t(`custom_assistant_Uploaded wake word`)} · ${e.id}${e.languages.length?` · ${e.languages.join(`, `)}`:``}`:e.languages.join(`, `),children:v(R,{size:`small`,label:e.phrase||e.id,color:t?`primary`:`default`,variant:t?`filled`:`outlined`,icon:e.custom?v(h,{}):void 0,disabled:!t&&x||E,onClick:()=>y(e.id),onDelete:e.custom?()=>N(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)})}),v(M,{variant:`caption`,sx:{display:`block`,mt:.5,opacity:.7},children:V.t(`custom_assistant_wake_word_hint`)}),j?v(f,{severity:`warning`,sx:{mt:1},action:n(te,{children:[v(I,{color:`inherit`,size:`small`,onClick:()=>void F(j),children:V.t(`custom_assistant_Delete`)}),v(I,{color:`inherit`,size:`small`,onClick:()=>N(null),children:V.t(`custom_assistant_Cancel`)})]}),children:V.t(`custom_assistant_delete_wake_word_confirm`,j.phrase)}):null,v(`input`,{ref:S,type:`file`,accept:`.tflite,.json`,multiple:!0,style:{display:`none`},onChange:e=>{re(e.target.files),e.target.value=``}}),C?n(U,{sx:{mt:1,p:1.5,border:`1px solid`,borderColor:`divider`,borderRadius:1,display:`flex`,flexDirection:`column`,gap:1},children:[n(M,{variant:`caption`,sx:{opacity:.7},children:[C.fileName,C.configName?` + ${C.configName}`:``]}),v(z,{size:`small`,fullWidth:!0,autoFocus:!0,label:V.t(`custom_assistant_Wake word phrase`),helperText:V.t(`custom_assistant_wake_word_phrase_hint`),value:C.phrase,onChange:e=>T({...C,phrase:e.target.value}),onKeyDown:e=>{e.key===`Enter`&&C.phrase.trim()&&P()}}),n(U,{sx:{display:`flex`,gap:1,justifyContent:`flex-end`},children:[v(I,{size:`small`,disabled:E,onClick:()=>T(null),children:V.t(`custom_assistant_Cancel`)}),v(I,{size:`small`,variant:`contained`,disabled:E||!C.phrase.trim(),startIcon:E?v(L,{size:14}):v(s,{}),onClick:()=>void P(),children:V.t(`custom_assistant_Upload`)})]})]}):v(H,{title:V.t(`custom_assistant_wake_word_upload_hint`),children:v(I,{size:`small`,variant:`outlined`,sx:{mt:1},startIcon:v(s,{}),disabled:E,onClick:()=>{var e;return(e=S.current)==null?void 0:e.click()},children:V.t(`custom_assistant_Upload own wake word`)})}),O?v(f,{severity:O.severity,sx:{mt:1},onClose:()=>A(null),children:O.text}):null]}):null,g!=null&&(i=g.words)!=null&&i.length&&B.size?v(fe,{}):null,[...B.entries()].map(([e,t])=>n(U,{sx:{display:`flex`,flexDirection:`column`,gap:1},children:[t.length>1?v(M,{variant:`subtitle2`,sx:{opacity:.8},children:e}):null,t.map(ae)]},e)),!B.size&&!g?v(M,{variant:`body2`,sx:{opacity:.7},children:V.t(`custom_assistant_This satellite exposes no settings.`)}):null]})}),v(ne,{children:v(I,{onClick:e.onClose,children:V.t(`custom_assistant_Close`)})})]})}var df={},ff=Object.assign({"./i18n/de.json":ve,"./i18n/en.json":vt,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":ya,"./i18n/pl.json":xo,"./i18n/pt.json":xs,"./i18n/ru.json":xc,"./i18n/uk.json":Sl,"./i18n/zh-cn.json":Cu});for(let[e,t]of Object.entries(ff)){var pf;let n=((pf=e.split(`/`).pop())==null?void 0:pf.replace(`.json`,``))||`en`;df[n]=t.default}V.extendTranslations(df);var mf={idle:`default`,listening:`info`,processing:`warning`,speaking:`success`,offline:`error`},hf=`__all__`,gf={DeviceAclComponent:Od,ChatComponent:ef,LocalLlmProgress:of,SatellitesComponent:class extends _e{constructor(e){super(e),p(this,`pattern`,``),p(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:{},settingsLoading:!1}}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`),n={};for(let[r,i]of Object.entries(e||{}))i!=null&&i.common&&(n[r.slice(t.length)]=i);this.setState({settingsObjects:n,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===hf?`${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]:``}}))}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(U,{sx:{display:`flex`,alignItems:`center`,gap:.5},children:[v(z,{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}}),v(H,{title:V.t(`custom_assistant_Send announcement`),children:v(`span`,{children:v(g,{size:`small`,color:`primary`,disabled:!r.trim(),onClick:()=>this.announce(e),children:v(b,{})})})})]})}renderItem(){var e;let t=Object.keys(this.state.sats).sort();return n(U,{sx:{width:`100%`},children:[n(U,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[v(M,{variant:`h6`,children:V.t(`custom_assistant_Satellites`)}),t.length?this.renderComposer(hf,V.t(`custom_assistant_Speak on all satellites`)):null]}),t.length?n(O,{size:`small`,sx:{"& td, & th":{px:1}},children:[v(P,{children:n(le,{children:[v(y,{}),v(y,{children:V.t(`custom_assistant_Satellite`)}),v(y,{children:V.t(`custom_assistant_room`)}),v(y,{children:V.t(`custom_assistant_Host`)}),v(y,{children:V.t(`custom_assistant_Status`)}),v(y,{children:V.t(`custom_assistant_Last seen`)}),v(y,{children:V.t(`custom_assistant_Announcement`)}),v(y,{})]})}),v(j,{children:t.map(e=>{let t=this.state.sats[e];return n(le,{children:[v(y,{sx:{width:24},children:v(H,{title:t.alive?V.t(`custom_assistant_online`):V.t(`custom_assistant_offline`),children:v(a,{sx:{fontSize:`0.8rem`,color:t.alive?`success.main`:`error.main`}})})}),v(y,{children:e}),v(y,{children:t.room||`—`}),v(y,{children:t.host||`—`}),v(y,{children:v(R,{size:`small`,variant:`outlined`,color:mf[t.status]||`default`,label:V.t(`custom_assistant_sat_${t.status}`)})}),v(y,{children:v(H,{title:t.lastSeen?new Date(t.lastSeen).toLocaleString():``,children:v(`span`,{children:this.ago(t.lastSeen)})})}),v(y,{children:this.renderComposer(e,V.t(`custom_assistant_Type a message…`))}),v(y,{sx:{width:40},children:v(H,{title:V.t(`custom_assistant_Device settings`),children:v(`span`,{children:v(g,{size:`small`,disabled:!t.alive,onClick:()=>void this.openSettings(e),children:v(ge,{})})})})})]},e)})})]}):v(M,{sx:{p:2,opacity:.7},variant:`body2`,children:V.t(`custom_assistant_No satellites registered yet.`)}),this.state.settingsFor?v(uf,{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,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:{}})}):null]})}}};export{gf as default};
|