@ai-sdk/openai-compatible 1.0.3 → 1.0.5
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 +14 -0
- package/dist/index.js +41 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +2 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +2 -1
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# @ai-sdk/openai-compatible
|
2
2
|
|
3
|
+
## 1.0.5
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 8f8a521: fix(providers): use convertToBase64 for Uint8Array image parts to produce valid data URLs; keep mediaType normalization and URL passthrough
|
8
|
+
- e92b78b: fix (provider/openai-compatible): revert usage fallback specific to moonshotai
|
9
|
+
|
10
|
+
## 1.0.4
|
11
|
+
|
12
|
+
### Patch Changes
|
13
|
+
|
14
|
+
- 5f4c71f: feat (provider/openai-compatible): fall back to look for usage in choices
|
15
|
+
- da314cd: chore (provider/openai-compatible): inline usage fallback logic
|
16
|
+
|
3
17
|
## 1.0.3
|
4
18
|
|
5
19
|
### Patch Changes
|
package/dist/index.js
CHANGED
@@ -30,11 +30,12 @@ module.exports = __toCommonJS(src_exports);
|
|
30
30
|
|
31
31
|
// src/openai-compatible-chat-language-model.ts
|
32
32
|
var import_provider3 = require("@ai-sdk/provider");
|
33
|
-
var
|
33
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
34
34
|
var import_v43 = require("zod/v4");
|
35
35
|
|
36
36
|
// src/convert-to-openai-compatible-chat-messages.ts
|
37
37
|
var import_provider = require("@ai-sdk/provider");
|
38
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
38
39
|
function getOpenAIMetadata(message) {
|
39
40
|
var _a, _b;
|
40
41
|
return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
|
@@ -71,7 +72,7 @@ function convertToOpenAICompatibleChatMessages(prompt) {
|
|
71
72
|
return {
|
72
73
|
type: "image_url",
|
73
74
|
image_url: {
|
74
|
-
url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${part.data}`
|
75
|
+
url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
|
75
76
|
},
|
76
77
|
...partMetadata
|
77
78
|
};
|
@@ -280,7 +281,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
280
281
|
this.chunkSchema = createOpenAICompatibleChatChunkSchema(
|
281
282
|
errorStructure.errorSchema
|
282
283
|
);
|
283
|
-
this.failedResponseHandler = (0,
|
284
|
+
this.failedResponseHandler = (0, import_provider_utils2.createJsonErrorResponseHandler)(errorStructure);
|
284
285
|
this.supportsStructuredOutputs = (_b = config.supportsStructuredOutputs) != null ? _b : false;
|
285
286
|
}
|
286
287
|
get provider() {
|
@@ -311,12 +312,12 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
311
312
|
var _a, _b, _c;
|
312
313
|
const warnings = [];
|
313
314
|
const compatibleOptions = Object.assign(
|
314
|
-
(_a = await (0,
|
315
|
+
(_a = await (0, import_provider_utils2.parseProviderOptions)({
|
315
316
|
provider: "openai-compatible",
|
316
317
|
providerOptions,
|
317
318
|
schema: openaiCompatibleProviderOptions
|
318
319
|
})) != null ? _a : {},
|
319
|
-
(_b = await (0,
|
320
|
+
(_b = await (0, import_provider_utils2.parseProviderOptions)({
|
320
321
|
provider: this.providerOptionsName,
|
321
322
|
providerOptions,
|
322
323
|
schema: openaiCompatibleProviderOptions
|
@@ -381,15 +382,15 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
381
382
|
responseHeaders,
|
382
383
|
value: responseBody,
|
383
384
|
rawValue: rawResponse
|
384
|
-
} = await (0,
|
385
|
+
} = await (0, import_provider_utils2.postJsonToApi)({
|
385
386
|
url: this.config.url({
|
386
387
|
path: "/chat/completions",
|
387
388
|
modelId: this.modelId
|
388
389
|
}),
|
389
|
-
headers: (0,
|
390
|
+
headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
|
390
391
|
body: args,
|
391
392
|
failedResponseHandler: this.failedResponseHandler,
|
392
|
-
successfulResponseHandler: (0,
|
393
|
+
successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)(
|
393
394
|
OpenAICompatibleChatResponseSchema
|
394
395
|
),
|
395
396
|
abortSignal: options.abortSignal,
|
@@ -412,7 +413,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
412
413
|
for (const toolCall of choice.message.tool_calls) {
|
413
414
|
content.push({
|
414
415
|
type: "tool-call",
|
415
|
-
toolCallId: (_b = toolCall.id) != null ? _b : (0,
|
416
|
+
toolCallId: (_b = toolCall.id) != null ? _b : (0, import_provider_utils2.generateId)(),
|
416
417
|
toolName: toolCall.function.name,
|
417
418
|
input: toolCall.function.arguments
|
418
419
|
});
|
@@ -461,15 +462,15 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
461
462
|
stream_options: this.config.includeUsage ? { include_usage: true } : void 0
|
462
463
|
};
|
463
464
|
const metadataExtractor = (_a = this.config.metadataExtractor) == null ? void 0 : _a.createStreamExtractor();
|
464
|
-
const { responseHeaders, value: response } = await (0,
|
465
|
+
const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
|
465
466
|
url: this.config.url({
|
466
467
|
path: "/chat/completions",
|
467
468
|
modelId: this.modelId
|
468
469
|
}),
|
469
|
-
headers: (0,
|
470
|
+
headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), options.headers),
|
470
471
|
body,
|
471
472
|
failedResponseHandler: this.failedResponseHandler,
|
472
|
-
successfulResponseHandler: (0,
|
473
|
+
successfulResponseHandler: (0, import_provider_utils2.createEventSourceResponseHandler)(
|
473
474
|
this.chunkSchema
|
474
475
|
),
|
475
476
|
abortSignal: options.abortSignal,
|
@@ -624,14 +625,14 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
624
625
|
toolName: toolCall2.function.name
|
625
626
|
});
|
626
627
|
}
|
627
|
-
if ((0,
|
628
|
+
if ((0, import_provider_utils2.isParsableJson)(toolCall2.function.arguments)) {
|
628
629
|
controller.enqueue({
|
629
630
|
type: "tool-input-end",
|
630
631
|
id: toolCall2.id
|
631
632
|
});
|
632
633
|
controller.enqueue({
|
633
634
|
type: "tool-call",
|
634
|
-
toolCallId: (_f = toolCall2.id) != null ? _f : (0,
|
635
|
+
toolCallId: (_f = toolCall2.id) != null ? _f : (0, import_provider_utils2.generateId)(),
|
635
636
|
toolName: toolCall2.function.name,
|
636
637
|
input: toolCall2.function.arguments
|
637
638
|
});
|
@@ -652,14 +653,14 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
652
653
|
id: toolCall.id,
|
653
654
|
delta: (_j = toolCallDelta.function.arguments) != null ? _j : ""
|
654
655
|
});
|
655
|
-
if (((_k = toolCall.function) == null ? void 0 : _k.name) != null && ((_l = toolCall.function) == null ? void 0 : _l.arguments) != null && (0,
|
656
|
+
if (((_k = toolCall.function) == null ? void 0 : _k.name) != null && ((_l = toolCall.function) == null ? void 0 : _l.arguments) != null && (0, import_provider_utils2.isParsableJson)(toolCall.function.arguments)) {
|
656
657
|
controller.enqueue({
|
657
658
|
type: "tool-input-end",
|
658
659
|
id: toolCall.id
|
659
660
|
});
|
660
661
|
controller.enqueue({
|
661
662
|
type: "tool-call",
|
662
|
-
toolCallId: (_m = toolCall.id) != null ? _m : (0,
|
663
|
+
toolCallId: (_m = toolCall.id) != null ? _m : (0, import_provider_utils2.generateId)(),
|
663
664
|
toolName: toolCall.function.name,
|
664
665
|
input: toolCall.function.arguments
|
665
666
|
});
|
@@ -685,7 +686,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
685
686
|
});
|
686
687
|
controller.enqueue({
|
687
688
|
type: "tool-call",
|
688
|
-
toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0,
|
689
|
+
toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0, import_provider_utils2.generateId)(),
|
689
690
|
toolName: toolCall.function.name,
|
690
691
|
input: toolCall.function.arguments
|
691
692
|
});
|
@@ -793,7 +794,7 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_v43.z.union(
|
|
793
794
|
]);
|
794
795
|
|
795
796
|
// src/openai-compatible-completion-language-model.ts
|
796
|
-
var
|
797
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
797
798
|
var import_v45 = require("zod/v4");
|
798
799
|
|
799
800
|
// src/convert-to-openai-compatible-completion-prompt.ts
|
@@ -908,7 +909,7 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
908
909
|
this.chunkSchema = createOpenAICompatibleCompletionChunkSchema(
|
909
910
|
errorStructure.errorSchema
|
910
911
|
);
|
911
|
-
this.failedResponseHandler = (0,
|
912
|
+
this.failedResponseHandler = (0, import_provider_utils3.createJsonErrorResponseHandler)(errorStructure);
|
912
913
|
}
|
913
914
|
get provider() {
|
914
915
|
return this.config.provider;
|
@@ -937,7 +938,7 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
937
938
|
}) {
|
938
939
|
var _a;
|
939
940
|
const warnings = [];
|
940
|
-
const completionOptions = (_a = await (0,
|
941
|
+
const completionOptions = (_a = await (0, import_provider_utils3.parseProviderOptions)({
|
941
942
|
provider: this.providerOptionsName,
|
942
943
|
providerOptions,
|
943
944
|
schema: openaiCompatibleCompletionProviderOptions
|
@@ -992,15 +993,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
992
993
|
responseHeaders,
|
993
994
|
value: response,
|
994
995
|
rawValue: rawResponse
|
995
|
-
} = await (0,
|
996
|
+
} = await (0, import_provider_utils3.postJsonToApi)({
|
996
997
|
url: this.config.url({
|
997
998
|
path: "/completions",
|
998
999
|
modelId: this.modelId
|
999
1000
|
}),
|
1000
|
-
headers: (0,
|
1001
|
+
headers: (0, import_provider_utils3.combineHeaders)(this.config.headers(), options.headers),
|
1001
1002
|
body: args,
|
1002
1003
|
failedResponseHandler: this.failedResponseHandler,
|
1003
|
-
successfulResponseHandler: (0,
|
1004
|
+
successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
|
1004
1005
|
openaiCompatibleCompletionResponseSchema
|
1005
1006
|
),
|
1006
1007
|
abortSignal: options.abortSignal,
|
@@ -1036,15 +1037,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
1036
1037
|
// only include stream_options when in strict compatibility mode:
|
1037
1038
|
stream_options: this.config.includeUsage ? { include_usage: true } : void 0
|
1038
1039
|
};
|
1039
|
-
const { responseHeaders, value: response } = await (0,
|
1040
|
+
const { responseHeaders, value: response } = await (0, import_provider_utils3.postJsonToApi)({
|
1040
1041
|
url: this.config.url({
|
1041
1042
|
path: "/completions",
|
1042
1043
|
modelId: this.modelId
|
1043
1044
|
}),
|
1044
|
-
headers: (0,
|
1045
|
+
headers: (0, import_provider_utils3.combineHeaders)(this.config.headers(), options.headers),
|
1045
1046
|
body,
|
1046
1047
|
failedResponseHandler: this.failedResponseHandler,
|
1047
|
-
successfulResponseHandler: (0,
|
1048
|
+
successfulResponseHandler: (0, import_provider_utils3.createEventSourceResponseHandler)(
|
1048
1049
|
this.chunkSchema
|
1049
1050
|
),
|
1050
1051
|
abortSignal: options.abortSignal,
|
@@ -1162,7 +1163,7 @@ var createOpenAICompatibleCompletionChunkSchema = (errorSchema) => import_v45.z.
|
|
1162
1163
|
|
1163
1164
|
// src/openai-compatible-embedding-model.ts
|
1164
1165
|
var import_provider5 = require("@ai-sdk/provider");
|
1165
|
-
var
|
1166
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
1166
1167
|
var import_v47 = require("zod/v4");
|
1167
1168
|
|
1168
1169
|
// src/openai-compatible-embedding-options.ts
|
@@ -1209,12 +1210,12 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
1209
1210
|
}) {
|
1210
1211
|
var _a, _b, _c;
|
1211
1212
|
const compatibleOptions = Object.assign(
|
1212
|
-
(_a = await (0,
|
1213
|
+
(_a = await (0, import_provider_utils4.parseProviderOptions)({
|
1213
1214
|
provider: "openai-compatible",
|
1214
1215
|
providerOptions,
|
1215
1216
|
schema: openaiCompatibleEmbeddingProviderOptions
|
1216
1217
|
})) != null ? _a : {},
|
1217
|
-
(_b = await (0,
|
1218
|
+
(_b = await (0, import_provider_utils4.parseProviderOptions)({
|
1218
1219
|
provider: this.providerOptionsName,
|
1219
1220
|
providerOptions,
|
1220
1221
|
schema: openaiCompatibleEmbeddingProviderOptions
|
@@ -1232,12 +1233,12 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
1232
1233
|
responseHeaders,
|
1233
1234
|
value: response,
|
1234
1235
|
rawValue
|
1235
|
-
} = await (0,
|
1236
|
+
} = await (0, import_provider_utils4.postJsonToApi)({
|
1236
1237
|
url: this.config.url({
|
1237
1238
|
path: "/embeddings",
|
1238
1239
|
modelId: this.modelId
|
1239
1240
|
}),
|
1240
|
-
headers: (0,
|
1241
|
+
headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), headers),
|
1241
1242
|
body: {
|
1242
1243
|
model: this.modelId,
|
1243
1244
|
input: values,
|
@@ -1245,10 +1246,10 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
1245
1246
|
dimensions: compatibleOptions.dimensions,
|
1246
1247
|
user: compatibleOptions.user
|
1247
1248
|
},
|
1248
|
-
failedResponseHandler: (0,
|
1249
|
+
failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)(
|
1249
1250
|
(_c = this.config.errorStructure) != null ? _c : defaultOpenAICompatibleErrorStructure
|
1250
1251
|
),
|
1251
|
-
successfulResponseHandler: (0,
|
1252
|
+
successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
|
1252
1253
|
openaiTextEmbeddingResponseSchema
|
1253
1254
|
),
|
1254
1255
|
abortSignal,
|
@@ -1269,7 +1270,7 @@ var openaiTextEmbeddingResponseSchema = import_v47.z.object({
|
|
1269
1270
|
});
|
1270
1271
|
|
1271
1272
|
// src/openai-compatible-image-model.ts
|
1272
|
-
var
|
1273
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
1273
1274
|
var import_v48 = require("zod/v4");
|
1274
1275
|
var OpenAICompatibleImageModel = class {
|
1275
1276
|
constructor(modelId, config) {
|
@@ -1304,12 +1305,12 @@ var OpenAICompatibleImageModel = class {
|
|
1304
1305
|
warnings.push({ type: "unsupported-setting", setting: "seed" });
|
1305
1306
|
}
|
1306
1307
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
1307
|
-
const { value: response, responseHeaders } = await (0,
|
1308
|
+
const { value: response, responseHeaders } = await (0, import_provider_utils5.postJsonToApi)({
|
1308
1309
|
url: this.config.url({
|
1309
1310
|
path: "/images/generations",
|
1310
1311
|
modelId: this.modelId
|
1311
1312
|
}),
|
1312
|
-
headers: (0,
|
1313
|
+
headers: (0, import_provider_utils5.combineHeaders)(this.config.headers(), headers),
|
1313
1314
|
body: {
|
1314
1315
|
model: this.modelId,
|
1315
1316
|
prompt,
|
@@ -1318,10 +1319,10 @@ var OpenAICompatibleImageModel = class {
|
|
1318
1319
|
...(_d = providerOptions.openai) != null ? _d : {},
|
1319
1320
|
response_format: "b64_json"
|
1320
1321
|
},
|
1321
|
-
failedResponseHandler: (0,
|
1322
|
+
failedResponseHandler: (0, import_provider_utils5.createJsonErrorResponseHandler)(
|
1322
1323
|
(_e = this.config.errorStructure) != null ? _e : defaultOpenAICompatibleErrorStructure
|
1323
1324
|
),
|
1324
|
-
successfulResponseHandler: (0,
|
1325
|
+
successfulResponseHandler: (0, import_provider_utils5.createJsonResponseHandler)(
|
1325
1326
|
openaiCompatibleImageResponseSchema
|
1326
1327
|
),
|
1327
1328
|
abortSignal,
|
@@ -1343,9 +1344,9 @@ var openaiCompatibleImageResponseSchema = import_v48.z.object({
|
|
1343
1344
|
});
|
1344
1345
|
|
1345
1346
|
// src/openai-compatible-provider.ts
|
1346
|
-
var
|
1347
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1347
1348
|
function createOpenAICompatible(options) {
|
1348
|
-
const baseURL = (0,
|
1349
|
+
const baseURL = (0, import_provider_utils6.withoutTrailingSlash)(options.baseURL);
|
1349
1350
|
const providerName = options.name;
|
1350
1351
|
const getHeaders = () => ({
|
1351
1352
|
...options.apiKey && { Authorization: `Bearer ${options.apiKey}` },
|