@ai-sdk/openai 4.0.0-beta.4 → 4.0.0-beta.41

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +399 -22
  2. package/README.md +2 -0
  3. package/dist/index.d.ts +166 -49
  4. package/dist/index.js +2454 -1627
  5. package/dist/index.js.map +1 -1
  6. package/dist/internal/index.d.ts +176 -53
  7. package/dist/internal/index.js +2220 -1648
  8. package/dist/internal/index.js.map +1 -1
  9. package/docs/03-openai.mdx +292 -22
  10. package/package.json +13 -14
  11. package/src/chat/convert-openai-chat-usage.ts +2 -2
  12. package/src/chat/convert-to-openai-chat-messages.ts +99 -71
  13. package/src/chat/map-openai-finish-reason.ts +2 -2
  14. package/src/chat/openai-chat-api.ts +6 -2
  15. package/src/chat/openai-chat-language-model.ts +68 -164
  16. package/src/chat/openai-chat-options.ts +10 -1
  17. package/src/chat/openai-chat-prepare-tools.ts +7 -7
  18. package/src/completion/convert-openai-completion-usage.ts +2 -2
  19. package/src/completion/convert-to-openai-completion-prompt.ts +2 -3
  20. package/src/completion/map-openai-finish-reason.ts +2 -2
  21. package/src/completion/openai-completion-api.ts +5 -2
  22. package/src/completion/openai-completion-language-model.ts +46 -30
  23. package/src/completion/openai-completion-options.ts +5 -1
  24. package/src/embedding/openai-embedding-model.ts +25 -8
  25. package/src/embedding/openai-embedding-options.ts +5 -1
  26. package/src/files/openai-files-api.ts +17 -0
  27. package/src/files/openai-files-options.ts +22 -0
  28. package/src/files/openai-files.ts +100 -0
  29. package/src/image/openai-image-model.ts +31 -15
  30. package/src/image/openai-image-options.ts +3 -0
  31. package/src/index.ts +2 -0
  32. package/src/openai-config.ts +7 -7
  33. package/src/openai-language-model-capabilities.ts +3 -2
  34. package/src/openai-provider.ts +63 -30
  35. package/src/openai-tools.ts +12 -1
  36. package/src/responses/convert-openai-responses-usage.ts +2 -2
  37. package/src/responses/convert-to-openai-responses-input.ts +244 -77
  38. package/src/responses/map-openai-responses-finish-reason.ts +2 -2
  39. package/src/responses/openai-responses-api.ts +141 -3
  40. package/src/responses/openai-responses-language-model.ts +274 -61
  41. package/src/responses/openai-responses-options.ts +29 -3
  42. package/src/responses/openai-responses-prepare-tools.ts +48 -15
  43. package/src/responses/openai-responses-provider-metadata.ts +12 -2
  44. package/src/skills/openai-skills-api.ts +31 -0
  45. package/src/skills/openai-skills.ts +83 -0
  46. package/src/speech/openai-speech-model.ts +28 -12
  47. package/src/speech/openai-speech-options.ts +5 -1
  48. package/src/tool/apply-patch.ts +33 -32
  49. package/src/tool/code-interpreter.ts +40 -41
  50. package/src/tool/custom.ts +2 -8
  51. package/src/tool/file-search.ts +3 -3
  52. package/src/tool/image-generation.ts +2 -2
  53. package/src/tool/local-shell.ts +2 -2
  54. package/src/tool/mcp.ts +3 -3
  55. package/src/tool/shell.ts +9 -4
  56. package/src/tool/tool-search.ts +98 -0
  57. package/src/tool/web-search-preview.ts +2 -2
  58. package/src/tool/web-search.ts +2 -2
  59. package/src/transcription/openai-transcription-model.ts +30 -14
  60. package/src/transcription/openai-transcription-options.ts +5 -1
  61. package/dist/index.d.mts +0 -1107
  62. package/dist/index.mjs +0 -6508
  63. package/dist/index.mjs.map +0 -1
  64. package/dist/internal/index.d.mts +0 -1137
  65. package/dist/internal/index.mjs +0 -6321
  66. package/dist/internal/index.mjs.map +0 -1
@@ -1,97 +1,111 @@
1
- import {
2
- EmbeddingModelV3,
3
- ImageModelV3,
4
- LanguageModelV3,
5
- ProviderV3,
6
- SpeechModelV3,
7
- TranscriptionModelV3,
1
+ import type {
2
+ EmbeddingModelV4,
3
+ FilesV4,
4
+ ImageModelV4,
5
+ LanguageModelV4,
6
+ ProviderV4,
7
+ SpeechModelV4,
8
+ SkillsV4,
9
+ TranscriptionModelV4,
8
10
  } from '@ai-sdk/provider';
9
11
  import {
10
- FetchFunction,
11
12
  loadApiKey,
12
13
  loadOptionalSetting,
13
14
  withoutTrailingSlash,
14
15
  withUserAgentSuffix,
16
+ type FetchFunction,
15
17
  } from '@ai-sdk/provider-utils';
16
18
  import { OpenAIChatLanguageModel } from './chat/openai-chat-language-model';
17
- import { OpenAIChatModelId } from './chat/openai-chat-options';
19
+ import type { OpenAIChatModelId } from './chat/openai-chat-options';
18
20
  import { OpenAICompletionLanguageModel } from './completion/openai-completion-language-model';
19
- import { OpenAICompletionModelId } from './completion/openai-completion-options';
21
+ import type { OpenAICompletionModelId } from './completion/openai-completion-options';
20
22
  import { OpenAIEmbeddingModel } from './embedding/openai-embedding-model';
21
- import { OpenAIEmbeddingModelId } from './embedding/openai-embedding-options';
23
+ import { OpenAIFiles } from './files/openai-files';
24
+ import type { OpenAIEmbeddingModelId } from './embedding/openai-embedding-options';
22
25
  import { OpenAIImageModel } from './image/openai-image-model';
23
- import { OpenAIImageModelId } from './image/openai-image-options';
26
+ import type { OpenAIImageModelId } from './image/openai-image-options';
24
27
  import { openaiTools } from './openai-tools';
25
28
  import { OpenAIResponsesLanguageModel } from './responses/openai-responses-language-model';
26
- import { OpenAIResponsesModelId } from './responses/openai-responses-options';
29
+ import type { OpenAIResponsesModelId } from './responses/openai-responses-options';
27
30
  import { OpenAISpeechModel } from './speech/openai-speech-model';
28
- import { OpenAISpeechModelId } from './speech/openai-speech-options';
31
+ import type { OpenAISpeechModelId } from './speech/openai-speech-options';
29
32
  import { OpenAITranscriptionModel } from './transcription/openai-transcription-model';
30
- import { OpenAITranscriptionModelId } from './transcription/openai-transcription-options';
33
+ import type { OpenAITranscriptionModelId } from './transcription/openai-transcription-options';
34
+ import { OpenAISkills } from './skills/openai-skills';
31
35
  import { VERSION } from './version';
32
36
 
33
- export interface OpenAIProvider extends ProviderV3 {
34
- (modelId: OpenAIResponsesModelId): LanguageModelV3;
37
+ export interface OpenAIProvider extends ProviderV4 {
38
+ (modelId: OpenAIResponsesModelId): LanguageModelV4;
35
39
 
36
40
  /**
37
41
  * Creates an OpenAI model for text generation.
38
42
  */
39
- languageModel(modelId: OpenAIResponsesModelId): LanguageModelV3;
43
+ languageModel(modelId: OpenAIResponsesModelId): LanguageModelV4;
40
44
 
41
45
  /**
42
46
  * Creates an OpenAI chat model for text generation.
43
47
  */
44
- chat(modelId: OpenAIChatModelId): LanguageModelV3;
48
+ chat(modelId: OpenAIChatModelId): LanguageModelV4;
45
49
 
46
50
  /**
47
51
  * Creates an OpenAI responses API model for text generation.
48
52
  */
49
- responses(modelId: OpenAIResponsesModelId): LanguageModelV3;
53
+ responses(modelId: OpenAIResponsesModelId): LanguageModelV4;
50
54
 
51
55
  /**
52
56
  * Creates an OpenAI completion model for text generation.
53
57
  */
54
- completion(modelId: OpenAICompletionModelId): LanguageModelV3;
58
+ completion(modelId: OpenAICompletionModelId): LanguageModelV4;
55
59
 
56
60
  /**
57
61
  * Creates a model for text embeddings.
58
62
  */
59
- embedding(modelId: OpenAIEmbeddingModelId): EmbeddingModelV3;
63
+ embedding(modelId: OpenAIEmbeddingModelId): EmbeddingModelV4;
60
64
 
61
65
  /**
62
66
  * Creates a model for text embeddings.
63
67
  */
64
- embeddingModel(modelId: OpenAIEmbeddingModelId): EmbeddingModelV3;
68
+ embeddingModel(modelId: OpenAIEmbeddingModelId): EmbeddingModelV4;
65
69
 
66
70
  /**
67
71
  * @deprecated Use `embedding` instead.
68
72
  */
69
- textEmbedding(modelId: OpenAIEmbeddingModelId): EmbeddingModelV3;
73
+ textEmbedding(modelId: OpenAIEmbeddingModelId): EmbeddingModelV4;
70
74
 
71
75
  /**
72
76
  * @deprecated Use `embeddingModel` instead.
73
77
  */
74
- textEmbeddingModel(modelId: OpenAIEmbeddingModelId): EmbeddingModelV3;
78
+ textEmbeddingModel(modelId: OpenAIEmbeddingModelId): EmbeddingModelV4;
75
79
 
76
80
  /**
77
81
  * Creates a model for image generation.
78
82
  */
79
- image(modelId: OpenAIImageModelId): ImageModelV3;
83
+ image(modelId: OpenAIImageModelId): ImageModelV4;
80
84
 
81
85
  /**
82
86
  * Creates a model for image generation.
83
87
  */
84
- imageModel(modelId: OpenAIImageModelId): ImageModelV3;
88
+ imageModel(modelId: OpenAIImageModelId): ImageModelV4;
85
89
 
86
90
  /**
87
91
  * Creates a model for transcription.
88
92
  */
89
- transcription(modelId: OpenAITranscriptionModelId): TranscriptionModelV3;
93
+ transcription(modelId: OpenAITranscriptionModelId): TranscriptionModelV4;
90
94
 
91
95
  /**
92
96
  * Creates a model for speech generation.
93
97
  */
94
- speech(modelId: OpenAISpeechModelId): SpeechModelV3;
98
+ speech(modelId: OpenAISpeechModelId): SpeechModelV4;
99
+
100
+ /**
101
+ * Returns a FilesV4 interface for uploading files to OpenAI.
102
+ */
103
+ files(): FilesV4;
104
+
105
+ /**
106
+ * Returns a SkillsV4 interface for uploading skills to OpenAI.
107
+ */
108
+ skills(): SkillsV4;
95
109
 
96
110
  /**
97
111
  * OpenAI-specific tools.
@@ -216,6 +230,22 @@ export function createOpenAI(
216
230
  fetch: options.fetch,
217
231
  });
218
232
 
233
+ const createFiles = () =>
234
+ new OpenAIFiles({
235
+ provider: `${providerName}.files`,
236
+ baseURL,
237
+ headers: getHeaders,
238
+ fetch: options.fetch,
239
+ });
240
+
241
+ const createSkills = () =>
242
+ new OpenAISkills({
243
+ provider: `${providerName}.skills`,
244
+ url: ({ path }) => `${baseURL}${path}`,
245
+ headers: getHeaders,
246
+ fetch: options.fetch,
247
+ });
248
+
219
249
  const createLanguageModel = (modelId: OpenAIResponsesModelId) => {
220
250
  if (new.target) {
221
251
  throw new Error(
@@ -232,6 +262,7 @@ export function createOpenAI(
232
262
  url: ({ path }) => `${baseURL}${path}`,
233
263
  headers: getHeaders,
234
264
  fetch: options.fetch,
265
+ // Soft-deprecated. TODO: remove in v8
235
266
  fileIdPrefixes: ['file-'],
236
267
  });
237
268
  };
@@ -240,7 +271,7 @@ export function createOpenAI(
240
271
  return createLanguageModel(modelId);
241
272
  };
242
273
 
243
- provider.specificationVersion = 'v3' as const;
274
+ provider.specificationVersion = 'v4' as const;
244
275
  provider.languageModel = createLanguageModel;
245
276
  provider.chat = createChatModel;
246
277
  provider.completion = createCompletionModel;
@@ -258,6 +289,8 @@ export function createOpenAI(
258
289
 
259
290
  provider.speech = createSpeechModel;
260
291
  provider.speechModel = createSpeechModel;
292
+ provider.files = createFiles;
293
+ provider.skills = createSkills;
261
294
 
262
295
  provider.tools = openaiTools;
263
296
 
@@ -5,6 +5,7 @@ import { fileSearch } from './tool/file-search';
5
5
  import { imageGeneration } from './tool/image-generation';
6
6
  import { localShell } from './tool/local-shell';
7
7
  import { shell } from './tool/shell';
8
+ import { toolSearch } from './tool/tool-search';
8
9
  import { webSearch } from './tool/web-search';
9
10
  import { webSearchPreview } from './tool/web-search-preview';
10
11
  import { mcp } from './tool/mcp';
@@ -24,7 +25,6 @@ export const openaiTools = {
24
25
  * Lark syntax). The model returns a `custom_tool_call` output item whose
25
26
  * `input` field is a string matching the specified grammar.
26
27
  *
27
- * @param name - The name of the custom tool.
28
28
  * @param description - An optional description of the tool.
29
29
  * @param format - The output format constraint (grammar type, syntax, and definition).
30
30
  */
@@ -123,4 +123,15 @@ export const openaiTools = {
123
123
  * @param serverUrl - URL for the MCP server.
124
124
  */
125
125
  mcp,
126
+
127
+ /**
128
+ * Tool search allows the model to dynamically search for and load deferred
129
+ * tools into the model's context as needed. This helps reduce overall token
130
+ * usage, cost, and latency by only loading tools when the model needs them.
131
+ *
132
+ * To use tool search, mark functions or namespaces with `defer_loading: true`
133
+ * in the tools array. The model will use tool search to load these tools
134
+ * when it determines they are needed.
135
+ */
136
+ toolSearch,
126
137
  };
@@ -1,4 +1,4 @@
1
- import { LanguageModelV3Usage } from '@ai-sdk/provider';
1
+ import type { LanguageModelV4Usage } from '@ai-sdk/provider';
2
2
 
3
3
  export type OpenAIResponsesUsage = {
4
4
  input_tokens: number;
@@ -13,7 +13,7 @@ export type OpenAIResponsesUsage = {
13
13
 
14
14
  export function convertOpenAIResponsesUsage(
15
15
  usage: OpenAIResponsesUsage | undefined | null,
16
- ): LanguageModelV3Usage {
16
+ ): LanguageModelV4Usage {
17
17
  if (usage == null) {
18
18
  return {
19
19
  inputTokens: {