Reachy Mini cuts the cord: Hugging Face ships a fully local voice stack
Hugging Face's conversation app for the Reachy Mini robot can now run end-to-end on your own machine, with a swappable VAD → STT → LLM → TTS cascade that speaks a Realtime API-compatible WebSocket. No cloud, no keys, no audio leaving the network.

Builders, integrators, prompt engineers · 2 min read
Hugging Face has published a walkthrough for running the entire Reachy Mini voice loop locally, built on its speech-to-speech library. The architecture is a cascade — VAD, STT, LLM, TTS — exposed as a WebSocket at /v1/realtime that's compatible with the Realtime API the robot already speaks.
The opinionated defaults:
- VAD: Silero VAD v5 (CPU)
- STT: Parakeet-TDT
- TTS: Qwen3-TTS, multilingual, custom voices
- LLM: your call
The LLM is treated as the swappable bottleneck. The post documents five ways to wire one in:
- llama.cpp in a separate terminal, exposed via the Responses API. The recommended invocation is
llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full— two parallel slots so an interruption doesn't block, 64k shared context, flash attention, full sliding-window cache for faster prompt processing on Gemma. - vLLM ≥ 0.21.0, which is the minimum version with Responses API tool-call streaming. Three flags are effectively required:
--enable-auto-tool-choice, a--tool-call-parsermatched to the model family (qwen3_coder,llama3_json,hermes, …), and--default-chat-template-kwargs '{"enable_thinking":false}'. The HF team is explicit on that last one: every thinking token is latency the user hears as silence. Multi-Token Prediction via--speculative-configis optional but called out as a meaningful end-to-end win. - HF Inference Endpoints, same protocol, managed GPU.
- HF Inference Providers, routing to Together / Fireworks / Replicate / etc.
- OpenAI or any OpenAI-compatible provider — swap base URL and key, keep the pipeline identical.
For in-process LLMs, the post recommends MLX on Apple Silicon (mlx-community/Qwen3-4B-Instruct-2507-bf16) or Transformers on CUDA/CPU/MPS with Qwen/Qwen3-4B-Instruct-2507 as the speed/quality reference point. The server binds ws://127.0.0.1:8765/v1/realtime by default; if you're running the engine on a laptop and the app on a Reachy Mini Wireless, bind to a LAN address and point the robot at the laptop's IP.
The interesting design choice is the cleanness of the seam. Because the voice loop only consumes the Responses API, every layer of the stack — model, host, provider — is a config flag. A cascade with a stable protocol is, for now, more flexible than any single end-to-end speech model, and the post is fairly direct that this is a deliberate bet against vertical integration. New models drop weekly; the cascade absorbs them.
What we'll be watching: whether the Realtime/Responses API convention holds as the lingua franca for voice agents, and how many of these flags survive once speculative decoding and tool-call streaming stabilize across engines.


