# Recognition history page
New /history route in the Tauri GUI. Every voice/text phrase that
reaches the dispatcher gets a row with: timestamp, the phrase, what
happened, command id + confidence (if matched), which matcher fired
(intent / fuzzy / LLM-router / LLM-fallback).
Color coding:
- Green: command matched AND executed successfully
- Red: command matched but failed, OR dispatcher error
- Blue: LLM fallback handled it (Jarvis spoke a free-form reply)
- Orange: no match at all ("Не понял")
Live updates: GUI polls every 2s from the on-disk log, so the page
shows daemon writes in near real time even though they're separate
processes. Filter box for searching by phrase or command id.
Architecture:
- New core module `recognition_log` with ring buffer (cap 500) +
atomic JSON write-through to `<APP_CONFIG_DIR>/recognition_log.json`.
- `record(phrase, source, outcome)` is the single call-site from the
daemon's `execute_command()` — hooked into the 4 outcome paths
(matched-ok, matched-fail, not-found, llm-handled, error).
- `recent(limit)` reads the in-memory buffer (daemon's view).
- `recent_from_disk(limit)` re-reads the JSON file — GUI uses this
since the GUI process has its own buffer that doesn't see the
daemon's writes.
- 5 new unit tests covering ring buffer trimming, outcome serde
roundtrip, missing/corrupt/oversized file recovery.
GUI:
- `crates/jarvis-gui/src/tauri_commands/history.rs`: history_recent,
history_clear. Flattens the Outcome enum into a single struct that's
easier for the Svelte template to render.
- `frontend/src/routes/history/index.svelte`: ~270 lines. Stats badges
(✓ N matched / ✗ N misses / total), filter input, virtual list of
entry cards with color-coded left border. Polls every 2s.
- Header gets a new "История" / "History" button (between Plugins and
Settings). Russian + English locale entries added.
# Multi wake-word loading
Was: `init()` loaded the bundled `jarvis-default.rpw` + at most ONE
custom (from `settings.custom_wake_word`). User had to pick a single
trained model.
Now: loads the bundled default PLUS every .rpw in
`APP_CONFIG_DIR/wake_words/` simultaneously. Rustpotter natively
supports multiple wake-word triggers — each adds robustness for
different voice profiles. The legacy `custom_wake_word` field is
checked for back-compat but is a no-op if it points inside the
already-loaded directory.
User-facing impact: train the wake-word once via /wake-trainer →
restart daemon → detection improves automatically without picking a
single "active" model.
# Settings → "Обучить wake-word" button
Added a purple button on the settings page that links to
/wake-trainer. The trainer existed but had no in-GUI link, so users
couldn't find it without typing the URL. Now sits next to the
"Конструктор команд (Python)" button.
Tests: 140 → 145 rust core tests (+5 recognition_log). Frontend
rebuilds in 6.2s. Release builds of jarvis-app + jarvis-gui green.
Practical test: GUI launches (MainWindowTitle confirmed), seed log
file written + visible to the page.
167 lines
No EOL
7.7 KiB
Text
167 lines
No EOL
7.7 KiB
Text
# APP INFO
|
||
app-name = JARVIS
|
||
app-description = Голосовой ассистент
|
||
|
||
# TRAY MENU
|
||
tray-restart = Перезапустить
|
||
tray-settings = Настройки
|
||
tray-exit = Выход
|
||
tray-tooltip = JARVIS - Голосовой ассистент
|
||
tray-language = Язык
|
||
tray-voice = Голос
|
||
tray-wake-word = Движок wake-word
|
||
tray-noise-suppression = Шумоподавление
|
||
tray-vad = Детекция голоса (VAD)
|
||
tray-gain-normalizer = Нормализация громкости
|
||
|
||
# HEADER
|
||
header-commands = КОМАНДЫ
|
||
header-settings = НАСТРОЙКИ
|
||
|
||
# SEARCH
|
||
search-placeholder = Введите команду вручную или произнесите «Джарвис» ...
|
||
|
||
# MAIN PAGE
|
||
assistant-not-running = АССИСТЕНТ НЕ ЗАПУЩЕН
|
||
assistant-offline-hint = Настроить его можно не запуская.
|
||
btn-start = ЗАПУСТИТЬ
|
||
btn-starting = ЗАПУСК...
|
||
|
||
# STATUS
|
||
status-disconnected = Отключен
|
||
status-standby = Ожидание
|
||
status-listening = Слушаю...
|
||
status-processing = Обработка...
|
||
|
||
# STATS
|
||
stats-microphone = МИКРОФОН
|
||
stats-neural-networks = НЕЙРОСЕТИ
|
||
stats-resources = РЕСУРСЫ
|
||
stats-system-default = Системный
|
||
stats-not-selected = Не выбран
|
||
stats-loading = Загрузка...
|
||
|
||
# FOOTER
|
||
footer-github = Репозиторий проекта
|
||
footer-issues = Сообщить о баге
|
||
footer-fork-of = Форк
|
||
|
||
# SETTINGS
|
||
settings-title = Настройки
|
||
settings-general = Основные
|
||
settings-devices = Устройства
|
||
settings-neural-networks = Нейросети
|
||
settings-audio = Аудио
|
||
settings-recognition = Распознавание
|
||
settings-about = О программе
|
||
settings-language = Язык
|
||
settings-microphone = Микрофон
|
||
settings-microphone-desc = Его будет слушать ассистент.
|
||
settings-mic-default = По умолчанию (Система)
|
||
settings-voice = Голос ассистента
|
||
settings-voice-desc =
|
||
Не все команды работают со всеми звуковыми пакетами.
|
||
Кликните, чтобы прослушать как звучит голос.
|
||
settings-wake-word-engine = Движок активации
|
||
settings-wake-word-desc = Выберите нейросеть для распознавания активационной фразы.
|
||
settings-stt-engine = Распознавание речи
|
||
settings-intent-engine = Определение намерения
|
||
settings-intent-engine-desc = Выберите нейросеть для распознавания команд.
|
||
settings-noise-suppression = Шумоподавление
|
||
settings-noise-suppression-desc = Уменьшает фоновый шум. Может негативно влиять на распознавание.
|
||
settings-vad = Определение голоса (VAD)
|
||
settings-vad-desc = Пропускает тишину, экономит ресурсы CPU.
|
||
settings-gain-normalizer = Нормализация громкости
|
||
settings-gain-normalizer-desc = Автоматически регулирует уровень громкости.
|
||
settings-api-keys = API Ключи
|
||
settings-save = Сохранить
|
||
settings-cancel = Отмена
|
||
settings-back = Назад
|
||
settings-enabled = Включено
|
||
settings-disabled = Отключено
|
||
|
||
# settings - beta notice
|
||
settings-beta-title = БЕТА версия!
|
||
settings-beta-desc = Часть функций может работать некорректно.
|
||
settings-beta-feedback = Сообщайте обо всех найденных багах через
|
||
settings-beta-bot = GitHub Issues
|
||
settings-open-logs = Открыть папку с логами
|
||
|
||
# settings - picovoice
|
||
settings-attention = Внимание!
|
||
settings-picovoice-warning = Эта нейросеть работает не у всех!
|
||
settings-picovoice-waiting = Мы ждем официального патча от разработчиков.
|
||
settings-picovoice-key-desc = Введите сюда свой ключ Picovoice. Он выдается бесплатно при регистрации в
|
||
settings-picovoice-key = Ключ Picovoice
|
||
|
||
# settings - vosk
|
||
settings-auto-detect = Авто-определение
|
||
settings-vosk-model = Модель распознавания речи (Vosk)
|
||
settings-vosk-model-desc =
|
||
Выберите модель Vosk для распознавания речи.
|
||
Вы можете скачать модели здесь: https://alphacephei.com/vosk/models
|
||
settings-models-not-found = Модели не найдены
|
||
settings-models-hint = Поместите модели Vosk в папку resources/vosk
|
||
|
||
# settings - openai
|
||
settings-openai-key = Ключ OpenAI
|
||
settings-openai-not-supported = В данный момент ChatGPT не поддерживается. Он будет добавлен в ближайших обновлениях.
|
||
|
||
# COMMANDS PAGE
|
||
commands-title = Команды
|
||
commands-search = Поиск команд...
|
||
commands-count = { $count } команд
|
||
commands-wip-title = Раздел в разработке
|
||
commands-wip-desc = Здесь будет редактор команд и список установленных пакетов.
|
||
commands-wip-builder = Пока что используй Python-форк с конструктором команд —
|
||
commands-wip-builder-link = открыть репозиторий
|
||
commands-wip-or-fork = Или загляни в Rust-репозиторий и правь команды напрямую в
|
||
commands-wip-fork-link = resources/commands/
|
||
|
||
# ERRORS
|
||
error-generic = Произошла ошибка
|
||
error-connection = Ошибка подключения
|
||
error-not-found = Не найдено
|
||
|
||
# NOTIFICATIONS
|
||
notification-saved = Настройки сохранены!
|
||
notification-error = Ошибка
|
||
notification-assistant-started = Ассистент запущен
|
||
notification-assistant-stopped = Ассистент остановлен
|
||
|
||
# SLOTS EXTRACTION
|
||
settings-slot-engine = Извлечение параметров
|
||
settings-slot-engine-desc = Извлекает параметры из голосовых команд (напр. название города, число).
|
||
settings-gliner-model = Модель GLiNER ONNX
|
||
settings-gliner-model-desc =
|
||
Выберите вариант модели.
|
||
Квантизированные модели (int8, uint8) быстрее, но менее точны.
|
||
settings-gliner-models-hint = Модели GLiNER не найдены.
|
||
|
||
# ETC
|
||
search-error-not-running = Ассистент не запущен
|
||
search-error-failed = Не удалось выполнить команду
|
||
settings-no-voices = Голоса не найдены
|
||
|
||
# AI Backends tab
|
||
settings-ai-backends = ИИ-движки
|
||
settings-ai-active = Активный движок
|
||
settings-ai-auto = Авто
|
||
settings-ai-applying = Применяю...
|
||
settings-ai-error = Ошибка переключения
|
||
settings-ai-tips = Подсказки
|
||
settings-llm-backend = LLM движок
|
||
settings-llm-backend-desc = Где исполнять LLM-запросы. Hot-swap, без рестарта.
|
||
settings-tts-backend = TTS движок
|
||
settings-tts-backend-desc = Применяется сразу — без перезапуска.
|
||
settings-llm-context = Контекст разговора
|
||
settings-llm-context-desc = LLM помнит предыдущие реплики. Сбросить, если ответы становятся странными.
|
||
settings-llm-reset = Сбросить контекст
|
||
settings-profile = Профиль
|
||
|
||
# Header buttons
|
||
header-macros = Макросы
|
||
header-scheduler = Расписание
|
||
header-memory = Память
|
||
header-plugins = Плагины
|
||
header-history = История |