OptionalCanWhether delegation mode can be reconfigured mid-session.
Whether the session can change its turn-taking / auto-response mode on a live socket (no
reconnect) via IRealtimeSession.Reconfigure. true for providers with a runtime-mutable
session config (OpenAI session.update); false where it's fixed at connect (Gemini Live).
OptionalEmitsWhether the provider emits a discrete signal when model generation is cut off.
OptionalEmitsWhether the provider emits a response-complete signal when a turn ends.
OptionalEmitsWhether the provider emits a discrete user-interruption signal when user barge-in occurs.
OptionalFullWhether the model is full-duplex: it keeps listening while it speaks, can emit short
backchannel acknowledgements, and judges for itself whether speech was directed at it. A bridge uses
this to prefer the model's own addressing judgement over a name-pattern match and to treat the room's
floor coordinator as a safety net rather than the primary gate. Absent/false = turn-based.
OptionalMaxMaximum number of concurrent delegations supported by the provider, or undefined if unbounded.
OptionalMaxHow many concurrent inbound VIDEO streams this model accepts: 0 when it accepts none, 1 for every
model shipped so far, more for a future model that can look at several things at once. Absent
means "derive it from SupportedInboundTracks" — one when an inbound video track is
declared, none otherwise (see ResolveMaxInboundVideoStreams).
A source arbiter maps however many live video sources exist onto this many streams: with 1 it
picks one and tells the model when it switches; with enough streams for every source it passes
them through untouched.
OptionalProvidesWhether this driver provides speech-to-text transcript events for user audio input.
OptionalProvidesWhether this driver provides text transcript events for model audio output.
OptionalProvidesWhether this driver surfaces model-authored summaries of the model's own reasoning
(Gemini thinkingConfig.includeThoughts).
Sibling of ProvidesInputTranscription / ProvidesOutputTranscription: it declares a transcript STREAM the driver can produce. Thought summaries are narration, not spoken response — a host rendering them as assistant speech would attribute the model's scratch reasoning to it as an answer.
OptionalSupportedMedia tracks this model can RECEIVE (user -> model).
Absent or empty is read as "inbound audio only", which is every model MJ spoke to before Gemini 3.8 Live — so an existing driver that declares nothing keeps working unchanged.
This is the supply side of track negotiation: the caller requests
(ModelConfiguration.Realtime.RequestedTracks), this declares, and
import('./realtimeTracks').ResolveRequestedTracks intersects them. A requested track
absent here resolves to 'unsupported' rather than being dropped, so a host can fall back
deliberately instead of wondering why no samples arrive.
OptionalSupportedMedia tracks this model can EMIT (model -> user). Absent or empty is read as "outbound audio
only". Non-audio outbound tracks (avatar video, haptics) are admitted by the contract because
direction is a property of a track rather than part of its type. A session that emits video
through IRealtimeSession.OnVideoFrame declares an outbound video track whose Encoding
names its frames' type, such as 'video/mp4; codecs="avc1.42c01f, mp4a.40.2"' for a Gemini avatar.
OptionalSupportedWhich reasoning planes this driver supports (e.g. ['local'], ['remote'], or ['local', 'remote']).
OptionalSupportsWhether this driver correctly handles a session whose reasoning outlives its turn — i.e. where a turn-terminal frame does NOT mean the server is idle, and further tool calls or audio may still arrive.
This is a statement about the DRIVER, not the model: a driver that keys "work finished" off
the turn-terminal frame must declare false, because on such a model it would flush deferred
work early and report itself not-busy while the server is still going. Which signal a given
model actually uses is model metadata
(ModelConfiguration.Realtime.IdleSignal), not a driver capability.
OptionalSupportsWhether this driver supports dynamic, multi-tool sets projected into the realtime session (e.g. direct action invocation on realtime co-agents).
When true, allowed target agent actions can be registered as direct tools on the realtime model.
When absent or false, only single/co-agent delegation tools (invoke-target-agent) are registered.
OptionalSupportsWhether the provider supports receiving multiple parallel tool calls and batched results (gpt-live-1.md §4.2).
OptionalUsageThe units this provider uses to measure and bill usage.
A LIST rather than an enum because a provider can meter in more than one basis at once —
GPT-Live reports voice seconds and delegated reasoning tokens from different places, so an
exclusive enum would force us to drop one. Shares
import('./realtimeTracks').RealtimeTrackUsageBasis with the media plane so cost has one
vocabulary; 'frames' and 'bytes' exist for non-audio tracks.
Static capability flags of a live IRealtimeSession, for container introspection (the realtime- session analogue of
IBridgeProviderFeatures). Grow this as providers gain runtime abilities — each new flag defaults to "unsupported" for any driver that hasn't declared it, so the container stays safe.