@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.mjs
CHANGED
|
@@ -120,44 +120,19 @@ function detectMediaType({
|
|
|
120
120
|
return void 0;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
// src/util/download/download-error.ts
|
|
124
|
-
import { AISDKError } from "@zenning/provider";
|
|
125
|
-
var name = "AI_DownloadError";
|
|
126
|
-
var marker = `vercel.ai.error.${name}`;
|
|
127
|
-
var symbol = Symbol.for(marker);
|
|
128
|
-
var _a;
|
|
129
|
-
var DownloadError = class extends AISDKError {
|
|
130
|
-
constructor({
|
|
131
|
-
url,
|
|
132
|
-
statusCode,
|
|
133
|
-
statusText,
|
|
134
|
-
cause,
|
|
135
|
-
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
|
136
|
-
}) {
|
|
137
|
-
super({ name, message, cause });
|
|
138
|
-
this[_a] = true;
|
|
139
|
-
this.url = url;
|
|
140
|
-
this.statusCode = statusCode;
|
|
141
|
-
this.statusText = statusText;
|
|
142
|
-
}
|
|
143
|
-
static isInstance(error) {
|
|
144
|
-
return AISDKError.hasMarker(error, marker);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
_a = symbol;
|
|
148
|
-
|
|
149
123
|
// src/util/download/download.ts
|
|
124
|
+
import { DownloadError } from "@zenning/provider-utils";
|
|
150
125
|
import {
|
|
151
126
|
withUserAgentSuffix,
|
|
152
127
|
getRuntimeEnvironmentUserAgent
|
|
153
128
|
} from "@zenning/provider-utils";
|
|
154
129
|
|
|
155
130
|
// src/version.ts
|
|
156
|
-
var VERSION = true ? "
|
|
131
|
+
var VERSION = true ? "6.0.13" : "0.0.0-test";
|
|
157
132
|
|
|
158
133
|
// src/util/download/download.ts
|
|
159
134
|
var download = async ({ url }) => {
|
|
160
|
-
var
|
|
135
|
+
var _a4;
|
|
161
136
|
const urlText = url.toString();
|
|
162
137
|
try {
|
|
163
138
|
const response = await fetch(urlText, {
|
|
@@ -176,7 +151,7 @@ var download = async ({ url }) => {
|
|
|
176
151
|
}
|
|
177
152
|
return {
|
|
178
153
|
data: new Uint8Array(await response.arrayBuffer()),
|
|
179
|
-
mediaType: (
|
|
154
|
+
mediaType: (_a4 = response.headers.get("content-type")) != null ? _a4 : void 0
|
|
180
155
|
};
|
|
181
156
|
} catch (error) {
|
|
182
157
|
if (DownloadError.isInstance(error)) {
|
|
@@ -194,7 +169,7 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
|
|
|
194
169
|
);
|
|
195
170
|
|
|
196
171
|
// src/prompt/data-content.ts
|
|
197
|
-
import { AISDKError
|
|
172
|
+
import { AISDKError } from "@zenning/provider";
|
|
198
173
|
import {
|
|
199
174
|
convertBase64ToUint8Array as convertBase64ToUint8Array2,
|
|
200
175
|
convertUint8ArrayToBase64
|
|
@@ -225,8 +200,8 @@ var dataContentSchema = z.union([
|
|
|
225
200
|
z.custom(
|
|
226
201
|
// Buffer might not be available in some environments such as CloudFlare:
|
|
227
202
|
(value) => {
|
|
228
|
-
var
|
|
229
|
-
return (_b = (
|
|
203
|
+
var _a4, _b;
|
|
204
|
+
return (_b = (_a4 = globalThis.Buffer) == null ? void 0 : _a4.isBuffer(value)) != null ? _b : false;
|
|
230
205
|
},
|
|
231
206
|
{ message: "Must be a Buffer" }
|
|
232
207
|
)
|
|
@@ -249,7 +224,7 @@ function convertToLanguageModelV3DataContent(content) {
|
|
|
249
224
|
content.toString()
|
|
250
225
|
);
|
|
251
226
|
if (dataUrlMediaType == null || base64Content == null) {
|
|
252
|
-
throw new
|
|
227
|
+
throw new AISDKError({
|
|
253
228
|
name: "InvalidDataContentError",
|
|
254
229
|
message: `Invalid data URL format in content ${content.toString()}`
|
|
255
230
|
});
|
|
@@ -260,25 +235,30 @@ function convertToLanguageModelV3DataContent(content) {
|
|
|
260
235
|
}
|
|
261
236
|
|
|
262
237
|
// src/prompt/invalid-message-role-error.ts
|
|
263
|
-
import { AISDKError as
|
|
264
|
-
var
|
|
265
|
-
var
|
|
266
|
-
var
|
|
267
|
-
var
|
|
268
|
-
var InvalidMessageRoleError = class extends
|
|
238
|
+
import { AISDKError as AISDKError2 } from "@zenning/provider";
|
|
239
|
+
var name = "AI_InvalidMessageRoleError";
|
|
240
|
+
var marker = `vercel.ai.error.${name}`;
|
|
241
|
+
var symbol = Symbol.for(marker);
|
|
242
|
+
var _a;
|
|
243
|
+
var InvalidMessageRoleError = class extends AISDKError2 {
|
|
269
244
|
constructor({
|
|
270
245
|
role,
|
|
271
246
|
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
|
272
247
|
}) {
|
|
273
|
-
super({ name
|
|
274
|
-
this[
|
|
248
|
+
super({ name, message });
|
|
249
|
+
this[_a] = true;
|
|
275
250
|
this.role = role;
|
|
276
251
|
}
|
|
277
252
|
static isInstance(error) {
|
|
278
|
-
return
|
|
253
|
+
return AISDKError2.hasMarker(error, marker);
|
|
279
254
|
}
|
|
280
255
|
};
|
|
281
|
-
|
|
256
|
+
_a = symbol;
|
|
257
|
+
|
|
258
|
+
// src/util/as-array.ts
|
|
259
|
+
function asArray(value) {
|
|
260
|
+
return value === void 0 ? [] : Array.isArray(value) ? value : [value];
|
|
261
|
+
}
|
|
282
262
|
|
|
283
263
|
// src/prompt/convert-to-language-model-prompt.ts
|
|
284
264
|
async function convertToLanguageModelPrompt({
|
|
@@ -291,12 +271,30 @@ async function convertToLanguageModelPrompt({
|
|
|
291
271
|
download2,
|
|
292
272
|
supportedUrls
|
|
293
273
|
);
|
|
294
|
-
|
|
295
|
-
...prompt.system != null ? [{ role: "system", content: prompt.system }] :
|
|
274
|
+
const messages = [
|
|
275
|
+
...prompt.system != null ? typeof prompt.system === "string" ? [{ role: "system", content: prompt.system }] : asArray(prompt.system).map((message) => ({
|
|
276
|
+
role: "system",
|
|
277
|
+
content: message.content,
|
|
278
|
+
providerOptions: message.providerOptions
|
|
279
|
+
})) : [],
|
|
296
280
|
...prompt.messages.map(
|
|
297
281
|
(message) => convertToLanguageModelMessage({ message, downloadedAssets })
|
|
298
282
|
)
|
|
299
283
|
];
|
|
284
|
+
const combinedMessages = [];
|
|
285
|
+
for (const message of messages) {
|
|
286
|
+
if (message.role !== "tool") {
|
|
287
|
+
combinedMessages.push(message);
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
const lastCombinedMessage = combinedMessages.at(-1);
|
|
291
|
+
if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === "tool") {
|
|
292
|
+
lastCombinedMessage.content.push(...message.content);
|
|
293
|
+
} else {
|
|
294
|
+
combinedMessages.push(message);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return combinedMessages;
|
|
300
298
|
}
|
|
301
299
|
function convertToLanguageModelMessage({
|
|
302
300
|
message,
|
|
@@ -338,6 +336,8 @@ function convertToLanguageModelMessage({
|
|
|
338
336
|
content: message.content.filter(
|
|
339
337
|
// remove empty text parts (no text, and no provider options):
|
|
340
338
|
(part) => part.type !== "text" || part.text !== "" || part.providerOptions != null
|
|
339
|
+
).filter(
|
|
340
|
+
(part) => part.type !== "tool-approval-request"
|
|
341
341
|
).map((part) => {
|
|
342
342
|
const providerOptions = part.providerOptions;
|
|
343
343
|
switch (part.type) {
|
|
@@ -382,7 +382,7 @@ function convertToLanguageModelMessage({
|
|
|
382
382
|
type: "tool-result",
|
|
383
383
|
toolCallId: part.toolCallId,
|
|
384
384
|
toolName: part.toolName,
|
|
385
|
-
output: part.output,
|
|
385
|
+
output: mapToolResultOutput(part.output),
|
|
386
386
|
providerOptions
|
|
387
387
|
};
|
|
388
388
|
}
|
|
@@ -394,13 +394,30 @@ function convertToLanguageModelMessage({
|
|
|
394
394
|
case "tool": {
|
|
395
395
|
return {
|
|
396
396
|
role: "tool",
|
|
397
|
-
content: message.content.
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
397
|
+
content: message.content.filter(
|
|
398
|
+
// Only include tool-approval-response for provider-executed tools
|
|
399
|
+
(part) => part.type !== "tool-approval-response" || part.providerExecuted
|
|
400
|
+
).map((part) => {
|
|
401
|
+
switch (part.type) {
|
|
402
|
+
case "tool-result": {
|
|
403
|
+
return {
|
|
404
|
+
type: "tool-result",
|
|
405
|
+
toolCallId: part.toolCallId,
|
|
406
|
+
toolName: part.toolName,
|
|
407
|
+
output: mapToolResultOutput(part.output),
|
|
408
|
+
providerOptions: part.providerOptions
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
case "tool-approval-response": {
|
|
412
|
+
return {
|
|
413
|
+
type: "tool-approval-response",
|
|
414
|
+
approvalId: part.approvalId,
|
|
415
|
+
approved: part.approved,
|
|
416
|
+
reason: part.reason
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}),
|
|
404
421
|
providerOptions: message.providerOptions
|
|
405
422
|
};
|
|
406
423
|
}
|
|
@@ -416,8 +433,8 @@ async function downloadAssets(messages, download2, supportedUrls) {
|
|
|
416
433
|
).flat().filter(
|
|
417
434
|
(part) => part.type === "image" || part.type === "file"
|
|
418
435
|
).map((part) => {
|
|
419
|
-
var
|
|
420
|
-
const mediaType = (
|
|
436
|
+
var _a4;
|
|
437
|
+
const mediaType = (_a4 = part.mediaType) != null ? _a4 : part.type === "image" ? "image/*" : void 0;
|
|
421
438
|
let data = part.type === "image" ? part.image : part.data;
|
|
422
439
|
if (typeof data === "string") {
|
|
423
440
|
try {
|
|
@@ -447,7 +464,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
|
|
|
447
464
|
);
|
|
448
465
|
}
|
|
449
466
|
function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
450
|
-
var
|
|
467
|
+
var _a4;
|
|
451
468
|
if (part.type === "text") {
|
|
452
469
|
return {
|
|
453
470
|
type: "text",
|
|
@@ -480,7 +497,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
|
480
497
|
switch (type) {
|
|
481
498
|
case "image": {
|
|
482
499
|
if (data instanceof Uint8Array || typeof data === "string") {
|
|
483
|
-
mediaType = (
|
|
500
|
+
mediaType = (_a4 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a4 : mediaType;
|
|
484
501
|
}
|
|
485
502
|
return {
|
|
486
503
|
type: "file",
|
|
@@ -505,6 +522,31 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
|
505
522
|
}
|
|
506
523
|
}
|
|
507
524
|
}
|
|
525
|
+
function mapToolResultOutput(output) {
|
|
526
|
+
if (output.type !== "content") {
|
|
527
|
+
return output;
|
|
528
|
+
}
|
|
529
|
+
return {
|
|
530
|
+
type: "content",
|
|
531
|
+
value: output.value.map((item) => {
|
|
532
|
+
if (item.type !== "media") {
|
|
533
|
+
return item;
|
|
534
|
+
}
|
|
535
|
+
if (item.mediaType.startsWith("image/")) {
|
|
536
|
+
return {
|
|
537
|
+
type: "image-data",
|
|
538
|
+
data: item.data,
|
|
539
|
+
mediaType: item.mediaType
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
return {
|
|
543
|
+
type: "file-data",
|
|
544
|
+
data: item.data,
|
|
545
|
+
mediaType: item.mediaType
|
|
546
|
+
};
|
|
547
|
+
})
|
|
548
|
+
};
|
|
549
|
+
}
|
|
508
550
|
|
|
509
551
|
// src/prompt/prepare-tools-and-tool-choice.ts
|
|
510
552
|
import { asSchema } from "@zenning/provider-utils";
|
|
@@ -515,7 +557,7 @@ function isNonEmptyObject(object) {
|
|
|
515
557
|
}
|
|
516
558
|
|
|
517
559
|
// src/prompt/prepare-tools-and-tool-choice.ts
|
|
518
|
-
function prepareToolsAndToolChoice({
|
|
560
|
+
async function prepareToolsAndToolChoice({
|
|
519
561
|
tools,
|
|
520
562
|
toolChoice,
|
|
521
563
|
activeTools
|
|
@@ -527,42 +569,50 @@ function prepareToolsAndToolChoice({
|
|
|
527
569
|
};
|
|
528
570
|
}
|
|
529
571
|
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
|
530
|
-
([
|
|
572
|
+
([name4]) => activeTools.includes(name4)
|
|
531
573
|
) : Object.entries(tools);
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
574
|
+
const languageModelTools = [];
|
|
575
|
+
for (const [name4, tool] of filteredTools) {
|
|
576
|
+
const toolType = tool.type;
|
|
577
|
+
switch (toolType) {
|
|
578
|
+
case void 0:
|
|
579
|
+
case "dynamic":
|
|
580
|
+
case "function":
|
|
581
|
+
languageModelTools.push({
|
|
582
|
+
type: "function",
|
|
583
|
+
name: name4,
|
|
584
|
+
description: tool.description,
|
|
585
|
+
inputSchema: await asSchema(tool.inputSchema).jsonSchema,
|
|
586
|
+
...tool.inputExamples != null ? { inputExamples: tool.inputExamples } : {},
|
|
587
|
+
providerOptions: tool.providerOptions,
|
|
588
|
+
...tool.strict != null ? { strict: tool.strict } : {}
|
|
589
|
+
});
|
|
590
|
+
break;
|
|
591
|
+
case "provider":
|
|
592
|
+
languageModelTools.push({
|
|
593
|
+
type: "provider",
|
|
594
|
+
name: name4,
|
|
595
|
+
id: tool.id,
|
|
596
|
+
args: tool.args
|
|
597
|
+
});
|
|
598
|
+
break;
|
|
599
|
+
default: {
|
|
600
|
+
const exhaustiveCheck = toolType;
|
|
601
|
+
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
|
557
602
|
}
|
|
558
|
-
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
return {
|
|
606
|
+
tools: languageModelTools,
|
|
559
607
|
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
|
560
608
|
};
|
|
561
609
|
}
|
|
562
610
|
|
|
563
611
|
// src/prompt/standardize-prompt.ts
|
|
564
612
|
import { InvalidPromptError } from "@zenning/provider";
|
|
565
|
-
import {
|
|
613
|
+
import {
|
|
614
|
+
safeValidateTypes
|
|
615
|
+
} from "@zenning/provider-utils";
|
|
566
616
|
import { z as z6 } from "zod/v4";
|
|
567
617
|
|
|
568
618
|
// src/prompt/message.ts
|
|
@@ -579,7 +629,7 @@ var jsonValueSchema = z2.lazy(
|
|
|
579
629
|
z2.string(),
|
|
580
630
|
z2.number(),
|
|
581
631
|
z2.boolean(),
|
|
582
|
-
z2.record(z2.string(), jsonValueSchema),
|
|
632
|
+
z2.record(z2.string(), jsonValueSchema.optional()),
|
|
583
633
|
z2.array(jsonValueSchema)
|
|
584
634
|
])
|
|
585
635
|
);
|
|
@@ -587,7 +637,7 @@ var jsonValueSchema = z2.lazy(
|
|
|
587
637
|
// src/types/provider-metadata.ts
|
|
588
638
|
var providerMetadataSchema = z3.record(
|
|
589
639
|
z3.string(),
|
|
590
|
-
z3.record(z3.string(), jsonValueSchema)
|
|
640
|
+
z3.record(z3.string(), jsonValueSchema.optional())
|
|
591
641
|
);
|
|
592
642
|
|
|
593
643
|
// src/prompt/content-part.ts
|
|
@@ -615,6 +665,11 @@ var reasoningPartSchema = z4.object({
|
|
|
615
665
|
text: z4.string(),
|
|
616
666
|
providerOptions: providerMetadataSchema.optional()
|
|
617
667
|
});
|
|
668
|
+
var compactionPartSchema = z4.object({
|
|
669
|
+
type: z4.literal("compaction"),
|
|
670
|
+
encrypted_content: z4.string(),
|
|
671
|
+
providerOptions: providerMetadataSchema.optional()
|
|
672
|
+
});
|
|
618
673
|
var toolCallPartSchema = z4.object({
|
|
619
674
|
type: z4.literal("tool-call"),
|
|
620
675
|
toolCallId: z4.string(),
|
|
@@ -623,40 +678,90 @@ var toolCallPartSchema = z4.object({
|
|
|
623
678
|
providerOptions: providerMetadataSchema.optional(),
|
|
624
679
|
providerExecuted: z4.boolean().optional()
|
|
625
680
|
});
|
|
626
|
-
var outputSchema = z4.discriminatedUnion(
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
z4.
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
681
|
+
var outputSchema = z4.discriminatedUnion(
|
|
682
|
+
"type",
|
|
683
|
+
[
|
|
684
|
+
z4.object({
|
|
685
|
+
type: z4.literal("text"),
|
|
686
|
+
value: z4.string(),
|
|
687
|
+
providerOptions: providerMetadataSchema.optional()
|
|
688
|
+
}),
|
|
689
|
+
z4.object({
|
|
690
|
+
type: z4.literal("json"),
|
|
691
|
+
value: jsonValueSchema,
|
|
692
|
+
providerOptions: providerMetadataSchema.optional()
|
|
693
|
+
}),
|
|
694
|
+
z4.object({
|
|
695
|
+
type: z4.literal("execution-denied"),
|
|
696
|
+
reason: z4.string().optional(),
|
|
697
|
+
providerOptions: providerMetadataSchema.optional()
|
|
698
|
+
}),
|
|
699
|
+
z4.object({
|
|
700
|
+
type: z4.literal("error-text"),
|
|
701
|
+
value: z4.string(),
|
|
702
|
+
providerOptions: providerMetadataSchema.optional()
|
|
703
|
+
}),
|
|
704
|
+
z4.object({
|
|
705
|
+
type: z4.literal("error-json"),
|
|
706
|
+
value: jsonValueSchema,
|
|
707
|
+
providerOptions: providerMetadataSchema.optional()
|
|
708
|
+
}),
|
|
709
|
+
z4.object({
|
|
710
|
+
type: z4.literal("content"),
|
|
711
|
+
value: z4.array(
|
|
712
|
+
z4.union([
|
|
713
|
+
z4.object({
|
|
714
|
+
type: z4.literal("text"),
|
|
715
|
+
text: z4.string(),
|
|
716
|
+
providerOptions: providerMetadataSchema.optional()
|
|
717
|
+
}),
|
|
718
|
+
z4.object({
|
|
719
|
+
type: z4.literal("media"),
|
|
720
|
+
data: z4.string(),
|
|
721
|
+
mediaType: z4.string()
|
|
722
|
+
}),
|
|
723
|
+
z4.object({
|
|
724
|
+
type: z4.literal("file-data"),
|
|
725
|
+
data: z4.string(),
|
|
726
|
+
mediaType: z4.string(),
|
|
727
|
+
filename: z4.string().optional(),
|
|
728
|
+
providerOptions: providerMetadataSchema.optional()
|
|
729
|
+
}),
|
|
730
|
+
z4.object({
|
|
731
|
+
type: z4.literal("file-url"),
|
|
732
|
+
url: z4.string(),
|
|
733
|
+
providerOptions: providerMetadataSchema.optional()
|
|
734
|
+
}),
|
|
735
|
+
z4.object({
|
|
736
|
+
type: z4.literal("file-id"),
|
|
737
|
+
fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
|
|
738
|
+
providerOptions: providerMetadataSchema.optional()
|
|
739
|
+
}),
|
|
740
|
+
z4.object({
|
|
741
|
+
type: z4.literal("image-data"),
|
|
742
|
+
data: z4.string(),
|
|
743
|
+
mediaType: z4.string(),
|
|
744
|
+
providerOptions: providerMetadataSchema.optional()
|
|
745
|
+
}),
|
|
746
|
+
z4.object({
|
|
747
|
+
type: z4.literal("image-url"),
|
|
748
|
+
url: z4.string(),
|
|
749
|
+
providerOptions: providerMetadataSchema.optional()
|
|
750
|
+
}),
|
|
751
|
+
z4.object({
|
|
752
|
+
type: z4.literal("image-file-id"),
|
|
753
|
+
fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
|
|
754
|
+
providerOptions: providerMetadataSchema.optional()
|
|
755
|
+
}),
|
|
756
|
+
z4.object({
|
|
757
|
+
type: z4.literal("custom"),
|
|
758
|
+
providerOptions: providerMetadataSchema.optional()
|
|
759
|
+
})
|
|
760
|
+
])
|
|
761
|
+
)
|
|
762
|
+
})
|
|
763
|
+
]
|
|
764
|
+
);
|
|
660
765
|
var toolResultPartSchema = z4.object({
|
|
661
766
|
type: z4.literal("tool-result"),
|
|
662
767
|
toolCallId: z4.string(),
|
|
@@ -664,6 +769,17 @@ var toolResultPartSchema = z4.object({
|
|
|
664
769
|
output: outputSchema,
|
|
665
770
|
providerOptions: providerMetadataSchema.optional()
|
|
666
771
|
});
|
|
772
|
+
var toolApprovalRequestSchema = z4.object({
|
|
773
|
+
type: z4.literal("tool-approval-request"),
|
|
774
|
+
approvalId: z4.string(),
|
|
775
|
+
toolCallId: z4.string()
|
|
776
|
+
});
|
|
777
|
+
var toolApprovalResponseSchema = z4.object({
|
|
778
|
+
type: z4.literal("tool-approval-response"),
|
|
779
|
+
approvalId: z4.string(),
|
|
780
|
+
approved: z4.boolean(),
|
|
781
|
+
reason: z4.string().optional()
|
|
782
|
+
});
|
|
667
783
|
|
|
668
784
|
// src/prompt/message.ts
|
|
669
785
|
var systemModelMessageSchema = z5.object(
|
|
@@ -691,7 +807,9 @@ var assistantModelMessageSchema = z5.object({
|
|
|
691
807
|
filePartSchema,
|
|
692
808
|
reasoningPartSchema,
|
|
693
809
|
toolCallPartSchema,
|
|
694
|
-
toolResultPartSchema
|
|
810
|
+
toolResultPartSchema,
|
|
811
|
+
toolApprovalRequestSchema,
|
|
812
|
+
compactionPartSchema
|
|
695
813
|
])
|
|
696
814
|
)
|
|
697
815
|
]),
|
|
@@ -699,7 +817,7 @@ var assistantModelMessageSchema = z5.object({
|
|
|
699
817
|
});
|
|
700
818
|
var toolModelMessageSchema = z5.object({
|
|
701
819
|
role: z5.literal("tool"),
|
|
702
|
-
content: z5.array(toolResultPartSchema),
|
|
820
|
+
content: z5.array(z5.union([toolResultPartSchema, toolApprovalResponseSchema])),
|
|
703
821
|
providerOptions: providerMetadataSchema.optional()
|
|
704
822
|
});
|
|
705
823
|
var modelMessageSchema = z5.union([
|
|
@@ -723,10 +841,12 @@ async function standardizePrompt(prompt) {
|
|
|
723
841
|
message: "prompt and messages cannot be defined at the same time"
|
|
724
842
|
});
|
|
725
843
|
}
|
|
726
|
-
if (prompt.system != null && typeof prompt.system !== "string")
|
|
844
|
+
if (prompt.system != null && typeof prompt.system !== "string" && !asArray(prompt.system).every(
|
|
845
|
+
(message) => typeof message === "object" && message !== null && "role" in message && message.role === "system"
|
|
846
|
+
)) {
|
|
727
847
|
throw new InvalidPromptError({
|
|
728
848
|
prompt,
|
|
729
|
-
message: "system must be a string"
|
|
849
|
+
message: "system must be a string, SystemModelMessage, or array of SystemModelMessage"
|
|
730
850
|
});
|
|
731
851
|
}
|
|
732
852
|
let messages;
|
|
@@ -755,7 +875,7 @@ async function standardizePrompt(prompt) {
|
|
|
755
875
|
if (!validationResult.success) {
|
|
756
876
|
throw new InvalidPromptError({
|
|
757
877
|
prompt,
|
|
758
|
-
message: "The messages
|
|
878
|
+
message: "The messages do not match the ModelMessage[] schema.",
|
|
759
879
|
cause: validationResult.error
|
|
760
880
|
});
|
|
761
881
|
}
|
|
@@ -766,30 +886,30 @@ async function standardizePrompt(prompt) {
|
|
|
766
886
|
}
|
|
767
887
|
|
|
768
888
|
// src/error/invalid-argument-error.ts
|
|
769
|
-
import { AISDKError as
|
|
770
|
-
var
|
|
771
|
-
var
|
|
772
|
-
var
|
|
773
|
-
var
|
|
774
|
-
var InvalidArgumentError = class extends
|
|
889
|
+
import { AISDKError as AISDKError3 } from "@zenning/provider";
|
|
890
|
+
var name2 = "AI_InvalidArgumentError";
|
|
891
|
+
var marker2 = `vercel.ai.error.${name2}`;
|
|
892
|
+
var symbol2 = Symbol.for(marker2);
|
|
893
|
+
var _a2;
|
|
894
|
+
var InvalidArgumentError = class extends AISDKError3 {
|
|
775
895
|
constructor({
|
|
776
896
|
parameter,
|
|
777
897
|
value,
|
|
778
898
|
message
|
|
779
899
|
}) {
|
|
780
900
|
super({
|
|
781
|
-
name:
|
|
901
|
+
name: name2,
|
|
782
902
|
message: `Invalid argument for parameter ${parameter}: ${message}`
|
|
783
903
|
});
|
|
784
|
-
this[
|
|
904
|
+
this[_a2] = true;
|
|
785
905
|
this.parameter = parameter;
|
|
786
906
|
this.value = value;
|
|
787
907
|
}
|
|
788
908
|
static isInstance(error) {
|
|
789
|
-
return
|
|
909
|
+
return AISDKError3.hasMarker(error, marker2);
|
|
790
910
|
}
|
|
791
911
|
};
|
|
792
|
-
|
|
912
|
+
_a2 = symbol2;
|
|
793
913
|
|
|
794
914
|
// src/prompt/prepare-call-settings.ts
|
|
795
915
|
function prepareCallSettings({
|
|
@@ -889,28 +1009,28 @@ import { APICallError } from "@zenning/provider";
|
|
|
889
1009
|
import { delay, getErrorMessage, isAbortError } from "@zenning/provider-utils";
|
|
890
1010
|
|
|
891
1011
|
// src/util/retry-error.ts
|
|
892
|
-
import { AISDKError as
|
|
893
|
-
var
|
|
894
|
-
var
|
|
895
|
-
var
|
|
896
|
-
var
|
|
897
|
-
var RetryError = class extends
|
|
1012
|
+
import { AISDKError as AISDKError4 } from "@zenning/provider";
|
|
1013
|
+
var name3 = "AI_RetryError";
|
|
1014
|
+
var marker3 = `vercel.ai.error.${name3}`;
|
|
1015
|
+
var symbol3 = Symbol.for(marker3);
|
|
1016
|
+
var _a3;
|
|
1017
|
+
var RetryError = class extends AISDKError4 {
|
|
898
1018
|
constructor({
|
|
899
1019
|
message,
|
|
900
1020
|
reason,
|
|
901
1021
|
errors
|
|
902
1022
|
}) {
|
|
903
|
-
super({ name:
|
|
904
|
-
this[
|
|
1023
|
+
super({ name: name3, message });
|
|
1024
|
+
this[_a3] = true;
|
|
905
1025
|
this.reason = reason;
|
|
906
1026
|
this.errors = errors;
|
|
907
1027
|
this.lastError = errors[errors.length - 1];
|
|
908
1028
|
}
|
|
909
1029
|
static isInstance(error) {
|
|
910
|
-
return
|
|
1030
|
+
return AISDKError4.hasMarker(error, marker3);
|
|
911
1031
|
}
|
|
912
1032
|
};
|
|
913
|
-
|
|
1033
|
+
_a3 = symbol3;
|
|
914
1034
|
|
|
915
1035
|
// src/util/retry-with-exponential-backoff.ts
|
|
916
1036
|
function getRetryDelayInMs({
|
|
@@ -1038,7 +1158,35 @@ function prepareRetries({
|
|
|
1038
1158
|
})
|
|
1039
1159
|
};
|
|
1040
1160
|
}
|
|
1161
|
+
|
|
1162
|
+
// src/types/usage.ts
|
|
1163
|
+
function asLanguageModelUsage(usage) {
|
|
1164
|
+
return {
|
|
1165
|
+
inputTokens: usage.inputTokens.total,
|
|
1166
|
+
inputTokenDetails: {
|
|
1167
|
+
noCacheTokens: usage.inputTokens.noCache,
|
|
1168
|
+
cacheReadTokens: usage.inputTokens.cacheRead,
|
|
1169
|
+
cacheWriteTokens: usage.inputTokens.cacheWrite
|
|
1170
|
+
},
|
|
1171
|
+
outputTokens: usage.outputTokens.total,
|
|
1172
|
+
outputTokenDetails: {
|
|
1173
|
+
textTokens: usage.outputTokens.text,
|
|
1174
|
+
reasoningTokens: usage.outputTokens.reasoning
|
|
1175
|
+
},
|
|
1176
|
+
totalTokens: addTokenCounts(
|
|
1177
|
+
usage.inputTokens.total,
|
|
1178
|
+
usage.outputTokens.total
|
|
1179
|
+
),
|
|
1180
|
+
raw: usage.raw,
|
|
1181
|
+
reasoningTokens: usage.outputTokens.reasoning,
|
|
1182
|
+
cachedInputTokens: usage.inputTokens.cacheRead
|
|
1183
|
+
};
|
|
1184
|
+
}
|
|
1185
|
+
function addTokenCounts(tokenCount1, tokenCount2) {
|
|
1186
|
+
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
|
1187
|
+
}
|
|
1041
1188
|
export {
|
|
1189
|
+
asLanguageModelUsage,
|
|
1042
1190
|
convertAsyncIteratorToReadableStream,
|
|
1043
1191
|
convertToLanguageModelPrompt,
|
|
1044
1192
|
prepareCallSettings,
|