GitHub ↗

User · Voice

JARVIS

The reference application that proves the engine: mic to VAD to STT to LLM to TTS to speaker, all in-process, pure C++, with the LLM on any backend. The engine is the app.

The pipeline

mic -> VAD -> STT (libwhisper) -> LLM (engine) -> TTS (piper) -> speaker

Every stage is in-process and pure C++, and the LLM stage runs on any engine backend: NPU, GPU, CPU.

JARVIS v2 (rebuild 2026-08-06)

v1 was a C++ port of a deleted Python package that carried the whole deleted product stack (auth, billing, usage, beacon, personas, RAG, an HTTP agent server). v2 gutted all of it:

  • One process n/a in-process BackendManager; the engine IS the app.
  • Pure C++ n/a only subprocesses are arecord, aplay, piper.
  • Thin n/a tools/jarvis/ is 9 files, ~1300 lines.

Default stack: Zyphra

Without --model, JARVIS picks the first Zyphra model in the weights dir (preference: ZAYA1-8B to ZAYA1-74B to BlackMamba-2.8B to BlackMamba-1.5B to Zamba2 to ZR1-1.5B). --model <any> bypasses it.

Run it

$ cmake --build build --target jarvis_app          # build/jarvis
$ ./build/1bit jarvis --model "Qwen3-0.6B" --text   # text chat
$ ./build/1bit jarvis --model "Qwen3-0.6B" \
    --whisper models/whisper-tiny.gguf \
    --piper-model ~/piper/en_US-lessac-medium.onnx   # voice

Status

StageStatus
VADenergy-based, 20 ms frames
LLMin-process, any backend, last-6-turns; default Zyphra
TTSpiper (fork/exec, 22050 Hz); codec voice = P2
STTGPU-accelerated; WHISPER_GPU=0 forces scalar
Barge-innot yet; utterances during a reply are dropped (P1)
Honesty

STT is GPU-accelerated when a HIP device is present, scalar CPU fallback otherwise. Verify on hardware before you trust it.