Controlled mode
Controlled mode is the universal fallback. Use it when your app already owns the voice session and can provide a conversation state plus normalized input and output speech envelopes.idleconnectinglisteningthinkingspeakingerror
0 to 1.
Use signal when your app has separate user input and assistant output levels:
Vapi
ElevenLabs
LiveKit
inputVolume. While
the agent is speaking, it emits the attached remote audio level as outputVolume. The adapter owns
the LiveKit room, token source, audio analysis, and a fresh room name for each start.
Pipecat
OpenAI GPT-Live
gpt-live-1 session and returns its session ID and SDP answer. Follow the
OpenAI Live guide for the server endpoint and delegation setup.
For existing Realtime sessions, keep using
createOpenAIRealtimeAdapter({ getClientSecret }).
Gemini Live
External session controls
Setinteractive={false} when the orb should only display adapter state. Use the adapter’s public
lifecycle methods from controls placed elsewhere in your interface.
Themes
Start with:radialfor a four-lobe call surface with different input and output reactions.cloudfor a soft atmospheric sphere with distinct listening and speaking motion.circlefor a primary assistant orb.barsfor waveform-like audio activity.debugwhile verifying state and volume changes.
onStart/onStop handler. Add an aria-label if the surrounding UI does not already label the control, or pass interactive={false} when a separate control owns the session lifecycle.
Use the voice states guide when you are deciding how each state should appear in your product.