Fork of Priler/jarvis (CC BY-NC-SA 4.0) https://github.com/Priler/jarvis
Find a file
2026-04-22 19:35:45 +03:00
.idea some reformat 2023-04-16 16:59:18 +05:00
custom-commands Revert "Поменял архитектуру, сильно уменьшил кол-во зависимостей, убрал pyaduio, porcupine" 2023-04-16 15:56:20 +05:00
model_small some reformat 2023-04-16 16:59:18 +05:00
sound Revert "Поменял архитектуру, сильно уменьшил кол-во зависимостей, убрал pyaduio, porcupine" 2023-04-16 15:56:20 +05:00
utils Revert "Поменял архитектуру, сильно уменьшил кол-во зависимостей, убрал pyaduio, porcupine" 2023-04-16 15:56:20 +05:00
.gitignore security: untrack dev.env, add template dev.env.example 2026-04-22 17:33:07 +03:00
commands.yaml chore: update commands.yaml to new action schema 2026-04-22 19:35:16 +03:00
config.py feat: add webrtcvad-based smart command-end detection 2026-04-22 19:32:30 +03:00
dev.env.example chore: drop pvporcupine dep and PICOVOICE_TOKEN from env template 2026-04-22 17:47:22 +03:00
LICENSE.txt license added 2023-04-22 02:17:06 +05:00
main.py refactor: drive execute_cmd from commands.yaml action schema 2026-04-22 19:34:00 +03:00
README.md docs: README — document VAD + YAML plugin schema 2026-04-22 19:35:45 +03:00
requirements.txt feat: add webrtcvad-based smart command-end detection 2026-04-22 19:32:30 +03:00
tts.py some reformat 2023-04-16 16:59:18 +05:00

J.A.R.V.I.S (Python) — Bossiara13's fork

Голосовой ассистент для Windows с wake-word «jarvis». Распознаёт речь локально через Vosk (русская модель), отвечает голосом через Silero TTS, а свободные вопросы (фразы, начинающиеся со слова «скажи …») отправляет в LLM на Groq и зачитывает ответ.

Это форк

Форк репозитория Priler/jarvis (автор оригинала — Abraham Tugalov, 2022). Лицензия наследуется: CC BY-NC-SA 4.0 (см. 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 ряд зависимостей пока ставится с бубном).

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 и заполните ключ:

Vosk-модель для русского языка лежит в model_small/ (уже в репозитории). Запуск:

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:

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 — тех же типов. Пример:

sound_off:
  phrases: [выключи звук, отключи звук]
  action:
    type: multi
    steps:
      - {type: play_sound, name: ok}
      - {type: system, op: volume_mute}

Лицензия

CC BY-NC-SA 4.0 — см. LICENSE.txt. Авторство оригинала — Abraham Tugalov / Priler. Изменения в этом форке — Bossiara13 (Dmitry Bykov), 2026.