Voice Agent (Lux)
Raspberry Pi smart speaker with a local wake-word model and live-voice LLM backends.
Overview
Lux is a smart speaker I built on a Raspberry Pi that detects the wake word “Lux” locally, then opens a real-time bidirectional voice connection to one of three LLM providers — OpenAI Realtime, Gemini Live, or Grok Voice — for full-duplex conversation. Everything routes through the Badland API, so context, memory, and tool calls all stay consistent across the chat, agent, menubar, and voice surfaces.
Architecture
- Wake word: Local model running on the Pi, low-latency, no cloud round-trip until the user actually says “Lux.”
- Provider routing: Once activated, the Pi opens a live-voice WebSocket / WebRTC session to whichever backend is configured — OpenAI Realtime, Gemini Live, or Grok Voice.
- Shared backend: All three providers go through the Badland API so the Pi has the same tool calls and context as every other Badland surface.
- Hardware: Raspberry Pi with USB mic + line-out speaker, headless boot, systemd-managed agent process.
Why it matters
Most off-the-shelf smart speakers lock you into one vendor and one assistant. Lux uses whichever provider has the best live-voice experience that month (Gemini Live tends to win currently) without locking the surface to the provider. And because the API call shape is identical to chat.badland.ai, switching providers is a config change, not a rewrite.