@ai-sdk/openai-compatible 2.0.85 → 2.0.87
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 +15 -0
- package/dist/index.d.mts +16 -15
- package/dist/index.d.ts +16 -15
- package/dist/index.js +159 -133
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +137 -97
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +2 -2
- package/dist/internal/index.d.ts +2 -2
- package/package.json +2 -2
- package/src/chat/openai-compatible-chat-language-model.ts +128 -116
- package/src/completion/openai-compatible-completion-language-model.ts +22 -15
- package/src/completion/openai-compatible-completion-options.ts +32 -23
- package/src/embedding/openai-compatible-embedding-model.ts +13 -7
- package/src/embedding/openai-compatible-embedding-options.ts +22 -13
- package/src/image/openai-compatible-image-model.ts +19 -12
package/dist/index.js
CHANGED
|
@@ -594,7 +594,6 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
|
594
594
|
});
|
|
595
595
|
}
|
|
596
596
|
const content = [];
|
|
597
|
-
content.push(...convertOpenAICompatibleContent(choice.message.content));
|
|
598
597
|
const reasoning = (_a = choice.message.reasoning_content) != null ? _a : choice.message.reasoning;
|
|
599
598
|
if (reasoning != null && reasoning.length > 0) {
|
|
600
599
|
content.push({
|
|
@@ -602,6 +601,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
|
602
601
|
text: reasoning
|
|
603
602
|
});
|
|
604
603
|
}
|
|
604
|
+
content.push(...convertOpenAICompatibleContent(choice.message.content));
|
|
605
605
|
if (choice.message.tool_calls != null) {
|
|
606
606
|
for (const toolCall of choice.message.tool_calls) {
|
|
607
607
|
const thoughtSignature = (_c = (_b = toolCall.extra_content) == null ? void 0 : _b.google) == null ? void 0 : _c.thought_signature;
|
|
@@ -896,7 +896,7 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
|
896
896
|
};
|
|
897
897
|
}
|
|
898
898
|
};
|
|
899
|
-
var openaiCompatibleTokenUsageSchema = import_v43.z.looseObject({
|
|
899
|
+
var openaiCompatibleTokenUsageSchema = () => import_v43.z.looseObject({
|
|
900
900
|
prompt_tokens: import_v43.z.number().nullish(),
|
|
901
901
|
completion_tokens: import_v43.z.number().nullish(),
|
|
902
902
|
total_tokens: import_v43.z.number().nullish(),
|
|
@@ -909,7 +909,7 @@ var openaiCompatibleTokenUsageSchema = import_v43.z.looseObject({
|
|
|
909
909
|
rejected_prediction_tokens: import_v43.z.number().nullish()
|
|
910
910
|
}).nullish()
|
|
911
911
|
}).nullish();
|
|
912
|
-
var openAICompatibleContentSchema = import_v43.z.union([
|
|
912
|
+
var openAICompatibleContentSchema = () => import_v43.z.union([
|
|
913
913
|
import_v43.z.string(),
|
|
914
914
|
import_v43.z.array(
|
|
915
915
|
import_v43.z.looseObject({
|
|
@@ -941,39 +941,43 @@ function convertOpenAICompatibleContent(content) {
|
|
|
941
941
|
}
|
|
942
942
|
return result;
|
|
943
943
|
}
|
|
944
|
-
var OpenAICompatibleChatResponseSchema =
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
944
|
+
var OpenAICompatibleChatResponseSchema = (0, import_provider_utils2.lazySchema)(
|
|
945
|
+
() => (0, import_provider_utils2.zodSchema)(
|
|
946
|
+
import_v43.z.looseObject({
|
|
947
|
+
id: import_v43.z.string().nullish(),
|
|
948
|
+
created: import_v43.z.number().nullish(),
|
|
949
|
+
model: import_v43.z.string().nullish(),
|
|
950
|
+
choices: import_v43.z.array(
|
|
951
|
+
import_v43.z.object({
|
|
952
|
+
message: import_v43.z.object({
|
|
953
|
+
role: import_v43.z.literal("assistant").nullish(),
|
|
954
|
+
content: openAICompatibleContentSchema(),
|
|
955
|
+
reasoning_content: import_v43.z.string().nullish(),
|
|
956
|
+
reasoning: import_v43.z.string().nullish(),
|
|
957
|
+
tool_calls: import_v43.z.array(
|
|
958
|
+
import_v43.z.object({
|
|
959
|
+
id: import_v43.z.string().nullish(),
|
|
960
|
+
function: import_v43.z.object({
|
|
961
|
+
name: import_v43.z.string(),
|
|
962
|
+
arguments: import_v43.z.string()
|
|
963
|
+
}),
|
|
964
|
+
// Support for Google Gemini thought signatures via OpenAI compatibility
|
|
965
|
+
extra_content: import_v43.z.object({
|
|
966
|
+
google: import_v43.z.object({
|
|
967
|
+
thought_signature: import_v43.z.string().nullish()
|
|
968
|
+
}).nullish()
|
|
969
|
+
}).nullish()
|
|
970
|
+
})
|
|
971
|
+
).nullish()
|
|
972
|
+
}),
|
|
973
|
+
finish_reason: import_v43.z.string().nullish()
|
|
974
|
+
})
|
|
975
|
+
),
|
|
976
|
+
usage: openaiCompatibleTokenUsageSchema()
|
|
972
977
|
})
|
|
973
|
-
)
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
var chunkBaseSchema = import_v43.z.looseObject({
|
|
978
|
+
)
|
|
979
|
+
);
|
|
980
|
+
var chunkBaseSchema = () => import_v43.z.looseObject({
|
|
977
981
|
id: import_v43.z.string().nullish(),
|
|
978
982
|
created: import_v43.z.number().nullish(),
|
|
979
983
|
model: import_v43.z.string().nullish(),
|
|
@@ -981,7 +985,7 @@ var chunkBaseSchema = import_v43.z.looseObject({
|
|
|
981
985
|
import_v43.z.object({
|
|
982
986
|
delta: import_v43.z.object({
|
|
983
987
|
role: import_v43.z.enum(["assistant", ""]).nullish(),
|
|
984
|
-
content: openAICompatibleContentSchema,
|
|
988
|
+
content: openAICompatibleContentSchema(),
|
|
985
989
|
// Most openai-compatible models set `reasoning_content`, but some
|
|
986
990
|
// providers serving `gpt-oss` set `reasoning`. See #7866
|
|
987
991
|
reasoning_content: import_v43.z.string().nullish(),
|
|
@@ -1007,12 +1011,12 @@ var chunkBaseSchema = import_v43.z.looseObject({
|
|
|
1007
1011
|
finish_reason: import_v43.z.string().nullish()
|
|
1008
1012
|
})
|
|
1009
1013
|
),
|
|
1010
|
-
usage: openaiCompatibleTokenUsageSchema
|
|
1014
|
+
usage: openaiCompatibleTokenUsageSchema()
|
|
1011
1015
|
});
|
|
1012
|
-
var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_v43.z.union([chunkBaseSchema, errorSchema]);
|
|
1016
|
+
var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_v43.z.union([chunkBaseSchema(), errorSchema]);
|
|
1013
1017
|
|
|
1014
1018
|
// src/completion/openai-compatible-completion-language-model.ts
|
|
1015
|
-
var
|
|
1019
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
|
1016
1020
|
var import_v45 = require("zod/v4");
|
|
1017
1021
|
|
|
1018
1022
|
// src/completion/convert-openai-compatible-completion-usage.ts
|
|
@@ -1158,29 +1162,34 @@ function mapOpenAICompatibleFinishReason2(finishReason) {
|
|
|
1158
1162
|
}
|
|
1159
1163
|
|
|
1160
1164
|
// src/completion/openai-compatible-completion-options.ts
|
|
1165
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
1161
1166
|
var import_v44 = require("zod/v4");
|
|
1162
|
-
var openaiCompatibleLanguageModelCompletionOptions =
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1167
|
+
var openaiCompatibleLanguageModelCompletionOptions = (0, import_provider_utils3.lazySchema)(
|
|
1168
|
+
() => (0, import_provider_utils3.zodSchema)(
|
|
1169
|
+
import_v44.z.object({
|
|
1170
|
+
/**
|
|
1171
|
+
* Echo back the prompt in addition to the completion.
|
|
1172
|
+
*/
|
|
1173
|
+
echo: import_v44.z.boolean().optional(),
|
|
1174
|
+
/**
|
|
1175
|
+
* Modify the likelihood of specified tokens appearing in the completion.
|
|
1176
|
+
*
|
|
1177
|
+
* Accepts a JSON object that maps tokens (specified by their token ID in
|
|
1178
|
+
* the GPT tokenizer) to an associated bias value from -100 to 100.
|
|
1179
|
+
*/
|
|
1180
|
+
logitBias: import_v44.z.record(import_v44.z.string(), import_v44.z.number()).optional(),
|
|
1181
|
+
/**
|
|
1182
|
+
* The suffix that comes after a completion of inserted text.
|
|
1183
|
+
*/
|
|
1184
|
+
suffix: import_v44.z.string().optional(),
|
|
1185
|
+
/**
|
|
1186
|
+
* A unique identifier representing your end-user, which can help providers to
|
|
1187
|
+
* monitor and detect abuse.
|
|
1188
|
+
*/
|
|
1189
|
+
user: import_v44.z.string().optional()
|
|
1190
|
+
})
|
|
1191
|
+
)
|
|
1192
|
+
);
|
|
1184
1193
|
|
|
1185
1194
|
// src/completion/openai-compatible-completion-language-model.ts
|
|
1186
1195
|
var OpenAICompatibleCompletionLanguageModel = class {
|
|
@@ -1194,7 +1203,7 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
|
1194
1203
|
this.chunkSchema = createOpenAICompatibleCompletionChunkSchema(
|
|
1195
1204
|
errorStructure.errorSchema
|
|
1196
1205
|
);
|
|
1197
|
-
this.failedResponseHandler = (0,
|
|
1206
|
+
this.failedResponseHandler = (0, import_provider_utils4.createJsonErrorResponseHandler)(errorStructure);
|
|
1198
1207
|
}
|
|
1199
1208
|
get provider() {
|
|
1200
1209
|
return this.config.provider;
|
|
@@ -1224,12 +1233,12 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
|
1224
1233
|
var _a, _b;
|
|
1225
1234
|
const warnings = [];
|
|
1226
1235
|
const completionOptions = Object.assign(
|
|
1227
|
-
(_a = await (0,
|
|
1236
|
+
(_a = await (0, import_provider_utils4.parseProviderOptions)({
|
|
1228
1237
|
provider: this.providerOptionsName,
|
|
1229
1238
|
providerOptions,
|
|
1230
1239
|
schema: openaiCompatibleLanguageModelCompletionOptions
|
|
1231
1240
|
})) != null ? _a : {},
|
|
1232
|
-
(_b = await (0,
|
|
1241
|
+
(_b = await (0, import_provider_utils4.parseProviderOptions)({
|
|
1233
1242
|
provider: toCamelCase(this.providerOptionsName),
|
|
1234
1243
|
providerOptions,
|
|
1235
1244
|
schema: openaiCompatibleLanguageModelCompletionOptions
|
|
@@ -1285,15 +1294,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
|
1285
1294
|
responseHeaders,
|
|
1286
1295
|
value: response,
|
|
1287
1296
|
rawValue: rawResponse
|
|
1288
|
-
} = await (0,
|
|
1297
|
+
} = await (0, import_provider_utils4.postJsonToApi)({
|
|
1289
1298
|
url: this.config.url({
|
|
1290
1299
|
path: "/completions",
|
|
1291
1300
|
modelId: this.modelId
|
|
1292
1301
|
}),
|
|
1293
|
-
headers: (0,
|
|
1302
|
+
headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), options.headers),
|
|
1294
1303
|
body: args,
|
|
1295
1304
|
failedResponseHandler: this.failedResponseHandler,
|
|
1296
|
-
successfulResponseHandler: (0,
|
|
1305
|
+
successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
|
|
1297
1306
|
openaiCompatibleCompletionResponseSchema
|
|
1298
1307
|
),
|
|
1299
1308
|
abortSignal: options.abortSignal,
|
|
@@ -1328,15 +1337,15 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
|
1328
1337
|
// only include stream_options when in strict compatibility mode:
|
|
1329
1338
|
stream_options: this.config.includeUsage ? { include_usage: true } : void 0
|
|
1330
1339
|
};
|
|
1331
|
-
const { responseHeaders, value: response } = await (0,
|
|
1340
|
+
const { responseHeaders, value: response } = await (0, import_provider_utils4.postJsonToApi)({
|
|
1332
1341
|
url: this.config.url({
|
|
1333
1342
|
path: "/completions",
|
|
1334
1343
|
modelId: this.modelId
|
|
1335
1344
|
}),
|
|
1336
|
-
headers: (0,
|
|
1345
|
+
headers: (0, import_provider_utils4.combineHeaders)(this.config.headers(), options.headers),
|
|
1337
1346
|
body,
|
|
1338
1347
|
failedResponseHandler: this.failedResponseHandler,
|
|
1339
|
-
successfulResponseHandler: (0,
|
|
1348
|
+
successfulResponseHandler: (0, import_provider_utils4.createEventSourceResponseHandler)(
|
|
1340
1349
|
this.chunkSchema
|
|
1341
1350
|
),
|
|
1342
1351
|
abortSignal: options.abortSignal,
|
|
@@ -1416,23 +1425,27 @@ var OpenAICompatibleCompletionLanguageModel = class {
|
|
|
1416
1425
|
};
|
|
1417
1426
|
}
|
|
1418
1427
|
};
|
|
1419
|
-
var usageSchema = import_v45.z.looseObject({
|
|
1428
|
+
var usageSchema = () => import_v45.z.looseObject({
|
|
1420
1429
|
prompt_tokens: import_v45.z.number(),
|
|
1421
1430
|
completion_tokens: import_v45.z.number(),
|
|
1422
1431
|
total_tokens: import_v45.z.number()
|
|
1423
1432
|
});
|
|
1424
|
-
var openaiCompatibleCompletionResponseSchema =
|
|
1425
|
-
|
|
1426
|
-
created: import_v45.z.number().nullish(),
|
|
1427
|
-
model: import_v45.z.string().nullish(),
|
|
1428
|
-
choices: import_v45.z.array(
|
|
1433
|
+
var openaiCompatibleCompletionResponseSchema = (0, import_provider_utils4.lazySchema)(
|
|
1434
|
+
() => (0, import_provider_utils4.zodSchema)(
|
|
1429
1435
|
import_v45.z.object({
|
|
1430
|
-
|
|
1431
|
-
|
|
1436
|
+
id: import_v45.z.string().nullish(),
|
|
1437
|
+
created: import_v45.z.number().nullish(),
|
|
1438
|
+
model: import_v45.z.string().nullish(),
|
|
1439
|
+
choices: import_v45.z.array(
|
|
1440
|
+
import_v45.z.object({
|
|
1441
|
+
text: import_v45.z.string(),
|
|
1442
|
+
finish_reason: import_v45.z.string()
|
|
1443
|
+
})
|
|
1444
|
+
),
|
|
1445
|
+
usage: usageSchema().nullish()
|
|
1432
1446
|
})
|
|
1433
|
-
)
|
|
1434
|
-
|
|
1435
|
-
});
|
|
1447
|
+
)
|
|
1448
|
+
);
|
|
1436
1449
|
var createOpenAICompatibleCompletionChunkSchema = (errorSchema) => import_v45.z.union([
|
|
1437
1450
|
import_v45.z.object({
|
|
1438
1451
|
id: import_v45.z.string().nullish(),
|
|
@@ -1445,30 +1458,35 @@ var createOpenAICompatibleCompletionChunkSchema = (errorSchema) => import_v45.z.
|
|
|
1445
1458
|
index: import_v45.z.number()
|
|
1446
1459
|
})
|
|
1447
1460
|
),
|
|
1448
|
-
usage: usageSchema.nullish()
|
|
1461
|
+
usage: usageSchema().nullish()
|
|
1449
1462
|
}),
|
|
1450
1463
|
errorSchema
|
|
1451
1464
|
]);
|
|
1452
1465
|
|
|
1453
1466
|
// src/embedding/openai-compatible-embedding-model.ts
|
|
1454
1467
|
var import_provider5 = require("@ai-sdk/provider");
|
|
1455
|
-
var
|
|
1468
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
|
1456
1469
|
var import_v47 = require("zod/v4");
|
|
1457
1470
|
|
|
1458
1471
|
// src/embedding/openai-compatible-embedding-options.ts
|
|
1472
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
|
1459
1473
|
var import_v46 = require("zod/v4");
|
|
1460
|
-
var openaiCompatibleEmbeddingModelOptions =
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1474
|
+
var openaiCompatibleEmbeddingModelOptions = (0, import_provider_utils5.lazySchema)(
|
|
1475
|
+
() => (0, import_provider_utils5.zodSchema)(
|
|
1476
|
+
import_v46.z.object({
|
|
1477
|
+
/**
|
|
1478
|
+
* The number of dimensions the resulting output embeddings should have.
|
|
1479
|
+
* Only supported in text-embedding-3 and later models.
|
|
1480
|
+
*/
|
|
1481
|
+
dimensions: import_v46.z.number().optional(),
|
|
1482
|
+
/**
|
|
1483
|
+
* A unique identifier representing your end-user, which can help providers to
|
|
1484
|
+
* monitor and detect abuse.
|
|
1485
|
+
*/
|
|
1486
|
+
user: import_v46.z.string().optional()
|
|
1487
|
+
})
|
|
1488
|
+
)
|
|
1489
|
+
);
|
|
1472
1490
|
|
|
1473
1491
|
// src/embedding/openai-compatible-embedding-model.ts
|
|
1474
1492
|
var OpenAICompatibleEmbeddingModel = class {
|
|
@@ -1499,7 +1517,7 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1499
1517
|
}) {
|
|
1500
1518
|
var _a, _b, _c;
|
|
1501
1519
|
const warnings = [];
|
|
1502
|
-
const deprecatedOptions = await (0,
|
|
1520
|
+
const deprecatedOptions = await (0, import_provider_utils6.parseProviderOptions)({
|
|
1503
1521
|
provider: "openai-compatible",
|
|
1504
1522
|
providerOptions,
|
|
1505
1523
|
schema: openaiCompatibleEmbeddingModelOptions
|
|
@@ -1512,12 +1530,12 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1512
1530
|
}
|
|
1513
1531
|
const compatibleOptions = Object.assign(
|
|
1514
1532
|
deprecatedOptions != null ? deprecatedOptions : {},
|
|
1515
|
-
(_a = await (0,
|
|
1533
|
+
(_a = await (0, import_provider_utils6.parseProviderOptions)({
|
|
1516
1534
|
provider: "openaiCompatible",
|
|
1517
1535
|
providerOptions,
|
|
1518
1536
|
schema: openaiCompatibleEmbeddingModelOptions
|
|
1519
1537
|
})) != null ? _a : {},
|
|
1520
|
-
(_b = await (0,
|
|
1538
|
+
(_b = await (0, import_provider_utils6.parseProviderOptions)({
|
|
1521
1539
|
provider: this.providerOptionsName,
|
|
1522
1540
|
providerOptions,
|
|
1523
1541
|
schema: openaiCompatibleEmbeddingModelOptions
|
|
@@ -1535,12 +1553,12 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1535
1553
|
responseHeaders,
|
|
1536
1554
|
value: response,
|
|
1537
1555
|
rawValue
|
|
1538
|
-
} = await (0,
|
|
1556
|
+
} = await (0, import_provider_utils6.postJsonToApi)({
|
|
1539
1557
|
url: this.config.url({
|
|
1540
1558
|
path: "/embeddings",
|
|
1541
1559
|
modelId: this.modelId
|
|
1542
1560
|
}),
|
|
1543
|
-
headers: (0,
|
|
1561
|
+
headers: (0, import_provider_utils6.combineHeaders)(this.config.headers(), headers),
|
|
1544
1562
|
body: {
|
|
1545
1563
|
model: this.modelId,
|
|
1546
1564
|
input: values,
|
|
@@ -1548,10 +1566,10 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1548
1566
|
dimensions: compatibleOptions.dimensions,
|
|
1549
1567
|
user: compatibleOptions.user
|
|
1550
1568
|
},
|
|
1551
|
-
failedResponseHandler: (0,
|
|
1569
|
+
failedResponseHandler: (0, import_provider_utils6.createJsonErrorResponseHandler)(
|
|
1552
1570
|
(_c = this.config.errorStructure) != null ? _c : defaultOpenAICompatibleErrorStructure
|
|
1553
1571
|
),
|
|
1554
|
-
successfulResponseHandler: (0,
|
|
1572
|
+
successfulResponseHandler: (0, import_provider_utils6.createJsonResponseHandler)(
|
|
1555
1573
|
openaiTextEmbeddingResponseSchema
|
|
1556
1574
|
),
|
|
1557
1575
|
abortSignal,
|
|
@@ -1566,15 +1584,19 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1566
1584
|
};
|
|
1567
1585
|
}
|
|
1568
1586
|
};
|
|
1569
|
-
var openaiTextEmbeddingResponseSchema =
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
})
|
|
1587
|
+
var openaiTextEmbeddingResponseSchema = (0, import_provider_utils6.lazySchema)(
|
|
1588
|
+
() => (0, import_provider_utils6.zodSchema)(
|
|
1589
|
+
import_v47.z.object({
|
|
1590
|
+
data: import_v47.z.array(import_v47.z.object({ embedding: import_v47.z.array(import_v47.z.number()) })),
|
|
1591
|
+
usage: import_v47.z.object({ prompt_tokens: import_v47.z.number() }).nullish(),
|
|
1592
|
+
providerMetadata: import_v47.z.record(import_v47.z.string(), import_v47.z.record(import_v47.z.string(), import_v47.z.any())).optional()
|
|
1593
|
+
})
|
|
1594
|
+
)
|
|
1595
|
+
);
|
|
1574
1596
|
|
|
1575
1597
|
// src/image/openai-compatible-image-model.ts
|
|
1576
1598
|
var import_provider6 = require("@ai-sdk/provider");
|
|
1577
|
-
var
|
|
1599
|
+
var import_provider_utils7 = require("@ai-sdk/provider-utils");
|
|
1578
1600
|
var import_v48 = require("zod/v4");
|
|
1579
1601
|
var OpenAICompatibleImageModel = class {
|
|
1580
1602
|
constructor(modelId, config) {
|
|
@@ -1630,12 +1652,12 @@ var OpenAICompatibleImageModel = class {
|
|
|
1630
1652
|
path: isEditing ? "/images/edits" : "/images/generations",
|
|
1631
1653
|
modelId: this.modelId
|
|
1632
1654
|
});
|
|
1633
|
-
const requestHeaders = (0,
|
|
1655
|
+
const requestHeaders = (0, import_provider_utils7.combineHeaders)(this.config.headers(), headers);
|
|
1634
1656
|
if (isEditing) {
|
|
1635
|
-
const { value: response2, responseHeaders: responseHeaders2 } = await (0,
|
|
1657
|
+
const { value: response2, responseHeaders: responseHeaders2 } = await (0, import_provider_utils7.postFormDataToApi)({
|
|
1636
1658
|
url,
|
|
1637
1659
|
headers: requestHeaders,
|
|
1638
|
-
formData: (0,
|
|
1660
|
+
formData: (0, import_provider_utils7.convertToFormData)({
|
|
1639
1661
|
model: this.modelId,
|
|
1640
1662
|
prompt,
|
|
1641
1663
|
image: await Promise.all(files.map((file) => fileToBlob(file))),
|
|
@@ -1644,10 +1666,10 @@ var OpenAICompatibleImageModel = class {
|
|
|
1644
1666
|
size,
|
|
1645
1667
|
...args
|
|
1646
1668
|
}),
|
|
1647
|
-
failedResponseHandler: (0,
|
|
1669
|
+
failedResponseHandler: (0, import_provider_utils7.createJsonErrorResponseHandler)(
|
|
1648
1670
|
(_d = this.config.errorStructure) != null ? _d : defaultOpenAICompatibleErrorStructure
|
|
1649
1671
|
),
|
|
1650
|
-
successfulResponseHandler: (0,
|
|
1672
|
+
successfulResponseHandler: (0, import_provider_utils7.createJsonResponseHandler)(
|
|
1651
1673
|
openaiCompatibleImageResponseSchema
|
|
1652
1674
|
),
|
|
1653
1675
|
abortSignal,
|
|
@@ -1667,7 +1689,7 @@ var OpenAICompatibleImageModel = class {
|
|
|
1667
1689
|
}
|
|
1668
1690
|
};
|
|
1669
1691
|
}
|
|
1670
|
-
const { value: response, responseHeaders } = await (0,
|
|
1692
|
+
const { value: response, responseHeaders } = await (0, import_provider_utils7.postJsonToApi)({
|
|
1671
1693
|
url,
|
|
1672
1694
|
headers: requestHeaders,
|
|
1673
1695
|
body: {
|
|
@@ -1678,10 +1700,10 @@ var OpenAICompatibleImageModel = class {
|
|
|
1678
1700
|
...args,
|
|
1679
1701
|
response_format: "b64_json"
|
|
1680
1702
|
},
|
|
1681
|
-
failedResponseHandler: (0,
|
|
1703
|
+
failedResponseHandler: (0, import_provider_utils7.createJsonErrorResponseHandler)(
|
|
1682
1704
|
(_e = this.config.errorStructure) != null ? _e : defaultOpenAICompatibleErrorStructure
|
|
1683
1705
|
),
|
|
1684
|
-
successfulResponseHandler: (0,
|
|
1706
|
+
successfulResponseHandler: (0, import_provider_utils7.createJsonResponseHandler)(
|
|
1685
1707
|
openaiCompatibleImageResponseSchema
|
|
1686
1708
|
),
|
|
1687
1709
|
abortSignal,
|
|
@@ -1708,7 +1730,7 @@ var OpenAICompatibleImageModel = class {
|
|
|
1708
1730
|
return Promise.all(
|
|
1709
1731
|
data.map(async (image) => {
|
|
1710
1732
|
if (image.b64_json != null) {
|
|
1711
|
-
return (0,
|
|
1733
|
+
return (0, import_provider_utils7.convertBase64ToUint8Array)(image.b64_json);
|
|
1712
1734
|
}
|
|
1713
1735
|
if (image.url == null) {
|
|
1714
1736
|
throw new import_provider6.InvalidResponseDataError({
|
|
@@ -1716,7 +1738,7 @@ var OpenAICompatibleImageModel = class {
|
|
|
1716
1738
|
message: "Expected url in the image response"
|
|
1717
1739
|
});
|
|
1718
1740
|
}
|
|
1719
|
-
const { value } = await (0,
|
|
1741
|
+
const { value } = await (0, import_provider_utils7.getFromApi)({
|
|
1720
1742
|
url: image.url,
|
|
1721
1743
|
validateUrl: true,
|
|
1722
1744
|
trustedOrigin: options.url,
|
|
@@ -1724,47 +1746,51 @@ var OpenAICompatibleImageModel = class {
|
|
|
1724
1746
|
headers: options.headers,
|
|
1725
1747
|
abortSignal: options.abortSignal,
|
|
1726
1748
|
fetch: this.config.fetch,
|
|
1727
|
-
successfulResponseHandler: (0,
|
|
1728
|
-
failedResponseHandler: (0,
|
|
1749
|
+
successfulResponseHandler: (0, import_provider_utils7.createBinaryResponseHandler)(),
|
|
1750
|
+
failedResponseHandler: (0, import_provider_utils7.createStatusCodeErrorResponseHandler)()
|
|
1729
1751
|
});
|
|
1730
1752
|
return value;
|
|
1731
1753
|
})
|
|
1732
1754
|
);
|
|
1733
1755
|
}
|
|
1734
1756
|
};
|
|
1735
|
-
var openaiCompatibleImageResponseSchema =
|
|
1736
|
-
|
|
1757
|
+
var openaiCompatibleImageResponseSchema = (0, import_provider_utils7.lazySchema)(
|
|
1758
|
+
() => (0, import_provider_utils7.zodSchema)(
|
|
1737
1759
|
import_v48.z.object({
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1760
|
+
data: import_v48.z.array(
|
|
1761
|
+
import_v48.z.object({
|
|
1762
|
+
b64_json: import_v48.z.string().nullish(),
|
|
1763
|
+
url: import_v48.z.string().nullish()
|
|
1764
|
+
}).refine((image) => image.b64_json != null || image.url != null, {
|
|
1765
|
+
message: "Expected b64_json or url in the image response"
|
|
1766
|
+
})
|
|
1767
|
+
)
|
|
1742
1768
|
})
|
|
1743
1769
|
)
|
|
1744
|
-
|
|
1770
|
+
);
|
|
1745
1771
|
async function fileToBlob(file) {
|
|
1746
1772
|
if (file.type === "url") {
|
|
1747
|
-
return (0,
|
|
1773
|
+
return (0, import_provider_utils7.downloadBlob)(file.url);
|
|
1748
1774
|
}
|
|
1749
|
-
const data = file.data instanceof Uint8Array ? file.data : (0,
|
|
1775
|
+
const data = file.data instanceof Uint8Array ? file.data : (0, import_provider_utils7.convertBase64ToUint8Array)(file.data);
|
|
1750
1776
|
return new Blob([data], { type: file.mediaType });
|
|
1751
1777
|
}
|
|
1752
1778
|
|
|
1753
1779
|
// src/openai-compatible-provider.ts
|
|
1754
|
-
var
|
|
1780
|
+
var import_provider_utils8 = require("@ai-sdk/provider-utils");
|
|
1755
1781
|
|
|
1756
1782
|
// src/version.ts
|
|
1757
|
-
var VERSION = true ? "2.0.
|
|
1783
|
+
var VERSION = true ? "2.0.87" : "0.0.0-test";
|
|
1758
1784
|
|
|
1759
1785
|
// src/openai-compatible-provider.ts
|
|
1760
1786
|
function createOpenAICompatible(options) {
|
|
1761
|
-
const baseURL = (0,
|
|
1787
|
+
const baseURL = (0, import_provider_utils8.withoutTrailingSlash)(options.baseURL);
|
|
1762
1788
|
const providerName = options.name;
|
|
1763
1789
|
const headers = {
|
|
1764
1790
|
...options.apiKey && { Authorization: `Bearer ${options.apiKey}` },
|
|
1765
1791
|
...options.headers
|
|
1766
1792
|
};
|
|
1767
|
-
const getHeaders = () => (0,
|
|
1793
|
+
const getHeaders = () => (0, import_provider_utils8.withUserAgentSuffix)(headers, `ai-sdk/openai-compatible/${VERSION}`);
|
|
1768
1794
|
const getCommonModelConfig = (modelType) => ({
|
|
1769
1795
|
provider: `${providerName}.${modelType}`,
|
|
1770
1796
|
url: ({ path }) => {
|