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.12.0"
".": "5.12.1"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 111
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-d6a16b25b969c3e5382e7d413de15bf83d5f7534d5c3ecce64d3a7e847418f9e.yml
openapi_spec_hash: 0c0bcf4aee9ca2a948dd14b890dfe728
config_hash: aeff9289bd7f8c8482e4d738c3c2fde1
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-f5c45f4ae5c2075cbc603d6910bba3da31c23714c209fbd3fd82a94f634a126b.yml
openapi_spec_hash: 3eb8d86c06f0bb5e1190983e5acfc9ba
config_hash: 9a64321968e21ed72f5c0e02164ea00d
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 5.12.1 (2025-08-07)

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

### Features

* **api:** adds GPT-5 and new API features: platform.openai.com/docs/guides/gpt-5 ([59acd85](https://github.com/openai/openai-node/commit/59acd85a3e0d4db7f7eca9a287b23ec00191fa68))


### Chores

* **internal:** move publish config ([b3d02f6](https://github.com/openai/openai-node/commit/b3d02f6faab5aa8e62998446485e43ebc802d68e))

## 5.12.0 (2025-08-05)

Full Changelog: [v5.11.0...v5.12.0](https://github.com/openai/openai-node/compare/v5.11.0...v5.12.0)
Expand Down
17 changes: 17 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Types:
- <code><a href="./src/resources/shared.ts">ChatModel</a></code>
- <code><a href="./src/resources/shared.ts">ComparisonFilter</a></code>
- <code><a href="./src/resources/shared.ts">CompoundFilter</a></code>
- <code><a href="./src/resources/shared.ts">CustomToolInputFormat</a></code>
- <code><a href="./src/resources/shared.ts">ErrorObject</a></code>
- <code><a href="./src/resources/shared.ts">FunctionDefinition</a></code>
- <code><a href="./src/resources/shared.ts">FunctionParameters</a></code>
Expand All @@ -15,6 +16,8 @@ Types:
- <code><a href="./src/resources/shared.ts">ResponseFormatJSONObject</a></code>
- <code><a href="./src/resources/shared.ts">ResponseFormatJSONSchema</a></code>
- <code><a href="./src/resources/shared.ts">ResponseFormatText</a></code>
- <code><a href="./src/resources/shared.ts">ResponseFormatTextGrammar</a></code>
- <code><a href="./src/resources/shared.ts">ResponseFormatTextPython</a></code>
- <code><a href="./src/resources/shared.ts">ResponsesModel</a></code>

# Completions
Expand All @@ -40,6 +43,7 @@ Types:
Types:

- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletion</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAllowedToolChoice</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAssistantMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAudio</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAudioParam</a></code>
Expand All @@ -49,15 +53,20 @@ Types:
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartInputAudio</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartRefusal</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartText</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionCustomTool</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionDeleted</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionDeveloperMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionCallOption</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionTool</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessage</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageCustomToolCall</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageFunctionToolCall</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageToolCall</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionModality</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionNamedToolChoice</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionNamedToolChoiceCustom</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionPredictionContent</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionRole</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionStoreMessage</a></code>
Expand All @@ -68,6 +77,7 @@ Types:
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionToolChoiceOption</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionToolMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionUserMessageParam</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAllowedTools</a></code>
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionReasoningEffort</a></code>

Methods:
Expand Down Expand Up @@ -638,6 +648,7 @@ Methods:
Types:

- <code><a href="./src/resources/responses/responses.ts">ComputerTool</a></code>
- <code><a href="./src/resources/responses/responses.ts">CustomTool</a></code>
- <code><a href="./src/resources/responses/responses.ts">EasyInputMessage</a></code>
- <code><a href="./src/resources/responses/responses.ts">FileSearchTool</a></code>
- <code><a href="./src/resources/responses/responses.ts">FunctionTool</a></code>
Expand All @@ -660,6 +671,10 @@ Types:
- <code><a href="./src/resources/responses/responses.ts">ResponseContentPartAddedEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseContentPartDoneEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseCreatedEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCall</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallInputDeltaEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallInputDoneEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallOutput</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseError</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseErrorEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseFailedEvent</a></code>
Expand Down Expand Up @@ -729,6 +744,8 @@ Types:
- <code><a href="./src/resources/responses/responses.ts">ResponseWebSearchCallInProgressEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">ResponseWebSearchCallSearchingEvent</a></code>
- <code><a href="./src/resources/responses/responses.ts">Tool</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceAllowed</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceCustom</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceFunction</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceMcp</a></code>
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceOptions</a></code>
Expand Down
2 changes: 1 addition & 1 deletion bin/publish-npm
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ else
fi

# Publish with the appropriate tag
yarn publish --access public --tag "$TAG"
yarn publish --tag "$TAG"
8 changes: 6 additions & 2 deletions examples/tool-calls-stream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,9 @@ const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
},
];

async function callTool(tool_call: OpenAI.Chat.Completions.ChatCompletionMessageToolCall): Promise<any> {
if (tool_call.type !== 'function') throw new Error('Unexpected tool_call type:' + tool_call.type);
async function callTool(
tool_call: OpenAI.Chat.Completions.ChatCompletionMessageFunctionToolCall,
): Promise<any> {
const args = JSON.parse(tool_call.function.arguments);
switch (tool_call.function.name) {
case 'list':
Expand Down Expand Up @@ -143,6 +144,9 @@ async function main() {

// If there are tool calls, we generate a new message with the role 'tool' for each tool call.
for (const toolCall of message.tool_calls) {
if (toolCall.type !== 'function') {
throw new Error(`Unexpected tool call type: ${toolCall.type}`);
}
const result = await callTool(toolCall);
const newMessage = {
tool_call_id: toolCall.id,
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.12.0",
"version": "5.12.1",
"exports": {
".": "./index.ts",
"./helpers/zod": "./helpers/zod.ts",
Expand Down
8 changes: 0 additions & 8 deletions jsr.json.orig
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"name": "@openai/openai",
<<<<<<< HEAD
"version": "4.87.4",
"exports": {
".": "./index.ts",
Expand All @@ -10,13 +9,6 @@
"imports": {
"zod": "npm:zod@3"
},
||||||| parent of 0603bcac (chore(internal): version bump (#1393))
"version": "4.87.3",
"exports": "./index.ts",
=======
"version": "4.87.4",
"exports": "./index.ts",
>>>>>>> 0603bcac (chore(internal): version bump (#1393))
"publish": {
"exclude": [
"!."
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "openai",
"version": "5.12.0",
"version": "5.12.1",
"description": "The official TypeScript library for the OpenAI API",
"author": "OpenAI <[email protected]>",
"types": "dist/index.d.ts",
Expand All @@ -13,6 +13,9 @@
"**/*"
],
"private": false,
"publishConfig": {
"access": "public"
},
"scripts": {
"test": "./scripts/test",
"build": "./scripts/build",
Expand Down
17 changes: 17 additions & 0 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ import {
} from './resources/vector-stores/vector-stores';
import {
ChatCompletion,
ChatCompletionAllowedToolChoice,
ChatCompletionAllowedTools,
ChatCompletionAssistantMessageParam,
ChatCompletionAudio,
ChatCompletionAudioParam,
Expand All @@ -153,16 +155,21 @@ import {
ChatCompletionCreateParams,
ChatCompletionCreateParamsNonStreaming,
ChatCompletionCreateParamsStreaming,
ChatCompletionCustomTool,
ChatCompletionDeleted,
ChatCompletionDeveloperMessageParam,
ChatCompletionFunctionCallOption,
ChatCompletionFunctionMessageParam,
ChatCompletionFunctionTool,
ChatCompletionListParams,
ChatCompletionMessage,
ChatCompletionMessageCustomToolCall,
ChatCompletionMessageFunctionToolCall,
ChatCompletionMessageParam,
ChatCompletionMessageToolCall,
ChatCompletionModality,
ChatCompletionNamedToolChoice,
ChatCompletionNamedToolChoiceCustom,
ChatCompletionPredictionContent,
ChatCompletionReasoningEffort,
ChatCompletionRole,
Expand Down Expand Up @@ -990,6 +997,7 @@ export declare namespace OpenAI {
export {
Chat as Chat,
type ChatCompletion as ChatCompletion,
type ChatCompletionAllowedToolChoice as ChatCompletionAllowedToolChoice,
type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,
type ChatCompletionAudio as ChatCompletionAudio,
type ChatCompletionAudioParam as ChatCompletionAudioParam,
Expand All @@ -999,15 +1007,20 @@ export declare namespace OpenAI {
type ChatCompletionContentPartInputAudio as ChatCompletionContentPartInputAudio,
type ChatCompletionContentPartRefusal as ChatCompletionContentPartRefusal,
type ChatCompletionContentPartText as ChatCompletionContentPartText,
type ChatCompletionCustomTool as ChatCompletionCustomTool,
type ChatCompletionDeleted as ChatCompletionDeleted,
type ChatCompletionDeveloperMessageParam as ChatCompletionDeveloperMessageParam,
type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,
type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,
type ChatCompletionFunctionTool as ChatCompletionFunctionTool,
type ChatCompletionMessage as ChatCompletionMessage,
type ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall,
type ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall,
type ChatCompletionMessageParam as ChatCompletionMessageParam,
type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,
type ChatCompletionModality as ChatCompletionModality,
type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,
type ChatCompletionNamedToolChoiceCustom as ChatCompletionNamedToolChoiceCustom,
type ChatCompletionPredictionContent as ChatCompletionPredictionContent,
type ChatCompletionRole as ChatCompletionRole,
type ChatCompletionStoreMessage as ChatCompletionStoreMessage,
Expand All @@ -1018,6 +1031,7 @@ export declare namespace OpenAI {
type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,
type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,
type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,
type ChatCompletionAllowedTools as ChatCompletionAllowedTools,
type ChatCompletionReasoningEffort as ChatCompletionReasoningEffort,
type ChatCompletionsPage as ChatCompletionsPage,
type ChatCompletionCreateParams as ChatCompletionCreateParams,
Expand Down Expand Up @@ -1162,6 +1176,7 @@ export declare namespace OpenAI {
export type ChatModel = API.ChatModel;
export type ComparisonFilter = API.ComparisonFilter;
export type CompoundFilter = API.CompoundFilter;
export type CustomToolInputFormat = API.CustomToolInputFormat;
export type ErrorObject = API.ErrorObject;
export type FunctionDefinition = API.FunctionDefinition;
export type FunctionParameters = API.FunctionParameters;
Expand All @@ -1171,5 +1186,7 @@ export declare namespace OpenAI {
export type ResponseFormatJSONObject = API.ResponseFormatJSONObject;
export type ResponseFormatJSONSchema = API.ResponseFormatJSONSchema;
export type ResponseFormatText = API.ResponseFormatText;
export type ResponseFormatTextGrammar = API.ResponseFormatTextGrammar;
export type ResponseFormatTextPython = API.ResponseFormatTextPython;
export type ResponsesModel = API.ResponsesModel;
}
39 changes: 20 additions & 19 deletions src/lib/AbstractChatCompletionRunner.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import type { CompletionUsage } from '../resources/completions';
import { OpenAIError } from '../error';
import type OpenAI from '../index';
import type { RequestOptions } from '../internal/request-options';
import { isAutoParsableTool, parseChatCompletion } from '../lib/parser';
import type {
ChatCompletion,
ChatCompletionCreateParams,
ChatCompletionMessage,
ChatCompletionMessageFunctionToolCall,
ChatCompletionMessageParam,
ChatCompletionCreateParams,
ChatCompletionTool,
ChatCompletionMessageToolCall,
ParsedChatCompletion,
} from '../resources/chat/completions';
import { OpenAIError } from '../error';
import type { CompletionUsage } from '../resources/completions';
import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';
import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
import { BaseEvents, EventStream } from './EventStream';
import {
type RunnableFunction,
isRunnableFunctionWithParse,
type BaseFunctionsArgs,
type RunnableFunction,
type RunnableToolFunction,
} from './RunnableFunction';
import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';
import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
import { BaseEvents, EventStream } from './EventStream';
import type { ParsedChatCompletion } from '../resources/chat/completions';
import type OpenAI from '../index';
import { isAutoParsableTool, parseChatCompletion } from '../lib/parser';
import type { RequestOptions } from '../internal/request-options';

const DEFAULT_MAX_CHAT_COMPLETIONS = 10;
export interface RunnerOptions extends RequestOptions {
Expand Down Expand Up @@ -121,11 +121,11 @@ export class AbstractChatCompletionRunner<
return this.#getFinalMessage();
}

#getFinalFunctionToolCall(): ChatCompletionMessageToolCall.Function | undefined {
#getFinalFunctionToolCall(): ChatCompletionMessageFunctionToolCall.Function | undefined {
for (let i = this.messages.length - 1; i >= 0; i--) {
const message = this.messages[i];
if (isAssistantMessage(message) && message?.tool_calls?.length) {
return message.tool_calls.at(-1)?.function;
return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;
}
}

Expand All @@ -136,7 +136,7 @@ export class AbstractChatCompletionRunner<
* @returns a promise that resolves with the content of the final FunctionCall, or rejects
* if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.
*/
async finalFunctionToolCall(): Promise<ChatCompletionMessageToolCall.Function | undefined> {
async finalFunctionToolCall(): Promise<ChatCompletionMessageFunctionToolCall.Function | undefined> {
await this.done();
return this.#getFinalFunctionToolCall();
}
Expand Down Expand Up @@ -260,7 +260,8 @@ export class AbstractChatCompletionRunner<
) {
const role = 'tool' as const;
const { tool_choice = 'auto', stream, ...restParams } = params;
const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice?.function?.name;
const singleFunctionToCall =
typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;
const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};

// TODO(someday): clean this logic up
Expand Down Expand Up @@ -390,13 +391,13 @@ export class AbstractChatCompletionRunner<
}

export interface AbstractChatCompletionRunnerEvents extends BaseEvents {
functionToolCall: (functionCall: ChatCompletionMessageToolCall.Function) => void;
functionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;
message: (message: ChatCompletionMessageParam) => void;
chatCompletion: (completion: ChatCompletion) => void;
finalContent: (contentSnapshot: string) => void;
finalMessage: (message: ChatCompletionMessageParam) => void;
finalChatCompletion: (completion: ChatCompletion) => void;
finalFunctionToolCall: (functionCall: ChatCompletionMessageToolCall.Function) => void;
finalFunctionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;
functionToolCallResult: (content: string) => void;
finalFunctionToolCallResult: (content: string) => void;
totalUsage: (usage: CompletionUsage) => void;
Expand Down
Loading