Skip to content

strands.experimental.bidi.models.openai_realtime

OpenAI Realtime API provider for Strands bidirectional streaming.

Provides real-time audio and text communication through OpenAI’s Realtime API with WebSocket connections, voice activity detection, and function calling.

Max timeout before closing connection.

OpenAI documents a 60 minute limit on realtime sessions (docs). However, OpenAI does not emit any warnings when approaching the limit. As a workaround, we configure a max timeout client side to gracefully handle the connection closure. We set the max to 50 minutes to provide enough buffer before hitting the real limit.

class BidiOpenAIRealtimeModel(BidiModel)

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:79

OpenAI Realtime API implementation for bidirectional streaming.

Combines model configuration and connection state in a single class. Manages WebSocket connection to OpenAI’s Realtime API with automatic VAD, function calling, and event conversion to Strands format.

def __init__(model_id: str = DEFAULT_MODEL,
provider_config: dict[str, Any] | None = None,
client_config: dict[str, Any] | None = None,
**kwargs: Any) -> None

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:90

Initialize OpenAI Realtime bidirectional model.

Arguments:

  • model_id - Model identifier (default: gpt-realtime)
  • provider_config - Model behavior (audio, instructions, turn_detection, etc.)
  • client_config - Authentication (api_key, organization, project) Falls back to OPENAI_API_KEY, OPENAI_ORGANIZATION, OPENAI_PROJECT env vars
  • **kwargs - Reserved for future parameters.
async def start(system_prompt: str | None = None,
tools: list[ToolSpec] | None = None,
messages: Messages | None = None,
**kwargs: Any) -> None

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:180

Establish bidirectional connection to OpenAI Realtime API.

Arguments:

  • system_prompt - System instructions for the model.
  • tools - List of tools available to the model.
  • messages - Conversation history to initialize with.
  • **kwargs - Additional configuration options.
async def receive() -> AsyncGenerator[BidiOutputEvent, None]

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:423

Receive OpenAI events and convert to Strands TypedEvent format.

async def send(content: BidiInputEvent | ToolResultEvent) -> None

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:703

Unified send method for all content types. Sends the given content to OpenAI.

Dispatches to appropriate internal handler based on content type.

Arguments:

  • content - Typed event (BidiTextInputEvent, BidiAudioInputEvent, BidiImageInputEvent, or ToolResultEvent).

Raises:

  • ValueError - If content type not supported (e.g., image content).
async def stop() -> None

Defined in: src/strands/experimental/bidi/models/openai_realtime.py:772

Close session and cleanup resources.