@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/CHANGELOG.md +6 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +29 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +9 -3
- package/dist/internal/index.js +26 -1
- package/dist/internal/index.js.map +1 -1
- package/package.json +1 -1
- package/src/openai-config.ts +41 -1
- package/src/openai-provider.ts +1 -0
- package/src/openai-responses-batch.ts +8 -5
- package/src/responses/openai-responses-language-model.ts +10 -4
package/package.json
CHANGED
package/src/openai-config.ts
CHANGED
|
@@ -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?: () =>
|
|
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
|
+
}
|
package/src/openai-provider.ts
CHANGED
|
@@ -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
|
|
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:
|
|
397
|
-
config:
|
|
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
|
|
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:
|
|
218
|
-
config:
|
|
220
|
+
modelId: string;
|
|
221
|
+
config: Parameters<typeof prepareOpenAIConfigForWorkflowDeserialize>[0];
|
|
219
222
|
}) {
|
|
220
|
-
return new OpenAIResponsesLanguageModel(
|
|
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) {
|