ai 5.0.0-canary.16 → 5.0.0-canary.18
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 +59 -0
- package/README.md +4 -4
- package/dist/index.d.mts +141 -159
- package/dist/index.d.ts +141 -159
- package/dist/index.js +341 -377
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +336 -378
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +30 -89
- package/dist/internal/index.d.ts +30 -89
- package/dist/internal/index.js +204 -344
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +197 -336
- package/dist/internal/index.mjs.map +1 -1
- package/dist/mcp-stdio/index.d.mts +2 -2
- package/dist/mcp-stdio/index.d.ts +2 -2
- package/package.json +4 -4
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 name6 in all)
|
8
|
+
__defProp(target, name6, { get: all[name6], enumerable: true });
|
9
9
|
};
|
10
10
|
var __copyProps = (to, from, except, desc) => {
|
11
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
@@ -22,7 +22,6 @@ var internal_exports = {};
|
|
22
22
|
__export(internal_exports, {
|
23
23
|
HANGING_STREAM_WARNING_TIME_MS: () => HANGING_STREAM_WARNING_TIME_MS,
|
24
24
|
StreamData: () => StreamData,
|
25
|
-
calculateLanguageModelUsage: () => calculateLanguageModelUsage,
|
26
25
|
convertToLanguageModelPrompt: () => convertToLanguageModelPrompt,
|
27
26
|
createCallbacksTransformer: () => createCallbacksTransformer,
|
28
27
|
formatDataStreamPart: () => formatDataStreamPart,
|
@@ -36,229 +35,40 @@ __export(internal_exports, {
|
|
36
35
|
module.exports = __toCommonJS(internal_exports);
|
37
36
|
|
38
37
|
// core/prompt/standardize-prompt.ts
|
39
|
-
var
|
38
|
+
var import_provider3 = require("@ai-sdk/provider");
|
40
39
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
41
40
|
var import_zod7 = require("zod");
|
42
41
|
|
43
|
-
// core/prompt/
|
44
|
-
var import_provider2 = require("@ai-sdk/provider");
|
45
|
-
var import_provider_utils = require("@ai-sdk/provider-utils");
|
46
|
-
var import_zod = require("zod");
|
47
|
-
|
48
|
-
// core/prompt/invalid-data-content-error.ts
|
42
|
+
// core/prompt/message-conversion-error.ts
|
49
43
|
var import_provider = require("@ai-sdk/provider");
|
50
|
-
var name = "
|
44
|
+
var name = "AI_MessageConversionError";
|
51
45
|
var marker = `vercel.ai.error.${name}`;
|
52
46
|
var symbol = Symbol.for(marker);
|
53
47
|
var _a;
|
54
|
-
var
|
55
|
-
constructor({
|
56
|
-
content,
|
57
|
-
cause,
|
58
|
-
message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
|
59
|
-
}) {
|
60
|
-
super({ name, message, cause });
|
61
|
-
this[_a] = true;
|
62
|
-
this.content = content;
|
63
|
-
}
|
64
|
-
static isInstance(error) {
|
65
|
-
return import_provider.AISDKError.hasMarker(error, marker);
|
66
|
-
}
|
67
|
-
};
|
68
|
-
_a = symbol;
|
69
|
-
|
70
|
-
// core/prompt/split-data-url.ts
|
71
|
-
function splitDataUrl(dataUrl) {
|
72
|
-
try {
|
73
|
-
const [header, base64Content] = dataUrl.split(",");
|
74
|
-
return {
|
75
|
-
mediaType: header.split(";")[0].split(":")[1],
|
76
|
-
base64Content
|
77
|
-
};
|
78
|
-
} catch (error) {
|
79
|
-
return {
|
80
|
-
mediaType: void 0,
|
81
|
-
base64Content: void 0
|
82
|
-
};
|
83
|
-
}
|
84
|
-
}
|
85
|
-
|
86
|
-
// core/prompt/data-content.ts
|
87
|
-
var dataContentSchema = import_zod.z.union([
|
88
|
-
import_zod.z.string(),
|
89
|
-
import_zod.z.instanceof(Uint8Array),
|
90
|
-
import_zod.z.instanceof(ArrayBuffer),
|
91
|
-
import_zod.z.custom(
|
92
|
-
// Buffer might not be available in some environments such as CloudFlare:
|
93
|
-
(value) => {
|
94
|
-
var _a7, _b;
|
95
|
-
return (_b = (_a7 = globalThis.Buffer) == null ? void 0 : _a7.isBuffer(value)) != null ? _b : false;
|
96
|
-
},
|
97
|
-
{ message: "Must be a Buffer" }
|
98
|
-
)
|
99
|
-
]);
|
100
|
-
function convertToLanguageModelV2DataContent(content) {
|
101
|
-
if (content instanceof Uint8Array) {
|
102
|
-
return { data: content, mediaType: void 0 };
|
103
|
-
}
|
104
|
-
if (content instanceof ArrayBuffer) {
|
105
|
-
return { data: new Uint8Array(content), mediaType: void 0 };
|
106
|
-
}
|
107
|
-
if (typeof content === "string") {
|
108
|
-
try {
|
109
|
-
content = new URL(content);
|
110
|
-
} catch (error) {
|
111
|
-
}
|
112
|
-
}
|
113
|
-
if (content instanceof URL && content.protocol === "data:") {
|
114
|
-
const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
|
115
|
-
content.toString()
|
116
|
-
);
|
117
|
-
if (dataUrlMediaType == null || base64Content == null) {
|
118
|
-
throw new import_provider2.AISDKError({
|
119
|
-
name: "InvalidDataContentError",
|
120
|
-
message: `Invalid data URL format in content ${content.toString()}`
|
121
|
-
});
|
122
|
-
}
|
123
|
-
return { data: base64Content, mediaType: dataUrlMediaType };
|
124
|
-
}
|
125
|
-
return { data: content, mediaType: void 0 };
|
126
|
-
}
|
127
|
-
function convertDataContentToUint8Array(content) {
|
128
|
-
if (content instanceof Uint8Array) {
|
129
|
-
return content;
|
130
|
-
}
|
131
|
-
if (typeof content === "string") {
|
132
|
-
try {
|
133
|
-
return (0, import_provider_utils.convertBase64ToUint8Array)(content);
|
134
|
-
} catch (error) {
|
135
|
-
throw new InvalidDataContentError({
|
136
|
-
message: "Invalid data content. Content string is not a base64-encoded media.",
|
137
|
-
content,
|
138
|
-
cause: error
|
139
|
-
});
|
140
|
-
}
|
141
|
-
}
|
142
|
-
if (content instanceof ArrayBuffer) {
|
143
|
-
return new Uint8Array(content);
|
144
|
-
}
|
145
|
-
throw new InvalidDataContentError({ content });
|
146
|
-
}
|
147
|
-
function convertUint8ArrayToText(uint8Array) {
|
148
|
-
try {
|
149
|
-
return new TextDecoder().decode(uint8Array);
|
150
|
-
} catch (error) {
|
151
|
-
throw new Error("Error decoding Uint8Array to text");
|
152
|
-
}
|
153
|
-
}
|
154
|
-
|
155
|
-
// core/prompt/attachments-to-parts.ts
|
156
|
-
function attachmentsToParts(attachments) {
|
157
|
-
var _a7, _b, _c;
|
158
|
-
const parts = [];
|
159
|
-
for (const attachment of attachments) {
|
160
|
-
let url;
|
161
|
-
try {
|
162
|
-
url = new URL(attachment.url);
|
163
|
-
} catch (error) {
|
164
|
-
throw new Error(`Invalid URL: ${attachment.url}`);
|
165
|
-
}
|
166
|
-
switch (url.protocol) {
|
167
|
-
case "http:":
|
168
|
-
case "https:": {
|
169
|
-
if ((_a7 = attachment.contentType) == null ? void 0 : _a7.startsWith("image/")) {
|
170
|
-
parts.push({ type: "image", image: url });
|
171
|
-
} else {
|
172
|
-
if (!attachment.contentType) {
|
173
|
-
throw new Error(
|
174
|
-
"If the attachment is not an image, it must specify a content type"
|
175
|
-
);
|
176
|
-
}
|
177
|
-
parts.push({
|
178
|
-
type: "file",
|
179
|
-
data: url,
|
180
|
-
mediaType: attachment.contentType
|
181
|
-
});
|
182
|
-
}
|
183
|
-
break;
|
184
|
-
}
|
185
|
-
case "data:": {
|
186
|
-
let header;
|
187
|
-
let base64Content;
|
188
|
-
let mediaType;
|
189
|
-
try {
|
190
|
-
[header, base64Content] = attachment.url.split(",");
|
191
|
-
mediaType = header.split(";")[0].split(":")[1];
|
192
|
-
} catch (error) {
|
193
|
-
throw new Error(`Error processing data URL: ${attachment.url}`);
|
194
|
-
}
|
195
|
-
if (mediaType == null || base64Content == null) {
|
196
|
-
throw new Error(`Invalid data URL format: ${attachment.url}`);
|
197
|
-
}
|
198
|
-
if ((_b = attachment.contentType) == null ? void 0 : _b.startsWith("image/")) {
|
199
|
-
parts.push({
|
200
|
-
type: "image",
|
201
|
-
image: convertDataContentToUint8Array(base64Content)
|
202
|
-
});
|
203
|
-
} else if ((_c = attachment.contentType) == null ? void 0 : _c.startsWith("text/")) {
|
204
|
-
parts.push({
|
205
|
-
type: "text",
|
206
|
-
text: convertUint8ArrayToText(
|
207
|
-
convertDataContentToUint8Array(base64Content)
|
208
|
-
)
|
209
|
-
});
|
210
|
-
} else {
|
211
|
-
if (!attachment.contentType) {
|
212
|
-
throw new Error(
|
213
|
-
"If the attachment is not an image or text, it must specify a content type"
|
214
|
-
);
|
215
|
-
}
|
216
|
-
parts.push({
|
217
|
-
type: "file",
|
218
|
-
data: base64Content,
|
219
|
-
mediaType: attachment.contentType
|
220
|
-
});
|
221
|
-
}
|
222
|
-
break;
|
223
|
-
}
|
224
|
-
default: {
|
225
|
-
throw new Error(`Unsupported URL protocol: ${url.protocol}`);
|
226
|
-
}
|
227
|
-
}
|
228
|
-
}
|
229
|
-
return parts;
|
230
|
-
}
|
231
|
-
|
232
|
-
// core/prompt/message-conversion-error.ts
|
233
|
-
var import_provider3 = require("@ai-sdk/provider");
|
234
|
-
var name2 = "AI_MessageConversionError";
|
235
|
-
var marker2 = `vercel.ai.error.${name2}`;
|
236
|
-
var symbol2 = Symbol.for(marker2);
|
237
|
-
var _a2;
|
238
|
-
var MessageConversionError = class extends import_provider3.AISDKError {
|
48
|
+
var MessageConversionError = class extends import_provider.AISDKError {
|
239
49
|
constructor({
|
240
50
|
originalMessage,
|
241
51
|
message
|
242
52
|
}) {
|
243
|
-
super({ name
|
244
|
-
this[
|
53
|
+
super({ name, message });
|
54
|
+
this[_a] = true;
|
245
55
|
this.originalMessage = originalMessage;
|
246
56
|
}
|
247
57
|
static isInstance(error) {
|
248
|
-
return
|
58
|
+
return import_provider.AISDKError.hasMarker(error, marker);
|
249
59
|
}
|
250
60
|
};
|
251
|
-
|
61
|
+
_a = symbol;
|
252
62
|
|
253
|
-
// core/prompt/convert-to-
|
254
|
-
function
|
255
|
-
var
|
256
|
-
const tools = (
|
63
|
+
// core/prompt/convert-to-model-messages.ts
|
64
|
+
function convertToModelMessages(messages, options) {
|
65
|
+
var _a6, _b;
|
66
|
+
const tools = (_a6 = options == null ? void 0 : options.tools) != null ? _a6 : {};
|
257
67
|
const coreMessages = [];
|
258
68
|
for (let i = 0; i < messages.length; i++) {
|
259
69
|
const message = messages[i];
|
260
70
|
const isLastMessage = i === messages.length - 1;
|
261
|
-
const { role, content
|
71
|
+
const { role, content } = message;
|
262
72
|
switch (role) {
|
263
73
|
case "system": {
|
264
74
|
coreMessages.push({
|
@@ -268,30 +78,24 @@ function convertToCoreMessages(messages, options) {
|
|
268
78
|
break;
|
269
79
|
}
|
270
80
|
case "user": {
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
coreMessages.push({
|
285
|
-
role: "user",
|
286
|
-
content: experimental_attachments ? [...textParts, ...attachmentsToParts(experimental_attachments)] : textParts
|
287
|
-
});
|
288
|
-
}
|
81
|
+
coreMessages.push({
|
82
|
+
role: "user",
|
83
|
+
content: message.parts.filter(
|
84
|
+
(part) => part.type === "text" || part.type === "file"
|
85
|
+
).map(
|
86
|
+
(part) => part.type === "file" ? {
|
87
|
+
type: "file",
|
88
|
+
mediaType: part.mediaType,
|
89
|
+
filename: part.filename,
|
90
|
+
data: part.url
|
91
|
+
} : part
|
92
|
+
)
|
93
|
+
});
|
289
94
|
break;
|
290
95
|
}
|
291
96
|
case "assistant": {
|
292
97
|
if (message.parts != null) {
|
293
98
|
let processBlock2 = function() {
|
294
|
-
var _a8;
|
295
99
|
const content2 = [];
|
296
100
|
for (const part of block) {
|
297
101
|
switch (part.type) {
|
@@ -302,9 +106,8 @@ function convertToCoreMessages(messages, options) {
|
|
302
106
|
case "file": {
|
303
107
|
content2.push({
|
304
108
|
type: "file",
|
305
|
-
|
306
|
-
|
307
|
-
// TODO migration, remove
|
109
|
+
mediaType: part.mediaType,
|
110
|
+
data: part.url
|
308
111
|
});
|
309
112
|
break;
|
310
113
|
}
|
@@ -458,30 +261,93 @@ function detectSingleMessageCharacteristics(message) {
|
|
458
261
|
var import_zod6 = require("zod");
|
459
262
|
|
460
263
|
// core/types/provider-metadata.ts
|
461
|
-
var
|
264
|
+
var import_zod2 = require("zod");
|
462
265
|
|
463
266
|
// core/types/json-value.ts
|
464
|
-
var
|
465
|
-
var jsonValueSchema =
|
466
|
-
() =>
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
267
|
+
var import_zod = require("zod");
|
268
|
+
var jsonValueSchema = import_zod.z.lazy(
|
269
|
+
() => import_zod.z.union([
|
270
|
+
import_zod.z.null(),
|
271
|
+
import_zod.z.string(),
|
272
|
+
import_zod.z.number(),
|
273
|
+
import_zod.z.boolean(),
|
274
|
+
import_zod.z.record(import_zod.z.string(), jsonValueSchema),
|
275
|
+
import_zod.z.array(jsonValueSchema)
|
473
276
|
])
|
474
277
|
);
|
475
278
|
|
476
279
|
// core/types/provider-metadata.ts
|
477
|
-
var providerMetadataSchema =
|
478
|
-
|
479
|
-
|
280
|
+
var providerMetadataSchema = import_zod2.z.record(
|
281
|
+
import_zod2.z.string(),
|
282
|
+
import_zod2.z.record(import_zod2.z.string(), jsonValueSchema)
|
480
283
|
);
|
481
284
|
|
482
285
|
// core/prompt/content-part.ts
|
483
286
|
var import_zod5 = require("zod");
|
484
287
|
|
288
|
+
// core/prompt/data-content.ts
|
289
|
+
var import_provider2 = require("@ai-sdk/provider");
|
290
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
291
|
+
var import_zod3 = require("zod");
|
292
|
+
|
293
|
+
// core/prompt/split-data-url.ts
|
294
|
+
function splitDataUrl(dataUrl) {
|
295
|
+
try {
|
296
|
+
const [header, base64Content] = dataUrl.split(",");
|
297
|
+
return {
|
298
|
+
mediaType: header.split(";")[0].split(":")[1],
|
299
|
+
base64Content
|
300
|
+
};
|
301
|
+
} catch (error) {
|
302
|
+
return {
|
303
|
+
mediaType: void 0,
|
304
|
+
base64Content: void 0
|
305
|
+
};
|
306
|
+
}
|
307
|
+
}
|
308
|
+
|
309
|
+
// core/prompt/data-content.ts
|
310
|
+
var dataContentSchema = import_zod3.z.union([
|
311
|
+
import_zod3.z.string(),
|
312
|
+
import_zod3.z.instanceof(Uint8Array),
|
313
|
+
import_zod3.z.instanceof(ArrayBuffer),
|
314
|
+
import_zod3.z.custom(
|
315
|
+
// Buffer might not be available in some environments such as CloudFlare:
|
316
|
+
(value) => {
|
317
|
+
var _a6, _b;
|
318
|
+
return (_b = (_a6 = globalThis.Buffer) == null ? void 0 : _a6.isBuffer(value)) != null ? _b : false;
|
319
|
+
},
|
320
|
+
{ message: "Must be a Buffer" }
|
321
|
+
)
|
322
|
+
]);
|
323
|
+
function convertToLanguageModelV2DataContent(content) {
|
324
|
+
if (content instanceof Uint8Array) {
|
325
|
+
return { data: content, mediaType: void 0 };
|
326
|
+
}
|
327
|
+
if (content instanceof ArrayBuffer) {
|
328
|
+
return { data: new Uint8Array(content), mediaType: void 0 };
|
329
|
+
}
|
330
|
+
if (typeof content === "string") {
|
331
|
+
try {
|
332
|
+
content = new URL(content);
|
333
|
+
} catch (error) {
|
334
|
+
}
|
335
|
+
}
|
336
|
+
if (content instanceof URL && content.protocol === "data:") {
|
337
|
+
const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
|
338
|
+
content.toString()
|
339
|
+
);
|
340
|
+
if (dataUrlMediaType == null || base64Content == null) {
|
341
|
+
throw new import_provider2.AISDKError({
|
342
|
+
name: "InvalidDataContentError",
|
343
|
+
message: `Invalid data URL format in content ${content.toString()}`
|
344
|
+
});
|
345
|
+
}
|
346
|
+
return { data: base64Content, mediaType: dataUrlMediaType };
|
347
|
+
}
|
348
|
+
return { data: content, mediaType: void 0 };
|
349
|
+
}
|
350
|
+
|
485
351
|
// core/prompt/tool-result-content.ts
|
486
352
|
var import_zod4 = require("zod");
|
487
353
|
var toolResultContentSchema = import_zod4.z.array(
|
@@ -505,7 +371,6 @@ var imagePartSchema = import_zod5.z.object({
|
|
505
371
|
type: import_zod5.z.literal("image"),
|
506
372
|
image: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
|
507
373
|
mediaType: import_zod5.z.string().optional(),
|
508
|
-
mimeType: import_zod5.z.string().optional(),
|
509
374
|
providerOptions: providerMetadataSchema.optional()
|
510
375
|
});
|
511
376
|
var filePartSchema = import_zod5.z.object({
|
@@ -513,7 +378,6 @@ var filePartSchema = import_zod5.z.object({
|
|
513
378
|
data: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
|
514
379
|
filename: import_zod5.z.string().optional(),
|
515
380
|
mediaType: import_zod5.z.string(),
|
516
|
-
mimeType: import_zod5.z.string().optional(),
|
517
381
|
providerOptions: providerMetadataSchema.optional()
|
518
382
|
});
|
519
383
|
var reasoningPartSchema = import_zod5.z.object({
|
@@ -539,12 +403,14 @@ var toolResultPartSchema = import_zod5.z.object({
|
|
539
403
|
});
|
540
404
|
|
541
405
|
// core/prompt/message.ts
|
542
|
-
var
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
406
|
+
var systemModelMessageSchema = import_zod6.z.object(
|
407
|
+
{
|
408
|
+
role: import_zod6.z.literal("system"),
|
409
|
+
content: import_zod6.z.string(),
|
410
|
+
providerOptions: providerMetadataSchema.optional()
|
411
|
+
}
|
412
|
+
);
|
413
|
+
var userModelMessageSchema = import_zod6.z.object({
|
548
414
|
role: import_zod6.z.literal("user"),
|
549
415
|
content: import_zod6.z.union([
|
550
416
|
import_zod6.z.string(),
|
@@ -552,7 +418,7 @@ var coreUserMessageSchema = import_zod6.z.object({
|
|
552
418
|
]),
|
553
419
|
providerOptions: providerMetadataSchema.optional()
|
554
420
|
});
|
555
|
-
var
|
421
|
+
var assistantModelMessageSchema = import_zod6.z.object({
|
556
422
|
role: import_zod6.z.literal("assistant"),
|
557
423
|
content: import_zod6.z.union([
|
558
424
|
import_zod6.z.string(),
|
@@ -567,16 +433,16 @@ var coreAssistantMessageSchema = import_zod6.z.object({
|
|
567
433
|
]),
|
568
434
|
providerOptions: providerMetadataSchema.optional()
|
569
435
|
});
|
570
|
-
var
|
436
|
+
var toolModelMessageSchema = import_zod6.z.object({
|
571
437
|
role: import_zod6.z.literal("tool"),
|
572
438
|
content: import_zod6.z.array(toolResultPartSchema),
|
573
439
|
providerOptions: providerMetadataSchema.optional()
|
574
440
|
});
|
575
|
-
var
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
441
|
+
var modelMessageSchema = import_zod6.z.union([
|
442
|
+
systemModelMessageSchema,
|
443
|
+
userModelMessageSchema,
|
444
|
+
assistantModelMessageSchema,
|
445
|
+
toolModelMessageSchema
|
580
446
|
]);
|
581
447
|
|
582
448
|
// core/prompt/standardize-prompt.ts
|
@@ -585,26 +451,26 @@ async function standardizePrompt({
|
|
585
451
|
tools
|
586
452
|
}) {
|
587
453
|
if (prompt.prompt == null && prompt.messages == null) {
|
588
|
-
throw new
|
454
|
+
throw new import_provider3.InvalidPromptError({
|
589
455
|
prompt,
|
590
456
|
message: "prompt or messages must be defined"
|
591
457
|
});
|
592
458
|
}
|
593
459
|
if (prompt.prompt != null && prompt.messages != null) {
|
594
|
-
throw new
|
460
|
+
throw new import_provider3.InvalidPromptError({
|
595
461
|
prompt,
|
596
462
|
message: "prompt and messages cannot be defined at the same time"
|
597
463
|
});
|
598
464
|
}
|
599
465
|
if (prompt.system != null && typeof prompt.system !== "string") {
|
600
|
-
throw new
|
466
|
+
throw new import_provider3.InvalidPromptError({
|
601
467
|
prompt,
|
602
468
|
message: "system must be a string"
|
603
469
|
});
|
604
470
|
}
|
605
471
|
if (prompt.prompt != null) {
|
606
472
|
if (typeof prompt.prompt !== "string") {
|
607
|
-
throw new
|
473
|
+
throw new import_provider3.InvalidPromptError({
|
608
474
|
prompt,
|
609
475
|
message: "prompt must be a string"
|
610
476
|
});
|
@@ -622,28 +488,28 @@ async function standardizePrompt({
|
|
622
488
|
if (prompt.messages != null) {
|
623
489
|
const promptType = detectPromptType(prompt.messages);
|
624
490
|
if (promptType === "other") {
|
625
|
-
throw new
|
491
|
+
throw new import_provider3.InvalidPromptError({
|
626
492
|
prompt,
|
627
|
-
message: "messages must be an array of
|
493
|
+
message: "messages must be an array of ModelMessage or UIMessage"
|
628
494
|
});
|
629
495
|
}
|
630
|
-
const messages = promptType === "ui-messages" ?
|
496
|
+
const messages = promptType === "ui-messages" ? convertToModelMessages(prompt.messages, {
|
631
497
|
tools
|
632
498
|
}) : prompt.messages;
|
633
499
|
if (messages.length === 0) {
|
634
|
-
throw new
|
500
|
+
throw new import_provider3.InvalidPromptError({
|
635
501
|
prompt,
|
636
502
|
message: "messages must not be empty"
|
637
503
|
});
|
638
504
|
}
|
639
505
|
const validationResult = await (0, import_provider_utils2.safeValidateTypes)({
|
640
506
|
value: messages,
|
641
|
-
schema: import_zod7.z.array(
|
507
|
+
schema: import_zod7.z.array(modelMessageSchema)
|
642
508
|
});
|
643
509
|
if (!validationResult.success) {
|
644
|
-
throw new
|
510
|
+
throw new import_provider3.InvalidPromptError({
|
645
511
|
prompt,
|
646
|
-
message: "messages must be an array of
|
512
|
+
message: "messages must be an array of ModelMessage or UIMessage",
|
647
513
|
cause: validationResult.error
|
648
514
|
});
|
649
515
|
}
|
@@ -771,10 +637,13 @@ var finishMessageStreamPart = {
|
|
771
637
|
const result = {
|
772
638
|
finishReason: value.finishReason
|
773
639
|
};
|
774
|
-
if ("usage" in value && value.usage != null && typeof value.usage === "object"
|
640
|
+
if ("usage" in value && value.usage != null && typeof value.usage === "object") {
|
775
641
|
result.usage = {
|
776
|
-
|
777
|
-
|
642
|
+
inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
|
643
|
+
outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
|
644
|
+
totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
|
645
|
+
reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
|
646
|
+
cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
|
778
647
|
};
|
779
648
|
}
|
780
649
|
return {
|
@@ -796,10 +665,13 @@ var finishStepStreamPart = {
|
|
796
665
|
finishReason: value.finishReason,
|
797
666
|
isContinued: false
|
798
667
|
};
|
799
|
-
if ("usage" in value && value.usage != null && typeof value.usage === "object"
|
668
|
+
if ("usage" in value && value.usage != null && typeof value.usage === "object") {
|
800
669
|
result.usage = {
|
801
|
-
|
802
|
-
|
670
|
+
inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
|
671
|
+
outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
|
672
|
+
totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
|
673
|
+
reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
|
674
|
+
cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
|
803
675
|
};
|
804
676
|
}
|
805
677
|
if ("isContinued" in value && typeof value.isContinued === "boolean") {
|
@@ -863,9 +735,9 @@ var fileStreamPart = {
|
|
863
735
|
code: "k",
|
864
736
|
name: "file",
|
865
737
|
parse: (value) => {
|
866
|
-
if (value == null || typeof value !== "object" || !("
|
738
|
+
if (value == null || typeof value !== "object" || !("url" in value) || typeof value.url !== "string" || !("mediaType" in value) || typeof value.mediaType !== "string") {
|
867
739
|
throw new Error(
|
868
|
-
'"file" parts expect an object with a "
|
740
|
+
'"file" parts expect an object with a "url" and "mediaType" property.'
|
869
741
|
);
|
870
742
|
}
|
871
743
|
return { type: "file", value };
|
@@ -932,24 +804,24 @@ function prepareToolsAndToolChoice({
|
|
932
804
|
};
|
933
805
|
}
|
934
806
|
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
935
|
-
([
|
807
|
+
([name6]) => activeTools.includes(name6)
|
936
808
|
) : Object.entries(tools);
|
937
809
|
return {
|
938
|
-
tools: filteredTools.map(([
|
810
|
+
tools: filteredTools.map(([name6, tool]) => {
|
939
811
|
const toolType = tool.type;
|
940
812
|
switch (toolType) {
|
941
813
|
case void 0:
|
942
814
|
case "function":
|
943
815
|
return {
|
944
816
|
type: "function",
|
945
|
-
name:
|
817
|
+
name: name6,
|
946
818
|
description: tool.description,
|
947
819
|
parameters: (0, import_provider_utils3.asSchema)(tool.parameters).jsonSchema
|
948
820
|
};
|
949
821
|
case "provider-defined":
|
950
822
|
return {
|
951
823
|
type: "provider-defined",
|
952
|
-
name:
|
824
|
+
name: name6,
|
953
825
|
id: tool.id,
|
954
826
|
args: tool.args
|
955
827
|
};
|
@@ -964,58 +836,58 @@ function prepareToolsAndToolChoice({
|
|
964
836
|
}
|
965
837
|
|
966
838
|
// errors/invalid-argument-error.ts
|
967
|
-
var
|
968
|
-
var
|
969
|
-
var
|
970
|
-
var
|
971
|
-
var
|
972
|
-
var InvalidArgumentError = class extends
|
839
|
+
var import_provider4 = require("@ai-sdk/provider");
|
840
|
+
var name2 = "AI_InvalidArgumentError";
|
841
|
+
var marker2 = `vercel.ai.error.${name2}`;
|
842
|
+
var symbol2 = Symbol.for(marker2);
|
843
|
+
var _a2;
|
844
|
+
var InvalidArgumentError = class extends import_provider4.AISDKError {
|
973
845
|
constructor({
|
974
846
|
parameter,
|
975
847
|
value,
|
976
848
|
message
|
977
849
|
}) {
|
978
850
|
super({
|
979
|
-
name:
|
851
|
+
name: name2,
|
980
852
|
message: `Invalid argument for parameter ${parameter}: ${message}`
|
981
853
|
});
|
982
|
-
this[
|
854
|
+
this[_a2] = true;
|
983
855
|
this.parameter = parameter;
|
984
856
|
this.value = value;
|
985
857
|
}
|
986
858
|
static isInstance(error) {
|
987
|
-
return
|
859
|
+
return import_provider4.AISDKError.hasMarker(error, marker2);
|
988
860
|
}
|
989
861
|
};
|
990
|
-
|
862
|
+
_a2 = symbol2;
|
991
863
|
|
992
864
|
// util/retry-with-exponential-backoff.ts
|
993
|
-
var
|
865
|
+
var import_provider6 = require("@ai-sdk/provider");
|
994
866
|
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
995
867
|
|
996
868
|
// util/retry-error.ts
|
997
|
-
var
|
998
|
-
var
|
999
|
-
var
|
1000
|
-
var
|
1001
|
-
var
|
1002
|
-
var RetryError = class extends
|
869
|
+
var import_provider5 = require("@ai-sdk/provider");
|
870
|
+
var name3 = "AI_RetryError";
|
871
|
+
var marker3 = `vercel.ai.error.${name3}`;
|
872
|
+
var symbol3 = Symbol.for(marker3);
|
873
|
+
var _a3;
|
874
|
+
var RetryError = class extends import_provider5.AISDKError {
|
1003
875
|
constructor({
|
1004
876
|
message,
|
1005
877
|
reason,
|
1006
878
|
errors
|
1007
879
|
}) {
|
1008
|
-
super({ name:
|
1009
|
-
this[
|
880
|
+
super({ name: name3, message });
|
881
|
+
this[_a3] = true;
|
1010
882
|
this.reason = reason;
|
1011
883
|
this.errors = errors;
|
1012
884
|
this.lastError = errors[errors.length - 1];
|
1013
885
|
}
|
1014
886
|
static isInstance(error) {
|
1015
|
-
return
|
887
|
+
return import_provider5.AISDKError.hasMarker(error, marker3);
|
1016
888
|
}
|
1017
889
|
};
|
1018
|
-
|
890
|
+
_a3 = symbol3;
|
1019
891
|
|
1020
892
|
// util/retry-with-exponential-backoff.ts
|
1021
893
|
var retryWithExponentialBackoff = ({
|
@@ -1051,7 +923,7 @@ async function _retryWithExponentialBackoff(f, {
|
|
1051
923
|
errors: newErrors
|
1052
924
|
});
|
1053
925
|
}
|
1054
|
-
if (error instanceof Error &&
|
926
|
+
if (error instanceof Error && import_provider6.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
1055
927
|
await (0, import_provider_utils4.delay)(delayInMs);
|
1056
928
|
return _retryWithExponentialBackoff(
|
1057
929
|
f,
|
@@ -1190,13 +1062,16 @@ function prepareCallSettings({
|
|
1190
1062
|
};
|
1191
1063
|
}
|
1192
1064
|
|
1065
|
+
// core/prompt/convert-to-language-model-prompt.ts
|
1066
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1067
|
+
|
1193
1068
|
// util/download-error.ts
|
1194
|
-
var
|
1195
|
-
var
|
1196
|
-
var
|
1197
|
-
var
|
1198
|
-
var
|
1199
|
-
var DownloadError = class extends
|
1069
|
+
var import_provider7 = require("@ai-sdk/provider");
|
1070
|
+
var name4 = "AI_DownloadError";
|
1071
|
+
var marker4 = `vercel.ai.error.${name4}`;
|
1072
|
+
var symbol4 = Symbol.for(marker4);
|
1073
|
+
var _a4;
|
1074
|
+
var DownloadError = class extends import_provider7.AISDKError {
|
1200
1075
|
constructor({
|
1201
1076
|
url,
|
1202
1077
|
statusCode,
|
@@ -1204,21 +1079,21 @@ var DownloadError = class extends import_provider8.AISDKError {
|
|
1204
1079
|
cause,
|
1205
1080
|
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
1206
1081
|
}) {
|
1207
|
-
super({ name:
|
1208
|
-
this[
|
1082
|
+
super({ name: name4, message, cause });
|
1083
|
+
this[_a4] = true;
|
1209
1084
|
this.url = url;
|
1210
1085
|
this.statusCode = statusCode;
|
1211
1086
|
this.statusText = statusText;
|
1212
1087
|
}
|
1213
1088
|
static isInstance(error) {
|
1214
|
-
return
|
1089
|
+
return import_provider7.AISDKError.hasMarker(error, marker4);
|
1215
1090
|
}
|
1216
1091
|
};
|
1217
|
-
|
1092
|
+
_a4 = symbol4;
|
1218
1093
|
|
1219
1094
|
// util/download.ts
|
1220
1095
|
async function download({ url }) {
|
1221
|
-
var
|
1096
|
+
var _a6;
|
1222
1097
|
const urlText = url.toString();
|
1223
1098
|
try {
|
1224
1099
|
const response = await fetch(urlText);
|
@@ -1231,7 +1106,7 @@ async function download({ url }) {
|
|
1231
1106
|
}
|
1232
1107
|
return {
|
1233
1108
|
data: new Uint8Array(await response.arrayBuffer()),
|
1234
|
-
mediaType: (
|
1109
|
+
mediaType: (_a6 = response.headers.get("content-type")) != null ? _a6 : void 0
|
1235
1110
|
};
|
1236
1111
|
} catch (error) {
|
1237
1112
|
if (DownloadError.isInstance(error)) {
|
@@ -1343,28 +1218,27 @@ function detectMediaType({
|
|
1343
1218
|
}
|
1344
1219
|
|
1345
1220
|
// core/prompt/invalid-message-role-error.ts
|
1346
|
-
var
|
1347
|
-
var
|
1348
|
-
var
|
1349
|
-
var
|
1350
|
-
var
|
1351
|
-
var InvalidMessageRoleError = class extends
|
1221
|
+
var import_provider8 = require("@ai-sdk/provider");
|
1222
|
+
var name5 = "AI_InvalidMessageRoleError";
|
1223
|
+
var marker5 = `vercel.ai.error.${name5}`;
|
1224
|
+
var symbol5 = Symbol.for(marker5);
|
1225
|
+
var _a5;
|
1226
|
+
var InvalidMessageRoleError = class extends import_provider8.AISDKError {
|
1352
1227
|
constructor({
|
1353
1228
|
role,
|
1354
1229
|
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
1355
1230
|
}) {
|
1356
|
-
super({ name:
|
1357
|
-
this[
|
1231
|
+
super({ name: name5, message });
|
1232
|
+
this[_a5] = true;
|
1358
1233
|
this.role = role;
|
1359
1234
|
}
|
1360
1235
|
static isInstance(error) {
|
1361
|
-
return
|
1236
|
+
return import_provider8.AISDKError.hasMarker(error, marker5);
|
1362
1237
|
}
|
1363
1238
|
};
|
1364
|
-
|
1239
|
+
_a5 = symbol5;
|
1365
1240
|
|
1366
1241
|
// core/prompt/convert-to-language-model-prompt.ts
|
1367
|
-
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1368
1242
|
async function convertToLanguageModelPrompt({
|
1369
1243
|
prompt,
|
1370
1244
|
supportedUrls,
|
@@ -1420,7 +1294,6 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
1420
1294
|
// remove empty text parts:
|
1421
1295
|
(part) => part.type !== "text" || part.text !== ""
|
1422
1296
|
).map((part) => {
|
1423
|
-
var _a7;
|
1424
1297
|
const providerOptions = part.providerOptions;
|
1425
1298
|
switch (part.type) {
|
1426
1299
|
case "file": {
|
@@ -1431,7 +1304,7 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
1431
1304
|
type: "file",
|
1432
1305
|
data,
|
1433
1306
|
filename: part.filename,
|
1434
|
-
mediaType:
|
1307
|
+
mediaType: mediaType != null ? mediaType : part.mediaType,
|
1435
1308
|
providerOptions
|
1436
1309
|
};
|
1437
1310
|
}
|
@@ -1490,8 +1363,8 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
|
|
1490
1363
|
).flat().filter(
|
1491
1364
|
(part) => part.type === "image" || part.type === "file"
|
1492
1365
|
).map((part) => {
|
1493
|
-
var
|
1494
|
-
const mediaType = (
|
1366
|
+
var _a6;
|
1367
|
+
const mediaType = (_a6 = part.mediaType) != null ? _a6 : part.type === "image" ? "image/*" : void 0;
|
1495
1368
|
let data = part.type === "image" ? part.image : part.data;
|
1496
1369
|
if (typeof data === "string") {
|
1497
1370
|
try {
|
@@ -1518,7 +1391,7 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
|
|
1518
1391
|
);
|
1519
1392
|
}
|
1520
1393
|
function convertPartToLanguageModelPart(part, downloadedAssets) {
|
1521
|
-
var
|
1394
|
+
var _a6, _b;
|
1522
1395
|
if (part.type === "text") {
|
1523
1396
|
return {
|
1524
1397
|
type: "text",
|
@@ -1539,19 +1412,19 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
1539
1412
|
throw new Error(`Unsupported part type: ${type}`);
|
1540
1413
|
}
|
1541
1414
|
const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);
|
1542
|
-
let mediaType =
|
1415
|
+
let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
|
1543
1416
|
let data = convertedData;
|
1544
1417
|
if (data instanceof URL) {
|
1545
1418
|
const downloadedFile = downloadedAssets[data.toString()];
|
1546
1419
|
if (downloadedFile) {
|
1547
1420
|
data = downloadedFile.data;
|
1548
|
-
mediaType = (
|
1421
|
+
mediaType = (_a6 = downloadedFile.mediaType) != null ? _a6 : mediaType;
|
1549
1422
|
}
|
1550
1423
|
}
|
1551
1424
|
switch (type) {
|
1552
1425
|
case "image": {
|
1553
1426
|
if (data instanceof Uint8Array || typeof data === "string") {
|
1554
|
-
mediaType = (
|
1427
|
+
mediaType = (_b = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _b : mediaType;
|
1555
1428
|
}
|
1556
1429
|
return {
|
1557
1430
|
type: "file",
|
@@ -1577,18 +1450,6 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
1577
1450
|
}
|
1578
1451
|
}
|
1579
1452
|
|
1580
|
-
// core/types/usage.ts
|
1581
|
-
function calculateLanguageModelUsage({
|
1582
|
-
inputTokens,
|
1583
|
-
outputTokens
|
1584
|
-
}) {
|
1585
|
-
return {
|
1586
|
-
promptTokens: inputTokens != null ? inputTokens : NaN,
|
1587
|
-
completionTokens: outputTokens != null ? outputTokens : NaN,
|
1588
|
-
totalTokens: (inputTokens != null ? inputTokens : 0) + (outputTokens != null ? outputTokens : 0)
|
1589
|
-
};
|
1590
|
-
}
|
1591
|
-
|
1592
1453
|
// core/util/prepare-response-headers.ts
|
1593
1454
|
function prepareResponseHeaders(headers, {
|
1594
1455
|
contentType,
|
@@ -1790,7 +1651,6 @@ var StreamData = class {
|
|
1790
1651
|
0 && (module.exports = {
|
1791
1652
|
HANGING_STREAM_WARNING_TIME_MS,
|
1792
1653
|
StreamData,
|
1793
|
-
calculateLanguageModelUsage,
|
1794
1654
|
convertToLanguageModelPrompt,
|
1795
1655
|
createCallbacksTransformer,
|
1796
1656
|
formatDataStreamPart,
|