ai 5.0.0-canary.16 → 5.0.0-canary.17
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 +40 -0
- package/dist/index.d.mts +105 -75
- package/dist/index.d.ts +105 -75
- package/dist/index.js +168 -215
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +163 -216
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +24 -45
- package/dist/internal/index.d.ts +24 -45
- package/dist/internal/index.js +192 -324
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +185 -317
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +3 -3
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") {
|
@@ -36,229 +36,40 @@ __export(internal_exports, {
|
|
36
36
|
module.exports = __toCommonJS(internal_exports);
|
37
37
|
|
38
38
|
// core/prompt/standardize-prompt.ts
|
39
|
-
var
|
39
|
+
var import_provider3 = require("@ai-sdk/provider");
|
40
40
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
41
41
|
var import_zod7 = require("zod");
|
42
42
|
|
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
|
43
|
+
// core/prompt/message-conversion-error.ts
|
49
44
|
var import_provider = require("@ai-sdk/provider");
|
50
|
-
var name = "
|
45
|
+
var name = "AI_MessageConversionError";
|
51
46
|
var marker = `vercel.ai.error.${name}`;
|
52
47
|
var symbol = Symbol.for(marker);
|
53
48
|
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 {
|
49
|
+
var MessageConversionError = class extends import_provider.AISDKError {
|
239
50
|
constructor({
|
240
51
|
originalMessage,
|
241
52
|
message
|
242
53
|
}) {
|
243
|
-
super({ name
|
244
|
-
this[
|
54
|
+
super({ name, message });
|
55
|
+
this[_a] = true;
|
245
56
|
this.originalMessage = originalMessage;
|
246
57
|
}
|
247
58
|
static isInstance(error) {
|
248
|
-
return
|
59
|
+
return import_provider.AISDKError.hasMarker(error, marker);
|
249
60
|
}
|
250
61
|
};
|
251
|
-
|
62
|
+
_a = symbol;
|
252
63
|
|
253
|
-
// core/prompt/convert-to-
|
254
|
-
function
|
255
|
-
var
|
256
|
-
const tools = (
|
64
|
+
// core/prompt/convert-to-model-messages.ts
|
65
|
+
function convertToModelMessages(messages, options) {
|
66
|
+
var _a6, _b;
|
67
|
+
const tools = (_a6 = options == null ? void 0 : options.tools) != null ? _a6 : {};
|
257
68
|
const coreMessages = [];
|
258
69
|
for (let i = 0; i < messages.length; i++) {
|
259
70
|
const message = messages[i];
|
260
71
|
const isLastMessage = i === messages.length - 1;
|
261
|
-
const { role, content
|
72
|
+
const { role, content } = message;
|
262
73
|
switch (role) {
|
263
74
|
case "system": {
|
264
75
|
coreMessages.push({
|
@@ -268,30 +79,24 @@ function convertToCoreMessages(messages, options) {
|
|
268
79
|
break;
|
269
80
|
}
|
270
81
|
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
|
-
}
|
82
|
+
coreMessages.push({
|
83
|
+
role: "user",
|
84
|
+
content: message.parts.filter(
|
85
|
+
(part) => part.type === "text" || part.type === "file"
|
86
|
+
).map(
|
87
|
+
(part) => part.type === "file" ? {
|
88
|
+
type: "file",
|
89
|
+
mediaType: part.mediaType,
|
90
|
+
filename: part.filename,
|
91
|
+
data: part.url
|
92
|
+
} : part
|
93
|
+
)
|
94
|
+
});
|
289
95
|
break;
|
290
96
|
}
|
291
97
|
case "assistant": {
|
292
98
|
if (message.parts != null) {
|
293
99
|
let processBlock2 = function() {
|
294
|
-
var _a8;
|
295
100
|
const content2 = [];
|
296
101
|
for (const part of block) {
|
297
102
|
switch (part.type) {
|
@@ -302,9 +107,8 @@ function convertToCoreMessages(messages, options) {
|
|
302
107
|
case "file": {
|
303
108
|
content2.push({
|
304
109
|
type: "file",
|
305
|
-
|
306
|
-
|
307
|
-
// TODO migration, remove
|
110
|
+
mediaType: part.mediaType,
|
111
|
+
data: part.url
|
308
112
|
});
|
309
113
|
break;
|
310
114
|
}
|
@@ -458,30 +262,93 @@ function detectSingleMessageCharacteristics(message) {
|
|
458
262
|
var import_zod6 = require("zod");
|
459
263
|
|
460
264
|
// core/types/provider-metadata.ts
|
461
|
-
var
|
265
|
+
var import_zod2 = require("zod");
|
462
266
|
|
463
267
|
// core/types/json-value.ts
|
464
|
-
var
|
465
|
-
var jsonValueSchema =
|
466
|
-
() =>
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
268
|
+
var import_zod = require("zod");
|
269
|
+
var jsonValueSchema = import_zod.z.lazy(
|
270
|
+
() => import_zod.z.union([
|
271
|
+
import_zod.z.null(),
|
272
|
+
import_zod.z.string(),
|
273
|
+
import_zod.z.number(),
|
274
|
+
import_zod.z.boolean(),
|
275
|
+
import_zod.z.record(import_zod.z.string(), jsonValueSchema),
|
276
|
+
import_zod.z.array(jsonValueSchema)
|
473
277
|
])
|
474
278
|
);
|
475
279
|
|
476
280
|
// core/types/provider-metadata.ts
|
477
|
-
var providerMetadataSchema =
|
478
|
-
|
479
|
-
|
281
|
+
var providerMetadataSchema = import_zod2.z.record(
|
282
|
+
import_zod2.z.string(),
|
283
|
+
import_zod2.z.record(import_zod2.z.string(), jsonValueSchema)
|
480
284
|
);
|
481
285
|
|
482
286
|
// core/prompt/content-part.ts
|
483
287
|
var import_zod5 = require("zod");
|
484
288
|
|
289
|
+
// core/prompt/data-content.ts
|
290
|
+
var import_provider2 = require("@ai-sdk/provider");
|
291
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
292
|
+
var import_zod3 = require("zod");
|
293
|
+
|
294
|
+
// core/prompt/split-data-url.ts
|
295
|
+
function splitDataUrl(dataUrl) {
|
296
|
+
try {
|
297
|
+
const [header, base64Content] = dataUrl.split(",");
|
298
|
+
return {
|
299
|
+
mediaType: header.split(";")[0].split(":")[1],
|
300
|
+
base64Content
|
301
|
+
};
|
302
|
+
} catch (error) {
|
303
|
+
return {
|
304
|
+
mediaType: void 0,
|
305
|
+
base64Content: void 0
|
306
|
+
};
|
307
|
+
}
|
308
|
+
}
|
309
|
+
|
310
|
+
// core/prompt/data-content.ts
|
311
|
+
var dataContentSchema = import_zod3.z.union([
|
312
|
+
import_zod3.z.string(),
|
313
|
+
import_zod3.z.instanceof(Uint8Array),
|
314
|
+
import_zod3.z.instanceof(ArrayBuffer),
|
315
|
+
import_zod3.z.custom(
|
316
|
+
// Buffer might not be available in some environments such as CloudFlare:
|
317
|
+
(value) => {
|
318
|
+
var _a6, _b;
|
319
|
+
return (_b = (_a6 = globalThis.Buffer) == null ? void 0 : _a6.isBuffer(value)) != null ? _b : false;
|
320
|
+
},
|
321
|
+
{ message: "Must be a Buffer" }
|
322
|
+
)
|
323
|
+
]);
|
324
|
+
function convertToLanguageModelV2DataContent(content) {
|
325
|
+
if (content instanceof Uint8Array) {
|
326
|
+
return { data: content, mediaType: void 0 };
|
327
|
+
}
|
328
|
+
if (content instanceof ArrayBuffer) {
|
329
|
+
return { data: new Uint8Array(content), mediaType: void 0 };
|
330
|
+
}
|
331
|
+
if (typeof content === "string") {
|
332
|
+
try {
|
333
|
+
content = new URL(content);
|
334
|
+
} catch (error) {
|
335
|
+
}
|
336
|
+
}
|
337
|
+
if (content instanceof URL && content.protocol === "data:") {
|
338
|
+
const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
|
339
|
+
content.toString()
|
340
|
+
);
|
341
|
+
if (dataUrlMediaType == null || base64Content == null) {
|
342
|
+
throw new import_provider2.AISDKError({
|
343
|
+
name: "InvalidDataContentError",
|
344
|
+
message: `Invalid data URL format in content ${content.toString()}`
|
345
|
+
});
|
346
|
+
}
|
347
|
+
return { data: base64Content, mediaType: dataUrlMediaType };
|
348
|
+
}
|
349
|
+
return { data: content, mediaType: void 0 };
|
350
|
+
}
|
351
|
+
|
485
352
|
// core/prompt/tool-result-content.ts
|
486
353
|
var import_zod4 = require("zod");
|
487
354
|
var toolResultContentSchema = import_zod4.z.array(
|
@@ -505,7 +372,6 @@ var imagePartSchema = import_zod5.z.object({
|
|
505
372
|
type: import_zod5.z.literal("image"),
|
506
373
|
image: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
|
507
374
|
mediaType: import_zod5.z.string().optional(),
|
508
|
-
mimeType: import_zod5.z.string().optional(),
|
509
375
|
providerOptions: providerMetadataSchema.optional()
|
510
376
|
});
|
511
377
|
var filePartSchema = import_zod5.z.object({
|
@@ -513,7 +379,6 @@ var filePartSchema = import_zod5.z.object({
|
|
513
379
|
data: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
|
514
380
|
filename: import_zod5.z.string().optional(),
|
515
381
|
mediaType: import_zod5.z.string(),
|
516
|
-
mimeType: import_zod5.z.string().optional(),
|
517
382
|
providerOptions: providerMetadataSchema.optional()
|
518
383
|
});
|
519
384
|
var reasoningPartSchema = import_zod5.z.object({
|
@@ -539,12 +404,14 @@ var toolResultPartSchema = import_zod5.z.object({
|
|
539
404
|
});
|
540
405
|
|
541
406
|
// core/prompt/message.ts
|
542
|
-
var
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
407
|
+
var systemModelMessageSchema = import_zod6.z.object(
|
408
|
+
{
|
409
|
+
role: import_zod6.z.literal("system"),
|
410
|
+
content: import_zod6.z.string(),
|
411
|
+
providerOptions: providerMetadataSchema.optional()
|
412
|
+
}
|
413
|
+
);
|
414
|
+
var userModelMessageSchema = import_zod6.z.object({
|
548
415
|
role: import_zod6.z.literal("user"),
|
549
416
|
content: import_zod6.z.union([
|
550
417
|
import_zod6.z.string(),
|
@@ -552,7 +419,7 @@ var coreUserMessageSchema = import_zod6.z.object({
|
|
552
419
|
]),
|
553
420
|
providerOptions: providerMetadataSchema.optional()
|
554
421
|
});
|
555
|
-
var
|
422
|
+
var assistantModelMessageSchema = import_zod6.z.object({
|
556
423
|
role: import_zod6.z.literal("assistant"),
|
557
424
|
content: import_zod6.z.union([
|
558
425
|
import_zod6.z.string(),
|
@@ -567,16 +434,16 @@ var coreAssistantMessageSchema = import_zod6.z.object({
|
|
567
434
|
]),
|
568
435
|
providerOptions: providerMetadataSchema.optional()
|
569
436
|
});
|
570
|
-
var
|
437
|
+
var toolModelMessageSchema = import_zod6.z.object({
|
571
438
|
role: import_zod6.z.literal("tool"),
|
572
439
|
content: import_zod6.z.array(toolResultPartSchema),
|
573
440
|
providerOptions: providerMetadataSchema.optional()
|
574
441
|
});
|
575
|
-
var
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
442
|
+
var modelMessageSchema = import_zod6.z.union([
|
443
|
+
systemModelMessageSchema,
|
444
|
+
userModelMessageSchema,
|
445
|
+
assistantModelMessageSchema,
|
446
|
+
toolModelMessageSchema
|
580
447
|
]);
|
581
448
|
|
582
449
|
// core/prompt/standardize-prompt.ts
|
@@ -585,26 +452,26 @@ async function standardizePrompt({
|
|
585
452
|
tools
|
586
453
|
}) {
|
587
454
|
if (prompt.prompt == null && prompt.messages == null) {
|
588
|
-
throw new
|
455
|
+
throw new import_provider3.InvalidPromptError({
|
589
456
|
prompt,
|
590
457
|
message: "prompt or messages must be defined"
|
591
458
|
});
|
592
459
|
}
|
593
460
|
if (prompt.prompt != null && prompt.messages != null) {
|
594
|
-
throw new
|
461
|
+
throw new import_provider3.InvalidPromptError({
|
595
462
|
prompt,
|
596
463
|
message: "prompt and messages cannot be defined at the same time"
|
597
464
|
});
|
598
465
|
}
|
599
466
|
if (prompt.system != null && typeof prompt.system !== "string") {
|
600
|
-
throw new
|
467
|
+
throw new import_provider3.InvalidPromptError({
|
601
468
|
prompt,
|
602
469
|
message: "system must be a string"
|
603
470
|
});
|
604
471
|
}
|
605
472
|
if (prompt.prompt != null) {
|
606
473
|
if (typeof prompt.prompt !== "string") {
|
607
|
-
throw new
|
474
|
+
throw new import_provider3.InvalidPromptError({
|
608
475
|
prompt,
|
609
476
|
message: "prompt must be a string"
|
610
477
|
});
|
@@ -622,28 +489,28 @@ async function standardizePrompt({
|
|
622
489
|
if (prompt.messages != null) {
|
623
490
|
const promptType = detectPromptType(prompt.messages);
|
624
491
|
if (promptType === "other") {
|
625
|
-
throw new
|
492
|
+
throw new import_provider3.InvalidPromptError({
|
626
493
|
prompt,
|
627
|
-
message: "messages must be an array of
|
494
|
+
message: "messages must be an array of ModelMessage or UIMessage"
|
628
495
|
});
|
629
496
|
}
|
630
|
-
const messages = promptType === "ui-messages" ?
|
497
|
+
const messages = promptType === "ui-messages" ? convertToModelMessages(prompt.messages, {
|
631
498
|
tools
|
632
499
|
}) : prompt.messages;
|
633
500
|
if (messages.length === 0) {
|
634
|
-
throw new
|
501
|
+
throw new import_provider3.InvalidPromptError({
|
635
502
|
prompt,
|
636
503
|
message: "messages must not be empty"
|
637
504
|
});
|
638
505
|
}
|
639
506
|
const validationResult = await (0, import_provider_utils2.safeValidateTypes)({
|
640
507
|
value: messages,
|
641
|
-
schema: import_zod7.z.array(
|
508
|
+
schema: import_zod7.z.array(modelMessageSchema)
|
642
509
|
});
|
643
510
|
if (!validationResult.success) {
|
644
|
-
throw new
|
511
|
+
throw new import_provider3.InvalidPromptError({
|
645
512
|
prompt,
|
646
|
-
message: "messages must be an array of
|
513
|
+
message: "messages must be an array of ModelMessage or UIMessage",
|
647
514
|
cause: validationResult.error
|
648
515
|
});
|
649
516
|
}
|
@@ -863,9 +730,9 @@ var fileStreamPart = {
|
|
863
730
|
code: "k",
|
864
731
|
name: "file",
|
865
732
|
parse: (value) => {
|
866
|
-
if (value == null || typeof value !== "object" || !("
|
733
|
+
if (value == null || typeof value !== "object" || !("url" in value) || typeof value.url !== "string" || !("mediaType" in value) || typeof value.mediaType !== "string") {
|
867
734
|
throw new Error(
|
868
|
-
'"file" parts expect an object with a "
|
735
|
+
'"file" parts expect an object with a "url" and "mediaType" property.'
|
869
736
|
);
|
870
737
|
}
|
871
738
|
return { type: "file", value };
|
@@ -932,24 +799,24 @@ function prepareToolsAndToolChoice({
|
|
932
799
|
};
|
933
800
|
}
|
934
801
|
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
935
|
-
([
|
802
|
+
([name6]) => activeTools.includes(name6)
|
936
803
|
) : Object.entries(tools);
|
937
804
|
return {
|
938
|
-
tools: filteredTools.map(([
|
805
|
+
tools: filteredTools.map(([name6, tool]) => {
|
939
806
|
const toolType = tool.type;
|
940
807
|
switch (toolType) {
|
941
808
|
case void 0:
|
942
809
|
case "function":
|
943
810
|
return {
|
944
811
|
type: "function",
|
945
|
-
name:
|
812
|
+
name: name6,
|
946
813
|
description: tool.description,
|
947
814
|
parameters: (0, import_provider_utils3.asSchema)(tool.parameters).jsonSchema
|
948
815
|
};
|
949
816
|
case "provider-defined":
|
950
817
|
return {
|
951
818
|
type: "provider-defined",
|
952
|
-
name:
|
819
|
+
name: name6,
|
953
820
|
id: tool.id,
|
954
821
|
args: tool.args
|
955
822
|
};
|
@@ -964,58 +831,58 @@ function prepareToolsAndToolChoice({
|
|
964
831
|
}
|
965
832
|
|
966
833
|
// errors/invalid-argument-error.ts
|
967
|
-
var
|
968
|
-
var
|
969
|
-
var
|
970
|
-
var
|
971
|
-
var
|
972
|
-
var InvalidArgumentError = class extends
|
834
|
+
var import_provider4 = require("@ai-sdk/provider");
|
835
|
+
var name2 = "AI_InvalidArgumentError";
|
836
|
+
var marker2 = `vercel.ai.error.${name2}`;
|
837
|
+
var symbol2 = Symbol.for(marker2);
|
838
|
+
var _a2;
|
839
|
+
var InvalidArgumentError = class extends import_provider4.AISDKError {
|
973
840
|
constructor({
|
974
841
|
parameter,
|
975
842
|
value,
|
976
843
|
message
|
977
844
|
}) {
|
978
845
|
super({
|
979
|
-
name:
|
846
|
+
name: name2,
|
980
847
|
message: `Invalid argument for parameter ${parameter}: ${message}`
|
981
848
|
});
|
982
|
-
this[
|
849
|
+
this[_a2] = true;
|
983
850
|
this.parameter = parameter;
|
984
851
|
this.value = value;
|
985
852
|
}
|
986
853
|
static isInstance(error) {
|
987
|
-
return
|
854
|
+
return import_provider4.AISDKError.hasMarker(error, marker2);
|
988
855
|
}
|
989
856
|
};
|
990
|
-
|
857
|
+
_a2 = symbol2;
|
991
858
|
|
992
859
|
// util/retry-with-exponential-backoff.ts
|
993
|
-
var
|
860
|
+
var import_provider6 = require("@ai-sdk/provider");
|
994
861
|
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
995
862
|
|
996
863
|
// util/retry-error.ts
|
997
|
-
var
|
998
|
-
var
|
999
|
-
var
|
1000
|
-
var
|
1001
|
-
var
|
1002
|
-
var RetryError = class extends
|
864
|
+
var import_provider5 = require("@ai-sdk/provider");
|
865
|
+
var name3 = "AI_RetryError";
|
866
|
+
var marker3 = `vercel.ai.error.${name3}`;
|
867
|
+
var symbol3 = Symbol.for(marker3);
|
868
|
+
var _a3;
|
869
|
+
var RetryError = class extends import_provider5.AISDKError {
|
1003
870
|
constructor({
|
1004
871
|
message,
|
1005
872
|
reason,
|
1006
873
|
errors
|
1007
874
|
}) {
|
1008
|
-
super({ name:
|
1009
|
-
this[
|
875
|
+
super({ name: name3, message });
|
876
|
+
this[_a3] = true;
|
1010
877
|
this.reason = reason;
|
1011
878
|
this.errors = errors;
|
1012
879
|
this.lastError = errors[errors.length - 1];
|
1013
880
|
}
|
1014
881
|
static isInstance(error) {
|
1015
|
-
return
|
882
|
+
return import_provider5.AISDKError.hasMarker(error, marker3);
|
1016
883
|
}
|
1017
884
|
};
|
1018
|
-
|
885
|
+
_a3 = symbol3;
|
1019
886
|
|
1020
887
|
// util/retry-with-exponential-backoff.ts
|
1021
888
|
var retryWithExponentialBackoff = ({
|
@@ -1051,7 +918,7 @@ async function _retryWithExponentialBackoff(f, {
|
|
1051
918
|
errors: newErrors
|
1052
919
|
});
|
1053
920
|
}
|
1054
|
-
if (error instanceof Error &&
|
921
|
+
if (error instanceof Error && import_provider6.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
1055
922
|
await (0, import_provider_utils4.delay)(delayInMs);
|
1056
923
|
return _retryWithExponentialBackoff(
|
1057
924
|
f,
|
@@ -1190,13 +1057,16 @@ function prepareCallSettings({
|
|
1190
1057
|
};
|
1191
1058
|
}
|
1192
1059
|
|
1060
|
+
// core/prompt/convert-to-language-model-prompt.ts
|
1061
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1062
|
+
|
1193
1063
|
// util/download-error.ts
|
1194
|
-
var
|
1195
|
-
var
|
1196
|
-
var
|
1197
|
-
var
|
1198
|
-
var
|
1199
|
-
var DownloadError = class extends
|
1064
|
+
var import_provider7 = require("@ai-sdk/provider");
|
1065
|
+
var name4 = "AI_DownloadError";
|
1066
|
+
var marker4 = `vercel.ai.error.${name4}`;
|
1067
|
+
var symbol4 = Symbol.for(marker4);
|
1068
|
+
var _a4;
|
1069
|
+
var DownloadError = class extends import_provider7.AISDKError {
|
1200
1070
|
constructor({
|
1201
1071
|
url,
|
1202
1072
|
statusCode,
|
@@ -1204,21 +1074,21 @@ var DownloadError = class extends import_provider8.AISDKError {
|
|
1204
1074
|
cause,
|
1205
1075
|
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
1206
1076
|
}) {
|
1207
|
-
super({ name:
|
1208
|
-
this[
|
1077
|
+
super({ name: name4, message, cause });
|
1078
|
+
this[_a4] = true;
|
1209
1079
|
this.url = url;
|
1210
1080
|
this.statusCode = statusCode;
|
1211
1081
|
this.statusText = statusText;
|
1212
1082
|
}
|
1213
1083
|
static isInstance(error) {
|
1214
|
-
return
|
1084
|
+
return import_provider7.AISDKError.hasMarker(error, marker4);
|
1215
1085
|
}
|
1216
1086
|
};
|
1217
|
-
|
1087
|
+
_a4 = symbol4;
|
1218
1088
|
|
1219
1089
|
// util/download.ts
|
1220
1090
|
async function download({ url }) {
|
1221
|
-
var
|
1091
|
+
var _a6;
|
1222
1092
|
const urlText = url.toString();
|
1223
1093
|
try {
|
1224
1094
|
const response = await fetch(urlText);
|
@@ -1231,7 +1101,7 @@ async function download({ url }) {
|
|
1231
1101
|
}
|
1232
1102
|
return {
|
1233
1103
|
data: new Uint8Array(await response.arrayBuffer()),
|
1234
|
-
mediaType: (
|
1104
|
+
mediaType: (_a6 = response.headers.get("content-type")) != null ? _a6 : void 0
|
1235
1105
|
};
|
1236
1106
|
} catch (error) {
|
1237
1107
|
if (DownloadError.isInstance(error)) {
|
@@ -1343,28 +1213,27 @@ function detectMediaType({
|
|
1343
1213
|
}
|
1344
1214
|
|
1345
1215
|
// core/prompt/invalid-message-role-error.ts
|
1346
|
-
var
|
1347
|
-
var
|
1348
|
-
var
|
1349
|
-
var
|
1350
|
-
var
|
1351
|
-
var InvalidMessageRoleError = class extends
|
1216
|
+
var import_provider8 = require("@ai-sdk/provider");
|
1217
|
+
var name5 = "AI_InvalidMessageRoleError";
|
1218
|
+
var marker5 = `vercel.ai.error.${name5}`;
|
1219
|
+
var symbol5 = Symbol.for(marker5);
|
1220
|
+
var _a5;
|
1221
|
+
var InvalidMessageRoleError = class extends import_provider8.AISDKError {
|
1352
1222
|
constructor({
|
1353
1223
|
role,
|
1354
1224
|
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
1355
1225
|
}) {
|
1356
|
-
super({ name:
|
1357
|
-
this[
|
1226
|
+
super({ name: name5, message });
|
1227
|
+
this[_a5] = true;
|
1358
1228
|
this.role = role;
|
1359
1229
|
}
|
1360
1230
|
static isInstance(error) {
|
1361
|
-
return
|
1231
|
+
return import_provider8.AISDKError.hasMarker(error, marker5);
|
1362
1232
|
}
|
1363
1233
|
};
|
1364
|
-
|
1234
|
+
_a5 = symbol5;
|
1365
1235
|
|
1366
1236
|
// core/prompt/convert-to-language-model-prompt.ts
|
1367
|
-
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1368
1237
|
async function convertToLanguageModelPrompt({
|
1369
1238
|
prompt,
|
1370
1239
|
supportedUrls,
|
@@ -1420,7 +1289,6 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
1420
1289
|
// remove empty text parts:
|
1421
1290
|
(part) => part.type !== "text" || part.text !== ""
|
1422
1291
|
).map((part) => {
|
1423
|
-
var _a7;
|
1424
1292
|
const providerOptions = part.providerOptions;
|
1425
1293
|
switch (part.type) {
|
1426
1294
|
case "file": {
|
@@ -1431,7 +1299,7 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
1431
1299
|
type: "file",
|
1432
1300
|
data,
|
1433
1301
|
filename: part.filename,
|
1434
|
-
mediaType:
|
1302
|
+
mediaType: mediaType != null ? mediaType : part.mediaType,
|
1435
1303
|
providerOptions
|
1436
1304
|
};
|
1437
1305
|
}
|
@@ -1490,8 +1358,8 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
|
|
1490
1358
|
).flat().filter(
|
1491
1359
|
(part) => part.type === "image" || part.type === "file"
|
1492
1360
|
).map((part) => {
|
1493
|
-
var
|
1494
|
-
const mediaType = (
|
1361
|
+
var _a6;
|
1362
|
+
const mediaType = (_a6 = part.mediaType) != null ? _a6 : part.type === "image" ? "image/*" : void 0;
|
1495
1363
|
let data = part.type === "image" ? part.image : part.data;
|
1496
1364
|
if (typeof data === "string") {
|
1497
1365
|
try {
|
@@ -1518,7 +1386,7 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
|
|
1518
1386
|
);
|
1519
1387
|
}
|
1520
1388
|
function convertPartToLanguageModelPart(part, downloadedAssets) {
|
1521
|
-
var
|
1389
|
+
var _a6, _b;
|
1522
1390
|
if (part.type === "text") {
|
1523
1391
|
return {
|
1524
1392
|
type: "text",
|
@@ -1539,19 +1407,19 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
1539
1407
|
throw new Error(`Unsupported part type: ${type}`);
|
1540
1408
|
}
|
1541
1409
|
const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);
|
1542
|
-
let mediaType =
|
1410
|
+
let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
|
1543
1411
|
let data = convertedData;
|
1544
1412
|
if (data instanceof URL) {
|
1545
1413
|
const downloadedFile = downloadedAssets[data.toString()];
|
1546
1414
|
if (downloadedFile) {
|
1547
1415
|
data = downloadedFile.data;
|
1548
|
-
mediaType = (
|
1416
|
+
mediaType = (_a6 = downloadedFile.mediaType) != null ? _a6 : mediaType;
|
1549
1417
|
}
|
1550
1418
|
}
|
1551
1419
|
switch (type) {
|
1552
1420
|
case "image": {
|
1553
1421
|
if (data instanceof Uint8Array || typeof data === "string") {
|
1554
|
-
mediaType = (
|
1422
|
+
mediaType = (_b = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _b : mediaType;
|
1555
1423
|
}
|
1556
1424
|
return {
|
1557
1425
|
type: "file",
|