ai 0.0.0-8777c42a-20250115032312 → 0.0.0-9477ebb9-20250403064906
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 +660 -2
- package/README.md +19 -6
- package/dist/index.d.mts +3036 -1314
- package/dist/index.d.ts +3036 -1314
- package/dist/index.js +2705 -985
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2667 -962
- package/dist/index.mjs.map +1 -1
- package/mcp-stdio/create-child-process.test.ts +92 -0
- package/mcp-stdio/create-child-process.ts +21 -0
- package/mcp-stdio/dist/index.d.mts +169 -0
- package/mcp-stdio/dist/index.d.ts +169 -0
- package/mcp-stdio/dist/index.js +352 -0
- package/mcp-stdio/dist/index.js.map +1 -0
- package/mcp-stdio/dist/index.mjs +337 -0
- package/mcp-stdio/dist/index.mjs.map +1 -0
- package/mcp-stdio/get-environment.ts +43 -0
- package/mcp-stdio/index.ts +4 -0
- package/mcp-stdio/mcp-stdio-transport.test.ts +262 -0
- package/mcp-stdio/mcp-stdio-transport.ts +157 -0
- package/package.json +14 -10
- package/react/dist/index.d.mts +12 -4
- package/react/dist/index.d.ts +12 -4
- package/react/dist/index.js +0 -3
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +0 -3
- package/react/dist/index.mjs.map +1 -1
- package/rsc/dist/index.d.ts +108 -18
- package/rsc/dist/rsc-server.d.mts +108 -18
- package/rsc/dist/rsc-server.mjs +550 -256
- package/rsc/dist/rsc-server.mjs.map +1 -1
- package/rsc/dist/rsc-shared.mjs +1 -3
- package/rsc/dist/rsc-shared.mjs.map +1 -1
- package/test/dist/index.d.mts +2 -4
- package/test/dist/index.d.ts +2 -4
- package/test/dist/index.js +4 -14
- package/test/dist/index.js.map +1 -1
- package/test/dist/index.mjs +7 -14
- package/test/dist/index.mjs.map +1 -1
package/rsc/dist/rsc-server.mjs
CHANGED
@@ -240,14 +240,11 @@ var DownloadError = class extends AISDKError {
|
|
240
240
|
_a = symbol;
|
241
241
|
|
242
242
|
// util/download.ts
|
243
|
-
async function download({
|
244
|
-
url,
|
245
|
-
fetchImplementation = fetch
|
246
|
-
}) {
|
243
|
+
async function download({ url }) {
|
247
244
|
var _a9;
|
248
245
|
const urlText = url.toString();
|
249
246
|
try {
|
250
|
-
const response = await
|
247
|
+
const response = await fetch(urlText);
|
251
248
|
if (!response.ok) {
|
252
249
|
throw new DownloadError({
|
253
250
|
url: urlText,
|
@@ -269,15 +266,82 @@ async function download({
|
|
269
266
|
|
270
267
|
// core/util/detect-image-mimetype.ts
|
271
268
|
var mimeTypeSignatures = [
|
272
|
-
{
|
273
|
-
|
274
|
-
|
275
|
-
|
269
|
+
{
|
270
|
+
mimeType: "image/gif",
|
271
|
+
bytesPrefix: [71, 73, 70],
|
272
|
+
base64Prefix: "R0lG"
|
273
|
+
},
|
274
|
+
{
|
275
|
+
mimeType: "image/png",
|
276
|
+
bytesPrefix: [137, 80, 78, 71],
|
277
|
+
base64Prefix: "iVBORw"
|
278
|
+
},
|
279
|
+
{
|
280
|
+
mimeType: "image/jpeg",
|
281
|
+
bytesPrefix: [255, 216],
|
282
|
+
base64Prefix: "/9j/"
|
283
|
+
},
|
284
|
+
{
|
285
|
+
mimeType: "image/webp",
|
286
|
+
bytesPrefix: [82, 73, 70, 70],
|
287
|
+
base64Prefix: "UklGRg"
|
288
|
+
},
|
289
|
+
{
|
290
|
+
mimeType: "image/bmp",
|
291
|
+
bytesPrefix: [66, 77],
|
292
|
+
base64Prefix: "Qk"
|
293
|
+
},
|
294
|
+
{
|
295
|
+
mimeType: "image/tiff",
|
296
|
+
bytesPrefix: [73, 73, 42, 0],
|
297
|
+
base64Prefix: "SUkqAA"
|
298
|
+
},
|
299
|
+
{
|
300
|
+
mimeType: "image/tiff",
|
301
|
+
bytesPrefix: [77, 77, 0, 42],
|
302
|
+
base64Prefix: "TU0AKg"
|
303
|
+
},
|
304
|
+
{
|
305
|
+
mimeType: "image/avif",
|
306
|
+
bytesPrefix: [
|
307
|
+
0,
|
308
|
+
0,
|
309
|
+
0,
|
310
|
+
32,
|
311
|
+
102,
|
312
|
+
116,
|
313
|
+
121,
|
314
|
+
112,
|
315
|
+
97,
|
316
|
+
118,
|
317
|
+
105,
|
318
|
+
102
|
319
|
+
],
|
320
|
+
base64Prefix: "AAAAIGZ0eXBhdmlm"
|
321
|
+
},
|
322
|
+
{
|
323
|
+
mimeType: "image/heic",
|
324
|
+
bytesPrefix: [
|
325
|
+
0,
|
326
|
+
0,
|
327
|
+
0,
|
328
|
+
32,
|
329
|
+
102,
|
330
|
+
116,
|
331
|
+
121,
|
332
|
+
112,
|
333
|
+
104,
|
334
|
+
101,
|
335
|
+
105,
|
336
|
+
99
|
337
|
+
],
|
338
|
+
base64Prefix: "AAAAIGZ0eXBoZWlj"
|
339
|
+
}
|
276
340
|
];
|
277
341
|
function detectImageMimeType(image) {
|
278
|
-
for (const
|
279
|
-
if (image.length >=
|
280
|
-
return mimeType;
|
342
|
+
for (const signature of mimeTypeSignatures) {
|
343
|
+
if (typeof image === "string" ? image.startsWith(signature.base64Prefix) : image.length >= signature.bytesPrefix.length && signature.bytesPrefix.every((byte, index) => image[index] === byte)) {
|
344
|
+
return signature.mimeType;
|
281
345
|
}
|
282
346
|
}
|
283
347
|
return void 0;
|
@@ -421,13 +485,14 @@ async function convertToLanguageModelPrompt({
|
|
421
485
|
];
|
422
486
|
}
|
423
487
|
function convertToLanguageModelMessage(message, downloadedAssets) {
|
488
|
+
var _a9, _b, _c, _d, _e, _f;
|
424
489
|
const role = message.role;
|
425
490
|
switch (role) {
|
426
491
|
case "system": {
|
427
492
|
return {
|
428
493
|
role: "system",
|
429
494
|
content: message.content,
|
430
|
-
providerMetadata: message.experimental_providerMetadata
|
495
|
+
providerMetadata: (_a9 = message.providerOptions) != null ? _a9 : message.experimental_providerMetadata
|
431
496
|
};
|
432
497
|
}
|
433
498
|
case "user": {
|
@@ -435,13 +500,13 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
435
500
|
return {
|
436
501
|
role: "user",
|
437
502
|
content: [{ type: "text", text: message.content }],
|
438
|
-
providerMetadata: message.experimental_providerMetadata
|
503
|
+
providerMetadata: (_b = message.providerOptions) != null ? _b : message.experimental_providerMetadata
|
439
504
|
};
|
440
505
|
}
|
441
506
|
return {
|
442
507
|
role: "user",
|
443
508
|
content: message.content.map((part) => convertPartToLanguageModelPart(part, downloadedAssets)).filter((part) => part.type !== "text" || part.text !== ""),
|
444
|
-
providerMetadata: message.experimental_providerMetadata
|
509
|
+
providerMetadata: (_c = message.providerOptions) != null ? _c : message.experimental_providerMetadata
|
445
510
|
};
|
446
511
|
}
|
447
512
|
case "assistant": {
|
@@ -449,7 +514,7 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
449
514
|
return {
|
450
515
|
role: "assistant",
|
451
516
|
content: [{ type: "text", text: message.content }],
|
452
|
-
providerMetadata: message.experimental_providerMetadata
|
517
|
+
providerMetadata: (_d = message.providerOptions) != null ? _d : message.experimental_providerMetadata
|
453
518
|
};
|
454
519
|
}
|
455
520
|
return {
|
@@ -458,28 +523,70 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
|
|
458
523
|
// remove empty text parts:
|
459
524
|
(part) => part.type !== "text" || part.text !== ""
|
460
525
|
).map((part) => {
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
526
|
+
var _a10;
|
527
|
+
const providerOptions = (_a10 = part.providerOptions) != null ? _a10 : part.experimental_providerMetadata;
|
528
|
+
switch (part.type) {
|
529
|
+
case "file": {
|
530
|
+
return {
|
531
|
+
type: "file",
|
532
|
+
data: part.data instanceof URL ? part.data : convertDataContentToBase64String(part.data),
|
533
|
+
filename: part.filename,
|
534
|
+
mimeType: part.mimeType,
|
535
|
+
providerMetadata: providerOptions
|
536
|
+
};
|
537
|
+
}
|
538
|
+
case "reasoning": {
|
539
|
+
return {
|
540
|
+
type: "reasoning",
|
541
|
+
text: part.text,
|
542
|
+
signature: part.signature,
|
543
|
+
providerMetadata: providerOptions
|
544
|
+
};
|
545
|
+
}
|
546
|
+
case "redacted-reasoning": {
|
547
|
+
return {
|
548
|
+
type: "redacted-reasoning",
|
549
|
+
data: part.data,
|
550
|
+
providerMetadata: providerOptions
|
551
|
+
};
|
552
|
+
}
|
553
|
+
case "text": {
|
554
|
+
return {
|
555
|
+
type: "text",
|
556
|
+
text: part.text,
|
557
|
+
providerMetadata: providerOptions
|
558
|
+
};
|
559
|
+
}
|
560
|
+
case "tool-call": {
|
561
|
+
return {
|
562
|
+
type: "tool-call",
|
563
|
+
toolCallId: part.toolCallId,
|
564
|
+
toolName: part.toolName,
|
565
|
+
args: part.args,
|
566
|
+
providerMetadata: providerOptions
|
567
|
+
};
|
568
|
+
}
|
569
|
+
}
|
466
570
|
}),
|
467
|
-
providerMetadata: message.experimental_providerMetadata
|
571
|
+
providerMetadata: (_e = message.providerOptions) != null ? _e : message.experimental_providerMetadata
|
468
572
|
};
|
469
573
|
}
|
470
574
|
case "tool": {
|
471
575
|
return {
|
472
576
|
role: "tool",
|
473
|
-
content: message.content.map((part) =>
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
577
|
+
content: message.content.map((part) => {
|
578
|
+
var _a10;
|
579
|
+
return {
|
580
|
+
type: "tool-result",
|
581
|
+
toolCallId: part.toolCallId,
|
582
|
+
toolName: part.toolName,
|
583
|
+
result: part.result,
|
584
|
+
content: part.experimental_content,
|
585
|
+
isError: part.isError,
|
586
|
+
providerMetadata: (_a10 = part.providerOptions) != null ? _a10 : part.experimental_providerMetadata
|
587
|
+
};
|
588
|
+
}),
|
589
|
+
providerMetadata: (_f = message.providerOptions) != null ? _f : message.experimental_providerMetadata
|
483
590
|
};
|
484
591
|
}
|
485
592
|
default: {
|
@@ -512,12 +619,12 @@ async function downloadAssets(messages, downloadImplementation, modelSupportsIma
|
|
512
619
|
);
|
513
620
|
}
|
514
621
|
function convertPartToLanguageModelPart(part, downloadedAssets) {
|
515
|
-
var _a9;
|
622
|
+
var _a9, _b, _c, _d;
|
516
623
|
if (part.type === "text") {
|
517
624
|
return {
|
518
625
|
type: "text",
|
519
626
|
text: part.text,
|
520
|
-
providerMetadata: part.experimental_providerMetadata
|
627
|
+
providerMetadata: (_a9 = part.providerOptions) != null ? _a9 : part.experimental_providerMetadata
|
521
628
|
};
|
522
629
|
}
|
523
630
|
let mimeType = part.mimeType;
|
@@ -565,13 +672,13 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
565
672
|
switch (type) {
|
566
673
|
case "image": {
|
567
674
|
if (normalizedData instanceof Uint8Array) {
|
568
|
-
mimeType = (
|
675
|
+
mimeType = (_b = detectImageMimeType(normalizedData)) != null ? _b : mimeType;
|
569
676
|
}
|
570
677
|
return {
|
571
678
|
type: "image",
|
572
679
|
image: normalizedData,
|
573
680
|
mimeType,
|
574
|
-
providerMetadata: part.experimental_providerMetadata
|
681
|
+
providerMetadata: (_c = part.providerOptions) != null ? _c : part.experimental_providerMetadata
|
575
682
|
};
|
576
683
|
}
|
577
684
|
case "file": {
|
@@ -581,8 +688,9 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
|
|
581
688
|
return {
|
582
689
|
type: "file",
|
583
690
|
data: normalizedData instanceof Uint8Array ? convertDataContentToBase64String(normalizedData) : normalizedData,
|
691
|
+
filename: part.filename,
|
584
692
|
mimeType,
|
585
|
-
providerMetadata: part.experimental_providerMetadata
|
693
|
+
providerMetadata: (_d = part.providerOptions) != null ? _d : part.experimental_providerMetadata
|
586
694
|
};
|
587
695
|
}
|
588
696
|
}
|
@@ -697,6 +805,7 @@ function prepareCallSettings({
|
|
697
805
|
}
|
698
806
|
return {
|
699
807
|
maxTokens,
|
808
|
+
// TODO v5 remove default 0 for temperature
|
700
809
|
temperature: temperature != null ? temperature : 0,
|
701
810
|
topP,
|
702
811
|
topK,
|
@@ -709,12 +818,7 @@ function prepareCallSettings({
|
|
709
818
|
|
710
819
|
// util/retry-with-exponential-backoff.ts
|
711
820
|
import { APICallError } from "@ai-sdk/provider";
|
712
|
-
import { getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
|
713
|
-
|
714
|
-
// util/delay.ts
|
715
|
-
async function delay(delayInMs) {
|
716
|
-
return delayInMs == null ? Promise.resolve() : new Promise((resolve) => setTimeout(resolve, delayInMs));
|
717
|
-
}
|
821
|
+
import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
|
718
822
|
|
719
823
|
// util/retry-error.ts
|
720
824
|
import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
|
@@ -877,150 +981,6 @@ import { InvalidPromptError } from "@ai-sdk/provider";
|
|
877
981
|
import { safeValidateTypes } from "@ai-sdk/provider-utils";
|
878
982
|
import { z as z7 } from "zod";
|
879
983
|
|
880
|
-
// core/prompt/message.ts
|
881
|
-
import { z as z6 } from "zod";
|
882
|
-
|
883
|
-
// core/types/provider-metadata.ts
|
884
|
-
import { z as z3 } from "zod";
|
885
|
-
|
886
|
-
// core/types/json-value.ts
|
887
|
-
import { z as z2 } from "zod";
|
888
|
-
var jsonValueSchema = z2.lazy(
|
889
|
-
() => z2.union([
|
890
|
-
z2.null(),
|
891
|
-
z2.string(),
|
892
|
-
z2.number(),
|
893
|
-
z2.boolean(),
|
894
|
-
z2.record(z2.string(), jsonValueSchema),
|
895
|
-
z2.array(jsonValueSchema)
|
896
|
-
])
|
897
|
-
);
|
898
|
-
|
899
|
-
// core/types/provider-metadata.ts
|
900
|
-
var providerMetadataSchema = z3.record(
|
901
|
-
z3.string(),
|
902
|
-
z3.record(z3.string(), jsonValueSchema)
|
903
|
-
);
|
904
|
-
|
905
|
-
// core/prompt/content-part.ts
|
906
|
-
import { z as z5 } from "zod";
|
907
|
-
|
908
|
-
// core/prompt/tool-result-content.ts
|
909
|
-
import { z as z4 } from "zod";
|
910
|
-
var toolResultContentSchema = z4.array(
|
911
|
-
z4.union([
|
912
|
-
z4.object({ type: z4.literal("text"), text: z4.string() }),
|
913
|
-
z4.object({
|
914
|
-
type: z4.literal("image"),
|
915
|
-
data: z4.string(),
|
916
|
-
mimeType: z4.string().optional()
|
917
|
-
})
|
918
|
-
])
|
919
|
-
);
|
920
|
-
|
921
|
-
// core/prompt/content-part.ts
|
922
|
-
var textPartSchema = z5.object({
|
923
|
-
type: z5.literal("text"),
|
924
|
-
text: z5.string(),
|
925
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
926
|
-
});
|
927
|
-
var imagePartSchema = z5.object({
|
928
|
-
type: z5.literal("image"),
|
929
|
-
image: z5.union([dataContentSchema, z5.instanceof(URL)]),
|
930
|
-
mimeType: z5.string().optional(),
|
931
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
932
|
-
});
|
933
|
-
var filePartSchema = z5.object({
|
934
|
-
type: z5.literal("file"),
|
935
|
-
data: z5.union([dataContentSchema, z5.instanceof(URL)]),
|
936
|
-
mimeType: z5.string(),
|
937
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
938
|
-
});
|
939
|
-
var toolCallPartSchema = z5.object({
|
940
|
-
type: z5.literal("tool-call"),
|
941
|
-
toolCallId: z5.string(),
|
942
|
-
toolName: z5.string(),
|
943
|
-
args: z5.unknown()
|
944
|
-
});
|
945
|
-
var toolResultPartSchema = z5.object({
|
946
|
-
type: z5.literal("tool-result"),
|
947
|
-
toolCallId: z5.string(),
|
948
|
-
toolName: z5.string(),
|
949
|
-
result: z5.unknown(),
|
950
|
-
content: toolResultContentSchema.optional(),
|
951
|
-
isError: z5.boolean().optional(),
|
952
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
953
|
-
});
|
954
|
-
|
955
|
-
// core/prompt/message.ts
|
956
|
-
var coreSystemMessageSchema = z6.object({
|
957
|
-
role: z6.literal("system"),
|
958
|
-
content: z6.string(),
|
959
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
960
|
-
});
|
961
|
-
var coreUserMessageSchema = z6.object({
|
962
|
-
role: z6.literal("user"),
|
963
|
-
content: z6.union([
|
964
|
-
z6.string(),
|
965
|
-
z6.array(z6.union([textPartSchema, imagePartSchema, filePartSchema]))
|
966
|
-
]),
|
967
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
968
|
-
});
|
969
|
-
var coreAssistantMessageSchema = z6.object({
|
970
|
-
role: z6.literal("assistant"),
|
971
|
-
content: z6.union([
|
972
|
-
z6.string(),
|
973
|
-
z6.array(z6.union([textPartSchema, toolCallPartSchema]))
|
974
|
-
]),
|
975
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
976
|
-
});
|
977
|
-
var coreToolMessageSchema = z6.object({
|
978
|
-
role: z6.literal("tool"),
|
979
|
-
content: z6.array(toolResultPartSchema),
|
980
|
-
experimental_providerMetadata: providerMetadataSchema.optional()
|
981
|
-
});
|
982
|
-
var coreMessageSchema = z6.union([
|
983
|
-
coreSystemMessageSchema,
|
984
|
-
coreUserMessageSchema,
|
985
|
-
coreAssistantMessageSchema,
|
986
|
-
coreToolMessageSchema
|
987
|
-
]);
|
988
|
-
|
989
|
-
// core/prompt/detect-prompt-type.ts
|
990
|
-
function detectPromptType(prompt) {
|
991
|
-
if (!Array.isArray(prompt)) {
|
992
|
-
return "other";
|
993
|
-
}
|
994
|
-
if (prompt.length === 0) {
|
995
|
-
return "messages";
|
996
|
-
}
|
997
|
-
const characteristics = prompt.map(detectSingleMessageCharacteristics);
|
998
|
-
if (characteristics.some((c) => c === "has-ui-specific-parts")) {
|
999
|
-
return "ui-messages";
|
1000
|
-
} else if (characteristics.every(
|
1001
|
-
(c) => c === "has-core-specific-parts" || c === "message"
|
1002
|
-
)) {
|
1003
|
-
return "messages";
|
1004
|
-
} else {
|
1005
|
-
return "other";
|
1006
|
-
}
|
1007
|
-
}
|
1008
|
-
function detectSingleMessageCharacteristics(message) {
|
1009
|
-
if (typeof message === "object" && message !== null && (message.role === "function" || // UI-only role
|
1010
|
-
message.role === "data" || // UI-only role
|
1011
|
-
"toolInvocations" in message || // UI-specific field
|
1012
|
-
"experimental_attachments" in message)) {
|
1013
|
-
return "has-ui-specific-parts";
|
1014
|
-
} else if (typeof message === "object" && message !== null && "content" in message && (Array.isArray(message.content) || // Core messages can have array content
|
1015
|
-
"experimental_providerMetadata" in message)) {
|
1016
|
-
return "has-core-specific-parts";
|
1017
|
-
} else if (typeof message === "object" && message !== null && "role" in message && "content" in message && typeof message.content === "string" && ["system", "user", "assistant", "tool"].includes(message.role)) {
|
1018
|
-
return "message";
|
1019
|
-
} else {
|
1020
|
-
return "other";
|
1021
|
-
}
|
1022
|
-
}
|
1023
|
-
|
1024
984
|
// core/prompt/attachments-to-parts.ts
|
1025
985
|
function attachmentsToParts(attachments) {
|
1026
986
|
var _a9, _b, _c;
|
@@ -1121,11 +1081,13 @@ _a6 = symbol6;
|
|
1121
1081
|
|
1122
1082
|
// core/prompt/convert-to-core-messages.ts
|
1123
1083
|
function convertToCoreMessages(messages, options) {
|
1124
|
-
var _a9;
|
1084
|
+
var _a9, _b;
|
1125
1085
|
const tools = (_a9 = options == null ? void 0 : options.tools) != null ? _a9 : {};
|
1126
1086
|
const coreMessages = [];
|
1127
|
-
for (
|
1128
|
-
const
|
1087
|
+
for (let i = 0; i < messages.length; i++) {
|
1088
|
+
const message = messages[i];
|
1089
|
+
const isLastMessage = i === messages.length - 1;
|
1090
|
+
const { role, content, experimental_attachments } = message;
|
1129
1091
|
switch (role) {
|
1130
1092
|
case "system": {
|
1131
1093
|
coreMessages.push({
|
@@ -1135,59 +1097,204 @@ function convertToCoreMessages(messages, options) {
|
|
1135
1097
|
break;
|
1136
1098
|
}
|
1137
1099
|
case "user": {
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1100
|
+
if (message.parts == null) {
|
1101
|
+
coreMessages.push({
|
1102
|
+
role: "user",
|
1103
|
+
content: experimental_attachments ? [
|
1104
|
+
{ type: "text", text: content },
|
1105
|
+
...attachmentsToParts(experimental_attachments)
|
1106
|
+
] : content
|
1107
|
+
});
|
1108
|
+
} else {
|
1109
|
+
const textParts = message.parts.filter((part) => part.type === "text").map((part) => ({
|
1110
|
+
type: "text",
|
1111
|
+
text: part.text
|
1112
|
+
}));
|
1113
|
+
coreMessages.push({
|
1114
|
+
role: "user",
|
1115
|
+
content: experimental_attachments ? [...textParts, ...attachmentsToParts(experimental_attachments)] : textParts
|
1116
|
+
});
|
1117
|
+
}
|
1145
1118
|
break;
|
1146
1119
|
}
|
1147
1120
|
case "assistant": {
|
1148
|
-
if (
|
1121
|
+
if (message.parts != null) {
|
1122
|
+
let processBlock2 = function() {
|
1123
|
+
const content2 = [];
|
1124
|
+
for (const part of block) {
|
1125
|
+
switch (part.type) {
|
1126
|
+
case "file":
|
1127
|
+
case "text": {
|
1128
|
+
content2.push(part);
|
1129
|
+
break;
|
1130
|
+
}
|
1131
|
+
case "reasoning": {
|
1132
|
+
for (const detail of part.details) {
|
1133
|
+
switch (detail.type) {
|
1134
|
+
case "text":
|
1135
|
+
content2.push({
|
1136
|
+
type: "reasoning",
|
1137
|
+
text: detail.text,
|
1138
|
+
signature: detail.signature
|
1139
|
+
});
|
1140
|
+
break;
|
1141
|
+
case "redacted":
|
1142
|
+
content2.push({
|
1143
|
+
type: "redacted-reasoning",
|
1144
|
+
data: detail.data
|
1145
|
+
});
|
1146
|
+
break;
|
1147
|
+
}
|
1148
|
+
}
|
1149
|
+
break;
|
1150
|
+
}
|
1151
|
+
case "tool-invocation":
|
1152
|
+
content2.push({
|
1153
|
+
type: "tool-call",
|
1154
|
+
toolCallId: part.toolInvocation.toolCallId,
|
1155
|
+
toolName: part.toolInvocation.toolName,
|
1156
|
+
args: part.toolInvocation.args
|
1157
|
+
});
|
1158
|
+
break;
|
1159
|
+
default: {
|
1160
|
+
const _exhaustiveCheck = part;
|
1161
|
+
throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
|
1162
|
+
}
|
1163
|
+
}
|
1164
|
+
}
|
1165
|
+
coreMessages.push({
|
1166
|
+
role: "assistant",
|
1167
|
+
content: content2
|
1168
|
+
});
|
1169
|
+
const stepInvocations = block.filter(
|
1170
|
+
(part) => part.type === "tool-invocation"
|
1171
|
+
).map((part) => part.toolInvocation);
|
1172
|
+
if (stepInvocations.length > 0) {
|
1173
|
+
coreMessages.push({
|
1174
|
+
role: "tool",
|
1175
|
+
content: stepInvocations.map(
|
1176
|
+
(toolInvocation) => {
|
1177
|
+
if (!("result" in toolInvocation)) {
|
1178
|
+
throw new MessageConversionError({
|
1179
|
+
originalMessage: message,
|
1180
|
+
message: "ToolInvocation must have a result: " + JSON.stringify(toolInvocation)
|
1181
|
+
});
|
1182
|
+
}
|
1183
|
+
const { toolCallId, toolName, result } = toolInvocation;
|
1184
|
+
const tool = tools[toolName];
|
1185
|
+
return (tool == null ? void 0 : tool.experimental_toToolResultContent) != null ? {
|
1186
|
+
type: "tool-result",
|
1187
|
+
toolCallId,
|
1188
|
+
toolName,
|
1189
|
+
result: tool.experimental_toToolResultContent(result),
|
1190
|
+
experimental_content: tool.experimental_toToolResultContent(result)
|
1191
|
+
} : {
|
1192
|
+
type: "tool-result",
|
1193
|
+
toolCallId,
|
1194
|
+
toolName,
|
1195
|
+
result
|
1196
|
+
};
|
1197
|
+
}
|
1198
|
+
)
|
1199
|
+
});
|
1200
|
+
}
|
1201
|
+
block = [];
|
1202
|
+
blockHasToolInvocations = false;
|
1203
|
+
currentStep++;
|
1204
|
+
};
|
1205
|
+
var processBlock = processBlock2;
|
1206
|
+
let currentStep = 0;
|
1207
|
+
let blockHasToolInvocations = false;
|
1208
|
+
let block = [];
|
1209
|
+
for (const part of message.parts) {
|
1210
|
+
switch (part.type) {
|
1211
|
+
case "text": {
|
1212
|
+
if (blockHasToolInvocations) {
|
1213
|
+
processBlock2();
|
1214
|
+
}
|
1215
|
+
block.push(part);
|
1216
|
+
break;
|
1217
|
+
}
|
1218
|
+
case "file":
|
1219
|
+
case "reasoning": {
|
1220
|
+
block.push(part);
|
1221
|
+
break;
|
1222
|
+
}
|
1223
|
+
case "tool-invocation": {
|
1224
|
+
if (((_b = part.toolInvocation.step) != null ? _b : 0) !== currentStep) {
|
1225
|
+
processBlock2();
|
1226
|
+
}
|
1227
|
+
block.push(part);
|
1228
|
+
blockHasToolInvocations = true;
|
1229
|
+
break;
|
1230
|
+
}
|
1231
|
+
}
|
1232
|
+
}
|
1233
|
+
processBlock2();
|
1234
|
+
break;
|
1235
|
+
}
|
1236
|
+
const toolInvocations = message.toolInvocations;
|
1237
|
+
if (toolInvocations == null || toolInvocations.length === 0) {
|
1149
1238
|
coreMessages.push({ role: "assistant", content });
|
1150
1239
|
break;
|
1151
1240
|
}
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1241
|
+
const maxStep = toolInvocations.reduce((max, toolInvocation) => {
|
1242
|
+
var _a10;
|
1243
|
+
return Math.max(max, (_a10 = toolInvocation.step) != null ? _a10 : 0);
|
1244
|
+
}, 0);
|
1245
|
+
for (let i2 = 0; i2 <= maxStep; i2++) {
|
1246
|
+
const stepInvocations = toolInvocations.filter(
|
1247
|
+
(toolInvocation) => {
|
1248
|
+
var _a10;
|
1249
|
+
return ((_a10 = toolInvocation.step) != null ? _a10 : 0) === i2;
|
1250
|
+
}
|
1251
|
+
);
|
1252
|
+
if (stepInvocations.length === 0) {
|
1253
|
+
continue;
|
1254
|
+
}
|
1255
|
+
coreMessages.push({
|
1256
|
+
role: "assistant",
|
1257
|
+
content: [
|
1258
|
+
...isLastMessage && content && i2 === 0 ? [{ type: "text", text: content }] : [],
|
1259
|
+
...stepInvocations.map(
|
1260
|
+
({ toolCallId, toolName, args }) => ({
|
1261
|
+
type: "tool-call",
|
1262
|
+
toolCallId,
|
1263
|
+
toolName,
|
1264
|
+
args
|
1265
|
+
})
|
1266
|
+
)
|
1267
|
+
]
|
1268
|
+
});
|
1269
|
+
coreMessages.push({
|
1270
|
+
role: "tool",
|
1271
|
+
content: stepInvocations.map((toolInvocation) => {
|
1272
|
+
if (!("result" in toolInvocation)) {
|
1273
|
+
throw new MessageConversionError({
|
1274
|
+
originalMessage: message,
|
1275
|
+
message: "ToolInvocation must have a result: " + JSON.stringify(toolInvocation)
|
1276
|
+
});
|
1277
|
+
}
|
1278
|
+
const { toolCallId, toolName, result } = toolInvocation;
|
1279
|
+
const tool = tools[toolName];
|
1280
|
+
return (tool == null ? void 0 : tool.experimental_toToolResultContent) != null ? {
|
1281
|
+
type: "tool-result",
|
1159
1282
|
toolCallId,
|
1160
1283
|
toolName,
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
const { toolCallId, toolName, result } = toolInvocation;
|
1176
|
-
const tool = tools[toolName];
|
1177
|
-
return (tool == null ? void 0 : tool.experimental_toToolResultContent) != null ? {
|
1178
|
-
type: "tool-result",
|
1179
|
-
toolCallId,
|
1180
|
-
toolName,
|
1181
|
-
result: tool.experimental_toToolResultContent(result),
|
1182
|
-
experimental_content: tool.experimental_toToolResultContent(result)
|
1183
|
-
} : {
|
1184
|
-
type: "tool-result",
|
1185
|
-
toolCallId,
|
1186
|
-
toolName,
|
1187
|
-
result
|
1188
|
-
};
|
1189
|
-
})
|
1190
|
-
});
|
1284
|
+
result: tool.experimental_toToolResultContent(result),
|
1285
|
+
experimental_content: tool.experimental_toToolResultContent(result)
|
1286
|
+
} : {
|
1287
|
+
type: "tool-result",
|
1288
|
+
toolCallId,
|
1289
|
+
toolName,
|
1290
|
+
result
|
1291
|
+
};
|
1292
|
+
})
|
1293
|
+
});
|
1294
|
+
}
|
1295
|
+
if (content && !isLastMessage) {
|
1296
|
+
coreMessages.push({ role: "assistant", content });
|
1297
|
+
}
|
1191
1298
|
break;
|
1192
1299
|
}
|
1193
1300
|
case "data": {
|
@@ -1205,6 +1312,182 @@ function convertToCoreMessages(messages, options) {
|
|
1205
1312
|
return coreMessages;
|
1206
1313
|
}
|
1207
1314
|
|
1315
|
+
// core/prompt/detect-prompt-type.ts
|
1316
|
+
function detectPromptType(prompt) {
|
1317
|
+
if (!Array.isArray(prompt)) {
|
1318
|
+
return "other";
|
1319
|
+
}
|
1320
|
+
if (prompt.length === 0) {
|
1321
|
+
return "messages";
|
1322
|
+
}
|
1323
|
+
const characteristics = prompt.map(detectSingleMessageCharacteristics);
|
1324
|
+
if (characteristics.some((c) => c === "has-ui-specific-parts")) {
|
1325
|
+
return "ui-messages";
|
1326
|
+
} else if (characteristics.every(
|
1327
|
+
(c) => c === "has-core-specific-parts" || c === "message"
|
1328
|
+
)) {
|
1329
|
+
return "messages";
|
1330
|
+
} else {
|
1331
|
+
return "other";
|
1332
|
+
}
|
1333
|
+
}
|
1334
|
+
function detectSingleMessageCharacteristics(message) {
|
1335
|
+
if (typeof message === "object" && message !== null && (message.role === "function" || // UI-only role
|
1336
|
+
message.role === "data" || // UI-only role
|
1337
|
+
"toolInvocations" in message || // UI-specific field
|
1338
|
+
"parts" in message || // UI-specific field
|
1339
|
+
"experimental_attachments" in message)) {
|
1340
|
+
return "has-ui-specific-parts";
|
1341
|
+
} else if (typeof message === "object" && message !== null && "content" in message && (Array.isArray(message.content) || // Core messages can have array content
|
1342
|
+
"experimental_providerMetadata" in message || "providerOptions" in message)) {
|
1343
|
+
return "has-core-specific-parts";
|
1344
|
+
} else if (typeof message === "object" && message !== null && "role" in message && "content" in message && typeof message.content === "string" && ["system", "user", "assistant", "tool"].includes(message.role)) {
|
1345
|
+
return "message";
|
1346
|
+
} else {
|
1347
|
+
return "other";
|
1348
|
+
}
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
// core/prompt/message.ts
|
1352
|
+
import { z as z6 } from "zod";
|
1353
|
+
|
1354
|
+
// core/types/provider-metadata.ts
|
1355
|
+
import { z as z3 } from "zod";
|
1356
|
+
|
1357
|
+
// core/types/json-value.ts
|
1358
|
+
import { z as z2 } from "zod";
|
1359
|
+
var jsonValueSchema = z2.lazy(
|
1360
|
+
() => z2.union([
|
1361
|
+
z2.null(),
|
1362
|
+
z2.string(),
|
1363
|
+
z2.number(),
|
1364
|
+
z2.boolean(),
|
1365
|
+
z2.record(z2.string(), jsonValueSchema),
|
1366
|
+
z2.array(jsonValueSchema)
|
1367
|
+
])
|
1368
|
+
);
|
1369
|
+
|
1370
|
+
// core/types/provider-metadata.ts
|
1371
|
+
var providerMetadataSchema = z3.record(
|
1372
|
+
z3.string(),
|
1373
|
+
z3.record(z3.string(), jsonValueSchema)
|
1374
|
+
);
|
1375
|
+
|
1376
|
+
// core/prompt/content-part.ts
|
1377
|
+
import { z as z5 } from "zod";
|
1378
|
+
|
1379
|
+
// core/prompt/tool-result-content.ts
|
1380
|
+
import { z as z4 } from "zod";
|
1381
|
+
var toolResultContentSchema = z4.array(
|
1382
|
+
z4.union([
|
1383
|
+
z4.object({ type: z4.literal("text"), text: z4.string() }),
|
1384
|
+
z4.object({
|
1385
|
+
type: z4.literal("image"),
|
1386
|
+
data: z4.string(),
|
1387
|
+
mimeType: z4.string().optional()
|
1388
|
+
})
|
1389
|
+
])
|
1390
|
+
);
|
1391
|
+
|
1392
|
+
// core/prompt/content-part.ts
|
1393
|
+
var textPartSchema = z5.object({
|
1394
|
+
type: z5.literal("text"),
|
1395
|
+
text: z5.string(),
|
1396
|
+
providerOptions: providerMetadataSchema.optional(),
|
1397
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1398
|
+
});
|
1399
|
+
var imagePartSchema = z5.object({
|
1400
|
+
type: z5.literal("image"),
|
1401
|
+
image: z5.union([dataContentSchema, z5.instanceof(URL)]),
|
1402
|
+
mimeType: z5.string().optional(),
|
1403
|
+
providerOptions: providerMetadataSchema.optional(),
|
1404
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1405
|
+
});
|
1406
|
+
var filePartSchema = z5.object({
|
1407
|
+
type: z5.literal("file"),
|
1408
|
+
data: z5.union([dataContentSchema, z5.instanceof(URL)]),
|
1409
|
+
filename: z5.string().optional(),
|
1410
|
+
mimeType: z5.string(),
|
1411
|
+
providerOptions: providerMetadataSchema.optional(),
|
1412
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1413
|
+
});
|
1414
|
+
var reasoningPartSchema = z5.object({
|
1415
|
+
type: z5.literal("reasoning"),
|
1416
|
+
text: z5.string(),
|
1417
|
+
providerOptions: providerMetadataSchema.optional(),
|
1418
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1419
|
+
});
|
1420
|
+
var redactedReasoningPartSchema = z5.object({
|
1421
|
+
type: z5.literal("redacted-reasoning"),
|
1422
|
+
data: z5.string(),
|
1423
|
+
providerOptions: providerMetadataSchema.optional(),
|
1424
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1425
|
+
});
|
1426
|
+
var toolCallPartSchema = z5.object({
|
1427
|
+
type: z5.literal("tool-call"),
|
1428
|
+
toolCallId: z5.string(),
|
1429
|
+
toolName: z5.string(),
|
1430
|
+
args: z5.unknown(),
|
1431
|
+
providerOptions: providerMetadataSchema.optional(),
|
1432
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1433
|
+
});
|
1434
|
+
var toolResultPartSchema = z5.object({
|
1435
|
+
type: z5.literal("tool-result"),
|
1436
|
+
toolCallId: z5.string(),
|
1437
|
+
toolName: z5.string(),
|
1438
|
+
result: z5.unknown(),
|
1439
|
+
content: toolResultContentSchema.optional(),
|
1440
|
+
isError: z5.boolean().optional(),
|
1441
|
+
providerOptions: providerMetadataSchema.optional(),
|
1442
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1443
|
+
});
|
1444
|
+
|
1445
|
+
// core/prompt/message.ts
|
1446
|
+
var coreSystemMessageSchema = z6.object({
|
1447
|
+
role: z6.literal("system"),
|
1448
|
+
content: z6.string(),
|
1449
|
+
providerOptions: providerMetadataSchema.optional(),
|
1450
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1451
|
+
});
|
1452
|
+
var coreUserMessageSchema = z6.object({
|
1453
|
+
role: z6.literal("user"),
|
1454
|
+
content: z6.union([
|
1455
|
+
z6.string(),
|
1456
|
+
z6.array(z6.union([textPartSchema, imagePartSchema, filePartSchema]))
|
1457
|
+
]),
|
1458
|
+
providerOptions: providerMetadataSchema.optional(),
|
1459
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1460
|
+
});
|
1461
|
+
var coreAssistantMessageSchema = z6.object({
|
1462
|
+
role: z6.literal("assistant"),
|
1463
|
+
content: z6.union([
|
1464
|
+
z6.string(),
|
1465
|
+
z6.array(
|
1466
|
+
z6.union([
|
1467
|
+
textPartSchema,
|
1468
|
+
filePartSchema,
|
1469
|
+
reasoningPartSchema,
|
1470
|
+
redactedReasoningPartSchema,
|
1471
|
+
toolCallPartSchema
|
1472
|
+
])
|
1473
|
+
)
|
1474
|
+
]),
|
1475
|
+
providerOptions: providerMetadataSchema.optional(),
|
1476
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1477
|
+
});
|
1478
|
+
var coreToolMessageSchema = z6.object({
|
1479
|
+
role: z6.literal("tool"),
|
1480
|
+
content: z6.array(toolResultPartSchema),
|
1481
|
+
providerOptions: providerMetadataSchema.optional(),
|
1482
|
+
experimental_providerMetadata: providerMetadataSchema.optional()
|
1483
|
+
});
|
1484
|
+
var coreMessageSchema = z6.union([
|
1485
|
+
coreSystemMessageSchema,
|
1486
|
+
coreUserMessageSchema,
|
1487
|
+
coreAssistantMessageSchema,
|
1488
|
+
coreToolMessageSchema
|
1489
|
+
]);
|
1490
|
+
|
1208
1491
|
// core/prompt/standardize-prompt.ts
|
1209
1492
|
function standardizePrompt({
|
1210
1493
|
prompt,
|
@@ -1257,6 +1540,12 @@ function standardizePrompt({
|
|
1257
1540
|
const messages = promptType === "ui-messages" ? convertToCoreMessages(prompt.messages, {
|
1258
1541
|
tools
|
1259
1542
|
}) : prompt.messages;
|
1543
|
+
if (messages.length === 0) {
|
1544
|
+
throw new InvalidPromptError({
|
1545
|
+
prompt,
|
1546
|
+
message: "messages must not be empty"
|
1547
|
+
});
|
1548
|
+
}
|
1260
1549
|
const validationResult = safeValidateTypes({
|
1261
1550
|
value: messages,
|
1262
1551
|
schema: z7.array(coreMessageSchema)
|
@@ -1471,7 +1760,8 @@ async function streamUI({
|
|
1471
1760
|
headers,
|
1472
1761
|
initial,
|
1473
1762
|
text,
|
1474
|
-
experimental_providerMetadata
|
1763
|
+
experimental_providerMetadata,
|
1764
|
+
providerOptions = experimental_providerMetadata,
|
1475
1765
|
onFinish,
|
1476
1766
|
...settings
|
1477
1767
|
}) {
|
@@ -1543,26 +1833,30 @@ async function streamUI({
|
|
1543
1833
|
// streamUI tools don't support multi-modal tool result conversion
|
1544
1834
|
});
|
1545
1835
|
const result = await retry(
|
1546
|
-
async () =>
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1836
|
+
async () => {
|
1837
|
+
var _a9;
|
1838
|
+
return model.doStream({
|
1839
|
+
mode: {
|
1840
|
+
type: "regular",
|
1841
|
+
...prepareToolsAndToolChoice({
|
1842
|
+
tools,
|
1843
|
+
toolChoice,
|
1844
|
+
activeTools: void 0
|
1845
|
+
})
|
1846
|
+
},
|
1847
|
+
...prepareCallSettings(settings),
|
1848
|
+
inputFormat: validatedPrompt.type,
|
1849
|
+
prompt: await convertToLanguageModelPrompt({
|
1850
|
+
prompt: validatedPrompt,
|
1851
|
+
modelSupportsImageUrls: model.supportsImageUrls,
|
1852
|
+
modelSupportsUrl: (_a9 = model.supportsUrl) == null ? void 0 : _a9.bind(model)
|
1853
|
+
// support 'this' context
|
1854
|
+
}),
|
1855
|
+
providerMetadata: providerOptions,
|
1856
|
+
abortSignal,
|
1857
|
+
headers
|
1858
|
+
});
|
1859
|
+
}
|
1566
1860
|
);
|
1567
1861
|
const [stream, forkedStream] = result.stream.tee();
|
1568
1862
|
(async () => {
|