# J.A.R.V.I.S (Python) — Bossiara13's fork Голосовой ассистент для Windows с wake-word **«jarvis»**. Распознаёт речь локально через Vosk (русская модель), отвечает голосом через Silero TTS, а свободные вопросы (фразы, начинающиеся со слова «скажи …») отправляет в LLM на Groq и зачитывает ответ. ## Это форк Форк репозитория [Priler/jarvis](https://github.com/Priler/jarvis) (автор оригинала — Abraham Tugalov, 2022). Лицензия наследуется: **CC BY-NC-SA 4.0** (см. [LICENSE.txt](LICENSE.txt)). ## Что отличается от оригинала - Из истории удалены случайно закоммиченные секреты. - Бэкенд LLM переключён с OpenAI на Groq (бесплатный тариф) через openai-совместимый API. - Код обновлён под новую версию SDK `openai` (>=1.0); старый pre-1.0 интерфейс был сломан. - Убрана зависимость от Picovoice Porcupine — wake-word распознаётся напрямую через Vosk с grammar-constraint (второй `KaldiRecognizer` со словарём из `WAKE_WORDS`). Ключ Picovoice больше не нужен. - Обновлена ветка/тэги (`dev`, `v0.0.1-import`), причёсан README и `requirements.txt`. ## Установка Требуется **Python 3.11** (на 3.13 ряд зависимостей пока ставится с бубном). ```bash git clone https://github.com/DmitryBykov-ISPO/J.A.R.V.I.S-py.git cd J.A.R.V.I.S-py py -3.11 -m venv .venv .venv\Scripts\activate pip install --upgrade pip pip install -r requirements.txt ``` Скопируйте `dev.env.example` в `dev.env` и заполните ключ: - `GROQ_TOKEN` — бесплатно на [console.groq.com](https://console.groq.com/). Vosk-модель для русского языка лежит в `model_small/` (уже в репозитории). Запуск: ```bash python main.py ``` ## Конфигурация - `config.py`: - `MICROPHONE_INDEX = -1` — индекс микрофона (`-1` означает устройство по умолчанию). Если микрофонов несколько и берётся не тот, поменяйте число. - `WAKE_WORDS = ('jarvis', 'джарвис')` — варианты транскрипции wake-word, которые принимает Vosk. Если ваш голос/акцент стабильно расшифровывается как, например, `жарвис` — добавьте этот вариант сюда (всё в нижнем регистре). - `GROQ_MODEL` — имя модели Groq (по умолчанию `llama-3.3-70b-versatile`). - `commands.yaml` — набор голосовых команд и их вариантов для fuzzy-матчинга. - `custom-commands/` — скомпилированные AHK-скрипты под конкретный сетап автора оригинала (переключение мониторов, управление Яндекс.Музыкой и т.п.). На вашей машине большая часть из них работать не будет, но ассистент запустится в любом случае. ## Использование 1. Скажите **«Джарвис»** (или **«jarvis»**) — ассистент даст звуковой сигнал готовности. 2. Произнесите команду — окно записи закрывается само, как только вы замолчите (см. ниже про VAD): - либо одну из фраз из `commands.yaml` (открыть браузер, выключить звук и т.д.); - либо начните со слова **«скажи …»** — остаток фразы уйдёт в Groq, ответ будет зачитан вслух. ## VAD (определение конца команды) Окно записи команды закрывается по голосовой активности (webrtcvad), а не по таймеру. Параметры в `config.py`: - `VAD_AGGRESSIVENESS` (0..3) — насколько агрессивно VAD режет шум; по умолчанию 2. - `COMMAND_END_SILENCE_MS` — длительность тишины, после которой окно закрывается (по умолчанию 1200 мс). - `COMMAND_MIN_SPEECH_MS` — минимальная длительность речи, иначе тишина не считается концом (500 мс). - `COMMAND_MIN_LISTEN_MS` — минимальное время записи, чтобы не закрыться мгновенно (1000 мс). - `COMMAND_MAX_LISTEN_MS` — жёсткий потолок (15000 мс). ## Схема commands.yaml Каждая команда — это пара `phrases` + `action`: ```yaml open_browser: phrases: - открой браузер - запусти браузер action: {type: exe, file: "Run browser.exe"} ``` Типы действий: - `exe` — запустить `.exe` из `custom-commands/`. Поля: `file` (имя файла), необязательные `wait: true` (ждать завершения), `delay_ms` (пауза после запуска). По умолчанию после `exe` проигрывается звук подтверждения `ok` — отключается через `confirm_sound: null`. - `play_sound` — проиграть WAV из `sound/`. Поле `name` (без расширения). Имена `greet` и `ok` проигрываются с рандомным выбором из вариантов `greet1/2/3.wav`, `ok1/2/3.wav`. - `system` — встроенные операции. `op: volume_mute`, `volume_unmute`, `exit`. - `multi` — последовательность шагов: `steps: [...]`. Шаги внутри `multi` — тех же типов. Пример: ```yaml sound_off: phrases: [выключи звук, отключи звук] action: type: multi steps: - {type: play_sound, name: ok} - {type: system, op: volume_mute} ``` ## Конструктор команд GUI для добавления команд в `commands.yaml` без ручной правки YAML. Запуск: ``` python -m tools.command_builder ``` Или из корня репо `run_builder.bat` (под Windows). Открывается окно pywebview с пошаговым мастером: фразы → тип действия → параметры → предпросмотр YAML и сохранение. На шаге «Действие» доступна вкладка «Подсказать (LLM)» — модель Groq предложит готовый блок по описанию на русском. После сохранения команды Jarvis нужно перезапустить, чтобы она подхватилась. Требования: - Windows 10/11 с установленным WebView2 Runtime (обычно уже стоит вместе с Edge — иначе [скачать у Microsoft](https://developer.microsoft.com/microsoft-edge/webview2/)). - Зависимости из `requirements.txt` (включая `pywebview`, `ruamel.yaml`, `pyautogui`). Подробности для разработчиков — [tools/command_builder/README.md](tools/command_builder/README.md). TODO: добавить скриншот окна. ## Лицензия CC BY-NC-SA 4.0 — см. [LICENSE.txt](LICENSE.txt). Авторство оригинала — Abraham Tugalov / Priler. Изменения в этом форке — Bossiara13 (Dmitry Bykov), 2026.