@zenning/ai 5.3.2 → 6.0.13
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 +1501 -362
- package/LICENSE +13 -0
- package/README.md +26 -21
- package/dist/index.d.mts +3579 -2691
- package/dist/index.d.ts +3579 -2691
- package/dist/index.js +5243 -3804
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5235 -3810
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +106 -9
- package/dist/internal/index.d.ts +106 -9
- package/dist/internal/index.js +321 -174
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +295 -147
- package/dist/internal/index.mjs.map +1 -1
- package/dist/test/index.d.mts +54 -38
- package/dist/test/index.d.ts +54 -38
- package/dist/test/index.js +48 -14
- package/dist/test/index.js.map +1 -1
- package/dist/test/index.mjs +45 -12
- package/dist/test/index.mjs.map +1 -1
- package/package.json +27 -31
- package/dist/mcp-stdio/index.d.mts +0 -89
- package/dist/mcp-stdio/index.d.ts +0 -89
- package/dist/mcp-stdio/index.js +0 -349
- package/dist/mcp-stdio/index.js.map +0 -1
- package/dist/mcp-stdio/index.mjs +0 -322
- package/dist/mcp-stdio/index.mjs.map +0 -1
- package/mcp-stdio.d.ts +0 -1
package/dist/internal/index.js
CHANGED
|
@@ -4,8 +4,8 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
6
|
var __export = (target, all) => {
|
|
7
|
-
for (var
|
|
8
|
-
__defProp(target,
|
|
7
|
+
for (var name4 in all)
|
|
8
|
+
__defProp(target, name4, { get: all[name4], enumerable: true });
|
|
9
9
|
};
|
|
10
10
|
var __copyProps = (to, from, except, desc) => {
|
|
11
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
@@ -20,7 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// internal/index.ts
|
|
21
21
|
var internal_exports = {};
|
|
22
22
|
__export(internal_exports, {
|
|
23
|
-
|
|
23
|
+
asLanguageModelUsage: () => asLanguageModelUsage,
|
|
24
|
+
convertAsyncIteratorToReadableStream: () => import_provider_utils9.convertAsyncIteratorToReadableStream,
|
|
24
25
|
convertToLanguageModelPrompt: () => convertToLanguageModelPrompt,
|
|
25
26
|
prepareCallSettings: () => prepareCallSettings,
|
|
26
27
|
prepareRetries: () => prepareRetries,
|
|
@@ -28,10 +29,10 @@ __export(internal_exports, {
|
|
|
28
29
|
standardizePrompt: () => standardizePrompt
|
|
29
30
|
});
|
|
30
31
|
module.exports = __toCommonJS(internal_exports);
|
|
31
|
-
var
|
|
32
|
+
var import_provider_utils9 = require("@zenning/provider-utils");
|
|
32
33
|
|
|
33
34
|
// src/prompt/convert-to-language-model-prompt.ts
|
|
34
|
-
var
|
|
35
|
+
var import_provider_utils5 = require("@zenning/provider-utils");
|
|
35
36
|
|
|
36
37
|
// src/util/detect-media-type.ts
|
|
37
38
|
var import_provider_utils = require("@zenning/provider-utils");
|
|
@@ -147,52 +148,27 @@ function detectMediaType({
|
|
|
147
148
|
return void 0;
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
// src/util/download/download-error.ts
|
|
151
|
-
var import_provider = require("@zenning/provider");
|
|
152
|
-
var name = "AI_DownloadError";
|
|
153
|
-
var marker = `vercel.ai.error.${name}`;
|
|
154
|
-
var symbol = Symbol.for(marker);
|
|
155
|
-
var _a;
|
|
156
|
-
var DownloadError = class extends import_provider.AISDKError {
|
|
157
|
-
constructor({
|
|
158
|
-
url,
|
|
159
|
-
statusCode,
|
|
160
|
-
statusText,
|
|
161
|
-
cause,
|
|
162
|
-
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
|
163
|
-
}) {
|
|
164
|
-
super({ name, message, cause });
|
|
165
|
-
this[_a] = true;
|
|
166
|
-
this.url = url;
|
|
167
|
-
this.statusCode = statusCode;
|
|
168
|
-
this.statusText = statusText;
|
|
169
|
-
}
|
|
170
|
-
static isInstance(error) {
|
|
171
|
-
return import_provider.AISDKError.hasMarker(error, marker);
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
_a = symbol;
|
|
175
|
-
|
|
176
151
|
// src/util/download/download.ts
|
|
177
152
|
var import_provider_utils2 = require("@zenning/provider-utils");
|
|
153
|
+
var import_provider_utils3 = require("@zenning/provider-utils");
|
|
178
154
|
|
|
179
155
|
// src/version.ts
|
|
180
|
-
var VERSION = true ? "
|
|
156
|
+
var VERSION = true ? "6.0.13" : "0.0.0-test";
|
|
181
157
|
|
|
182
158
|
// src/util/download/download.ts
|
|
183
159
|
var download = async ({ url }) => {
|
|
184
|
-
var
|
|
160
|
+
var _a4;
|
|
185
161
|
const urlText = url.toString();
|
|
186
162
|
try {
|
|
187
163
|
const response = await fetch(urlText, {
|
|
188
|
-
headers: (0,
|
|
164
|
+
headers: (0, import_provider_utils3.withUserAgentSuffix)(
|
|
189
165
|
{},
|
|
190
166
|
`ai-sdk/${VERSION}`,
|
|
191
|
-
(0,
|
|
167
|
+
(0, import_provider_utils3.getRuntimeEnvironmentUserAgent)()
|
|
192
168
|
)
|
|
193
169
|
});
|
|
194
170
|
if (!response.ok) {
|
|
195
|
-
throw new DownloadError({
|
|
171
|
+
throw new import_provider_utils2.DownloadError({
|
|
196
172
|
url: urlText,
|
|
197
173
|
statusCode: response.status,
|
|
198
174
|
statusText: response.statusText
|
|
@@ -200,13 +176,13 @@ var download = async ({ url }) => {
|
|
|
200
176
|
}
|
|
201
177
|
return {
|
|
202
178
|
data: new Uint8Array(await response.arrayBuffer()),
|
|
203
|
-
mediaType: (
|
|
179
|
+
mediaType: (_a4 = response.headers.get("content-type")) != null ? _a4 : void 0
|
|
204
180
|
};
|
|
205
181
|
} catch (error) {
|
|
206
|
-
if (DownloadError.isInstance(error)) {
|
|
182
|
+
if (import_provider_utils2.DownloadError.isInstance(error)) {
|
|
207
183
|
throw error;
|
|
208
184
|
}
|
|
209
|
-
throw new DownloadError({ url: urlText, cause: error });
|
|
185
|
+
throw new import_provider_utils2.DownloadError({ url: urlText, cause: error });
|
|
210
186
|
}
|
|
211
187
|
};
|
|
212
188
|
|
|
@@ -218,8 +194,8 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
|
|
|
218
194
|
);
|
|
219
195
|
|
|
220
196
|
// src/prompt/data-content.ts
|
|
221
|
-
var
|
|
222
|
-
var
|
|
197
|
+
var import_provider = require("@zenning/provider");
|
|
198
|
+
var import_provider_utils4 = require("@zenning/provider-utils");
|
|
223
199
|
var import_v4 = require("zod/v4");
|
|
224
200
|
|
|
225
201
|
// src/prompt/split-data-url.ts
|
|
@@ -246,8 +222,8 @@ var dataContentSchema = import_v4.z.union([
|
|
|
246
222
|
import_v4.z.custom(
|
|
247
223
|
// Buffer might not be available in some environments such as CloudFlare:
|
|
248
224
|
(value) => {
|
|
249
|
-
var
|
|
250
|
-
return (_b = (
|
|
225
|
+
var _a4, _b;
|
|
226
|
+
return (_b = (_a4 = globalThis.Buffer) == null ? void 0 : _a4.isBuffer(value)) != null ? _b : false;
|
|
251
227
|
},
|
|
252
228
|
{ message: "Must be a Buffer" }
|
|
253
229
|
)
|
|
@@ -270,7 +246,7 @@ function convertToLanguageModelV3DataContent(content) {
|
|
|
270
246
|
content.toString()
|
|
271
247
|
);
|
|
272
248
|
if (dataUrlMediaType == null || base64Content == null) {
|
|
273
|
-
throw new
|
|
249
|
+
throw new import_provider.AISDKError({
|
|
274
250
|
name: "InvalidDataContentError",
|
|
275
251
|
message: `Invalid data URL format in content ${content.toString()}`
|
|
276
252
|
});
|
|
@@ -281,25 +257,30 @@ function convertToLanguageModelV3DataContent(content) {
|
|
|
281
257
|
}
|
|
282
258
|
|
|
283
259
|
// src/prompt/invalid-message-role-error.ts
|
|
284
|
-
var
|
|
285
|
-
var
|
|
286
|
-
var
|
|
287
|
-
var
|
|
288
|
-
var
|
|
289
|
-
var InvalidMessageRoleError = class extends
|
|
260
|
+
var import_provider2 = require("@zenning/provider");
|
|
261
|
+
var name = "AI_InvalidMessageRoleError";
|
|
262
|
+
var marker = `vercel.ai.error.${name}`;
|
|
263
|
+
var symbol = Symbol.for(marker);
|
|
264
|
+
var _a;
|
|
265
|
+
var InvalidMessageRoleError = class extends import_provider2.AISDKError {
|
|
290
266
|
constructor({
|
|
291
267
|
role,
|
|
292
268
|
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
|
293
269
|
}) {
|
|
294
|
-
super({ name
|
|
295
|
-
this[
|
|
270
|
+
super({ name, message });
|
|
271
|
+
this[_a] = true;
|
|
296
272
|
this.role = role;
|
|
297
273
|
}
|
|
298
274
|
static isInstance(error) {
|
|
299
|
-
return
|
|
275
|
+
return import_provider2.AISDKError.hasMarker(error, marker);
|
|
300
276
|
}
|
|
301
277
|
};
|
|
302
|
-
|
|
278
|
+
_a = symbol;
|
|
279
|
+
|
|
280
|
+
// src/util/as-array.ts
|
|
281
|
+
function asArray(value) {
|
|
282
|
+
return value === void 0 ? [] : Array.isArray(value) ? value : [value];
|
|
283
|
+
}
|
|
303
284
|
|
|
304
285
|
// src/prompt/convert-to-language-model-prompt.ts
|
|
305
286
|
async function convertToLanguageModelPrompt({
|
|
@@ -312,12 +293,30 @@ async function convertToLanguageModelPrompt({
|
|
|
312
293
|
download2,
|
|
313
294
|
supportedUrls
|
|
314
295
|
);
|
|
315
|
-
|
|
316
|
-
...prompt.system != null ? [{ role: "system", content: prompt.system }] :
|
|
296
|
+
const messages = [
|
|
297
|
+
...prompt.system != null ? typeof prompt.system === "string" ? [{ role: "system", content: prompt.system }] : asArray(prompt.system).map((message) => ({
|
|
298
|
+
role: "system",
|
|
299
|
+
content: message.content,
|
|
300
|
+
providerOptions: message.providerOptions
|
|
301
|
+
})) : [],
|
|
317
302
|
...prompt.messages.map(
|
|
318
303
|
(message) => convertToLanguageModelMessage({ message, downloadedAssets })
|
|
319
304
|
)
|
|
320
305
|
];
|
|
306
|
+
const combinedMessages = [];
|
|
307
|
+
for (const message of messages) {
|
|
308
|
+
if (message.role !== "tool") {
|
|
309
|
+
combinedMessages.push(message);
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
const lastCombinedMessage = combinedMessages.at(-1);
|
|
313
|
+
if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === "tool") {
|
|
314
|
+
lastCombinedMessage.content.push(...message.content);
|
|
315
|
+
} else {
|
|
316
|
+
combinedMessages.push(message);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return combinedMessages;
|
|
321
320
|
}
|
|
322
321
|
function convertToLanguageModelMessage({
|
|
323
322
|
message,
|
|
@@ -359,6 +358,8 @@ function convertToLanguageModelMessage({
|
|
|
359
358
|
content: message.content.filter(
|
|
360
359
|
// remove empty text parts (no text, and no provider options):
|
|
361
360
|
(part) => part.type !== "text" || part.text !== "" || part.providerOptions != null
|
|
361
|
+
).filter(
|
|
362
|
+
(part) => part.type !== "tool-approval-request"
|
|
362
363
|
).map((part) => {
|
|
363
364
|
const providerOptions = part.providerOptions;
|
|
364
365
|
switch (part.type) {
|
|
@@ -403,7 +404,7 @@ function convertToLanguageModelMessage({
|
|
|
403
404
|
type: "tool-result",
|
|
404
405
|
toolCallId: part.toolCallId,
|
|
405
406
|
toolName: part.toolName,
|
|
406
|
-
output: part.output,
|
|
407
|
+
output: mapToolResultOutput(part.output),
|
|
407
408
|
providerOptions
|
|
408
409
|
};
|
|
409
410
|
}
|
|
@@ -415,13 +416,30 @@ function convertToLanguageModelMessage({
|
|
|
415
416
|
case "tool": {
|
|
416
417
|
return {
|
|
417
418
|
role: "tool",
|
|
418
|
-
content: message.content.
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
419
|
+
content: message.content.filter(
|
|
420
|
+
// Only include tool-approval-response for provider-executed tools
|
|
421
|
+
(part) => part.type !== "tool-approval-response" || part.providerExecuted
|
|
422
|
+
).map((part) => {
|
|
423
|
+
switch (part.type) {
|
|
424
|
+
case "tool-result": {
|
|
425
|
+
return {
|
|
426
|
+
type: "tool-result",
|
|
427
|
+
toolCallId: part.toolCallId,
|
|
428
|
+
toolName: part.toolName,
|
|
429
|
+
output: mapToolResultOutput(part.output),
|
|
430
|
+
providerOptions: part.providerOptions
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
case "tool-approval-response": {
|
|
434
|
+
return {
|
|
435
|
+
type: "tool-approval-response",
|
|
436
|
+
approvalId: part.approvalId,
|
|
437
|
+
approved: part.approved,
|
|
438
|
+
reason: part.reason
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}),
|
|
425
443
|
providerOptions: message.providerOptions
|
|
426
444
|
};
|
|
427
445
|
}
|
|
@@ -437,8 +455,8 @@ async function downloadAssets(messages, download2, supportedUrls) {
|
|
|
437
455
|
).flat().filter(
|
|
438
456
|
(part) => part.type === "image" || part.type === "file"
|
|
439
457
|
).map((part) => {
|
|
440
|
-
var
|
|
441
|
-
const mediaType = (
|
|
458
|
+
var _a4;
|
|
459
|
+
const mediaType = (_a4 = part.mediaType) != null ? _a4 : part.type === "image" ? "image/*" : void 0;
|
|
442
460
|
let data = part.type === "image" ? part.image : part.data;
|
|
443
461
|
if (typeof data === "string") {
|
|
444
462
|
try {
|
|
@@ -451,7 +469,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
|
|
|
451
469
|
(part) => part.data instanceof URL
|
|
452
470
|
).map((part) => ({
|
|
453
471
|
url: part.data,
|
|
454
|
-
isUrlSupportedByModel: part.mediaType != null && (0,
|
|
472
|
+
isUrlSupportedByModel: part.mediaType != null && (0, import_provider_utils5.isUrlSupported)({
|
|
455
473
|
url: part.data.toString(),
|
|
456
474
|
mediaType: part.mediaType,
|
|
457
475
|
supportedUrls
|
|
@@ -468,7 +486,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
|
|
|
468
486
|
);
|
|
469
487
|
}
|
|
470
488
|
function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
471
|
-
var
|
|
489
|
+
var _a4;
|
|
472
490
|
if (part.type === "text") {
|
|
473
491
|
return {
|
|
474
492
|
type: "text",
|
|
@@ -501,7 +519,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
|
501
519
|
switch (type) {
|
|
502
520
|
case "image": {
|
|
503
521
|
if (data instanceof Uint8Array || typeof data === "string") {
|
|
504
|
-
mediaType = (
|
|
522
|
+
mediaType = (_a4 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a4 : mediaType;
|
|
505
523
|
}
|
|
506
524
|
return {
|
|
507
525
|
type: "file",
|
|
@@ -526,9 +544,34 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
|
526
544
|
}
|
|
527
545
|
}
|
|
528
546
|
}
|
|
547
|
+
function mapToolResultOutput(output) {
|
|
548
|
+
if (output.type !== "content") {
|
|
549
|
+
return output;
|
|
550
|
+
}
|
|
551
|
+
return {
|
|
552
|
+
type: "content",
|
|
553
|
+
value: output.value.map((item) => {
|
|
554
|
+
if (item.type !== "media") {
|
|
555
|
+
return item;
|
|
556
|
+
}
|
|
557
|
+
if (item.mediaType.startsWith("image/")) {
|
|
558
|
+
return {
|
|
559
|
+
type: "image-data",
|
|
560
|
+
data: item.data,
|
|
561
|
+
mediaType: item.mediaType
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
return {
|
|
565
|
+
type: "file-data",
|
|
566
|
+
data: item.data,
|
|
567
|
+
mediaType: item.mediaType
|
|
568
|
+
};
|
|
569
|
+
})
|
|
570
|
+
};
|
|
571
|
+
}
|
|
529
572
|
|
|
530
573
|
// src/prompt/prepare-tools-and-tool-choice.ts
|
|
531
|
-
var
|
|
574
|
+
var import_provider_utils6 = require("@zenning/provider-utils");
|
|
532
575
|
|
|
533
576
|
// src/util/is-non-empty-object.ts
|
|
534
577
|
function isNonEmptyObject(object) {
|
|
@@ -536,7 +579,7 @@ function isNonEmptyObject(object) {
|
|
|
536
579
|
}
|
|
537
580
|
|
|
538
581
|
// src/prompt/prepare-tools-and-tool-choice.ts
|
|
539
|
-
function prepareToolsAndToolChoice({
|
|
582
|
+
async function prepareToolsAndToolChoice({
|
|
540
583
|
tools,
|
|
541
584
|
toolChoice,
|
|
542
585
|
activeTools
|
|
@@ -548,42 +591,48 @@ function prepareToolsAndToolChoice({
|
|
|
548
591
|
};
|
|
549
592
|
}
|
|
550
593
|
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
|
551
|
-
([
|
|
594
|
+
([name4]) => activeTools.includes(name4)
|
|
552
595
|
) : Object.entries(tools);
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
596
|
+
const languageModelTools = [];
|
|
597
|
+
for (const [name4, tool] of filteredTools) {
|
|
598
|
+
const toolType = tool.type;
|
|
599
|
+
switch (toolType) {
|
|
600
|
+
case void 0:
|
|
601
|
+
case "dynamic":
|
|
602
|
+
case "function":
|
|
603
|
+
languageModelTools.push({
|
|
604
|
+
type: "function",
|
|
605
|
+
name: name4,
|
|
606
|
+
description: tool.description,
|
|
607
|
+
inputSchema: await (0, import_provider_utils6.asSchema)(tool.inputSchema).jsonSchema,
|
|
608
|
+
...tool.inputExamples != null ? { inputExamples: tool.inputExamples } : {},
|
|
609
|
+
providerOptions: tool.providerOptions,
|
|
610
|
+
...tool.strict != null ? { strict: tool.strict } : {}
|
|
611
|
+
});
|
|
612
|
+
break;
|
|
613
|
+
case "provider":
|
|
614
|
+
languageModelTools.push({
|
|
615
|
+
type: "provider",
|
|
616
|
+
name: name4,
|
|
617
|
+
id: tool.id,
|
|
618
|
+
args: tool.args
|
|
619
|
+
});
|
|
620
|
+
break;
|
|
621
|
+
default: {
|
|
622
|
+
const exhaustiveCheck = toolType;
|
|
623
|
+
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
|
578
624
|
}
|
|
579
|
-
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
return {
|
|
628
|
+
tools: languageModelTools,
|
|
580
629
|
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
|
581
630
|
};
|
|
582
631
|
}
|
|
583
632
|
|
|
584
633
|
// src/prompt/standardize-prompt.ts
|
|
585
|
-
var
|
|
586
|
-
var
|
|
634
|
+
var import_provider3 = require("@zenning/provider");
|
|
635
|
+
var import_provider_utils7 = require("@zenning/provider-utils");
|
|
587
636
|
var import_v46 = require("zod/v4");
|
|
588
637
|
|
|
589
638
|
// src/prompt/message.ts
|
|
@@ -600,7 +649,7 @@ var jsonValueSchema = import_v42.z.lazy(
|
|
|
600
649
|
import_v42.z.string(),
|
|
601
650
|
import_v42.z.number(),
|
|
602
651
|
import_v42.z.boolean(),
|
|
603
|
-
import_v42.z.record(import_v42.z.string(), jsonValueSchema),
|
|
652
|
+
import_v42.z.record(import_v42.z.string(), jsonValueSchema.optional()),
|
|
604
653
|
import_v42.z.array(jsonValueSchema)
|
|
605
654
|
])
|
|
606
655
|
);
|
|
@@ -608,7 +657,7 @@ var jsonValueSchema = import_v42.z.lazy(
|
|
|
608
657
|
// src/types/provider-metadata.ts
|
|
609
658
|
var providerMetadataSchema = import_v43.z.record(
|
|
610
659
|
import_v43.z.string(),
|
|
611
|
-
import_v43.z.record(import_v43.z.string(), jsonValueSchema)
|
|
660
|
+
import_v43.z.record(import_v43.z.string(), jsonValueSchema.optional())
|
|
612
661
|
);
|
|
613
662
|
|
|
614
663
|
// src/prompt/content-part.ts
|
|
@@ -636,6 +685,11 @@ var reasoningPartSchema = import_v44.z.object({
|
|
|
636
685
|
text: import_v44.z.string(),
|
|
637
686
|
providerOptions: providerMetadataSchema.optional()
|
|
638
687
|
});
|
|
688
|
+
var compactionPartSchema = import_v44.z.object({
|
|
689
|
+
type: import_v44.z.literal("compaction"),
|
|
690
|
+
encrypted_content: import_v44.z.string(),
|
|
691
|
+
providerOptions: providerMetadataSchema.optional()
|
|
692
|
+
});
|
|
639
693
|
var toolCallPartSchema = import_v44.z.object({
|
|
640
694
|
type: import_v44.z.literal("tool-call"),
|
|
641
695
|
toolCallId: import_v44.z.string(),
|
|
@@ -644,40 +698,90 @@ var toolCallPartSchema = import_v44.z.object({
|
|
|
644
698
|
providerOptions: providerMetadataSchema.optional(),
|
|
645
699
|
providerExecuted: import_v44.z.boolean().optional()
|
|
646
700
|
});
|
|
647
|
-
var outputSchema = import_v44.z.discriminatedUnion(
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
import_v44.z.
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
701
|
+
var outputSchema = import_v44.z.discriminatedUnion(
|
|
702
|
+
"type",
|
|
703
|
+
[
|
|
704
|
+
import_v44.z.object({
|
|
705
|
+
type: import_v44.z.literal("text"),
|
|
706
|
+
value: import_v44.z.string(),
|
|
707
|
+
providerOptions: providerMetadataSchema.optional()
|
|
708
|
+
}),
|
|
709
|
+
import_v44.z.object({
|
|
710
|
+
type: import_v44.z.literal("json"),
|
|
711
|
+
value: jsonValueSchema,
|
|
712
|
+
providerOptions: providerMetadataSchema.optional()
|
|
713
|
+
}),
|
|
714
|
+
import_v44.z.object({
|
|
715
|
+
type: import_v44.z.literal("execution-denied"),
|
|
716
|
+
reason: import_v44.z.string().optional(),
|
|
717
|
+
providerOptions: providerMetadataSchema.optional()
|
|
718
|
+
}),
|
|
719
|
+
import_v44.z.object({
|
|
720
|
+
type: import_v44.z.literal("error-text"),
|
|
721
|
+
value: import_v44.z.string(),
|
|
722
|
+
providerOptions: providerMetadataSchema.optional()
|
|
723
|
+
}),
|
|
724
|
+
import_v44.z.object({
|
|
725
|
+
type: import_v44.z.literal("error-json"),
|
|
726
|
+
value: jsonValueSchema,
|
|
727
|
+
providerOptions: providerMetadataSchema.optional()
|
|
728
|
+
}),
|
|
729
|
+
import_v44.z.object({
|
|
730
|
+
type: import_v44.z.literal("content"),
|
|
731
|
+
value: import_v44.z.array(
|
|
732
|
+
import_v44.z.union([
|
|
733
|
+
import_v44.z.object({
|
|
734
|
+
type: import_v44.z.literal("text"),
|
|
735
|
+
text: import_v44.z.string(),
|
|
736
|
+
providerOptions: providerMetadataSchema.optional()
|
|
737
|
+
}),
|
|
738
|
+
import_v44.z.object({
|
|
739
|
+
type: import_v44.z.literal("media"),
|
|
740
|
+
data: import_v44.z.string(),
|
|
741
|
+
mediaType: import_v44.z.string()
|
|
742
|
+
}),
|
|
743
|
+
import_v44.z.object({
|
|
744
|
+
type: import_v44.z.literal("file-data"),
|
|
745
|
+
data: import_v44.z.string(),
|
|
746
|
+
mediaType: import_v44.z.string(),
|
|
747
|
+
filename: import_v44.z.string().optional(),
|
|
748
|
+
providerOptions: providerMetadataSchema.optional()
|
|
749
|
+
}),
|
|
750
|
+
import_v44.z.object({
|
|
751
|
+
type: import_v44.z.literal("file-url"),
|
|
752
|
+
url: import_v44.z.string(),
|
|
753
|
+
providerOptions: providerMetadataSchema.optional()
|
|
754
|
+
}),
|
|
755
|
+
import_v44.z.object({
|
|
756
|
+
type: import_v44.z.literal("file-id"),
|
|
757
|
+
fileId: import_v44.z.union([import_v44.z.string(), import_v44.z.record(import_v44.z.string(), import_v44.z.string())]),
|
|
758
|
+
providerOptions: providerMetadataSchema.optional()
|
|
759
|
+
}),
|
|
760
|
+
import_v44.z.object({
|
|
761
|
+
type: import_v44.z.literal("image-data"),
|
|
762
|
+
data: import_v44.z.string(),
|
|
763
|
+
mediaType: import_v44.z.string(),
|
|
764
|
+
providerOptions: providerMetadataSchema.optional()
|
|
765
|
+
}),
|
|
766
|
+
import_v44.z.object({
|
|
767
|
+
type: import_v44.z.literal("image-url"),
|
|
768
|
+
url: import_v44.z.string(),
|
|
769
|
+
providerOptions: providerMetadataSchema.optional()
|
|
770
|
+
}),
|
|
771
|
+
import_v44.z.object({
|
|
772
|
+
type: import_v44.z.literal("image-file-id"),
|
|
773
|
+
fileId: import_v44.z.union([import_v44.z.string(), import_v44.z.record(import_v44.z.string(), import_v44.z.string())]),
|
|
774
|
+
providerOptions: providerMetadataSchema.optional()
|
|
775
|
+
}),
|
|
776
|
+
import_v44.z.object({
|
|
777
|
+
type: import_v44.z.literal("custom"),
|
|
778
|
+
providerOptions: providerMetadataSchema.optional()
|
|
779
|
+
})
|
|
780
|
+
])
|
|
781
|
+
)
|
|
782
|
+
})
|
|
783
|
+
]
|
|
784
|
+
);
|
|
681
785
|
var toolResultPartSchema = import_v44.z.object({
|
|
682
786
|
type: import_v44.z.literal("tool-result"),
|
|
683
787
|
toolCallId: import_v44.z.string(),
|
|
@@ -685,6 +789,17 @@ var toolResultPartSchema = import_v44.z.object({
|
|
|
685
789
|
output: outputSchema,
|
|
686
790
|
providerOptions: providerMetadataSchema.optional()
|
|
687
791
|
});
|
|
792
|
+
var toolApprovalRequestSchema = import_v44.z.object({
|
|
793
|
+
type: import_v44.z.literal("tool-approval-request"),
|
|
794
|
+
approvalId: import_v44.z.string(),
|
|
795
|
+
toolCallId: import_v44.z.string()
|
|
796
|
+
});
|
|
797
|
+
var toolApprovalResponseSchema = import_v44.z.object({
|
|
798
|
+
type: import_v44.z.literal("tool-approval-response"),
|
|
799
|
+
approvalId: import_v44.z.string(),
|
|
800
|
+
approved: import_v44.z.boolean(),
|
|
801
|
+
reason: import_v44.z.string().optional()
|
|
802
|
+
});
|
|
688
803
|
|
|
689
804
|
// src/prompt/message.ts
|
|
690
805
|
var systemModelMessageSchema = import_v45.z.object(
|
|
@@ -712,7 +827,9 @@ var assistantModelMessageSchema = import_v45.z.object({
|
|
|
712
827
|
filePartSchema,
|
|
713
828
|
reasoningPartSchema,
|
|
714
829
|
toolCallPartSchema,
|
|
715
|
-
toolResultPartSchema
|
|
830
|
+
toolResultPartSchema,
|
|
831
|
+
toolApprovalRequestSchema,
|
|
832
|
+
compactionPartSchema
|
|
716
833
|
])
|
|
717
834
|
)
|
|
718
835
|
]),
|
|
@@ -720,7 +837,7 @@ var assistantModelMessageSchema = import_v45.z.object({
|
|
|
720
837
|
});
|
|
721
838
|
var toolModelMessageSchema = import_v45.z.object({
|
|
722
839
|
role: import_v45.z.literal("tool"),
|
|
723
|
-
content: import_v45.z.array(toolResultPartSchema),
|
|
840
|
+
content: import_v45.z.array(import_v45.z.union([toolResultPartSchema, toolApprovalResponseSchema])),
|
|
724
841
|
providerOptions: providerMetadataSchema.optional()
|
|
725
842
|
});
|
|
726
843
|
var modelMessageSchema = import_v45.z.union([
|
|
@@ -733,21 +850,23 @@ var modelMessageSchema = import_v45.z.union([
|
|
|
733
850
|
// src/prompt/standardize-prompt.ts
|
|
734
851
|
async function standardizePrompt(prompt) {
|
|
735
852
|
if (prompt.prompt == null && prompt.messages == null) {
|
|
736
|
-
throw new
|
|
853
|
+
throw new import_provider3.InvalidPromptError({
|
|
737
854
|
prompt,
|
|
738
855
|
message: "prompt or messages must be defined"
|
|
739
856
|
});
|
|
740
857
|
}
|
|
741
858
|
if (prompt.prompt != null && prompt.messages != null) {
|
|
742
|
-
throw new
|
|
859
|
+
throw new import_provider3.InvalidPromptError({
|
|
743
860
|
prompt,
|
|
744
861
|
message: "prompt and messages cannot be defined at the same time"
|
|
745
862
|
});
|
|
746
863
|
}
|
|
747
|
-
if (prompt.system != null && typeof prompt.system !== "string")
|
|
748
|
-
|
|
864
|
+
if (prompt.system != null && typeof prompt.system !== "string" && !asArray(prompt.system).every(
|
|
865
|
+
(message) => typeof message === "object" && message !== null && "role" in message && message.role === "system"
|
|
866
|
+
)) {
|
|
867
|
+
throw new import_provider3.InvalidPromptError({
|
|
749
868
|
prompt,
|
|
750
|
-
message: "system must be a string"
|
|
869
|
+
message: "system must be a string, SystemModelMessage, or array of SystemModelMessage"
|
|
751
870
|
});
|
|
752
871
|
}
|
|
753
872
|
let messages;
|
|
@@ -758,25 +877,25 @@ async function standardizePrompt(prompt) {
|
|
|
758
877
|
} else if (prompt.messages != null) {
|
|
759
878
|
messages = prompt.messages;
|
|
760
879
|
} else {
|
|
761
|
-
throw new
|
|
880
|
+
throw new import_provider3.InvalidPromptError({
|
|
762
881
|
prompt,
|
|
763
882
|
message: "prompt or messages must be defined"
|
|
764
883
|
});
|
|
765
884
|
}
|
|
766
885
|
if (messages.length === 0) {
|
|
767
|
-
throw new
|
|
886
|
+
throw new import_provider3.InvalidPromptError({
|
|
768
887
|
prompt,
|
|
769
888
|
message: "messages must not be empty"
|
|
770
889
|
});
|
|
771
890
|
}
|
|
772
|
-
const validationResult = await (0,
|
|
891
|
+
const validationResult = await (0, import_provider_utils7.safeValidateTypes)({
|
|
773
892
|
value: messages,
|
|
774
893
|
schema: import_v46.z.array(modelMessageSchema)
|
|
775
894
|
});
|
|
776
895
|
if (!validationResult.success) {
|
|
777
|
-
throw new
|
|
896
|
+
throw new import_provider3.InvalidPromptError({
|
|
778
897
|
prompt,
|
|
779
|
-
message: "The messages
|
|
898
|
+
message: "The messages do not match the ModelMessage[] schema.",
|
|
780
899
|
cause: validationResult.error
|
|
781
900
|
});
|
|
782
901
|
}
|
|
@@ -787,30 +906,30 @@ async function standardizePrompt(prompt) {
|
|
|
787
906
|
}
|
|
788
907
|
|
|
789
908
|
// src/error/invalid-argument-error.ts
|
|
790
|
-
var
|
|
791
|
-
var
|
|
792
|
-
var
|
|
793
|
-
var
|
|
794
|
-
var
|
|
795
|
-
var InvalidArgumentError = class extends
|
|
909
|
+
var import_provider4 = require("@zenning/provider");
|
|
910
|
+
var name2 = "AI_InvalidArgumentError";
|
|
911
|
+
var marker2 = `vercel.ai.error.${name2}`;
|
|
912
|
+
var symbol2 = Symbol.for(marker2);
|
|
913
|
+
var _a2;
|
|
914
|
+
var InvalidArgumentError = class extends import_provider4.AISDKError {
|
|
796
915
|
constructor({
|
|
797
916
|
parameter,
|
|
798
917
|
value,
|
|
799
918
|
message
|
|
800
919
|
}) {
|
|
801
920
|
super({
|
|
802
|
-
name:
|
|
921
|
+
name: name2,
|
|
803
922
|
message: `Invalid argument for parameter ${parameter}: ${message}`
|
|
804
923
|
});
|
|
805
|
-
this[
|
|
924
|
+
this[_a2] = true;
|
|
806
925
|
this.parameter = parameter;
|
|
807
926
|
this.value = value;
|
|
808
927
|
}
|
|
809
928
|
static isInstance(error) {
|
|
810
|
-
return
|
|
929
|
+
return import_provider4.AISDKError.hasMarker(error, marker2);
|
|
811
930
|
}
|
|
812
931
|
};
|
|
813
|
-
|
|
932
|
+
_a2 = symbol2;
|
|
814
933
|
|
|
815
934
|
// src/prompt/prepare-call-settings.ts
|
|
816
935
|
function prepareCallSettings({
|
|
@@ -906,32 +1025,32 @@ function prepareCallSettings({
|
|
|
906
1025
|
}
|
|
907
1026
|
|
|
908
1027
|
// src/util/retry-with-exponential-backoff.ts
|
|
909
|
-
var
|
|
910
|
-
var
|
|
1028
|
+
var import_provider6 = require("@zenning/provider");
|
|
1029
|
+
var import_provider_utils8 = require("@zenning/provider-utils");
|
|
911
1030
|
|
|
912
1031
|
// src/util/retry-error.ts
|
|
913
|
-
var
|
|
914
|
-
var
|
|
915
|
-
var
|
|
916
|
-
var
|
|
917
|
-
var
|
|
918
|
-
var RetryError = class extends
|
|
1032
|
+
var import_provider5 = require("@zenning/provider");
|
|
1033
|
+
var name3 = "AI_RetryError";
|
|
1034
|
+
var marker3 = `vercel.ai.error.${name3}`;
|
|
1035
|
+
var symbol3 = Symbol.for(marker3);
|
|
1036
|
+
var _a3;
|
|
1037
|
+
var RetryError = class extends import_provider5.AISDKError {
|
|
919
1038
|
constructor({
|
|
920
1039
|
message,
|
|
921
1040
|
reason,
|
|
922
1041
|
errors
|
|
923
1042
|
}) {
|
|
924
|
-
super({ name:
|
|
925
|
-
this[
|
|
1043
|
+
super({ name: name3, message });
|
|
1044
|
+
this[_a3] = true;
|
|
926
1045
|
this.reason = reason;
|
|
927
1046
|
this.errors = errors;
|
|
928
1047
|
this.lastError = errors[errors.length - 1];
|
|
929
1048
|
}
|
|
930
1049
|
static isInstance(error) {
|
|
931
|
-
return
|
|
1050
|
+
return import_provider5.AISDKError.hasMarker(error, marker3);
|
|
932
1051
|
}
|
|
933
1052
|
};
|
|
934
|
-
|
|
1053
|
+
_a3 = symbol3;
|
|
935
1054
|
|
|
936
1055
|
// src/util/retry-with-exponential-backoff.ts
|
|
937
1056
|
function getRetryDelayInMs({
|
|
@@ -983,13 +1102,13 @@ async function _retryWithExponentialBackoff(f, {
|
|
|
983
1102
|
try {
|
|
984
1103
|
return await f();
|
|
985
1104
|
} catch (error) {
|
|
986
|
-
if ((0,
|
|
1105
|
+
if ((0, import_provider_utils8.isAbortError)(error)) {
|
|
987
1106
|
throw error;
|
|
988
1107
|
}
|
|
989
1108
|
if (maxRetries === 0) {
|
|
990
1109
|
throw error;
|
|
991
1110
|
}
|
|
992
|
-
const errorMessage = (0,
|
|
1111
|
+
const errorMessage = (0, import_provider_utils8.getErrorMessage)(error);
|
|
993
1112
|
const newErrors = [...errors, error];
|
|
994
1113
|
const tryNumber = newErrors.length;
|
|
995
1114
|
if (tryNumber > maxRetries) {
|
|
@@ -999,8 +1118,8 @@ async function _retryWithExponentialBackoff(f, {
|
|
|
999
1118
|
errors: newErrors
|
|
1000
1119
|
});
|
|
1001
1120
|
}
|
|
1002
|
-
if (error instanceof Error &&
|
|
1003
|
-
await (0,
|
|
1121
|
+
if (error instanceof Error && import_provider6.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
|
1122
|
+
await (0, import_provider_utils8.delay)(
|
|
1004
1123
|
getRetryDelayInMs({
|
|
1005
1124
|
error,
|
|
1006
1125
|
exponentialBackoffDelay: delayInMs
|
|
@@ -1059,8 +1178,36 @@ function prepareRetries({
|
|
|
1059
1178
|
})
|
|
1060
1179
|
};
|
|
1061
1180
|
}
|
|
1181
|
+
|
|
1182
|
+
// src/types/usage.ts
|
|
1183
|
+
function asLanguageModelUsage(usage) {
|
|
1184
|
+
return {
|
|
1185
|
+
inputTokens: usage.inputTokens.total,
|
|
1186
|
+
inputTokenDetails: {
|
|
1187
|
+
noCacheTokens: usage.inputTokens.noCache,
|
|
1188
|
+
cacheReadTokens: usage.inputTokens.cacheRead,
|
|
1189
|
+
cacheWriteTokens: usage.inputTokens.cacheWrite
|
|
1190
|
+
},
|
|
1191
|
+
outputTokens: usage.outputTokens.total,
|
|
1192
|
+
outputTokenDetails: {
|
|
1193
|
+
textTokens: usage.outputTokens.text,
|
|
1194
|
+
reasoningTokens: usage.outputTokens.reasoning
|
|
1195
|
+
},
|
|
1196
|
+
totalTokens: addTokenCounts(
|
|
1197
|
+
usage.inputTokens.total,
|
|
1198
|
+
usage.outputTokens.total
|
|
1199
|
+
),
|
|
1200
|
+
raw: usage.raw,
|
|
1201
|
+
reasoningTokens: usage.outputTokens.reasoning,
|
|
1202
|
+
cachedInputTokens: usage.inputTokens.cacheRead
|
|
1203
|
+
};
|
|
1204
|
+
}
|
|
1205
|
+
function addTokenCounts(tokenCount1, tokenCount2) {
|
|
1206
|
+
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
|
1207
|
+
}
|
|
1062
1208
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1063
1209
|
0 && (module.exports = {
|
|
1210
|
+
asLanguageModelUsage,
|
|
1064
1211
|
convertAsyncIteratorToReadableStream,
|
|
1065
1212
|
convertToLanguageModelPrompt,
|
|
1066
1213
|
prepareCallSettings,
|