1bit.MONSTERDocs GitHub ↗

JARVIS — the voice assistant that ships with 1bit

mic → VAD → STT (libwhisper) → LLM (engine) → TTS (piper) → speaker

JARVIS is the reference app for the engine: every stage is in-process, pure C++, and (for the LLM stage) runs on any engine backend — NPU, GPU, CPU.

Default stack: Zyphra (the crown jewel)

JARVIS's default experience is the Zyphra ecosystem — the complete MIT open-source pipeline (ZR1 routing → ZAYA / BlackMamba / Zamba2 LLMs → codec voice). When started without --model, JARVIS picks the first Zyphra model found in the weights dir (preference: ZAYA1-8B → ZAYA1-74B → BlackMamba-2.8B → BlackMamba-1.5B → Zamba2-7B/2.7B/1.2B → ZR1-1.5B).

Clients can bypass the default entirely: jarvis --model <any> loads their own model for a different experience. Install with bash install.sh --with-jarvis to build JARVIS, get a jarvis launcher

The rebuild (2026-08-06)

JARVIS v1 was a C++ port of the deleted Python jarvis/ package — and it carried every fork that ever lived inside it:

Gutted Was Why
auth.cpp/h API-key auth for the SaaS voice-cloning product, gone
billing.cpp/h Stripe metering voice-cloning product, gone
usage.cpp/h per-user usage caps voice-cloning product, gone
beacon.cpp/h 1bit-Mobile pairing agent stack, gone
persona.cpp/h, planner.cpp/h agent personas/planner agent stack, gone
rag.cpp/h, tools.cpp/h RAG + tool calling agent stack, gone
routing.cpp/h, context.cpp/h agent routing/memory engine routers own this now
audio_stream.cpp/h WebSocket side-server (own port) two servers for one voice loop
codec_tts.cpp/h, voice_cli.py ONNX codec TTS + Python CLI voice-cloning (personal quest — kept out of the repo; the codec decoder can return as a stock voice later)
jarvis_server.cpp 1761-line HTTP agent server (port 8080 → talks to unified_server :8088) the fork condenser itself
zaya_audio/ Python training toolkit (codec, voice packs) personal quest, gutted

Rebuilt as JARVIS v2:

Build & run

cmake --build build --target jarvis_app    # build/jarvis
# or inside the one binary:
./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

Flags: --model (required), --weights-dir, --text, --whisper, --piper / --piper-model, --mic DEVICE, --system, --max-tokens, plus fleet mode: --mesh-dispatch, --mesh-name, --port, --mesh-port.

Fleet mode — JARVIS with a DSH brain on the mesh

--mesh-dispatch gives JARVIS DSH awareness: no local model, no engine init — JARVIS becomes a thin fleet node that dispatches every LLM turn to the sibling install that serves the requested model.

user speaks → mic → VAD → STT → [dispatch over the mesh] → TTS → speaker
                                   │
                discovers: who serves what? (UDP multicast)
                decides:    local → best model match → any chat peer
                posts:      OpenAI-compatible /v1/chat/completions
# a fleet node serving the model:
./build/mesh_peer --name alice --port 18088 --stub-chat --models "Qwen3-4B:stub"
# JARVIS with no local model, brain on the mesh:
./build/1bit jarvis --mesh-dispatch --model Qwen3-4B --port 18081
curl -X POST localhost:18081/v1/jarvis/turn -d '{"text":"what can you do?"}'

Mesh protocol · DSH brain

Status & known limits (honest)

Stage Status
VAD ✅ energy-based, 20 ms frames, lookback/ramp-down
LLM ✅ in-process engine, any backend, history (last 6 turns); default = Zyphra stack
TTS ✅ piper (fork/exec, 22050 Hz); codec voice = P2
STT ✅ GPU-accelerated (src/whisper_hip.hip) when a HIP device is present; scalar CPU fallback; WHISPER_GPU=0 forces scalar. Verify on hardware: whisper_demo model.gguf audio.wav --check-gpu
Barge-in 🔲 utterances during a reply are dropped (P1)

Roadmap