Skip to content

Voice Adapter Capability Matrix

Every voice adapter in Scenario declares its capabilities via a frozen AdapterCapabilities dataclass. The table below is auto-generated from those declarations and kept in sync by a CI gate — if you change an adapter's capabilities, regenerate with:

cd python
uv run python scripts/gen_capability_matrix.py

Capabilities

Adapterstreaming_transcriptsnative_vaddtmfinterruptioninput_formatsoutput_formats
ComposableVoicepcm16/24000pcm16/24000
ElevenLabspcm16/24000pcm16/24000
GeminiLivepcm16/16000pcm16/24000
LiveKitpcm16/48000pcm16/48000
OpenAIRealtimepcm16/24000pcm16/24000
Pipecatpcm16/24000, mulaw/8000, opuspcm16/24000, mulaw/8000, opus
Twiliomulaw/8000mulaw/8000
Vapipcm16/16000pcm16/16000
WebRTCpcm16/24000pcm16/24000
WebSocketpcm16/24000pcm16/24000
Column key
ColumnMeaning
streaming_transcriptsAdapter emits incremental transcript events during a turn
native_vadAdapter has built-in voice activity detection
dtmfAdapter can detect and forward DTMF (keypad) tones
interruptionAdapter supports barge-in / user-initiated interruption
input_formatsAudio formats the adapter accepts from the user simulator
output_formatsAudio formats the adapter sends to the scenario harness

Wire transport and shipping status

The capabilities table above describes what each adapter supports. The table below describes how each adapter is wired and whether it is shipping or still stubbed behind PendingTransportError.

AdapterWire transportReal I/O?
ComposableVoiceAgentSTT + LLM + TTS pipeline (provider-defined)✅ shipping
ElevenLabsAgentAdapterWebSocket (ElevenLabs Convai)✅ shipping
GeminiLiveAgentAdapterWebSocket (Gemini Live)✅ shipping
LiveKitAgentAdapterWebRTC (LiveKit room)🚧 stub (PendingTransportError)
OpenAIRealtimeAgentAdapterWebSocket (OpenAI Realtime)✅ shipping
PipecatAgentAdapterWebSocket (Twilio Media Streams protocol)✅ shipping
TwilioAgentAdapterMedia Streams (WebSocket over Twilio)✅ shipping
VapiAgentAdapterREST (Vapi outbound)🚧 stub (PendingTransportError)
WebRTCAgentAdapterWebRTC (datachannel + audio track)🚧 stub (PendingTransportError)
WebSocketAgentAdapterWebSocket (bring-your-own protocol)✅ shipping

Adapters marked 🚧 raise PendingTransportError on connect() and are tracked as follow-up issues. Their capability declarations are final (they match the wire spec); only the transport glue code is pending.

Source of truth

Capability values live in each adapter's capabilities: ClassVar[AdapterCapabilities] declaration. The canonical source file is python/scenario/voice/capabilities.py.

The generator script that produces the auto-generated table above is python/scripts/gen_capability_matrix.py.