@ai-sdk/openai 2.0.2 → 2.0.4

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,18 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 2.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - c9e0f52: Files from the OpenAI Files API are now supported, mirroring functionality of OpenAI Chat and Responses API, respectively. Also, the AI SDK supports URLs for PDFs in the responses API the same way it did for completions.
8
+
9
+ ## 2.0.3
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [90d212f]
14
+ - @ai-sdk/provider-utils@3.0.1
15
+
3
16
  ## 2.0.2
4
17
 
5
18
  ### Patch Changes
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ __export(src_exports, {
26
26
  module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/openai-provider.ts
29
- var import_provider_utils13 = require("@ai-sdk/provider-utils");
29
+ var import_provider_utils14 = require("@ai-sdk/provider-utils");
30
30
 
31
31
  // src/openai-chat-language-model.ts
32
32
  var import_provider3 = require("@ai-sdk/provider");
@@ -134,7 +134,7 @@ function convertToOpenAIChatMessages({
134
134
  }
135
135
  return {
136
136
  type: "file",
137
- file: {
137
+ file: typeof part.data === "string" && part.data.startsWith("file-") ? { file_id: part.data } : {
138
138
  filename: (_c = part.filename) != null ? _c : `part-${index}.pdf`,
139
139
  file_data: `data:application/pdf;base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
140
140
  }
@@ -1938,13 +1938,14 @@ var openaiTranscriptionResponseSchema = import_v412.z.object({
1938
1938
 
1939
1939
  // src/responses/openai-responses-language-model.ts
1940
1940
  var import_provider8 = require("@ai-sdk/provider");
1941
- var import_provider_utils11 = require("@ai-sdk/provider-utils");
1941
+ var import_provider_utils12 = require("@ai-sdk/provider-utils");
1942
1942
  var import_v414 = require("zod/v4");
1943
1943
 
1944
1944
  // src/responses/convert-to-openai-responses-messages.ts
1945
1945
  var import_provider6 = require("@ai-sdk/provider");
1946
1946
  var import_provider_utils10 = require("@ai-sdk/provider-utils");
1947
1947
  var import_v413 = require("zod/v4");
1948
+ var import_provider_utils11 = require("@ai-sdk/provider-utils");
1948
1949
  async function convertToOpenAIResponsesMessages({
1949
1950
  prompt,
1950
1951
  systemMessageMode
@@ -1994,8 +1995,9 @@ async function convertToOpenAIResponsesMessages({
1994
1995
  const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
1995
1996
  return {
1996
1997
  type: "input_image",
1997
- image_url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${part.data}`,
1998
- // OpenAI specific extension: image detail
1998
+ ...part.data instanceof URL ? { image_url: part.data.toString() } : typeof part.data === "string" && part.data.startsWith("file-") ? { file_id: part.data } : {
1999
+ image_url: `data:${mediaType};base64,${part.data}`
2000
+ },
1999
2001
  detail: (_b2 = (_a2 = part.providerOptions) == null ? void 0 : _a2.openai) == null ? void 0 : _b2.imageDetail
2000
2002
  };
2001
2003
  } else if (part.mediaType === "application/pdf") {
@@ -2006,8 +2008,10 @@ async function convertToOpenAIResponsesMessages({
2006
2008
  }
2007
2009
  return {
2008
2010
  type: "input_file",
2009
- filename: (_c2 = part.filename) != null ? _c2 : `part-${index}.pdf`,
2010
- file_data: `data:application/pdf;base64,${part.data}`
2011
+ ...typeof part.data === "string" && part.data.startsWith("file-") ? { file_id: part.data } : {
2012
+ filename: (_c2 = part.filename) != null ? _c2 : `part-${index}.pdf`,
2013
+ file_data: `data:application/pdf;base64,${(0, import_provider_utils11.convertToBase64)(part.data)}`
2014
+ }
2011
2015
  };
2012
2016
  } else {
2013
2017
  throw new import_provider6.UnsupportedFunctionalityError({
@@ -2282,7 +2286,7 @@ var OpenAIResponsesLanguageModel = class {
2282
2286
  systemMessageMode: modelConfig.systemMessageMode
2283
2287
  });
2284
2288
  warnings.push(...messageWarnings);
2285
- const openaiOptions = await (0, import_provider_utils11.parseProviderOptions)({
2289
+ const openaiOptions = await (0, import_provider_utils12.parseProviderOptions)({
2286
2290
  provider: "openai",
2287
2291
  providerOptions,
2288
2292
  schema: openaiResponsesProviderOptionsSchema
@@ -2407,12 +2411,12 @@ var OpenAIResponsesLanguageModel = class {
2407
2411
  responseHeaders,
2408
2412
  value: response,
2409
2413
  rawValue: rawResponse
2410
- } = await (0, import_provider_utils11.postJsonToApi)({
2414
+ } = await (0, import_provider_utils12.postJsonToApi)({
2411
2415
  url,
2412
- headers: (0, import_provider_utils11.combineHeaders)(this.config.headers(), options.headers),
2416
+ headers: (0, import_provider_utils12.combineHeaders)(this.config.headers(), options.headers),
2413
2417
  body,
2414
2418
  failedResponseHandler: openaiFailedResponseHandler,
2415
- successfulResponseHandler: (0, import_provider_utils11.createJsonResponseHandler)(
2419
+ successfulResponseHandler: (0, import_provider_utils12.createJsonResponseHandler)(
2416
2420
  import_v414.z.object({
2417
2421
  id: import_v414.z.string(),
2418
2422
  created_at: import_v414.z.number(),
@@ -2532,7 +2536,7 @@ var OpenAIResponsesLanguageModel = class {
2532
2536
  content.push({
2533
2537
  type: "source",
2534
2538
  sourceType: "url",
2535
- id: (_d = (_c = (_b = this.config).generateId) == null ? void 0 : _c.call(_b)) != null ? _d : (0, import_provider_utils11.generateId)(),
2539
+ id: (_d = (_c = (_b = this.config).generateId) == null ? void 0 : _c.call(_b)) != null ? _d : (0, import_provider_utils12.generateId)(),
2536
2540
  url: annotation.url,
2537
2541
  title: annotation.title
2538
2542
  });
@@ -2644,18 +2648,18 @@ var OpenAIResponsesLanguageModel = class {
2644
2648
  }
2645
2649
  async doStream(options) {
2646
2650
  const { args: body, warnings } = await this.getArgs(options);
2647
- const { responseHeaders, value: response } = await (0, import_provider_utils11.postJsonToApi)({
2651
+ const { responseHeaders, value: response } = await (0, import_provider_utils12.postJsonToApi)({
2648
2652
  url: this.config.url({
2649
2653
  path: "/responses",
2650
2654
  modelId: this.modelId
2651
2655
  }),
2652
- headers: (0, import_provider_utils11.combineHeaders)(this.config.headers(), options.headers),
2656
+ headers: (0, import_provider_utils12.combineHeaders)(this.config.headers(), options.headers),
2653
2657
  body: {
2654
2658
  ...body,
2655
2659
  stream: true
2656
2660
  },
2657
2661
  failedResponseHandler: openaiFailedResponseHandler,
2658
- successfulResponseHandler: (0, import_provider_utils11.createEventSourceResponseHandler)(
2662
+ successfulResponseHandler: (0, import_provider_utils12.createEventSourceResponseHandler)(
2659
2663
  openaiResponsesChunkSchema
2660
2664
  ),
2661
2665
  abortSignal: options.abortSignal,
@@ -2898,7 +2902,7 @@ var OpenAIResponsesLanguageModel = class {
2898
2902
  controller.enqueue({
2899
2903
  type: "source",
2900
2904
  sourceType: "url",
2901
- id: (_m = (_l = (_k = self.config).generateId) == null ? void 0 : _l.call(_k)) != null ? _m : (0, import_provider_utils11.generateId)(),
2905
+ id: (_m = (_l = (_k = self.config).generateId) == null ? void 0 : _l.call(_k)) != null ? _m : (0, import_provider_utils12.generateId)(),
2902
2906
  url: value.annotation.url,
2903
2907
  title: value.annotation.title
2904
2908
  });
@@ -3150,7 +3154,7 @@ var openaiResponsesProviderOptionsSchema = import_v414.z.object({
3150
3154
  });
3151
3155
 
3152
3156
  // src/openai-speech-model.ts
3153
- var import_provider_utils12 = require("@ai-sdk/provider-utils");
3157
+ var import_provider_utils13 = require("@ai-sdk/provider-utils");
3154
3158
  var import_v415 = require("zod/v4");
3155
3159
  var OpenAIProviderOptionsSchema = import_v415.z.object({
3156
3160
  instructions: import_v415.z.string().nullish(),
@@ -3175,7 +3179,7 @@ var OpenAISpeechModel = class {
3175
3179
  providerOptions
3176
3180
  }) {
3177
3181
  const warnings = [];
3178
- const openAIOptions = await (0, import_provider_utils12.parseProviderOptions)({
3182
+ const openAIOptions = await (0, import_provider_utils13.parseProviderOptions)({
3179
3183
  provider: "openai",
3180
3184
  providerOptions,
3181
3185
  schema: OpenAIProviderOptionsSchema
@@ -3228,15 +3232,15 @@ var OpenAISpeechModel = class {
3228
3232
  value: audio,
3229
3233
  responseHeaders,
3230
3234
  rawValue: rawResponse
3231
- } = await (0, import_provider_utils12.postJsonToApi)({
3235
+ } = await (0, import_provider_utils13.postJsonToApi)({
3232
3236
  url: this.config.url({
3233
3237
  path: "/audio/speech",
3234
3238
  modelId: this.modelId
3235
3239
  }),
3236
- headers: (0, import_provider_utils12.combineHeaders)(this.config.headers(), options.headers),
3240
+ headers: (0, import_provider_utils13.combineHeaders)(this.config.headers(), options.headers),
3237
3241
  body: requestBody,
3238
3242
  failedResponseHandler: openaiFailedResponseHandler,
3239
- successfulResponseHandler: (0, import_provider_utils12.createBinaryResponseHandler)(),
3243
+ successfulResponseHandler: (0, import_provider_utils13.createBinaryResponseHandler)(),
3240
3244
  abortSignal: options.abortSignal,
3241
3245
  fetch: this.config.fetch
3242
3246
  });
@@ -3259,10 +3263,10 @@ var OpenAISpeechModel = class {
3259
3263
  // src/openai-provider.ts
3260
3264
  function createOpenAI(options = {}) {
3261
3265
  var _a, _b;
3262
- const baseURL = (_a = (0, import_provider_utils13.withoutTrailingSlash)(options.baseURL)) != null ? _a : "https://api.openai.com/v1";
3266
+ const baseURL = (_a = (0, import_provider_utils14.withoutTrailingSlash)(options.baseURL)) != null ? _a : "https://api.openai.com/v1";
3263
3267
  const providerName = (_b = options.name) != null ? _b : "openai";
3264
3268
  const getHeaders = () => ({
3265
- Authorization: `Bearer ${(0, import_provider_utils13.loadApiKey)({
3269
+ Authorization: `Bearer ${(0, import_provider_utils14.loadApiKey)({
3266
3270
  apiKey: options.apiKey,
3267
3271
  environmentVariableName: "OPENAI_API_KEY",
3268
3272
  description: "OpenAI"