UNPKG

@ai-sdk/provider

Version:
90 lines (80 loc) 3.1 kB
import type { RealtimeModelV4ClientSecretOptions, RealtimeModelV4ClientSecretResult, } from './realtime-model-v4-client-secret'; import type { RealtimeModelV4ClientEvent } from './realtime-model-v4-client-event'; import type { RealtimeModelV4ServerEvent } from './realtime-model-v4-server-event'; import type { RealtimeModelV4SessionConfig } from './realtime-model-v4-session-config'; /** * Specification for a realtime model that supports bidirectional * audio/text communication over WebSocket. * * Providers implement this interface to enable realtime voice * conversations through the AI SDK. */ export type RealtimeModelV4 = { /** * The realtime model must specify which interface version it implements. */ readonly specificationVersion: 'v4'; /** * Provider ID (e.g. 'openai', 'xai'). */ readonly provider: string; /** * Provider-specific model ID (e.g. 'gpt-4o-realtime', 'grok-3'). */ readonly modelId: string; /** * Server-side: Creates an ephemeral client secret for authenticating * browser-side WebSocket connections. The secret is short-lived and * safe to expose to client code. * * Naming: "do" prefix to prevent accidental direct usage by the user. */ doCreateClientSecret( options: RealtimeModelV4ClientSecretOptions, ): PromiseLike<RealtimeModelV4ClientSecretResult>; /** * Browser-side: Returns the WebSocket URL and subprotocols to use * when connecting. Each provider has its own authentication mechanism * (e.g. OpenAI uses subprotocol headers, xAI may use query params). */ getWebSocketConfig(options: { token: string; url: string }): { url: string; protocols?: string[]; }; /** * Browser-side: Parses a raw JSON event received over the WebSocket * and returns one or more normalized events. Providers map their native * event format to the common RealtimeModelV4ServerEvent union. * * Returns an array when a single provider message maps to multiple * normalized events (e.g. Google's serverContent can contain audio, * text, and turn-complete data in one message). */ parseServerEvent( raw: unknown, ): RealtimeModelV4ServerEvent | RealtimeModelV4ServerEvent[]; /** * Browser-side: Serializes a normalized client event into the * provider's native JSON format for sending over the WebSocket. */ serializeClientEvent( event: RealtimeModelV4ClientEvent, ): unknown | PromiseLike<unknown>; /** * Browser-side: Builds the provider-specific session configuration * payload from a normalized session config. Used to construct the * session.update event sent after WebSocket connection. */ buildSessionConfig(config: RealtimeModelV4SessionConfig): unknown; /** * Browser-side: Returns a message to auto-send back over the WebSocket * in response to a raw incoming message, or null if no response is needed. * * Used for provider-specific keepalive protocols (e.g. ping/pong). * Called by the session layer before parseServerEvent. */ getHealthCheckResponse?(raw: unknown): unknown | null; };