Skip to content

Commit f4202ce

Browse files
feat(api): adds GPT-5 and new API features: platform.openai.com/docs/guides/gpt-5
1 parent de686b4 commit f4202ce

File tree

23 files changed

+845
-153
lines changed

23 files changed

+845
-153
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 111
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-d6a16b25b969c3e5382e7d413de15bf83d5f7534d5c3ecce64d3a7e847418f9e.yml
3-
openapi_spec_hash: 0c0bcf4aee9ca2a948dd14b890dfe728
4-
config_hash: aeff9289bd7f8c8482e4d738c3c2fde1
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-f5c45f4ae5c2075cbc603d6910bba3da31c23714c209fbd3fd82a94f634a126b.yml
3+
openapi_spec_hash: 3eb8d86c06f0bb5e1190983e5acfc9ba
4+
config_hash: 9a64321968e21ed72f5c0e02164ea00d

api.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Types:
66
- <code><a href="./src/resources/shared.ts">ChatModel</a></code>
77
- <code><a href="./src/resources/shared.ts">ComparisonFilter</a></code>
88
- <code><a href="./src/resources/shared.ts">CompoundFilter</a></code>
9+
- <code><a href="./src/resources/shared.ts">CustomToolInputFormat</a></code>
910
- <code><a href="./src/resources/shared.ts">ErrorObject</a></code>
1011
- <code><a href="./src/resources/shared.ts">FunctionDefinition</a></code>
1112
- <code><a href="./src/resources/shared.ts">FunctionParameters</a></code>
@@ -15,6 +16,8 @@ Types:
1516
- <code><a href="./src/resources/shared.ts">ResponseFormatJSONObject</a></code>
1617
- <code><a href="./src/resources/shared.ts">ResponseFormatJSONSchema</a></code>
1718
- <code><a href="./src/resources/shared.ts">ResponseFormatText</a></code>
19+
- <code><a href="./src/resources/shared.ts">ResponseFormatTextGrammar</a></code>
20+
- <code><a href="./src/resources/shared.ts">ResponseFormatTextPython</a></code>
1821
- <code><a href="./src/resources/shared.ts">ResponsesModel</a></code>
1922

2023
# Completions
@@ -40,6 +43,7 @@ Types:
4043
Types:
4144

4245
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletion</a></code>
46+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAllowedToolChoice</a></code>
4347
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAssistantMessageParam</a></code>
4448
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAudio</a></code>
4549
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAudioParam</a></code>
@@ -49,15 +53,20 @@ Types:
4953
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartInputAudio</a></code>
5054
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartRefusal</a></code>
5155
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionContentPartText</a></code>
56+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionCustomTool</a></code>
5257
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionDeleted</a></code>
5358
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionDeveloperMessageParam</a></code>
5459
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionCallOption</a></code>
5560
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionMessageParam</a></code>
61+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionFunctionTool</a></code>
5662
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessage</a></code>
63+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageCustomToolCall</a></code>
64+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageFunctionToolCall</a></code>
5765
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageParam</a></code>
5866
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionMessageToolCall</a></code>
5967
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionModality</a></code>
6068
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionNamedToolChoice</a></code>
69+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionNamedToolChoiceCustom</a></code>
6170
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionPredictionContent</a></code>
6271
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionRole</a></code>
6372
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionStoreMessage</a></code>
@@ -68,6 +77,7 @@ Types:
6877
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionToolChoiceOption</a></code>
6978
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionToolMessageParam</a></code>
7079
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionUserMessageParam</a></code>
80+
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionAllowedTools</a></code>
7181
- <code><a href="./src/resources/chat/completions/completions.ts">ChatCompletionReasoningEffort</a></code>
7282

7383
Methods:
@@ -638,6 +648,7 @@ Methods:
638648
Types:
639649

640650
- <code><a href="./src/resources/responses/responses.ts">ComputerTool</a></code>
651+
- <code><a href="./src/resources/responses/responses.ts">CustomTool</a></code>
641652
- <code><a href="./src/resources/responses/responses.ts">EasyInputMessage</a></code>
642653
- <code><a href="./src/resources/responses/responses.ts">FileSearchTool</a></code>
643654
- <code><a href="./src/resources/responses/responses.ts">FunctionTool</a></code>
@@ -660,6 +671,10 @@ Types:
660671
- <code><a href="./src/resources/responses/responses.ts">ResponseContentPartAddedEvent</a></code>
661672
- <code><a href="./src/resources/responses/responses.ts">ResponseContentPartDoneEvent</a></code>
662673
- <code><a href="./src/resources/responses/responses.ts">ResponseCreatedEvent</a></code>
674+
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCall</a></code>
675+
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallInputDeltaEvent</a></code>
676+
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallInputDoneEvent</a></code>
677+
- <code><a href="./src/resources/responses/responses.ts">ResponseCustomToolCallOutput</a></code>
663678
- <code><a href="./src/resources/responses/responses.ts">ResponseError</a></code>
664679
- <code><a href="./src/resources/responses/responses.ts">ResponseErrorEvent</a></code>
665680
- <code><a href="./src/resources/responses/responses.ts">ResponseFailedEvent</a></code>
@@ -729,6 +744,8 @@ Types:
729744
- <code><a href="./src/resources/responses/responses.ts">ResponseWebSearchCallInProgressEvent</a></code>
730745
- <code><a href="./src/resources/responses/responses.ts">ResponseWebSearchCallSearchingEvent</a></code>
731746
- <code><a href="./src/resources/responses/responses.ts">Tool</a></code>
747+
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceAllowed</a></code>
748+
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceCustom</a></code>
732749
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceFunction</a></code>
733750
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceMcp</a></code>
734751
- <code><a href="./src/resources/responses/responses.ts">ToolChoiceOptions</a></code>

examples/tool-calls-stream.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,9 @@ const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
7676
},
7777
];
7878

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

144145
// If there are tool calls, we generate a new message with the role 'tool' for each tool call.
145146
for (const toolCall of message.tool_calls) {
147+
if (toolCall.type !== 'function') {
148+
throw new Error(`Unexpected tool call type: ${toolCall.type}`);
149+
}
146150
const result = await callTool(toolCall);
147151
const newMessage = {
148152
tool_call_id: toolCall.id,

jsr.json.orig

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"name": "@openai/openai",
3-
<<<<<<< HEAD
43
"version": "4.87.4",
54
"exports": {
65
".": "./index.ts",
@@ -10,13 +9,6 @@
109
"imports": {
1110
"zod": "npm:zod@3"
1211
},
13-
||||||| parent of 0603bcac (chore(internal): version bump (#1393))
14-
"version": "4.87.3",
15-
"exports": "./index.ts",
16-
=======
17-
"version": "4.87.4",
18-
"exports": "./index.ts",
19-
>>>>>>> 0603bcac (chore(internal): version bump (#1393))
2012
"publish": {
2113
"exclude": [
2214
"!."

src/client.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ import {
141141
} from './resources/vector-stores/vector-stores';
142142
import {
143143
ChatCompletion,
144+
ChatCompletionAllowedToolChoice,
145+
ChatCompletionAllowedTools,
144146
ChatCompletionAssistantMessageParam,
145147
ChatCompletionAudio,
146148
ChatCompletionAudioParam,
@@ -153,16 +155,21 @@ import {
153155
ChatCompletionCreateParams,
154156
ChatCompletionCreateParamsNonStreaming,
155157
ChatCompletionCreateParamsStreaming,
158+
ChatCompletionCustomTool,
156159
ChatCompletionDeleted,
157160
ChatCompletionDeveloperMessageParam,
158161
ChatCompletionFunctionCallOption,
159162
ChatCompletionFunctionMessageParam,
163+
ChatCompletionFunctionTool,
160164
ChatCompletionListParams,
161165
ChatCompletionMessage,
166+
ChatCompletionMessageCustomToolCall,
167+
ChatCompletionMessageFunctionToolCall,
162168
ChatCompletionMessageParam,
163169
ChatCompletionMessageToolCall,
164170
ChatCompletionModality,
165171
ChatCompletionNamedToolChoice,
172+
ChatCompletionNamedToolChoiceCustom,
166173
ChatCompletionPredictionContent,
167174
ChatCompletionReasoningEffort,
168175
ChatCompletionRole,
@@ -990,6 +997,7 @@ export declare namespace OpenAI {
990997
export {
991998
Chat as Chat,
992999
type ChatCompletion as ChatCompletion,
1000+
type ChatCompletionAllowedToolChoice as ChatCompletionAllowedToolChoice,
9931001
type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,
9941002
type ChatCompletionAudio as ChatCompletionAudio,
9951003
type ChatCompletionAudioParam as ChatCompletionAudioParam,
@@ -999,15 +1007,20 @@ export declare namespace OpenAI {
9991007
type ChatCompletionContentPartInputAudio as ChatCompletionContentPartInputAudio,
10001008
type ChatCompletionContentPartRefusal as ChatCompletionContentPartRefusal,
10011009
type ChatCompletionContentPartText as ChatCompletionContentPartText,
1010+
type ChatCompletionCustomTool as ChatCompletionCustomTool,
10021011
type ChatCompletionDeleted as ChatCompletionDeleted,
10031012
type ChatCompletionDeveloperMessageParam as ChatCompletionDeveloperMessageParam,
10041013
type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,
10051014
type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,
1015+
type ChatCompletionFunctionTool as ChatCompletionFunctionTool,
10061016
type ChatCompletionMessage as ChatCompletionMessage,
1017+
type ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall,
1018+
type ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall,
10071019
type ChatCompletionMessageParam as ChatCompletionMessageParam,
10081020
type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,
10091021
type ChatCompletionModality as ChatCompletionModality,
10101022
type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,
1023+
type ChatCompletionNamedToolChoiceCustom as ChatCompletionNamedToolChoiceCustom,
10111024
type ChatCompletionPredictionContent as ChatCompletionPredictionContent,
10121025
type ChatCompletionRole as ChatCompletionRole,
10131026
type ChatCompletionStoreMessage as ChatCompletionStoreMessage,
@@ -1018,6 +1031,7 @@ export declare namespace OpenAI {
10181031
type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,
10191032
type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,
10201033
type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,
1034+
type ChatCompletionAllowedTools as ChatCompletionAllowedTools,
10211035
type ChatCompletionReasoningEffort as ChatCompletionReasoningEffort,
10221036
type ChatCompletionsPage as ChatCompletionsPage,
10231037
type ChatCompletionCreateParams as ChatCompletionCreateParams,
@@ -1162,6 +1176,7 @@ export declare namespace OpenAI {
11621176
export type ChatModel = API.ChatModel;
11631177
export type ComparisonFilter = API.ComparisonFilter;
11641178
export type CompoundFilter = API.CompoundFilter;
1179+
export type CustomToolInputFormat = API.CustomToolInputFormat;
11651180
export type ErrorObject = API.ErrorObject;
11661181
export type FunctionDefinition = API.FunctionDefinition;
11671182
export type FunctionParameters = API.FunctionParameters;
@@ -1171,5 +1186,7 @@ export declare namespace OpenAI {
11711186
export type ResponseFormatJSONObject = API.ResponseFormatJSONObject;
11721187
export type ResponseFormatJSONSchema = API.ResponseFormatJSONSchema;
11731188
export type ResponseFormatText = API.ResponseFormatText;
1189+
export type ResponseFormatTextGrammar = API.ResponseFormatTextGrammar;
1190+
export type ResponseFormatTextPython = API.ResponseFormatTextPython;
11741191
export type ResponsesModel = API.ResponsesModel;
11751192
}

src/lib/AbstractChatCompletionRunner.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
import type { CompletionUsage } from '../resources/completions';
1+
import { OpenAIError } from '../error';
2+
import type OpenAI from '../index';
3+
import type { RequestOptions } from '../internal/request-options';
4+
import { isAutoParsableTool, parseChatCompletion } from '../lib/parser';
25
import type {
36
ChatCompletion,
7+
ChatCompletionCreateParams,
48
ChatCompletionMessage,
9+
ChatCompletionMessageFunctionToolCall,
510
ChatCompletionMessageParam,
6-
ChatCompletionCreateParams,
711
ChatCompletionTool,
8-
ChatCompletionMessageToolCall,
12+
ParsedChatCompletion,
913
} from '../resources/chat/completions';
10-
import { OpenAIError } from '../error';
14+
import type { CompletionUsage } from '../resources/completions';
15+
import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
16+
import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';
17+
import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
18+
import { BaseEvents, EventStream } from './EventStream';
1119
import {
12-
type RunnableFunction,
1320
isRunnableFunctionWithParse,
1421
type BaseFunctionsArgs,
22+
type RunnableFunction,
1523
type RunnableToolFunction,
1624
} from './RunnableFunction';
17-
import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
18-
import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';
19-
import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
20-
import { BaseEvents, EventStream } from './EventStream';
21-
import type { ParsedChatCompletion } from '../resources/chat/completions';
22-
import type OpenAI from '../index';
23-
import { isAutoParsableTool, parseChatCompletion } from '../lib/parser';
24-
import type { RequestOptions } from '../internal/request-options';
2525

2626
const DEFAULT_MAX_CHAT_COMPLETIONS = 10;
2727
export interface RunnerOptions extends RequestOptions {
@@ -121,11 +121,11 @@ export class AbstractChatCompletionRunner<
121121
return this.#getFinalMessage();
122122
}
123123

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

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

266267
// TODO(someday): clean this logic up
@@ -390,13 +391,13 @@ export class AbstractChatCompletionRunner<
390391
}
391392

392393
export interface AbstractChatCompletionRunnerEvents extends BaseEvents {
393-
functionToolCall: (functionCall: ChatCompletionMessageToolCall.Function) => void;
394+
functionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;
394395
message: (message: ChatCompletionMessageParam) => void;
395396
chatCompletion: (completion: ChatCompletion) => void;
396397
finalContent: (contentSnapshot: string) => void;
397398
finalMessage: (message: ChatCompletionMessageParam) => void;
398399
finalChatCompletion: (completion: ChatCompletion) => void;
399-
finalFunctionToolCall: (functionCall: ChatCompletionMessageToolCall.Function) => void;
400+
finalFunctionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;
400401
functionToolCallResult: (content: string) => void;
401402
finalFunctionToolCallResult: (content: string) => void;
402403
totalUsage: (usage: CompletionUsage) => void;

src/lib/ChatCompletionStream.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1+
import { partialParse } from '../_vendor/partial-json-parser/parser';
12
import {
2-
OpenAIError,
33
APIUserAbortError,
4-
LengthFinishReasonError,
54
ContentFilterFinishReasonError,
5+
LengthFinishReasonError,
6+
OpenAIError,
67
} from '../error';
8+
import OpenAI from '../index';
9+
import { RequestOptions } from '../internal/request-options';
10+
import { type ReadableStream } from '../internal/shim-types';
11+
import {
12+
AutoParseableResponseFormat,
13+
hasAutoParseableInput,
14+
isAutoParsableResponseFormat,
15+
isAutoParsableTool,
16+
isChatCompletionFunctionTool,
17+
maybeParseChatCompletion,
18+
shouldParseToolCall,
19+
} from '../lib/parser';
20+
import { ChatCompletionFunctionTool, ParsedChatCompletion } from '../resources/chat/completions';
721
import {
822
ChatCompletionTokenLogprob,
923
type ChatCompletion,
1024
type ChatCompletionChunk,
1125
type ChatCompletionCreateParams,
12-
type ChatCompletionCreateParamsStreaming,
1326
type ChatCompletionCreateParamsBase,
27+
type ChatCompletionCreateParamsStreaming,
1428
type ChatCompletionRole,
1529
} from '../resources/chat/completions/completions';
30+
import { Stream } from '../streaming';
1631
import {
1732
AbstractChatCompletionRunner,
1833
type AbstractChatCompletionRunnerEvents,
1934
} from './AbstractChatCompletionRunner';
20-
import { type ReadableStream } from '../internal/shim-types';
21-
import { Stream } from '../streaming';
22-
import OpenAI from '../index';
23-
import { ParsedChatCompletion } from '../resources/chat/completions';
24-
import {
25-
AutoParseableResponseFormat,
26-
hasAutoParseableInput,
27-
isAutoParsableResponseFormat,
28-
isAutoParsableTool,
29-
maybeParseChatCompletion,
30-
shouldParseToolCall,
31-
} from '../lib/parser';
32-
import { partialParse } from '../_vendor/partial-json-parser/parser';
33-
import { RequestOptions } from '../internal/request-options';
3435

3536
export interface ContentDeltaEvent {
3637
delta: string;
@@ -303,8 +304,8 @@ export class ChatCompletionStream<ParsedT = null>
303304

304305
if (toolCallSnapshot.type === 'function') {
305306
const inputTool = this.#params?.tools?.find(
306-
(tool) => tool.type === 'function' && tool.function.name === toolCallSnapshot.function.name,
307-
);
307+
(tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name,
308+
) as ChatCompletionFunctionTool | undefined; // TS doesn't narrow based on isChatCompletionTool
308309

309310
this._emit('tool_calls.function.arguments.done', {
310311
name: toolCallSnapshot.function.name,

0 commit comments

Comments
 (0)