@ai-sdk/openai 2.0.10 → 2.0.12

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 2.0.12
4
+
5
+ ### Patch Changes
6
+
7
+ - ec336a1: feat(provider/openai): add response_format to be supported by default
8
+ - 2935ec7: fix(provider/openai): exclude gpt-5-chat from reasoning model
9
+ - Updated dependencies [034e229]
10
+ - Updated dependencies [f25040d]
11
+ - @ai-sdk/provider-utils@3.0.3
12
+
13
+ ## 2.0.11
14
+
15
+ ### Patch Changes
16
+
17
+ - 097b452: feat(openai, azure): add configurable file ID prefixes for Responses API
18
+
19
+ - Added `fileIdPrefixes` option to OpenAI Responses API configuration
20
+ - Azure OpenAI now supports `assistant-` prefixed file IDs (replacing previous `file-` prefix support)
21
+ - OpenAI maintains backward compatibility with default `file-` prefix
22
+ - File ID detection is disabled when `fileIdPrefixes` is undefined, gracefully falling back to base64 processing
23
+
24
+ - 87cf954: feat(provider/openai): add support for prompt_cache_key
25
+ - a3d98a9: feat(provider/openai): add support for safety_identifier
26
+ - 110d167: fix(openai): add missing file_search_call handlers in responses streaming
27
+ - 8d3c747: chore(openai): remove deprecated GPT-4.5-preview models and improve autocomplete control
28
+ - Updated dependencies [38ac190]
29
+ - @ai-sdk/provider-utils@3.0.2
30
+
3
31
  ## 2.0.10
4
32
 
5
33
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -3,7 +3,7 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
3
  import { FetchFunction } from '@ai-sdk/provider-utils';
4
4
  import { z } from 'zod/v4';
5
5
 
6
- type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'o4-mini' | 'o4-mini-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-search-preview' | 'gpt-4o-search-preview-2025-03-11' | 'gpt-4o-mini-search-preview' | 'gpt-4o-mini-search-preview-2025-03-11' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-4.5-preview' | 'gpt-4.5-preview-2025-02-27' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | (string & {});
6
+ type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4' | 'gpt-4-0613' | 'gpt-4.5-preview' | 'gpt-4.5-preview-2025-02-27' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | (string & {});
7
7
 
8
8
  type OpenAICompletionModelId = 'gpt-3.5-turbo-instruct' | (string & {});
9
9
 
@@ -46,8 +46,7 @@ declare const openaiTools: {
46
46
  }>;
47
47
  };
48
48
 
49
- declare const openaiResponsesModelIds: readonly ["gpt-4.1", "gpt-4.1-2025-04-14", "gpt-4.1-mini", "gpt-4.1-mini-2025-04-14", "gpt-4.1-nano", "gpt-4.1-nano-2025-04-14", "gpt-4o", "gpt-4o-2024-05-13", "gpt-4o-2024-08-06", "gpt-4o-2024-11-20", "gpt-4o-audio-preview", "gpt-4o-audio-preview-2024-10-01", "gpt-4o-audio-preview-2024-12-17", "gpt-4o-search-preview", "gpt-4o-search-preview-2025-03-11", "gpt-4o-mini-search-preview", "gpt-4o-mini-search-preview-2025-03-11", "gpt-4o-mini", "gpt-4o-mini-2024-07-18", "gpt-4-turbo", "gpt-4-turbo-2024-04-09", "gpt-4-turbo-preview", "gpt-4-0125-preview", "gpt-4-1106-preview", "gpt-4", "gpt-4-0613", "gpt-4.5-preview", "gpt-4.5-preview-2025-02-27", "gpt-3.5-turbo-0125", "gpt-3.5-turbo", "gpt-3.5-turbo-1106", "chatgpt-4o-latest", "o1", "o1-2024-12-17", "o3-mini", "o3-mini-2025-01-31", "o3", "o3-2025-04-16", "o4-mini", "o4-mini-2025-04-16", "codex-mini-latest", "computer-use-preview", "gpt-5", "gpt-5-2025-08-07", "gpt-5-mini", "gpt-5-mini-2025-08-07", "gpt-5-nano", "gpt-5-nano-2025-08-07", "gpt-5-chat-latest"];
50
- type OpenAIResponsesModelId = (typeof openaiResponsesModelIds)[number] | (string & {});
49
+ type OpenAIResponsesModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | (string & {});
51
50
 
52
51
  type OpenAISpeechModelId = 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' | (string & {});
53
52
 
@@ -168,6 +167,8 @@ declare const openaiResponsesProviderOptionsSchema: z.ZodObject<{
168
167
  medium: "medium";
169
168
  high: "high";
170
169
  }>>>;
170
+ promptCacheKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
+ safetyIdentifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
172
  }, z.core.$strip>;
172
173
  type OpenAIResponsesProviderOptions = z.infer<typeof openaiResponsesProviderOptionsSchema>;
173
174
 
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
3
  import { FetchFunction } from '@ai-sdk/provider-utils';
4
4
  import { z } from 'zod/v4';
5
5
 
6
- type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'o4-mini' | 'o4-mini-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-search-preview' | 'gpt-4o-search-preview-2025-03-11' | 'gpt-4o-mini-search-preview' | 'gpt-4o-mini-search-preview-2025-03-11' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-4.5-preview' | 'gpt-4.5-preview-2025-02-27' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | (string & {});
6
+ type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4' | 'gpt-4-0613' | 'gpt-4.5-preview' | 'gpt-4.5-preview-2025-02-27' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | (string & {});
7
7
 
8
8
  type OpenAICompletionModelId = 'gpt-3.5-turbo-instruct' | (string & {});
9
9
 
@@ -46,8 +46,7 @@ declare const openaiTools: {
46
46
  }>;
47
47
  };
48
48
 
49
- declare const openaiResponsesModelIds: readonly ["gpt-4.1", "gpt-4.1-2025-04-14", "gpt-4.1-mini", "gpt-4.1-mini-2025-04-14", "gpt-4.1-nano", "gpt-4.1-nano-2025-04-14", "gpt-4o", "gpt-4o-2024-05-13", "gpt-4o-2024-08-06", "gpt-4o-2024-11-20", "gpt-4o-audio-preview", "gpt-4o-audio-preview-2024-10-01", "gpt-4o-audio-preview-2024-12-17", "gpt-4o-search-preview", "gpt-4o-search-preview-2025-03-11", "gpt-4o-mini-search-preview", "gpt-4o-mini-search-preview-2025-03-11", "gpt-4o-mini", "gpt-4o-mini-2024-07-18", "gpt-4-turbo", "gpt-4-turbo-2024-04-09", "gpt-4-turbo-preview", "gpt-4-0125-preview", "gpt-4-1106-preview", "gpt-4", "gpt-4-0613", "gpt-4.5-preview", "gpt-4.5-preview-2025-02-27", "gpt-3.5-turbo-0125", "gpt-3.5-turbo", "gpt-3.5-turbo-1106", "chatgpt-4o-latest", "o1", "o1-2024-12-17", "o3-mini", "o3-mini-2025-01-31", "o3", "o3-2025-04-16", "o4-mini", "o4-mini-2025-04-16", "codex-mini-latest", "computer-use-preview", "gpt-5", "gpt-5-2025-08-07", "gpt-5-mini", "gpt-5-mini-2025-08-07", "gpt-5-nano", "gpt-5-nano-2025-08-07", "gpt-5-chat-latest"];
50
- type OpenAIResponsesModelId = (typeof openaiResponsesModelIds)[number] | (string & {});
49
+ type OpenAIResponsesModelId = 'o1' | 'o1-2024-12-17' | 'o3-mini' | 'o3-mini-2025-01-31' | 'o3' | 'o3-2025-04-16' | 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-4.1' | 'gpt-4.1-2025-04-14' | 'gpt-4.1-mini' | 'gpt-4.1-mini-2025-04-14' | 'gpt-4.1-nano' | 'gpt-4.1-nano-2025-04-14' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'chatgpt-4o-latest' | (string & {});
51
50
 
52
51
  type OpenAISpeechModelId = 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' | (string & {});
53
52
 
@@ -168,6 +167,8 @@ declare const openaiResponsesProviderOptionsSchema: z.ZodObject<{
168
167
  medium: "medium";
169
168
  high: "high";
170
169
  }>>>;
170
+ promptCacheKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
+ safetyIdentifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
172
  }, z.core.$strip>;
172
173
  type OpenAIResponsesProviderOptions = z.infer<typeof openaiResponsesProviderOptionsSchema>;
173
174
 
package/dist/index.js CHANGED
@@ -334,7 +334,20 @@ var openaiProviderOptions = import_v42.z.object({
334
334
  * Controls the verbosity of the model's responses.
335
335
  * Lower values will result in more concise responses, while higher values will result in more verbose responses.
336
336
  */
337
- textVerbosity: import_v42.z.enum(["low", "medium", "high"]).optional()
337
+ textVerbosity: import_v42.z.enum(["low", "medium", "high"]).optional(),
338
+ /**
339
+ * A cache key for prompt caching. Allows manual control over prompt caching behavior.
340
+ * Useful for improving cache hit rates and working around automatic caching issues.
341
+ */
342
+ promptCacheKey: import_v42.z.string().optional(),
343
+ /**
344
+ * A stable identifier used to help detect users of your application
345
+ * that may be violating OpenAI's usage policies. The IDs should be a
346
+ * string that uniquely identifies each user. We recommend hashing their
347
+ * username or email address, in order to avoid sending us any identifying
348
+ * information.
349
+ */
350
+ safetyIdentifier: import_v42.z.string().optional()
338
351
  });
339
352
 
340
353
  // src/chat/openai-chat-prepare-tools.ts
@@ -605,6 +618,8 @@ var OpenAIChatLanguageModel = class {
605
618
  prediction: openaiOptions.prediction,
606
619
  reasoning_effort: openaiOptions.reasoningEffort,
607
620
  service_tier: openaiOptions.serviceTier,
621
+ prompt_cache_key: openaiOptions.promptCacheKey,
622
+ safety_identifier: openaiOptions.safetyIdentifier,
608
623
  // messages:
609
624
  messages
610
625
  };
@@ -1120,13 +1135,13 @@ var openaiChatChunkSchema = import_v45.z.union([
1120
1135
  openaiErrorDataSchema
1121
1136
  ]);
1122
1137
  function isReasoningModel(modelId) {
1123
- return modelId.startsWith("o") || modelId.startsWith("gpt-5");
1138
+ return (modelId.startsWith("o") || modelId.startsWith("gpt-5")) && !modelId.startsWith("gpt-5-chat");
1124
1139
  }
1125
1140
  function supportsFlexProcessing(modelId) {
1126
- return modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5");
1141
+ return modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat");
1127
1142
  }
1128
1143
  function supportsPriorityProcessing(modelId) {
1129
- return modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
1144
+ return modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
1130
1145
  }
1131
1146
  function getSystemMessageMode(modelId) {
1132
1147
  var _a, _b;
@@ -1811,9 +1826,14 @@ var import_provider6 = require("@ai-sdk/provider");
1811
1826
  var import_provider_utils10 = require("@ai-sdk/provider-utils");
1812
1827
  var import_v412 = require("zod/v4");
1813
1828
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
1829
+ function isFileId(data, prefixes) {
1830
+ if (!prefixes) return false;
1831
+ return prefixes.some((prefix) => data.startsWith(prefix));
1832
+ }
1814
1833
  async function convertToOpenAIResponsesMessages({
1815
1834
  prompt,
1816
- systemMessageMode
1835
+ systemMessageMode,
1836
+ fileIdPrefixes
1817
1837
  }) {
1818
1838
  var _a, _b, _c, _d, _e, _f;
1819
1839
  const messages = [];
@@ -1860,7 +1880,7 @@ async function convertToOpenAIResponsesMessages({
1860
1880
  const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
1861
1881
  return {
1862
1882
  type: "input_image",
1863
- ...part.data instanceof URL ? { image_url: part.data.toString() } : typeof part.data === "string" && part.data.startsWith("file-") ? { file_id: part.data } : {
1883
+ ...part.data instanceof URL ? { image_url: part.data.toString() } : typeof part.data === "string" && isFileId(part.data, fileIdPrefixes) ? { file_id: part.data } : {
1864
1884
  image_url: `data:${mediaType};base64,${(0, import_provider_utils11.convertToBase64)(part.data)}`
1865
1885
  },
1866
1886
  detail: (_b2 = (_a2 = part.providerOptions) == null ? void 0 : _a2.openai) == null ? void 0 : _b2.imageDetail
@@ -1873,7 +1893,7 @@ async function convertToOpenAIResponsesMessages({
1873
1893
  }
1874
1894
  return {
1875
1895
  type: "input_file",
1876
- ...typeof part.data === "string" && part.data.startsWith("file-") ? { file_id: part.data } : {
1896
+ ...typeof part.data === "string" && isFileId(part.data, fileIdPrefixes) ? { file_id: part.data } : {
1877
1897
  filename: (_c2 = part.filename) != null ? _c2 : `part-${index}.pdf`,
1878
1898
  file_data: `data:application/pdf;base64,${(0, import_provider_utils11.convertToBase64)(part.data)}`
1879
1899
  }
@@ -2160,7 +2180,8 @@ var OpenAIResponsesLanguageModel = class {
2160
2180
  }
2161
2181
  const { messages, warnings: messageWarnings } = await convertToOpenAIResponsesMessages({
2162
2182
  prompt,
2163
- systemMessageMode: modelConfig.systemMessageMode
2183
+ systemMessageMode: modelConfig.systemMessageMode,
2184
+ fileIdPrefixes: this.config.fileIdPrefixes
2164
2185
  });
2165
2186
  warnings.push(...messageWarnings);
2166
2187
  const openaiOptions = await (0, import_provider_utils12.parseProviderOptions)({
@@ -2200,6 +2221,8 @@ var OpenAIResponsesLanguageModel = class {
2200
2221
  instructions: openaiOptions == null ? void 0 : openaiOptions.instructions,
2201
2222
  service_tier: openaiOptions == null ? void 0 : openaiOptions.serviceTier,
2202
2223
  include: openaiOptions == null ? void 0 : openaiOptions.include,
2224
+ prompt_cache_key: openaiOptions == null ? void 0 : openaiOptions.promptCacheKey,
2225
+ safety_identifier: openaiOptions == null ? void 0 : openaiOptions.safetyIdentifier,
2203
2226
  // model-specific settings:
2204
2227
  ...modelConfig.isReasoningModel && ((openaiOptions == null ? void 0 : openaiOptions.reasoningEffort) != null || (openaiOptions == null ? void 0 : openaiOptions.reasoningSummary) != null) && {
2205
2228
  reasoning: {
@@ -2349,7 +2372,18 @@ var OpenAIResponsesLanguageModel = class {
2349
2372
  import_v413.z.object({
2350
2373
  type: import_v413.z.literal("file_search_call"),
2351
2374
  id: import_v413.z.string(),
2352
- status: import_v413.z.string().optional()
2375
+ status: import_v413.z.string().optional(),
2376
+ queries: import_v413.z.array(import_v413.z.string()).nullish(),
2377
+ results: import_v413.z.array(
2378
+ import_v413.z.object({
2379
+ attributes: import_v413.z.object({
2380
+ file_id: import_v413.z.string(),
2381
+ filename: import_v413.z.string(),
2382
+ score: import_v413.z.number(),
2383
+ text: import_v413.z.string()
2384
+ })
2385
+ })
2386
+ ).nullish()
2353
2387
  }),
2354
2388
  import_v413.z.object({
2355
2389
  type: import_v413.z.literal("reasoning"),
@@ -2491,7 +2525,9 @@ var OpenAIResponsesLanguageModel = class {
2491
2525
  toolName: "file_search",
2492
2526
  result: {
2493
2527
  type: "file_search_tool_result",
2494
- status: part.status || "completed"
2528
+ status: part.status || "completed",
2529
+ ...part.queries && { queries: part.queries },
2530
+ ...part.results && { results: part.results }
2495
2531
  },
2496
2532
  providerExecuted: true
2497
2533
  });
@@ -2606,6 +2642,16 @@ var OpenAIResponsesLanguageModel = class {
2606
2642
  id: value.item.id,
2607
2643
  toolName: "computer_use"
2608
2644
  });
2645
+ } else if (value.item.type === "file_search_call") {
2646
+ ongoingToolCalls[value.output_index] = {
2647
+ toolName: "file_search",
2648
+ toolCallId: value.item.id
2649
+ };
2650
+ controller.enqueue({
2651
+ type: "tool-input-start",
2652
+ id: value.item.id,
2653
+ toolName: "file_search"
2654
+ });
2609
2655
  } else if (value.item.type === "message") {
2610
2656
  controller.enqueue({
2611
2657
  type: "text-start",
@@ -2699,6 +2745,32 @@ var OpenAIResponsesLanguageModel = class {
2699
2745
  },
2700
2746
  providerExecuted: true
2701
2747
  });
2748
+ } else if (value.item.type === "file_search_call") {
2749
+ ongoingToolCalls[value.output_index] = void 0;
2750
+ hasToolCalls = true;
2751
+ controller.enqueue({
2752
+ type: "tool-input-end",
2753
+ id: value.item.id
2754
+ });
2755
+ controller.enqueue({
2756
+ type: "tool-call",
2757
+ toolCallId: value.item.id,
2758
+ toolName: "file_search",
2759
+ input: "",
2760
+ providerExecuted: true
2761
+ });
2762
+ controller.enqueue({
2763
+ type: "tool-result",
2764
+ toolCallId: value.item.id,
2765
+ toolName: "file_search",
2766
+ result: {
2767
+ type: "file_search_tool_result",
2768
+ status: value.item.status || "completed",
2769
+ ...value.item.queries && { queries: value.item.queries },
2770
+ ...value.item.results && { results: value.item.results }
2771
+ },
2772
+ providerExecuted: true
2773
+ });
2702
2774
  } else if (value.item.type === "message") {
2703
2775
  controller.enqueue({
2704
2776
  type: "text-end",
@@ -2877,7 +2949,18 @@ var responseOutputItemAddedSchema = import_v413.z.object({
2877
2949
  import_v413.z.object({
2878
2950
  type: import_v413.z.literal("file_search_call"),
2879
2951
  id: import_v413.z.string(),
2880
- status: import_v413.z.string()
2952
+ status: import_v413.z.string(),
2953
+ queries: import_v413.z.array(import_v413.z.string()).nullish(),
2954
+ results: import_v413.z.array(
2955
+ import_v413.z.object({
2956
+ attributes: import_v413.z.object({
2957
+ file_id: import_v413.z.string(),
2958
+ filename: import_v413.z.string(),
2959
+ score: import_v413.z.number(),
2960
+ text: import_v413.z.string()
2961
+ })
2962
+ })
2963
+ ).optional()
2881
2964
  })
2882
2965
  ])
2883
2966
  });
@@ -2915,7 +2998,18 @@ var responseOutputItemDoneSchema = import_v413.z.object({
2915
2998
  import_v413.z.object({
2916
2999
  type: import_v413.z.literal("file_search_call"),
2917
3000
  id: import_v413.z.string(),
2918
- status: import_v413.z.literal("completed")
3001
+ status: import_v413.z.literal("completed"),
3002
+ queries: import_v413.z.array(import_v413.z.string()).nullish(),
3003
+ results: import_v413.z.array(
3004
+ import_v413.z.object({
3005
+ attributes: import_v413.z.object({
3006
+ file_id: import_v413.z.string(),
3007
+ filename: import_v413.z.string(),
3008
+ score: import_v413.z.number(),
3009
+ text: import_v413.z.string()
3010
+ })
3011
+ })
3012
+ ).nullish()
2919
3013
  })
2920
3014
  ])
2921
3015
  });
@@ -2995,6 +3089,13 @@ function isErrorChunk(chunk) {
2995
3089
  return chunk.type === "error";
2996
3090
  }
2997
3091
  function getResponsesModelConfig(modelId) {
3092
+ if (modelId.startsWith("gpt-5-chat")) {
3093
+ return {
3094
+ isReasoningModel: false,
3095
+ systemMessageMode: "system",
3096
+ requiredAutoTruncation: false
3097
+ };
3098
+ }
2998
3099
  if (modelId.startsWith("o") || modelId.startsWith("gpt-5") || modelId.startsWith("codex-") || modelId.startsWith("computer-use")) {
2999
3100
  if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {
3000
3101
  return {
@@ -3016,10 +3117,10 @@ function getResponsesModelConfig(modelId) {
3016
3117
  };
3017
3118
  }
3018
3119
  function supportsFlexProcessing2(modelId) {
3019
- return modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5");
3120
+ return modelId.startsWith("o3") || modelId.startsWith("o4-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat");
3020
3121
  }
3021
3122
  function supportsPriorityProcessing2(modelId) {
3022
- return modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
3123
+ return modelId.startsWith("gpt-4") || modelId.startsWith("gpt-5-mini") || modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat") || modelId.startsWith("o3") || modelId.startsWith("o4-mini");
3023
3124
  }
3024
3125
  var openaiResponsesProviderOptionsSchema = import_v413.z.object({
3025
3126
  metadata: import_v413.z.any().nullish(),
@@ -3033,7 +3134,9 @@ var openaiResponsesProviderOptionsSchema = import_v413.z.object({
3033
3134
  reasoningSummary: import_v413.z.string().nullish(),
3034
3135
  serviceTier: import_v413.z.enum(["auto", "flex", "priority"]).nullish(),
3035
3136
  include: import_v413.z.array(import_v413.z.enum(["reasoning.encrypted_content", "file_search_call.results"])).nullish(),
3036
- textVerbosity: import_v413.z.enum(["low", "medium", "high"]).nullish()
3137
+ textVerbosity: import_v413.z.enum(["low", "medium", "high"]).nullish(),
3138
+ promptCacheKey: import_v413.z.string().nullish(),
3139
+ safetyIdentifier: import_v413.z.string().nullish()
3037
3140
  });
3038
3141
 
3039
3142
  // src/speech/openai-speech-model.ts
@@ -3263,6 +3366,8 @@ var OpenAITranscriptionModel = class {
3263
3366
  include: openAIOptions.include,
3264
3367
  language: openAIOptions.language,
3265
3368
  prompt: openAIOptions.prompt,
3369
+ response_format: "verbose_json",
3370
+ // always use verbose_json to get segments
3266
3371
  temperature: openAIOptions.temperature,
3267
3372
  timestamp_granularities: openAIOptions.timestampGranularities
3268
3373
  };
@@ -3278,7 +3383,7 @@ var OpenAITranscriptionModel = class {
3278
3383
  };
3279
3384
  }
3280
3385
  async doGenerate(options) {
3281
- var _a, _b, _c, _d, _e, _f;
3386
+ var _a, _b, _c, _d, _e, _f, _g, _h;
3282
3387
  const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
3283
3388
  const { formData, warnings } = await this.getArgs(options);
3284
3389
  const {
@@ -3302,13 +3407,17 @@ var OpenAITranscriptionModel = class {
3302
3407
  const language = response.language != null && response.language in languageMap ? languageMap[response.language] : void 0;
3303
3408
  return {
3304
3409
  text: response.text,
3305
- segments: (_e = (_d = response.words) == null ? void 0 : _d.map((word) => ({
3410
+ segments: (_g = (_f = (_d = response.segments) == null ? void 0 : _d.map((segment) => ({
3411
+ text: segment.text,
3412
+ startSecond: segment.start,
3413
+ endSecond: segment.end
3414
+ }))) != null ? _f : (_e = response.words) == null ? void 0 : _e.map((word) => ({
3306
3415
  text: word.word,
3307
3416
  startSecond: word.start,
3308
3417
  endSecond: word.end
3309
- }))) != null ? _e : [],
3418
+ }))) != null ? _g : [],
3310
3419
  language,
3311
- durationInSeconds: (_f = response.duration) != null ? _f : void 0,
3420
+ durationInSeconds: (_h = response.duration) != null ? _h : void 0,
3312
3421
  warnings,
3313
3422
  response: {
3314
3423
  timestamp: currentDate,
@@ -3329,6 +3438,20 @@ var openaiTranscriptionResponseSchema = import_v416.z.object({
3329
3438
  start: import_v416.z.number(),
3330
3439
  end: import_v416.z.number()
3331
3440
  })
3441
+ ).nullish(),
3442
+ segments: import_v416.z.array(
3443
+ import_v416.z.object({
3444
+ id: import_v416.z.number(),
3445
+ seek: import_v416.z.number(),
3446
+ start: import_v416.z.number(),
3447
+ end: import_v416.z.number(),
3448
+ text: import_v416.z.string(),
3449
+ tokens: import_v416.z.array(import_v416.z.number()),
3450
+ temperature: import_v416.z.number(),
3451
+ avg_logprob: import_v416.z.number(),
3452
+ compression_ratio: import_v416.z.number(),
3453
+ no_speech_prob: import_v416.z.number()
3454
+ })
3332
3455
  ).nullish()
3333
3456
  });
3334
3457
 
@@ -3396,7 +3519,8 @@ function createOpenAI(options = {}) {
3396
3519
  provider: `${providerName}.responses`,
3397
3520
  url: ({ path }) => `${baseURL}${path}`,
3398
3521
  headers: getHeaders,
3399
- fetch: options.fetch
3522
+ fetch: options.fetch,
3523
+ fileIdPrefixes: ["file-"]
3400
3524
  });
3401
3525
  };
3402
3526
  const provider = function(modelId) {