Member Junction
    Preparing search index...

    Real-time, full-duplex driver for the Inworld Realtime API, implementing the Core BaseRealtimeModel primitive. Registers as InworldRealtime and is resolved for MJ: AI Models typed Realtime (API-key env alias: AI_VENDOR_API_KEY__InworldRealtime).

    What the provider is: a single-WebSocket speech-to-speech stack. Sessions initialize with a session.update frame carrying model selection, instructions, audio settings, STT/TTS config, and tools; components are swappable mid-session without reconnect. Input is streamed audio (server-side STT with voice profiling); output is synthesized speech (Realtime TTS-2) supporting inline steering tags like [laugh]. Turn-taking is semantic VAD with adjustable eagerness, handling barge-in.

    Model resolution: Inworld brokers hundreds of LLMs; the reasoning model is selected via modelId (e.g. anthropic/claude-sonnet-4-6) carried from RealtimeSessionParams.Model (falling back to INWORLD_DEFAULT_MODEL_ID). STT engine and TTS voice are configured independently via Config.

    Topology: server-bridged only (StartSession) — the driver opens the WebSocket, sends the session config, and resolves only once the provider confirms the config is applied (driver obligation #7). Inworld does not expose a documented ephemeral-token mint for browser-direct sessions, so SupportsClientDirect stays false (inherited).

    Tool calling: "fluent tool calling" — functions declared at startup (or added mid-session via IRealtimeSession.RegisterTools) and executed mid-conversation; results fed back via IRealtimeSession.SendToolResult complete the loop.

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    SupportsDynamicToolSet?: boolean

    Whether this driver subclass supports dynamic, multi-tool sets projected into the realtime session (e.g. direct action invocation on realtime co-agents).

    Static capability descriptor read before a session instance exists. Default: absent / false. Subclasses that support dynamic toolsets declare public static readonly SupportsDynamicToolSet = true;.

    Accessors

    • get apiKey(): string

      Only sub-classes can access the API key

      Returns string

    • get SupportedVoices(): RealtimeVoiceOption[]

      Static fallback list of provider-native voices supported by this driver when metadata personas are not present or sparse.

      NOTE: Database metadata (MJ: AI Personas + AI Model Personas) is authoritative where configured. At runtime, GetRealtimeModelVoices unions metadata personas with this driver fallback list so that newly uncatalogued provider voices remain selectable while catalogued personas carry curated names/descriptions.

      Returns RealtimeVoiceOption[]

      The supported voice ids (id + human label), or [] when none are declared.

    • get SupportsClientDirect(): boolean

      Whether this driver can mint an ephemeral, server-scoped client credential for a client-direct realtime session (the browser opens its own provider socket using a short-lived token the server minted).

      Defaults to false. Providers that support browser-direct sessions override this to true and implement CreateClientSession. The server-bridged topology (where the provider socket lives on the server, via StartSession) is supported by every driver regardless of this flag.

      Returns boolean

      true if CreateClientSession is supported; false otherwise.

    Methods

    • Builds the authenticated WebSocket URL. Auth rides as a ?token= query parameter (the server-side API key for the server-bridged topology).

      Returns string

      The full wss://…?token=… connect URL.

      Wire-format binding point — confirm the auth query-parameter name (token) against a live Inworld endpoint; some deployments authenticate via an Authorization header instead.

    • Mints an ephemeral, server-scoped client credential plus a provider-native session config for a client-direct realtime session.

      In the client-direct topology the browser owns the provider socket (e.g. WebRTC), but the server still controls the prompt and tool set: it mints a short-lived token and hands back a ClientRealtimeSessionConfig whose SessionConfig the matching client driver applies when it opens its socket. This keeps prompt/tool authority server-side even though the media plane is client-direct.

      Not every provider supports this (some only expose a server-bridged socket), so this is a concrete method that throws by default rather than an abstract one — that would force every existing and future driver to implement it. Providers that support it override SupportsClientDirect to true and override this method.

      Parameters

      Returns Promise<ClientRealtimeSessionConfig>

      A promise resolving to the minted ClientRealtimeSessionConfig.

      Always, unless overridden by a provider that supports client-direct sessions.

    • Optional WebRTC SDP exchange seam for drivers that support server-brokered WebRTC topologies.

      Parameters

      • _offerSdp: string

        The local SDP offer generated by the browser.

      • Optional_sessionConfig: Record<string, unknown>

        The session configuration to initialize the session with.

      Returns Promise<{ answerSdp: string; prebillSeconds: number; sessionId: string }>

      The answer SDP, provider session ID, and any prebill accounting.

    • Opens a server-bridged session: connects the realtime WebSocket authenticated with the API key, sends the full session config as the FIRST frame (session.update — model, instructions, audio/STT/TTS, tools, semantic-VAD turn-taking), and resolves only once the provider's session-ready confirmation arrives (driver obligation #7 — "ready only after the config is applied"). Mic frames sent before that would be dropped by the provider, and StartSession not resolving until ready makes that unrepresentable for consumers.

      Parameters

      • params: RealtimeSessionParams

        Session configuration (model, system prompt, tools, initial context, config bag).

      Returns Promise<IRealtimeSession>

      A promise resolving to the live IRealtimeSession handle, post-ready.

    • Whether this driver's sessions can render a live avatar for the model, on the endpoint the driver serves.

      Defaults to false: a driver whose models render no avatar says nothing more, and may ignore an avatar request. A driver that renders one for some models (Gemini Enterprise) overrides it. The client-session service reads it to tell a call or a meeting that asked for an avatar "this voice model can't show an avatar" (RealtimeAvatarUnavailableReason 'endpoint'), whichever driver serves it.

      Parameters

      • _model: string

        The provider's API name for the model.

      Returns boolean

      true when sessions on this model can render a live avatar; false otherwise.