@ai-sdk/openai 3.0.110 → 3.0.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -92,6 +92,11 @@ type OpenAIConfig = {
92
92
  headers: () => Record<string, string | undefined>;
93
93
  fetch?: FetchFunction;
94
94
  generateId?: () => string;
95
+ /**
96
+ * Whether Responses API message input items must include an explicit
97
+ * `type: 'message'` discriminator.
98
+ */
99
+ explicitMessageItemType?: boolean;
95
100
  /**
96
101
  * File ID prefixes used to identify file IDs in Responses API.
97
102
  * When undefined, all file data is treated as base64 content.
@@ -122,7 +127,7 @@ declare class OpenAIEmbeddingModel implements EmbeddingModelV3 {
122
127
  doEmbed({ values, headers, abortSignal, providerOptions, }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>>;
123
128
  }
124
129
 
125
- type OpenAIImageModelId = 'dall-e-3' | 'dall-e-2' | 'gpt-image-1' | 'gpt-image-1-mini' | 'gpt-image-1.5' | 'gpt-image-2' | 'chatgpt-image-latest' | (string & {});
130
+ type OpenAIImageModelId = 'dall-e-3' | 'dall-e-2' | 'gpt-image-1' | 'gpt-image-1-mini' | 'gpt-image-1.5' | 'gpt-image-2' | 'gpt-image-2.5-flare' | 'gpt-image-2.5-flare-2026-09-08' | 'gpt-image-2.5-sunburst' | 'gpt-image-2.5-sunburst-2026-09-08' | 'chatgpt-image-latest' | (string & {});
126
131
  declare const modelMaxImagesPerCall: Record<OpenAIImageModelId, number>;
127
132
  declare function hasDefaultResponseFormat(modelId: string): boolean;
128
133
  declare function getMaxImagesPerCall(modelId: OpenAIImageModelId): number;
@@ -1179,10 +1184,12 @@ type ImageGenerationArgs = {
1179
1184
  quality?: 'auto' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
1180
1185
  /**
1181
1186
  * The size of the generated image.
1182
- * One of 1024x1024, 1024x1536, 1536x1024, or auto.
1187
+ * One of 1024x1024, 1024x1536, 1536x1024, or auto. GPT Image 2 and 2.5
1188
+ * models also accept arbitrary WIDTHxHEIGHT sizes where both are divisible
1189
+ * by 16, e.g. 1536x864.
1183
1190
  * Default: auto.
1184
1191
  */
1185
- size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024';
1192
+ size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024' | (string & {});
1186
1193
  };
1187
1194
  declare const imageGeneration: (args?: ImageGenerationArgs) => _ai_sdk_provider_utils.Tool<{}, {
1188
1195
  /**
@@ -92,6 +92,11 @@ type OpenAIConfig = {
92
92
  headers: () => Record<string, string | undefined>;
93
93
  fetch?: FetchFunction;
94
94
  generateId?: () => string;
95
+ /**
96
+ * Whether Responses API message input items must include an explicit
97
+ * `type: 'message'` discriminator.
98
+ */
99
+ explicitMessageItemType?: boolean;
95
100
  /**
96
101
  * File ID prefixes used to identify file IDs in Responses API.
97
102
  * When undefined, all file data is treated as base64 content.
@@ -122,7 +127,7 @@ declare class OpenAIEmbeddingModel implements EmbeddingModelV3 {
122
127
  doEmbed({ values, headers, abortSignal, providerOptions, }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>>;
123
128
  }
124
129
 
125
- type OpenAIImageModelId = 'dall-e-3' | 'dall-e-2' | 'gpt-image-1' | 'gpt-image-1-mini' | 'gpt-image-1.5' | 'gpt-image-2' | 'chatgpt-image-latest' | (string & {});
130
+ type OpenAIImageModelId = 'dall-e-3' | 'dall-e-2' | 'gpt-image-1' | 'gpt-image-1-mini' | 'gpt-image-1.5' | 'gpt-image-2' | 'gpt-image-2.5-flare' | 'gpt-image-2.5-flare-2026-09-08' | 'gpt-image-2.5-sunburst' | 'gpt-image-2.5-sunburst-2026-09-08' | 'chatgpt-image-latest' | (string & {});
126
131
  declare const modelMaxImagesPerCall: Record<OpenAIImageModelId, number>;
127
132
  declare function hasDefaultResponseFormat(modelId: string): boolean;
128
133
  declare function getMaxImagesPerCall(modelId: OpenAIImageModelId): number;
@@ -1179,10 +1184,12 @@ type ImageGenerationArgs = {
1179
1184
  quality?: 'auto' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
1180
1185
  /**
1181
1186
  * The size of the generated image.
1182
- * One of 1024x1024, 1024x1536, 1536x1024, or auto.
1187
+ * One of 1024x1024, 1024x1536, 1536x1024, or auto. GPT Image 2 and 2.5
1188
+ * models also accept arbitrary WIDTHxHEIGHT sizes where both are divisible
1189
+ * by 16, e.g. 1536x864.
1183
1190
  * Default: auto.
1184
1191
  */
1185
- size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024';
1192
+ size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024' | (string & {});
1186
1193
  };
1187
1194
  declare const imageGeneration: (args?: ImageGenerationArgs) => _ai_sdk_provider_utils.Tool<{}, {
1188
1195
  /**
@@ -1175,6 +1175,12 @@ var OpenAIChatLanguageModel = class {
1175
1175
  fetch: this.config.fetch
1176
1176
  });
1177
1177
  const choice = response.choices[0];
1178
+ if (choice == null) {
1179
+ throw new import_provider4.InvalidResponseDataError({
1180
+ data: rawResponse,
1181
+ message: "Response did not contain any choices."
1182
+ });
1183
+ }
1178
1184
  const content = [];
1179
1185
  const text = choice.message.content;
1180
1186
  if (text != null && text.length > 0) {
@@ -2092,6 +2098,10 @@ var modelMaxImagesPerCall = {
2092
2098
  "gpt-image-1-mini": 10,
2093
2099
  "gpt-image-1.5": 10,
2094
2100
  "gpt-image-2": 10,
2101
+ "gpt-image-2.5-flare": 10,
2102
+ "gpt-image-2.5-flare-2026-09-08": 10,
2103
+ "gpt-image-2.5-sunburst": 10,
2104
+ "gpt-image-2.5-sunburst-2026-09-08": 10,
2095
2105
  "chatgpt-image-latest": 10
2096
2106
  };
2097
2107
  var defaultResponseFormatPrefixes = ["chatgpt-image-", "gpt-image-"];
@@ -3231,6 +3241,7 @@ async function convertToOpenAIResponsesInput({
3231
3241
  toolNameMapping,
3232
3242
  systemMessageMode,
3233
3243
  providerOptionsName,
3244
+ explicitMessageItemType = false,
3234
3245
  fileIdPrefixes,
3235
3246
  passThroughUnsupportedFiles = false,
3236
3247
  store,
@@ -3262,6 +3273,7 @@ async function convertToOpenAIResponsesInput({
3262
3273
  providerOptionsName
3263
3274
  );
3264
3275
  input.push({
3276
+ ...explicitMessageItemType && { type: "message" },
3265
3277
  role: "system",
3266
3278
  content: promptCacheBreakpoint == null ? content : [
3267
3279
  {
@@ -3279,6 +3291,7 @@ async function convertToOpenAIResponsesInput({
3279
3291
  providerOptionsName
3280
3292
  );
3281
3293
  input.push({
3294
+ ...explicitMessageItemType && { type: "message" },
3282
3295
  role: "developer",
3283
3296
  content: promptCacheBreakpoint == null ? content : [
3284
3297
  {
@@ -3308,6 +3321,7 @@ async function convertToOpenAIResponsesInput({
3308
3321
  }
3309
3322
  case "user": {
3310
3323
  input.push({
3324
+ ...explicitMessageItemType && { type: "message" },
3311
3325
  role: "user",
3312
3326
  content: content.map((part, index) => {
3313
3327
  var _a3, _b2, _c2;
@@ -3389,6 +3403,7 @@ async function convertToOpenAIResponsesInput({
3389
3403
  break;
3390
3404
  }
3391
3405
  input.push({
3406
+ ...explicitMessageItemType && { type: "message" },
3392
3407
  role: "assistant",
3393
3408
  content: [{ type: "output_text", text: part.text }],
3394
3409
  id,
@@ -6148,6 +6163,7 @@ var OpenAIResponsesLanguageModel = class {
6148
6163
  toolNameMapping,
6149
6164
  systemMessageMode: (_c = openaiOptions == null ? void 0 : openaiOptions.systemMessageMode) != null ? _c : isReasoningModel ? "developer" : modelCapabilities.systemMessageMode,
6150
6165
  providerOptionsName,
6166
+ explicitMessageItemType: this.config.explicitMessageItemType,
6151
6167
  fileIdPrefixes: this.config.fileIdPrefixes,
6152
6168
  passThroughUnsupportedFiles: (_d = openaiOptions == null ? void 0 : openaiOptions.passThroughUnsupportedFiles) != null ? _d : false,
6153
6169
  store: (_e = openaiOptions == null ? void 0 : openaiOptions.store) != null ? _e : true,