Member Junction
    Preparing search index...

    Interface RealtimeSessionCapabilities

    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.

    interface RealtimeSessionCapabilities {
        CanReconfigureDelegationMode?: boolean;
        CanReconfigureTurnMode: boolean;
        EmitsProviderCutoffSignal?: boolean;
        EmitsResponseComplete?: boolean;
        EmitsUserInterruptionSignal?: boolean;
        FullDuplex?: boolean;
        MaxConcurrentDelegations?: number;
        MaxInboundVideoStreams?: number;
        ProvidesInputTranscription?: boolean;
        ProvidesOutputTranscription?: boolean;
        ProvidesThoughtSummaries?: boolean;
        SupportedInboundTracks?: readonly RealtimeTrackDescriptor[];
        SupportedOutboundTracks?: readonly RealtimeTrackDescriptor[];
        SupportedReasoningPlanes?: readonly RealtimeReasoningPlane[];
        SupportsAsynchronousReasoning?: boolean;
        SupportsDynamicToolSet?: boolean;
        SupportsParallelToolCalls?: boolean;
        UsageBases?: readonly RealtimeTrackUsageBasis[];
    }
    Index

    Properties

    CanReconfigureDelegationMode?: boolean

    Whether delegation mode can be reconfigured mid-session.

    CanReconfigureTurnMode: boolean

    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).

    EmitsProviderCutoffSignal?: boolean

    Whether the provider emits a discrete signal when model generation is cut off.

    EmitsResponseComplete?: boolean

    Whether the provider emits a response-complete signal when a turn ends.

    EmitsUserInterruptionSignal?: boolean

    Whether the provider emits a discrete user-interruption signal when user barge-in occurs.

    FullDuplex?: boolean

    Whether 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.

    MaxConcurrentDelegations?: number

    Maximum number of concurrent delegations supported by the provider, or undefined if unbounded.

    MaxInboundVideoStreams?: number

    How 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.

    ProvidesInputTranscription?: boolean

    Whether this driver provides speech-to-text transcript events for user audio input.

    ProvidesOutputTranscription?: boolean

    Whether this driver provides text transcript events for model audio output.

    ProvidesThoughtSummaries?: boolean

    Whether 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.

    SupportedInboundTracks?: readonly RealtimeTrackDescriptor[]

    Media 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.

    SupportedOutboundTracks?: readonly RealtimeTrackDescriptor[]

    Media 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.

    SupportedReasoningPlanes?: readonly RealtimeReasoningPlane[]

    Which reasoning planes this driver supports (e.g. ['local'], ['remote'], or ['local', 'remote']).

    SupportsAsynchronousReasoning?: boolean

    Whether 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.

    SupportsDynamicToolSet?: boolean

    Whether 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.

    SupportsParallelToolCalls?: boolean

    Whether the provider supports receiving multiple parallel tool calls and batched results (gpt-live-1.md §4.2).

    UsageBases?: readonly RealtimeTrackUsageBasis[]

    The 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.