Make all 4 workspace crates build cleanly: add build.rs to jarvis-cli and jarvis-gui for vosk link path, build frontend assets so tauri generate_context! finds them, gitignore tauri-regenerated schemas. |
||
|---|---|---|
| crates | ||
| frontend | ||
| lib | ||
| resources | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE.txt | ||
| post_build.py | ||
| poster.jpg | ||
| README.md | ||
J.A.R.V.I.S (Rust) — форк Bossiara13
Форк Rust-переписки голосового ассистента Priler/jarvis. Текущий репозиторий: https://github.com/DmitryBykov-ISPO/J.A.R.V.I.S-rust.
Что это
Голосовой ассистент, написанный на Rust, работающий локально (без облака). Текущий стек:
- Vosk — Speech-to-Text (через
vosk-rs). - fastembed + ort — локальные эмбеддинги для intent-классификации (MiniLM L6/L12 ONNX).
- Picovoice Porcupine / Rustpotter / Vosk — три опциональных движка wake-word.
- mlua (Lua 5.5, vendored) — скрипты пользовательских команд.
- Tauri + Vite/Svelte — GUI-оболочка (фронтенд в отдельной папке
frontend/). - nnnoiseless — подавление шума.
- fluent / unic-langid — i18n (
ru,ua,en).
LLM-интеграции в коде пока нет. В апстримном README у Priler значится ChatGPT (coming soon), но в исходниках этого нет. В данном форке тоже не добавлялось.
Это форк
Оригинальный автор — Abraham Tugalov (Priler).
Апстрим: https://github.com/Priler/jarvis.
Лицензия сохранена: CC BY-NC-SA 4.0 (см. LICENSE.txt).
Атрибуция в Cargo.toml и voice.toml пакетов озвучки не изменена.
Что отличается от апстрима
- Обновлён список авторов в
Cargo.toml(добавленBossiara13 (fork), оригинал сохранён). - README переписан и отражает фактическую архитектуру (апстримный README называет проект "Tauri+Svelte", что давно не соответствует действительности — это workspace из 4-х крейтов).
- Отсутствующие в апстриме ONNX-модели (
all-MiniLM-L6-v2,paraphrase-multilingual-MiniLM-L12-v2-onnx-Q) подтянуты через Git LFS из HuggingFace (Qdrant) и запушены в форк.
Структура репозитория
Cargo workspace из четырёх крейтов:
| Крейт | Назначение |
|---|---|
jarvis-core |
Библиотека: конфиг, intent, STT, wake-word, аудио, Lua-бэкенд, i18n. |
jarvis-app |
Бинарь-«демон»: собирает всё вместе, tray, IPC. |
jarvis-gui |
Tauri-приложение (использует frontend/dist/client). |
jarvis-cli |
CLI для отладки: классификация intent, список команд, dump конфига. |
Прочее:
frontend/— Vite + Svelte UI дляjarvis-gui. Собирается отдельно.lib/windows/amd64/— нативные DLL/LIB для Vosk, Porcupine, PvRecorder.resources/— голоса, модели, конфиги по умолчанию. ONNX-модели хранятся в Git LFS.post_build.py— постпроцессинг артефактов сборки (Python 3).
Сборка
Требования:
- Rust 1.93+ (собирается на stable MSVC).
- Node 24+ и npm — для фронтенда.
- Python 3 — для
post_build.py. - MSVC build tools (Windows, x64).
- Установленные
libvosk.lib,libpv_porcupine.dll,libpv_recorder.dllвlib/windows/amd64/(уже в репозитории).
Перед сборкой jarvis-gui нужно собрать фронтенд:
cd frontend
npm install
npm run build
cd ..
Затем workspace:
cargo build --workspace
Холодная сборка занимает около 10 минут (ONNX runtime, aws-lc-rs, tauri).
Статус сборки в этом форке
На моей машине (cargo build --workspace, stable MSVC) итог:
jarvis-core— собрался (1 warning, unused import).jarvis-app— собрался, бинарникtarget/debug/jarvis-app.exeсоздан.jarvis-cli— падает на линковке:LNK1181: cannot open input file "libvosk.lib". Причина: уjarvis-cliнет своегоbuild.rs, а.cargo/config.tomlсrustc-link-searchлежит только внутриcrates/jarvis-app/и не подтягивается дляjarvis-cli. Лечится либо добавлением такого жеbuild.rsвcrates/jarvis-cli/, либо вынесениемconfig.tomlв корень. Сознательно не трогал — фикс выходит за рамки рефакторинга (v0.0.1-import фиксирует поведение апстрима как есть).jarvis-gui— падает вtauri::generate_context!():frontendDist = "../../frontend/dist/client"не существует. Это ожидаемо, если не запуститьnpm run buildвfrontend/заранее (см. секцию «Сборка»).
Запуск уже собранного:
./target/debug/jarvis-app.exe
Для CLI (jarvis-cli --help, команды classify, execute, list, phrases) нужно сначала починить линковку Vosk (см. выше).
Лицензия
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Полный текст — в LICENSE.txt. Атрибуция оригинального автора (Abraham Tugalov) сохранена.
В Cargo.toml декларирован license = "GPL-3.0-only" — это несоответствие унаследовано от апстрима и не правилось, чтобы не расходиться с upstream-конфигом. Приоритет имеет LICENSE.txt.
Python-версия
Старая версия ассистента была на Python. Последний коммит с Python-кодом в апстриме — 943efbf.