@ai-sdk/openai 4.0.52 → 4.0.53

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/openai",
3
- "version": "4.0.52",
3
+ "version": "4.0.53",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -3,10 +3,17 @@ import type {
3
3
  WebSocketConstructor,
4
4
  } from '@ai-sdk/provider-utils';
5
5
 
6
+ type OpenAIHeaders = Record<string, string | undefined>;
7
+
8
+ type SerializedOpenAIConfig = Omit<Partial<OpenAIConfig>, 'headers'> & {
9
+ headers?: (() => OpenAIHeaders) | OpenAIHeaders;
10
+ };
11
+
6
12
  export type OpenAIConfig = {
7
13
  provider: string;
14
+ baseURL?: string;
8
15
  url: (options: { modelId: string; path: string }) => string;
9
- headers?: () => Record<string, string | undefined>;
16
+ headers?: () => OpenAIHeaders;
10
17
  fetch?: FetchFunction;
11
18
  webSocket?: WebSocketConstructor;
12
19
  generateId?: () => string;
@@ -20,3 +27,36 @@ export type OpenAIConfig = {
20
27
  */
21
28
  fileIdPrefixes?: readonly string[];
22
29
  };
30
+
31
+ export function prepareOpenAIConfigForWorkflowDeserialize(
32
+ config: SerializedOpenAIConfig,
33
+ ): OpenAIConfig {
34
+ if (config.provider == null) {
35
+ throw new Error(
36
+ 'OpenAI model is missing provider after workflow deserialization.',
37
+ );
38
+ }
39
+
40
+ return {
41
+ ...config,
42
+ provider: config.provider,
43
+ url:
44
+ typeof config.url === 'function'
45
+ ? config.url
46
+ : ({ path }) => {
47
+ if (config.baseURL == null) {
48
+ throw new Error(
49
+ 'OpenAI model is missing baseURL after workflow deserialization.',
50
+ );
51
+ }
52
+
53
+ return `${config.baseURL}${path}`;
54
+ },
55
+ headers:
56
+ typeof config.headers === 'function'
57
+ ? config.headers
58
+ : config.headers == null
59
+ ? undefined
60
+ : () => config.headers as OpenAIHeaders,
61
+ };
62
+ }
@@ -308,6 +308,7 @@ export function createOpenAI(
308
308
  const createResponsesModel = (modelId: OpenAIResponsesModelId) => {
309
309
  return new OpenAIResponsesBatchLanguageModel(modelId, {
310
310
  provider: `${providerName}.responses`,
311
+ baseURL,
311
312
  url: ({ path }) => `${baseURL}${path}`,
312
313
  headers: getHeaders,
313
314
  fetch: options.fetch,
@@ -33,7 +33,10 @@ import {
33
33
  openaiErrorDataSchema,
34
34
  openaiFailedResponseHandler,
35
35
  } from './openai-error';
36
- import type { OpenAIConfig } from './openai-config';
36
+ import {
37
+ prepareOpenAIConfigForWorkflowDeserialize,
38
+ type OpenAIConfig,
39
+ } from './openai-config';
37
40
  import { openaiFilesResponseSchema } from './files/openai-files-api';
38
41
  import { convertOpenAIResponsesUsage } from './responses/convert-openai-responses-usage';
39
42
  import { mapOpenAIResponseFinishReason } from './responses/map-openai-responses-finish-reason';
@@ -393,12 +396,12 @@ export class OpenAIResponsesBatchLanguageModel
393
396
  }
394
397
 
395
398
  static [WORKFLOW_DESERIALIZE](options: {
396
- modelId: OpenAIResponsesModelId;
397
- config: OpenAIConfig;
399
+ modelId: string;
400
+ config: Parameters<typeof prepareOpenAIConfigForWorkflowDeserialize>[0];
398
401
  }) {
399
402
  return new OpenAIResponsesBatchLanguageModel(
400
- options.modelId,
401
- options.config,
403
+ options.modelId as OpenAIResponsesModelId,
404
+ prepareOpenAIConfigForWorkflowDeserialize(options.config),
402
405
  );
403
406
  }
404
407
 
@@ -30,7 +30,10 @@ import {
30
30
  type InferSchema,
31
31
  type ParseResult,
32
32
  } from '@ai-sdk/provider-utils';
33
- import type { OpenAIConfig } from '../openai-config';
33
+ import {
34
+ prepareOpenAIConfigForWorkflowDeserialize,
35
+ type OpenAIConfig,
36
+ } from '../openai-config';
34
37
  import { openaiFailedResponseHandler } from '../openai-error';
35
38
  import { getOpenAILanguageModelCapabilities } from '../openai-language-model-capabilities';
36
39
  import {
@@ -214,10 +217,13 @@ export class OpenAIResponsesLanguageModel implements LanguageModelV4 {
214
217
  }
215
218
 
216
219
  static [WORKFLOW_DESERIALIZE](options: {
217
- modelId: OpenAIResponsesModelId;
218
- config: OpenAIConfig;
220
+ modelId: string;
221
+ config: Parameters<typeof prepareOpenAIConfigForWorkflowDeserialize>[0];
219
222
  }) {
220
- return new OpenAIResponsesLanguageModel(options.modelId, options.config);
223
+ return new OpenAIResponsesLanguageModel(
224
+ options.modelId as OpenAIResponsesModelId,
225
+ prepareOpenAIConfigForWorkflowDeserialize(options.config),
226
+ );
221
227
  }
222
228
 
223
229
  constructor(modelId: OpenAIResponsesModelId, config: OpenAIConfig) {