Adolfo Reyna 199f762616 feat: Jarvis v2 - CPU optimized always-listening for iMac Ubuntu
- PipeWire/pw-record backend (no PortAudio needed) - tested mic live
- VAD: Energy (immediate) + Silero (torch CPU) switchable
- Wakeword: openWakeWord TFLite hey_jarvis 0.4
- STT: faster-whisper base int8 CPU - model loads OK on i3
- SpeakerID: ECAPA embeddings + fallback stats, enrollment store
- Vision: OpenCV Haar + face_recognition + webcam cam0 640x480 verified
- LLM: ollama/qwen2.5:3b, gemini_cli, hermes_api, echo strategies
- TTS: Piper + espeak + echo fallbacks
- Core pipeline: IDLE -> WAKE -> RECORDING -> STT -> SpeakerID/FaceID fusion -> LLM -> TTS -> followup window
- Config via jarvis.yaml, soul.md persona
- CLI tools: run, devices, enroll-speaker, enroll-face, test-vad, test-mic
- Systemd user service ready
- Tested on iMac 2010 i3 550 15GB Ubuntu 26.04 CPU-only
2026-07-10 12:16:03 -04:00

Jarvis v2 - Always-Listening Assistant (CPU)

Designed for Intel iMac Ubuntu 26.04, 15GB RAM, CPU-only.

Architecture

Mic 16kHz -> VAD (silero) -> Wakeword (openWakeWord TFLite) -> STT (faster-whisper int8) -> SpeakerID (ECAPA) + FaceID (OpenCV) -> LLM (ollama/gemini_cli/hermes) -> TTS (piper) -> Speaker

Quick start on iMac

cd ~/Projects/jarvis-v2
# install uv if not present
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH=$HOME/.local/bin:$PATH
uv venv .venv --python 3.14
source .venv/bin/activate
uv pip install -e .

# for audio libs you may need (if sudo works, otherwise pip wheels should work)
# sudo apt install portaudio19-dev libasound2-dev espeak

# configure
cp jarvis.yaml.example jarvis.yaml
# edit jarvis.yaml

# Test components
python scripts/test_mic.py
python scripts/test_wakeword.py
python scripts/test_stt.py

# Enroll family voices (3 samples each)
python scripts/enroll_speaker.py --name Adolfo --mic
python scripts/enroll_speaker.py --name Grace --mic
python scripts/enroll_speaker.py --name Elias --mic

# Enroll faces
python scripts/enroll_face.py --name Adolfo
python scripts/enroll_face.py --name Grace

# Run
jarvis run
# or
python -m jarvis.cli run --config jarvis.yaml

# Install as systemd user service (always-on)
./scripts/install_service.sh

Config

See jarvis.yaml.example - covers audio, VAD, wakeword, STT, speaker, vision, LLM, TTS.

LLM Providers

  • ollama: local qwen2.5:3b (install ollama then ollama pull qwen2.5:3b)
  • gemini_cli: uses existing gemini CLI + soul.md
  • hermes_api: points to Hermes API
  • echo: placeholder

Future

  • voice trigger via small LLM gate (qwen0.5B decides if addressed)
  • Face corroboration on wake
  • Home Assistant / MCP tools
S
Description
No description provided
Readme 250 KiB
Languages
Python 100%