@ai-sdk/openai-compatible 2.0.13 → 2.0.15
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 +12 -0
- package/dist/index.js +88 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +88 -8
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +18 -4
- package/dist/internal/index.d.ts +18 -4
- package/dist/internal/index.js +59 -4
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +59 -4
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ai-sdk/openai-compatible
|
|
2
2
|
|
|
3
|
+
## 2.0.15
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7116ef3: Use consistent camelCase `openaiCompatible` key for providerOptions. The kebab-case `openai-compatible` key is now deprecated but still supported with a console warning.
|
|
8
|
+
|
|
9
|
+
## 2.0.14
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 1612a57: feat(openai-compat): support passing multiple file types
|
|
14
|
+
|
|
3
15
|
## 2.0.13
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -98,6 +98,17 @@ function getOpenAIMetadata(message) {
|
|
|
98
98
|
var _a, _b;
|
|
99
99
|
return (_b = (_a = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a.openaiCompatible) != null ? _b : {};
|
|
100
100
|
}
|
|
101
|
+
function getAudioFormat(mediaType) {
|
|
102
|
+
switch (mediaType) {
|
|
103
|
+
case "audio/wav":
|
|
104
|
+
return "wav";
|
|
105
|
+
case "audio/mp3":
|
|
106
|
+
case "audio/mpeg":
|
|
107
|
+
return "mp3";
|
|
108
|
+
default:
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
101
112
|
function convertToOpenAICompatibleChatMessages(prompt) {
|
|
102
113
|
var _a, _b, _c;
|
|
103
114
|
const messages = [];
|
|
@@ -120,6 +131,7 @@ function convertToOpenAICompatibleChatMessages(prompt) {
|
|
|
120
131
|
messages.push({
|
|
121
132
|
role: "user",
|
|
122
133
|
content: content.map((part) => {
|
|
134
|
+
var _a2;
|
|
123
135
|
const partMetadata = getOpenAIMetadata(part);
|
|
124
136
|
switch (part.type) {
|
|
125
137
|
case "text": {
|
|
@@ -135,11 +147,54 @@ function convertToOpenAICompatibleChatMessages(prompt) {
|
|
|
135
147
|
},
|
|
136
148
|
...partMetadata
|
|
137
149
|
};
|
|
138
|
-
} else {
|
|
139
|
-
throw new import_provider.UnsupportedFunctionalityError({
|
|
140
|
-
functionality: `file part media type ${part.mediaType}`
|
|
141
|
-
});
|
|
142
150
|
}
|
|
151
|
+
if (part.mediaType.startsWith("audio/")) {
|
|
152
|
+
if (part.data instanceof URL) {
|
|
153
|
+
throw new import_provider.UnsupportedFunctionalityError({
|
|
154
|
+
functionality: "audio file parts with URLs"
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const format = getAudioFormat(part.mediaType);
|
|
158
|
+
if (format === null) {
|
|
159
|
+
throw new import_provider.UnsupportedFunctionalityError({
|
|
160
|
+
functionality: `audio media type ${part.mediaType}`
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
type: "input_audio",
|
|
165
|
+
input_audio: {
|
|
166
|
+
data: (0, import_provider_utils.convertToBase64)(part.data),
|
|
167
|
+
format
|
|
168
|
+
},
|
|
169
|
+
...partMetadata
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
if (part.mediaType === "application/pdf") {
|
|
173
|
+
if (part.data instanceof URL) {
|
|
174
|
+
throw new import_provider.UnsupportedFunctionalityError({
|
|
175
|
+
functionality: "PDF file parts with URLs"
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
type: "file",
|
|
180
|
+
file: {
|
|
181
|
+
filename: (_a2 = part.filename) != null ? _a2 : "document.pdf",
|
|
182
|
+
file_data: `data:application/pdf;base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
|
|
183
|
+
},
|
|
184
|
+
...partMetadata
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (part.mediaType.startsWith("text/")) {
|
|
188
|
+
const textContent = part.data instanceof URL ? part.data.toString() : typeof part.data === "string" ? part.data : new TextDecoder().decode(part.data);
|
|
189
|
+
return {
|
|
190
|
+
type: "text",
|
|
191
|
+
text: textContent,
|
|
192
|
+
...partMetadata
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
throw new import_provider.UnsupportedFunctionalityError({
|
|
196
|
+
functionality: `file part media type ${part.mediaType}`
|
|
197
|
+
});
|
|
143
198
|
}
|
|
144
199
|
}
|
|
145
200
|
}),
|
|
@@ -387,9 +442,21 @@ var OpenAICompatibleChatLanguageModel = class {
|
|
|
387
442
|
}) {
|
|
388
443
|
var _a, _b, _c, _d, _e;
|
|
389
444
|
const warnings = [];
|
|
445
|
+
const deprecatedOptions = await (0, import_provider_utils2.parseProviderOptions)({
|
|
446
|
+
provider: "openai-compatible",
|
|
447
|
+
providerOptions,
|
|
448
|
+
schema: openaiCompatibleProviderOptions
|
|
449
|
+
});
|
|
450
|
+
if (deprecatedOptions != null) {
|
|
451
|
+
warnings.push({
|
|
452
|
+
type: "other",
|
|
453
|
+
message: `The 'openai-compatible' key in providerOptions is deprecated. Use 'openaiCompatible' instead.`
|
|
454
|
+
});
|
|
455
|
+
}
|
|
390
456
|
const compatibleOptions = Object.assign(
|
|
457
|
+
deprecatedOptions != null ? deprecatedOptions : {},
|
|
391
458
|
(_a = await (0, import_provider_utils2.parseProviderOptions)({
|
|
392
|
-
provider: "
|
|
459
|
+
provider: "openaiCompatible",
|
|
393
460
|
providerOptions,
|
|
394
461
|
schema: openaiCompatibleProviderOptions
|
|
395
462
|
})) != null ? _a : {},
|
|
@@ -1375,9 +1442,22 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1375
1442
|
providerOptions
|
|
1376
1443
|
}) {
|
|
1377
1444
|
var _a, _b, _c;
|
|
1445
|
+
const warnings = [];
|
|
1446
|
+
const deprecatedOptions = await (0, import_provider_utils4.parseProviderOptions)({
|
|
1447
|
+
provider: "openai-compatible",
|
|
1448
|
+
providerOptions,
|
|
1449
|
+
schema: openaiCompatibleEmbeddingProviderOptions
|
|
1450
|
+
});
|
|
1451
|
+
if (deprecatedOptions != null) {
|
|
1452
|
+
warnings.push({
|
|
1453
|
+
type: "other",
|
|
1454
|
+
message: `The 'openai-compatible' key in providerOptions is deprecated. Use 'openaiCompatible' instead.`
|
|
1455
|
+
});
|
|
1456
|
+
}
|
|
1378
1457
|
const compatibleOptions = Object.assign(
|
|
1458
|
+
deprecatedOptions != null ? deprecatedOptions : {},
|
|
1379
1459
|
(_a = await (0, import_provider_utils4.parseProviderOptions)({
|
|
1380
|
-
provider: "
|
|
1460
|
+
provider: "openaiCompatible",
|
|
1381
1461
|
providerOptions,
|
|
1382
1462
|
schema: openaiCompatibleEmbeddingProviderOptions
|
|
1383
1463
|
})) != null ? _a : {},
|
|
@@ -1422,7 +1502,7 @@ var OpenAICompatibleEmbeddingModel = class {
|
|
|
1422
1502
|
fetch: this.config.fetch
|
|
1423
1503
|
});
|
|
1424
1504
|
return {
|
|
1425
|
-
warnings
|
|
1505
|
+
warnings,
|
|
1426
1506
|
embeddings: response.data.map((item) => item.embedding),
|
|
1427
1507
|
usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,
|
|
1428
1508
|
providerMetadata: response.providerMetadata,
|
|
@@ -1558,7 +1638,7 @@ async function fileToBlob(file) {
|
|
|
1558
1638
|
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
|
1559
1639
|
|
|
1560
1640
|
// src/version.ts
|
|
1561
|
-
var VERSION = true ? "2.0.
|
|
1641
|
+
var VERSION = true ? "2.0.15" : "0.0.0-test";
|
|
1562
1642
|
|
|
1563
1643
|
// src/openai-compatible-provider.ts
|
|
1564
1644
|
function createOpenAICompatible(options) {
|