Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "5.16.0"
".": "5.17.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 119
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-8517ffa1004e31ca2523d617629e64be6fe4f13403ddfd9db5b3be002656cbde.yml
openapi_spec_hash: b64dd8c8b23082a7aa2a3e5c5fffd8bd
config_hash: fe0ea26680ac2075a6cd66416aefe7db
configured_endpoints: 118
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-356b4364203ff36d7724074cd04f6e684253bfcc3c9d969122d730aa7bc51b46.yml
openapi_spec_hash: 4ab8e96f52699bc3d2b0c4432aa92af8
config_hash: b854932c0ea24b400bdd64e4376936bd
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 5.17.0 (2025-09-02)

Full Changelog: [v5.16.0...v5.17.0](https://github.com/openai/openai-node/compare/v5.16.0...v5.17.0)

### Features

* **api:** realtime API updates ([e817255](https://github.com/openai/openai-node/commit/e817255e6ff9e3ad6bd08b001644c335e0459537))


### Chores

* **internal:** update global Error reference ([e566ff3](https://github.com/openai/openai-node/commit/e566ff321642a100756224b75a67d44e262e5bea))

## 5.16.0 (2025-08-26)

Full Changelog: [v5.15.0...v5.16.0](https://github.com/openai/openai-node/compare/v5.15.0...v5.16.0)
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,14 +264,14 @@ const { data: stream, request_id } = await openai.chat.completions
.withResponse();
```

## Realtime API Beta
## Realtime API

The Realtime API enables you to build low-latency, multi-modal conversational experiences. It currently supports text and audio as both input and output, as well as [function calling](https://platform.openai.com/docs/guides/function-calling) through a `WebSocket` connection.

```ts
import { OpenAIRealtimeWebSocket } from 'openai/beta/realtime/websocket';
import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket';

const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' });

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
```
Expand Down Expand Up @@ -401,14 +401,14 @@ while (page.hasNextPage()) {
}
```

## Realtime API Beta
## Realtime API

The Realtime API enables you to build low-latency, multi-modal conversational experiences. It currently supports text and audio as both input and output, as well as [function calling](https://platform.openai.com/docs/guides/function-calling) through a `WebSocket` connection.

```ts
import { OpenAIRealtimeWebSocket } from 'openai/beta/realtime/websocket';
import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket';

const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' });

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
```
Expand Down
106 changes: 106 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ Types:
- <code><a href="./src/resources/webhooks.ts">FineTuningJobCancelledWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">FineTuningJobFailedWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">FineTuningJobSucceededWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">RealtimeCallIncomingWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">ResponseCancelledWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">ResponseCompletedWebhookEvent</a></code>
- <code><a href="./src/resources/webhooks.ts">ResponseFailedWebhookEvent</a></code>
Expand Down Expand Up @@ -751,6 +752,7 @@ Types:
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceMcp</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceOptions</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceTypes</a></code>
- <code><a href="./src/resources/responses/responses.ts">WebSearchPreviewTool</a></code>
- <code><a href="./src/resources/responses/responses.ts">WebSearchTool</a></code>

Methods:
Expand All @@ -770,6 +772,110 @@ Methods:

- <code title="get /responses/{response_id}/input_items">client.responses.inputItems.<a href="./src/resources/responses/input-items.ts">list</a>(responseID, { ...params }) -> ResponseItemsPage</code>

# Realtime

Types:

- <code><a href="./src/resources/realtime/realtime.ts">ConversationCreatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItem</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemAdded</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemCreateEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemCreatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemDeleteEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemDeletedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemDone</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemInputAudioTranscriptionCompletedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemInputAudioTranscriptionDeltaEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemInputAudioTranscriptionFailedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemInputAudioTranscriptionSegment</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemRetrieveEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemTruncateEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemTruncatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ConversationItemWithReference</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferAppendEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferClearEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferClearedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferCommitEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferCommittedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferSpeechStartedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferSpeechStoppedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">InputAudioBufferTimeoutTriggered</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">LogProbProperties</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">McpListToolsCompleted</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">McpListToolsFailed</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">McpListToolsInProgress</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">OutputAudioBufferClearEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RateLimitsUpdatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeAudioConfig</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeClientEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeClientSecretConfig</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeConversationItemAssistantMessage</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeConversationItemFunctionCall</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeConversationItemFunctionCallOutput</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeConversationItemSystemMessage</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeConversationItemUserMessage</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeError</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeErrorEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpApprovalRequest</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpApprovalResponse</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpListTools</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpProtocolError</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpToolCall</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcpToolExecutionError</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeMcphttpError</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeResponse</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeResponseStatus</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeResponseUsage</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeResponseUsageInputTokenDetails</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeResponseUsageOutputTokenDetails</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeServerEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeSession</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeSessionCreateRequest</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeToolChoiceConfig</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeToolsConfig</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeToolsConfigUnion</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeTracingConfig</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeTranscriptionSessionCreateRequest</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">RealtimeTruncation</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseAudioDeltaEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseAudioDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseAudioTranscriptDeltaEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseAudioTranscriptDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseCancelEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseContentPartAddedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseContentPartDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseCreateEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseCreatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseFunctionCallArgumentsDeltaEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseFunctionCallArgumentsDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseMcpCallArgumentsDelta</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseMcpCallArgumentsDone</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseMcpCallCompleted</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseMcpCallFailed</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseMcpCallInProgress</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseOutputItemAddedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseOutputItemDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseTextDeltaEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">ResponseTextDoneEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">SessionCreatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">SessionUpdateEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">SessionUpdatedEvent</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">TranscriptionSessionCreated</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">TranscriptionSessionUpdate</a></code>
- <code><a href="./src/resources/realtime/realtime.ts">TranscriptionSessionUpdatedEvent</a></code>

## ClientSecrets

Types:

- <code><a href="./src/resources/realtime/client-secrets.ts">RealtimeSessionCreateResponse</a></code>
- <code><a href="./src/resources/realtime/client-secrets.ts">ClientSecretCreateResponse</a></code>

Methods:

- <code title="post /realtime/client_secrets">client.realtime.clientSecrets.<a href="./src/resources/realtime/client-secrets.ts">create</a>({ ...params }) -> ClientSecretCreateResponse</code>

# Conversations

Types:
Expand Down
9 changes: 5 additions & 4 deletions examples/azure/realtime/websocket.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { OpenAIRealtimeWebSocket } from 'openai/beta/realtime/websocket';
import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket';
import { AzureOpenAI } from 'openai';
import { DefaultAzureCredential, getBearerTokenProvider } from '@azure/identity';
import 'dotenv/config';
Expand All @@ -21,8 +21,9 @@ async function main() {
rt.send({
type: 'session.update',
session: {
modalities: ['text'],
output_modalities: ['text'],
model: 'gpt-4o-realtime-preview',
type: 'realtime',
},
});

Expand All @@ -49,8 +50,8 @@ async function main() {
console.log();
});

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.text.done', () => console.log());
rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.output_text.done', () => console.log());

rt.on('response.done', () => rt.close());

Expand Down
9 changes: 5 additions & 4 deletions examples/azure/realtime/ws.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { DefaultAzureCredential, getBearerTokenProvider } from '@azure/identity';
import { OpenAIRealtimeWS } from 'openai/beta/realtime/ws';
import { OpenAIRealtimeWS } from 'openai/realtime/ws';
import { AzureOpenAI } from 'openai';
import 'dotenv/config';

Expand All @@ -21,8 +21,9 @@ async function main() {
rt.send({
type: 'session.update',
session: {
modalities: ['text'],
output_modalities: ['text'],
model: 'gpt-4o-realtime-preview',
type: 'realtime',
},
});

Expand All @@ -49,8 +50,8 @@ async function main() {
console.log();
});

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.text.done', () => console.log());
rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.output_text.done', () => console.log());

rt.on('response.done', () => rt.close());

Expand Down
11 changes: 6 additions & 5 deletions examples/realtime/websocket.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { OpenAIRealtimeWebSocket } from 'openai/beta/realtime/websocket';
import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket';

async function main() {
const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' });

// access the underlying `ws.WebSocket` instance
rt.socket.addEventListener('open', () => {
console.log('Connection opened!');
rt.send({
type: 'session.update',
session: {
modalities: ['text'],
output_modalities: ['text'],
model: 'gpt-4o-realtime-preview',
type: 'realtime',
},
});

Expand All @@ -37,8 +38,8 @@ async function main() {
console.log();
});

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.text.done', () => console.log());
rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.output_text.done', () => console.log());

rt.on('response.done', () => rt.close());

Expand Down
11 changes: 6 additions & 5 deletions examples/realtime/ws.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { OpenAIRealtimeWS } from 'openai/beta/realtime/ws';
import { OpenAIRealtimeWS } from 'openai/realtime/ws';

async function main() {
const rt = new OpenAIRealtimeWS({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWS({ model: 'gpt-realtime' });

// access the underlying `ws.WebSocket` instance
rt.socket.on('open', () => {
console.log('Connection opened!');
rt.send({
type: 'session.update',
session: {
modalities: ['text'],
output_modalities: ['text'],
model: 'gpt-4o-realtime-preview',
type: 'realtime',
},
});

Expand All @@ -37,8 +38,8 @@ async function main() {
console.log();
});

rt.on('response.text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.text.done', () => console.log());
rt.on('response.output_text.delta', (event) => process.stdout.write(event.delta));
rt.on('response.output_text.done', () => console.log());

rt.on('response.done', () => rt.close());

Expand Down
2 changes: 1 addition & 1 deletion jsr.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openai/openai",
"version": "5.16.0",
"version": "5.17.0",
"exports": {
".": "./index.ts",
"./helpers/zod": "./helpers/zod.ts",
Expand Down
1 change: 1 addition & 0 deletions jsr.json.orig
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
".": "./index.ts",
"./helpers/zod": "./helpers/zod.ts",
"./beta/realtime/websocket": "./beta/realtime/websocket.ts"
"./realtime/websocket": "./realtime/websocket.ts"
},
"imports": {
"zod": "npm:zod@3"
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "openai",
"version": "5.16.0",
"version": "5.17.0",
"description": "The official TypeScript library for the OpenAI API",
"author": "OpenAI <[email protected]>",
"types": "dist/index.d.ts",
Expand Down
12 changes: 6 additions & 6 deletions realtime.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Realtime API beta
## Realtime API

The Realtime API enables you to build low-latency, multi-modal conversational experiences. It currently supports text and audio as both input and output, as well as [function calling](https://platform.openai.com/docs/guides/function-calling) through a `WebSocket` connection.

Expand All @@ -10,9 +10,9 @@ Basic text based example with `ws`:

```ts
// requires `yarn add ws @types/ws`
import { OpenAIRealtimeWS } from 'openai/beta/realtime/ws';
import { OpenAIRealtimeWS } from 'openai/realtime/ws';

const rt = new OpenAIRealtimeWS({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWS({ model: 'gpt-realtime' });

// access the underlying `ws.WebSocket` instance
rt.socket.on('open', () => {
Expand Down Expand Up @@ -59,9 +59,9 @@ rt.socket.on('close', () => console.log('\nConnection closed!'));
To use the web API `WebSocket` implementation, replace `OpenAIRealtimeWS` with `OpenAIRealtimeWebSocket` and adjust any `rt.socket` access:

```ts
import { OpenAIRealtimeWebSocket } from 'openai/beta/realtime/websocket';
import { OpenAIRealtimeWebSocket } from 'openai/realtime/websocket';

const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWebSocket({ model: 'gpt-realtime' });
// ...
rt.socket.addEventListener('open', () => {
// ...
Expand All @@ -77,7 +77,7 @@ When an error is encountered, either on the client side or returned from the ser
It is **highly recommended** that you register an `error` event listener and handle errors appropriately as typically the underlying connection is still usable.

```ts
const rt = new OpenAIRealtimeWS({ model: 'gpt-4o-realtime-preview-2024-12-17' });
const rt = new OpenAIRealtimeWS({ model: 'gpt-realtime' });
rt.on('error', (err) => {
// in a real world scenario this should be logged somewhere as you
// likely want to continue processing events regardless of any errors
Expand Down
2 changes: 2 additions & 0 deletions scripts/detect-breaking-changes
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ TEST_PATHS=(
tests/api-resources/uploads/parts.test.ts
tests/api-resources/responses/responses.test.ts
tests/api-resources/responses/input-items.test.ts
tests/api-resources/realtime/realtime.test.ts
tests/api-resources/realtime/client-secrets.test.ts
tests/api-resources/conversations/conversations.test.ts
tests/api-resources/conversations/items.test.ts
tests/api-resources/evals/evals.test.ts
Expand Down
Loading