@mastra/core 0.15.3-alpha.7 → 0.15.3-alpha.9
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 +14 -0
- package/dist/agent/index.cjs +11 -11
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +6 -6
- package/dist/agent/input-processor/index.js +1 -1
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/image-utils.d.ts +56 -0
- package/dist/agent/message-list/prompt/image-utils.d.ts.map +1 -0
- package/dist/{chunk-AB2X2OLU.cjs → chunk-65ZPZGFH.cjs} +4 -4
- package/dist/{chunk-AB2X2OLU.cjs.map → chunk-65ZPZGFH.cjs.map} +1 -1
- package/dist/{chunk-EUZ3OA6Y.js → chunk-AEE54ND4.js} +3 -3
- package/dist/{chunk-EUZ3OA6Y.js.map → chunk-AEE54ND4.js.map} +1 -1
- package/dist/{chunk-P24PB73W.js → chunk-AVPW677Z.js} +3 -14
- package/dist/chunk-AVPW677Z.js.map +1 -0
- package/dist/{chunk-POFCBVHG.js → chunk-EU3ADOKK.js} +3 -3
- package/dist/{chunk-POFCBVHG.js.map → chunk-EU3ADOKK.js.map} +1 -1
- package/dist/{chunk-GJD2BTI5.cjs → chunk-EZCMCWSC.cjs} +22 -33
- package/dist/chunk-EZCMCWSC.cjs.map +1 -0
- package/dist/{chunk-NVB2F66X.cjs → chunk-FTAXL6TR.cjs} +7 -7
- package/dist/{chunk-NVB2F66X.cjs.map → chunk-FTAXL6TR.cjs.map} +1 -1
- package/dist/{chunk-BGE27UEX.js → chunk-HF7HXOCC.js} +196 -28
- package/dist/chunk-HF7HXOCC.js.map +1 -0
- package/dist/{chunk-XJO6WBIW.js → chunk-PDODMDSQ.js} +3 -3
- package/dist/{chunk-XJO6WBIW.js.map → chunk-PDODMDSQ.js.map} +1 -1
- package/dist/{chunk-AYPDYPRS.js → chunk-QQO4SF3C.js} +3 -3
- package/dist/{chunk-AYPDYPRS.js.map → chunk-QQO4SF3C.js.map} +1 -1
- package/dist/{chunk-AAJF7WLJ.cjs → chunk-SIKEQ32R.cjs} +196 -28
- package/dist/chunk-SIKEQ32R.cjs.map +1 -0
- package/dist/{chunk-626FLQPT.cjs → chunk-TCYQAAIT.cjs} +4 -4
- package/dist/{chunk-626FLQPT.cjs.map → chunk-TCYQAAIT.cjs.map} +1 -1
- package/dist/{chunk-7IIXZ5HS.cjs → chunk-ZHFYYSVY.cjs} +4 -4
- package/dist/{chunk-7IIXZ5HS.cjs.map → chunk-ZHFYYSVY.cjs.map} +1 -1
- package/dist/index.cjs +21 -21
- package/dist/index.js +6 -6
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/network/index.cjs +2 -2
- package/dist/network/index.js +1 -1
- package/dist/network/vNext/index.cjs +14 -14
- package/dist/network/vNext/index.js +2 -2
- package/dist/processors/index.cjs +8 -8
- package/dist/processors/index.js +2 -2
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/hooks.d.ts +1 -3
- package/dist/scores/hooks.d.ts.map +1 -1
- package/dist/scores/index.cjs +5 -5
- package/dist/scores/index.js +1 -1
- package/dist/storage/index.cjs +3 -3
- package/dist/storage/index.js +1 -1
- package/dist/stream/index.cjs +3 -3
- package/dist/stream/index.js +1 -1
- package/dist/workflows/default.d.ts +1 -2
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/index.cjs +10 -10
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-AAJF7WLJ.cjs.map +0 -1
- package/dist/chunk-BGE27UEX.js.map +0 -1
- package/dist/chunk-GJD2BTI5.cjs.map +0 -1
- package/dist/chunk-P24PB73W.js.map +0 -1
|
@@ -661,6 +661,79 @@ async function downloadAssetsFromMessages({
|
|
|
661
661
|
return Object.fromEntries(downloadFileList);
|
|
662
662
|
}
|
|
663
663
|
|
|
664
|
+
// src/agent/message-list/prompt/image-utils.ts
|
|
665
|
+
function parseDataUri(dataUri) {
|
|
666
|
+
if (!dataUri.startsWith("data:")) {
|
|
667
|
+
return {
|
|
668
|
+
isDataUri: false,
|
|
669
|
+
base64Content: dataUri
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
const base64Index = dataUri.indexOf(",");
|
|
673
|
+
if (base64Index === -1) {
|
|
674
|
+
return {
|
|
675
|
+
isDataUri: true,
|
|
676
|
+
base64Content: dataUri
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
const header = dataUri.substring(5, base64Index);
|
|
680
|
+
const base64Content = dataUri.substring(base64Index + 1);
|
|
681
|
+
const semicolonIndex = header.indexOf(";");
|
|
682
|
+
const mimeType = semicolonIndex !== -1 ? header.substring(0, semicolonIndex) : header;
|
|
683
|
+
return {
|
|
684
|
+
isDataUri: true,
|
|
685
|
+
mimeType: mimeType || void 0,
|
|
686
|
+
base64Content
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
function createDataUri(base64Content, mimeType = "application/octet-stream") {
|
|
690
|
+
if (base64Content.startsWith("data:")) {
|
|
691
|
+
return base64Content;
|
|
692
|
+
}
|
|
693
|
+
return `data:${mimeType};base64,${base64Content}`;
|
|
694
|
+
}
|
|
695
|
+
function imageContentToString(image, fallbackMimeType) {
|
|
696
|
+
if (typeof image === "string") {
|
|
697
|
+
return image;
|
|
698
|
+
}
|
|
699
|
+
if (image instanceof URL) {
|
|
700
|
+
return image.toString();
|
|
701
|
+
}
|
|
702
|
+
if (image instanceof Uint8Array || image instanceof ArrayBuffer || globalThis.Buffer && Buffer.isBuffer(image)) {
|
|
703
|
+
const base64 = convertDataContentToBase64String(image);
|
|
704
|
+
if (fallbackMimeType && !base64.startsWith("data:")) {
|
|
705
|
+
return `data:${fallbackMimeType};base64,${base64}`;
|
|
706
|
+
}
|
|
707
|
+
return base64;
|
|
708
|
+
}
|
|
709
|
+
return String(image);
|
|
710
|
+
}
|
|
711
|
+
function imageContentToDataUri(image, mimeType = "image/png") {
|
|
712
|
+
const imageStr = imageContentToString(image, mimeType);
|
|
713
|
+
if (imageStr.startsWith("data:")) {
|
|
714
|
+
return imageStr;
|
|
715
|
+
}
|
|
716
|
+
if (imageStr.startsWith("http://") || imageStr.startsWith("https://")) {
|
|
717
|
+
return imageStr;
|
|
718
|
+
}
|
|
719
|
+
return `data:${mimeType};base64,${imageStr}`;
|
|
720
|
+
}
|
|
721
|
+
function getImageCacheKey(image) {
|
|
722
|
+
if (image instanceof URL) {
|
|
723
|
+
return image.toString();
|
|
724
|
+
}
|
|
725
|
+
if (typeof image === "string") {
|
|
726
|
+
return image.length;
|
|
727
|
+
}
|
|
728
|
+
if (image instanceof Uint8Array) {
|
|
729
|
+
return image.byteLength;
|
|
730
|
+
}
|
|
731
|
+
if (image instanceof ArrayBuffer) {
|
|
732
|
+
return image.byteLength;
|
|
733
|
+
}
|
|
734
|
+
return image;
|
|
735
|
+
}
|
|
736
|
+
|
|
664
737
|
// src/agent/message-list/utils/ai-v5/tool.ts
|
|
665
738
|
function getToolName(type) {
|
|
666
739
|
if (typeof type === "object" && type && "type" in type) {
|
|
@@ -970,7 +1043,7 @@ var MessageList = class _MessageList {
|
|
|
970
1043
|
return {
|
|
971
1044
|
type: "file",
|
|
972
1045
|
file: new DefaultGeneratedFileWithType({
|
|
973
|
-
data: typeof c.data === `string` ? c.data : c.data instanceof URL ? c.data.toString() : convertDataContentToBase64String(c.data),
|
|
1046
|
+
data: typeof c.data === `string` ? parseDataUri(c.data).base64Content : c.data instanceof URL ? c.data.toString() : convertDataContentToBase64String(c.data),
|
|
974
1047
|
mediaType: c.mediaType
|
|
975
1048
|
})
|
|
976
1049
|
};
|
|
@@ -978,7 +1051,7 @@ var MessageList = class _MessageList {
|
|
|
978
1051
|
return {
|
|
979
1052
|
type: "file",
|
|
980
1053
|
file: new DefaultGeneratedFileWithType({
|
|
981
|
-
data: typeof c.image === `string` ? c.image : c.image instanceof URL ? c.image.toString() : convertDataContentToBase64String(c.image),
|
|
1054
|
+
data: typeof c.image === `string` ? parseDataUri(c.image).base64Content : c.image instanceof URL ? c.image.toString() : convertDataContentToBase64String(c.image),
|
|
982
1055
|
mediaType: c.mediaType || "unknown"
|
|
983
1056
|
})
|
|
984
1057
|
};
|
|
@@ -1628,7 +1701,11 @@ var MessageList = class _MessageList {
|
|
|
1628
1701
|
});
|
|
1629
1702
|
break;
|
|
1630
1703
|
case "image":
|
|
1631
|
-
parts.push({
|
|
1704
|
+
parts.push({
|
|
1705
|
+
type: "file",
|
|
1706
|
+
data: imageContentToString(part.image),
|
|
1707
|
+
mimeType: part.mimeType
|
|
1708
|
+
});
|
|
1632
1709
|
break;
|
|
1633
1710
|
case "file":
|
|
1634
1711
|
if (part.data instanceof URL) {
|
|
@@ -1761,7 +1838,7 @@ var MessageList = class _MessageList {
|
|
|
1761
1838
|
key += part.mimeType;
|
|
1762
1839
|
}
|
|
1763
1840
|
if (part.type === `image`) {
|
|
1764
|
-
key +=
|
|
1841
|
+
key += getImageCacheKey(part.image);
|
|
1765
1842
|
key += part.mimeType;
|
|
1766
1843
|
}
|
|
1767
1844
|
if (part.type === `redacted-reasoning`) {
|
|
@@ -2236,15 +2313,39 @@ var MessageList = class _MessageList {
|
|
|
2236
2313
|
});
|
|
2237
2314
|
}
|
|
2238
2315
|
break;
|
|
2239
|
-
case "file":
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2316
|
+
case "file": {
|
|
2317
|
+
if (typeof part.data === "string" && (part.data.startsWith("http://") || part.data.startsWith("https://"))) {
|
|
2318
|
+
parts.push({
|
|
2319
|
+
type: "file",
|
|
2320
|
+
url: part.data,
|
|
2321
|
+
mediaType: part.mimeType || "image/png",
|
|
2322
|
+
providerMetadata: part.providerMetadata
|
|
2323
|
+
});
|
|
2324
|
+
} else {
|
|
2325
|
+
let filePartData;
|
|
2326
|
+
let extractedMimeType = part.mimeType;
|
|
2327
|
+
if (typeof part.data === "string") {
|
|
2328
|
+
const parsed = parseDataUri(part.data);
|
|
2329
|
+
filePartData = parsed.base64Content;
|
|
2330
|
+
if (parsed.isDataUri && parsed.mimeType) {
|
|
2331
|
+
extractedMimeType = extractedMimeType || parsed.mimeType;
|
|
2332
|
+
}
|
|
2333
|
+
} else {
|
|
2334
|
+
filePartData = part.data;
|
|
2335
|
+
}
|
|
2336
|
+
const finalMimeType = extractedMimeType || "image/png";
|
|
2337
|
+
const dataUri = createDataUri(filePartData, finalMimeType);
|
|
2338
|
+
parts.push({
|
|
2339
|
+
type: "file",
|
|
2340
|
+
url: dataUri,
|
|
2341
|
+
// Use url field with data URI
|
|
2342
|
+
mediaType: finalMimeType,
|
|
2343
|
+
providerMetadata: part.providerMetadata
|
|
2344
|
+
});
|
|
2345
|
+
}
|
|
2246
2346
|
fileUrls.add(part.data);
|
|
2247
2347
|
break;
|
|
2348
|
+
}
|
|
2248
2349
|
}
|
|
2249
2350
|
}
|
|
2250
2351
|
if (v2Msg.content.content && !v3Msg.content.parts?.some((p) => p.type === `text`)) {
|
|
@@ -2415,35 +2516,102 @@ var MessageList = class _MessageList {
|
|
|
2415
2516
|
providerMetadata: part.providerOptions
|
|
2416
2517
|
});
|
|
2417
2518
|
break;
|
|
2418
|
-
case "image":
|
|
2519
|
+
case "image": {
|
|
2520
|
+
let imageData;
|
|
2521
|
+
let extractedMimeType = part.mediaType;
|
|
2522
|
+
const imageStr = imageContentToDataUri(part.image, extractedMimeType || "image/png");
|
|
2523
|
+
const parsed = parseDataUri(imageStr);
|
|
2524
|
+
if (parsed.isDataUri) {
|
|
2525
|
+
imageData = parsed.base64Content;
|
|
2526
|
+
if (!extractedMimeType && parsed.mimeType) {
|
|
2527
|
+
extractedMimeType = parsed.mimeType;
|
|
2528
|
+
}
|
|
2529
|
+
} else if (imageStr.startsWith("http://") || imageStr.startsWith("https://")) {
|
|
2530
|
+
parts.push({
|
|
2531
|
+
type: "file",
|
|
2532
|
+
url: imageStr,
|
|
2533
|
+
mediaType: part.mediaType || "image/jpeg",
|
|
2534
|
+
// Default to image/jpeg for URLs
|
|
2535
|
+
providerMetadata: part.providerOptions
|
|
2536
|
+
});
|
|
2537
|
+
break;
|
|
2538
|
+
} else {
|
|
2539
|
+
imageData = imageStr;
|
|
2540
|
+
}
|
|
2541
|
+
const finalMimeType = extractedMimeType || "image/jpeg";
|
|
2542
|
+
const dataUri = imageData.startsWith("data:") ? imageData : createDataUri(imageData, finalMimeType);
|
|
2419
2543
|
parts.push({
|
|
2420
2544
|
type: "file",
|
|
2421
|
-
url:
|
|
2422
|
-
mediaType:
|
|
2545
|
+
url: dataUri,
|
|
2546
|
+
mediaType: finalMimeType,
|
|
2423
2547
|
providerMetadata: part.providerOptions
|
|
2424
2548
|
});
|
|
2425
2549
|
break;
|
|
2426
|
-
|
|
2550
|
+
}
|
|
2551
|
+
case "file": {
|
|
2427
2552
|
if (part.data instanceof URL) {
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2553
|
+
const urlStr = part.data.toString();
|
|
2554
|
+
let extractedMimeType = part.mediaType;
|
|
2555
|
+
const parsed = parseDataUri(urlStr);
|
|
2556
|
+
if (parsed.isDataUri) {
|
|
2557
|
+
if (!extractedMimeType && parsed.mimeType) {
|
|
2558
|
+
extractedMimeType = parsed.mimeType;
|
|
2559
|
+
}
|
|
2560
|
+
if (parsed.base64Content !== urlStr) {
|
|
2561
|
+
const dataUri = createDataUri(parsed.base64Content, extractedMimeType || "image/png");
|
|
2562
|
+
parts.push({
|
|
2563
|
+
type: "file",
|
|
2564
|
+
url: dataUri,
|
|
2565
|
+
mediaType: extractedMimeType || "image/png",
|
|
2566
|
+
providerMetadata: part.providerOptions
|
|
2567
|
+
});
|
|
2568
|
+
} else {
|
|
2569
|
+
parts.push({
|
|
2570
|
+
type: "file",
|
|
2571
|
+
url: urlStr,
|
|
2572
|
+
mediaType: part.mediaType || "image/png",
|
|
2573
|
+
providerMetadata: part.providerOptions
|
|
2574
|
+
});
|
|
2575
|
+
}
|
|
2576
|
+
} else {
|
|
2436
2577
|
parts.push({
|
|
2437
2578
|
type: "file",
|
|
2438
|
-
|
|
2439
|
-
|
|
2579
|
+
url: urlStr,
|
|
2580
|
+
mediaType: part.mediaType || "application/octet-stream",
|
|
2440
2581
|
providerMetadata: part.providerOptions
|
|
2441
2582
|
});
|
|
2583
|
+
}
|
|
2584
|
+
} else {
|
|
2585
|
+
try {
|
|
2586
|
+
const base64Data = convertDataContentToBase64String(part.data);
|
|
2587
|
+
let extractedMimeType = part.mediaType;
|
|
2588
|
+
const parsed = parseDataUri(base64Data);
|
|
2589
|
+
if (parsed.isDataUri) {
|
|
2590
|
+
if (!extractedMimeType && parsed.mimeType) {
|
|
2591
|
+
extractedMimeType = parsed.mimeType;
|
|
2592
|
+
}
|
|
2593
|
+
const dataUri = createDataUri(parsed.base64Content, extractedMimeType || "image/png");
|
|
2594
|
+
parts.push({
|
|
2595
|
+
type: "file",
|
|
2596
|
+
url: dataUri,
|
|
2597
|
+
mediaType: extractedMimeType || "image/png",
|
|
2598
|
+
providerMetadata: part.providerOptions
|
|
2599
|
+
});
|
|
2600
|
+
} else {
|
|
2601
|
+
const dataUri = createDataUri(base64Data, part.mediaType || "image/png");
|
|
2602
|
+
parts.push({
|
|
2603
|
+
type: "file",
|
|
2604
|
+
url: dataUri,
|
|
2605
|
+
mediaType: part.mediaType || "image/png",
|
|
2606
|
+
providerMetadata: part.providerOptions
|
|
2607
|
+
});
|
|
2608
|
+
}
|
|
2442
2609
|
} catch (error) {
|
|
2443
2610
|
console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
|
|
2444
2611
|
}
|
|
2445
2612
|
}
|
|
2446
2613
|
break;
|
|
2614
|
+
}
|
|
2447
2615
|
}
|
|
2448
2616
|
}
|
|
2449
2617
|
}
|
|
@@ -2549,7 +2717,7 @@ var MessageList = class _MessageList {
|
|
|
2549
2717
|
key += part.mediaType;
|
|
2550
2718
|
}
|
|
2551
2719
|
if (part.type === `image`) {
|
|
2552
|
-
key +=
|
|
2720
|
+
key += getImageCacheKey(part.image);
|
|
2553
2721
|
key += part.mediaType;
|
|
2554
2722
|
}
|
|
2555
2723
|
}
|
|
@@ -2586,5 +2754,5 @@ function convertMessages(messages) {
|
|
|
2586
2754
|
}
|
|
2587
2755
|
|
|
2588
2756
|
export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
|
|
2589
|
-
//# sourceMappingURL=chunk-
|
|
2590
|
-
//# sourceMappingURL=chunk-
|
|
2757
|
+
//# sourceMappingURL=chunk-HF7HXOCC.js.map
|
|
2758
|
+
//# sourceMappingURL=chunk-HF7HXOCC.js.map
|