---
title: "OpenAI Realtime"
description: "Models, voices, transcription, and reasoning effort for the OpenAI Realtime engine."
icon: "bolt"
---

# OpenAI Realtime

`OpenAIRealtime` is the engine wrapper for OpenAI's Realtime API — a single WebSocket session that handles speech-in, reasoning, and speech-out, with sub-500 ms typical turn latency.

For the basic `engine: new OpenAIRealtime(...)` quickstart, see [Engines](/typescript-sdk/engines#openairealtime). This page documents the full configuration surface: every supported model, the streaming transcription options, and the new `reasoningEffort` tier.

## Models {#models}

Pass any of these to `model:` on `new OpenAIRealtime(...)`. Pricing is auto-resolved per model from `DEFAULT_PRICING` — no manual override is required (see [Metrics](/typescript-sdk/metrics)).

| Model | Audio in / out (per M tokens) | Notes |
|-------|-------------------------------|-------|
| `"gpt-4o-mini-realtime-preview"` (engine marker default) | $10 / $20 | Default when `new OpenAIRealtime()` is constructed without an explicit `model`. Earlier preview line. |
| `"gpt-realtime-mini"` | $10 / $20 | GA mini — recommended cheap default for new deployments. Pass `model: "gpt-realtime-mini"` explicitly. |
| `"gpt-realtime"` | $32 / $64 | GA realtime model (Aug 2025). |
| `"gpt-realtime-2"` | $32 / $64 | Most-capable. Stronger instruction following, 128K context, supports `reasoningEffort`. Use the [`OpenAIRealtime2`](/typescript-sdk/providers/openai-realtime-2) engine for the GA wire shape. |
| `"gpt-4o-realtime-preview"` | $100 / $200 | Earlier preview, retained for compatibility. |

The same identifiers are exposed as a const object for editor autocomplete:

```typescript
import { OpenAIRealtimeModel } from "getpatter";

OpenAIRealtimeModel.GPT_REALTIME_2;  // "gpt-realtime-2"
```

<Note>
`gpt-realtime-translate` is intentionally **not** supported by Patter's Realtime engine. It lives on a different OpenAI endpoint (`/v1/realtime/translations`), does not accept tool calls or `response.create`, and would invalidate the `Agent` contract Patter exposes. Real-time translation, if added, will land as a dedicated feature — not as a Realtime model variant.
</Note>

## Reasoning effort

`gpt-realtime-2` accepts a configurable reasoning tier. Patter exposes it as the `reasoningEffort` constructor option on the lower-level `OpenAIRealtimeAdapter`:

| Value | When to use |
|-------|-------------|
| `"minimal"` | Snappy turn-taking. Skips most reasoning. |
| `"low"` | **Recommended for production voice.** Good instruction following without measurable per-turn latency. |
| `"medium"` | Multi-step tool flows where the model should plan. Adds latency. |
| `"high"` | Complex reasoning. Not recommended for live phone calls. |

When set, Patter injects `session.reasoning = { effort: ... }` into the `session.update` payload. When omitted, the field is not sent and OpenAI's server default applies. The field is a no-op on models that ignore it (for example `gpt-realtime-mini`), so it's safe to leave configured across model swaps.

<Tip>
Higher reasoning tiers add measurable latency to every turn. Stick to `"low"` unless you've profiled the call and confirmed the model needs more.
</Tip>

## Streaming transcription

The Realtime session can run an inline Whisper-family model on inbound audio so you get text deltas alongside the conversation. The model is set via `inputAudioTranscriptionModel`:

| Model | Cost | Notes |
|-------|------|-------|
| `"whisper-1"` (default) | $0.006/min | Established Whisper. Slower partials. |
| `"gpt-4o-mini-transcribe"` | $0.003/min | Cheapest. |
| `"gpt-4o-transcribe"` | $0.006/min | Higher accuracy. |
| `"gpt-realtime-whisper"` | $0.017/min | Streaming-optimised. Lowest-latency partials. Use when you need fast deltas in the dashboard or for live captioning. |

Same const-object form:

```typescript
import { OpenAITranscriptionModel } from "getpatter";

OpenAITranscriptionModel.GPT_REALTIME_WHISPER;  // "gpt-realtime-whisper"
```

## Worked example — `gpt-realtime-2` with low reasoning + streaming whisper

Constructing the lower-level `OpenAIRealtimeAdapter` directly gives access to every field. This is what `new OpenAIRealtime({ engine })` builds under the hood; reach for it when you need `reasoningEffort` or a non-default transcription model.

<CodeGroup>
```typescript TypeScript
// npx tsx example.ts
import {
  Patter,
  Twilio,
  OpenAIRealtimeAdapter,
  OpenAIRealtimeModel,
  OpenAITranscriptionModel,
} from "getpatter";

const phone = new Patter({
  carrier: new Twilio(),
  phoneNumber: "+15555550100",
});

const adapter = new OpenAIRealtimeAdapter(
  process.env.OPENAI_API_KEY ?? "",
  OpenAIRealtimeModel.GPT_REALTIME_2,
  "nova",
  "You are a helpful, concise voice assistant.",
  undefined,                            // tools
  "g711_ulaw",                          // audioFormat
  {
    inputAudioTranscriptionModel: OpenAITranscriptionModel.GPT_REALTIME_WHISPER,
    reasoningEffort: "low",             // OpenAI's recommended production tier
  },
);

const agent = phone.agent({
  engine: adapter,                      // adapter passed as engine
  systemPrompt: "You are a helpful assistant.",
  firstMessage: "Hi, how can I help today?",
});

await phone.serve({ agent });
```

```python Python
# See /python-sdk/providers/openai-realtime
```
</CodeGroup>

<Warning>
The `reasoningEffort` and `inputAudioTranscriptionModel` options live on `OpenAIRealtimeAdapter`. The shorthand `new OpenAIRealtime({ model })` engine wrapper currently exposes only `apiKey`, `voice`, and `model` — use the adapter directly when you need the new fields.
</Warning>

## Backward compatibility

- Engine marker default: `model: "gpt-4o-mini-realtime-preview"` (unchanged since first release). The underlying `OpenAIRealtimeAdapter` falls back to `gpt-realtime-mini` only when constructed without a model — the `OpenAIRealtime` wrapper always passes a model through, so the wire default is `gpt-4o-mini-realtime-preview`. Pass `model: "gpt-realtime-mini"` explicitly to upgrade.
- `inputAudioTranscriptionModel: "whisper-1"`, `reasoningEffort: undefined` (server default).
- All existing `new OpenAIRealtime(...)` constructions keep working without code changes.
- Pricing for new models is added under `DEFAULT_PRICING.openai_realtime.models[...]`. The earlier `new Patter({ pricing: { openai_realtime: DEFAULT_PRICING.openai_realtime_2 } })` workaround is no longer needed — just construct with `model: "gpt-realtime-2"` (or use the [`OpenAIRealtime2`](/typescript-sdk/providers/openai-realtime-2) engine for the GA wire shape).

## What's Next

<CardGroup cols={2}>
  <Card title="Engines" icon="bolt" href="/typescript-sdk/engines">All engine classes side by side.</Card>
  <Card title="Metrics" icon="chart-line" href="/typescript-sdk/metrics">Per-call cost breakdown and the model-aware pricing table.</Card>
  <Card title="Agents" icon="user-gear" href="/typescript-sdk/agents">Configure system prompts, tools, and first messages.</Card>
  <Card title="Tools" icon="screwdriver-wrench" href="/typescript-sdk/tools">Function calling inside a Realtime session.</Card>
</CardGroup>
