A voice model that only orchestrates
Real voice AI needs real-time WebRTC audio streaming (24kHz PCM) between the browser and the OpenAI Realtime model. And the fast model doing the talking shouldn't be the one doing the hard work.
The good news: it's already a real, working build.
A working WebRTC voice architecture: a FastAPI server bridging the browser to OpenAI Realtime, plus a full TypeScript voice client.
So the pieces exist. The question is which model does what.
Voice I/O runs on OpenAI's gpt-realtime model over WebRTC. In-repo synthesis docs set aggressive targets for responsiveness.
So how do you keep the fast model talking without letting it do the hard work?
The system prompt gives it exactly ONE work tool — delegate — so it can't try to do things itself. All other Amplifier tools stay internal to the spawned agents.
If delegate is the only way to act, who actually does the work?
The named specialists run on Anthropic Claude (default claude-sonnet-4). Delegation is one level deep — spawned agents set exclude_tools=['delegate'], so they can't re-delegate.
Now the split is set: a fast talker and slow-but-capable agents.
The model is instructed to ALWAYS say something before calling a tool — announce a short phrase, THEN delegate immediately. The fast voice keeps talking while the slower, more capable agents do the real work.
One responsive system: a fast orchestrator and capable agents in step.
Main-session cancellation works: request_cancel() calls the coordinator's graceful/immediate cancel. But propagating cancellation to in-flight child agents is a documented TODO in the code — not yet implemented.
The architecture reads as real precisely because its limits are stated.
Delegation-as-architecture is fast to build: the core delegate/orchestrator design landed in a ~4-5 day commit burst and was finalized ~two weeks after local clone. And it's reusable — a second voice architecture (Siri/CarPlay over Tailscale) already lives in a sibling repo.
Give the fast model one job: hand the work to someone better at it.
STATUS: WORKING (orchestrator/delegate shipped)
Data as of: February 2026. Primary source: ramparte/amplifier-voice (checked out at ~/dev/ANext/amplifier-voice); sibling repo ramparte/amplifier-voice-bridge. Upstream author bkrabach; local reflog author Sam Schillace.
Research performed:
gh api repos/ramparte/amplifier-voice/commits --paginate (local git object store corrupted: 'fatal: bad object HEAD'); cross-checked with .git/logs/HEAD reflog and file mtimes.sed -n '56,66p' voice-server/voice_server/config.py; model: grep -n 'gpt-realtime' voice-server/voice_server/config.py.grep -n 'REALTIME_TOOLS|CANCEL_TOOL|get_tools_for_openai' voice-server/voice_server/amplifier_bridge.py; delegate config: sed -n '160,195p' amplifier_bridge.py.sed -n '559,616p' voice-server/voice_server/amplifier_bridge.py.grep -rn '500ms|800ms' ai-context/research/synthesis/.find voice-server -name '*.py' -not -path '*homeassistant*' | xargs wc -l; find voice-client/src ( -name '*.ts' -o -name '*.tsx' ) | xargs wc -l.gh api repos/ramparte/amplifier-voice-bridge/commits; wc -l amplifier_server.py standalone_server.py.Gaps: ~500ms / <800ms latency are documented in-repo TARGETS, not measured production numbers. Session-length limits disagree across docs (15 min vs 60 min) and default voice drifts across files (marin/ash/verse) — no single value stated. OpenAI's "August 2025 GA" is a repo-asserted external fact, not independently verified. "Three architectures" is framing, not a repo-stated fact; child-agent cancellation propagation is a TODO, not shipped.