@mastra/core 1.0.0-beta.2 → 1.0.0-beta.4
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 +206 -0
- package/dist/agent/agent-legacy.d.ts +2 -2
- package/dist/agent/agent-legacy.d.ts.map +1 -1
- package/dist/agent/agent.d.ts +1 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.types.d.ts +3 -2
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +9 -9
- package/dist/agent/index.js +2 -2
- package/dist/agent/message-list/index.cjs +3 -3
- package/dist/agent/message-list/index.d.ts +5 -0
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/index.js +1 -1
- package/dist/agent/message-list/prompt/convert-file.d.ts +1 -1
- package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -1
- package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -1
- package/dist/agent/types.d.ts +1 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +2 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts +3 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +2 -1
- package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +2 -1
- package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts +3 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
- package/dist/{chunk-YCVEJ3UN.cjs → chunk-2NVBZKZI.cjs} +988 -233
- package/dist/chunk-2NVBZKZI.cjs.map +1 -0
- package/dist/{chunk-SNPVZPLB.js → chunk-2OTDXX73.js} +6 -5
- package/dist/chunk-2OTDXX73.js.map +1 -0
- package/dist/chunk-3PSWNGBF.js +3 -0
- package/dist/{chunk-ZV5CC35D.js.map → chunk-3PSWNGBF.js.map} +1 -1
- package/dist/{chunk-ZGHTOYHW.js → chunk-3RW5EMSB.js} +155 -24
- package/dist/chunk-3RW5EMSB.js.map +1 -0
- package/dist/chunk-3W5RQCCY.cjs +440 -0
- package/dist/chunk-3W5RQCCY.cjs.map +1 -0
- package/dist/{chunk-ET6UOTTU.cjs → chunk-4IKJAKCD.cjs} +40 -4
- package/dist/chunk-4IKJAKCD.cjs.map +1 -0
- package/dist/{chunk-2ZVKF4HP.cjs → chunk-4RXG622P.cjs} +184 -285
- package/dist/chunk-4RXG622P.cjs.map +1 -0
- package/dist/{chunk-22443P6A.cjs → chunk-5WXEYDFI.cjs} +173 -42
- package/dist/chunk-5WXEYDFI.cjs.map +1 -0
- package/dist/{chunk-ZWNI5IWX.cjs → chunk-CYVNOIXS.cjs} +13 -12
- package/dist/chunk-CYVNOIXS.cjs.map +1 -0
- package/dist/{chunk-4CDL2QJT.js → chunk-D6EDHNGV.js} +53 -16
- package/dist/chunk-D6EDHNGV.js.map +1 -0
- package/dist/chunk-FVNT7VTO.js +436 -0
- package/dist/chunk-FVNT7VTO.js.map +1 -0
- package/dist/{chunk-WM6CK2F3.cjs → chunk-HBJPYQRN.cjs} +57 -19
- package/dist/chunk-HBJPYQRN.cjs.map +1 -0
- package/dist/{chunk-HDJFSJCK.js → chunk-IHJDOC3A.js} +35 -587
- package/dist/chunk-IHJDOC3A.js.map +1 -0
- package/dist/{chunk-QUKUN6NR.cjs → chunk-ISMGVGUM.cjs} +105 -5
- package/dist/chunk-ISMGVGUM.cjs.map +1 -0
- package/dist/{chunk-JYYQQEBH.cjs → chunk-IWB65P37.cjs} +241 -4
- package/dist/chunk-IWB65P37.cjs.map +1 -0
- package/dist/{chunk-MV7KHWUT.js → chunk-IWQDBVJK.js} +25 -4
- package/dist/chunk-IWQDBVJK.js.map +1 -0
- package/dist/{chunk-XEVG546F.js → chunk-JXESKY4A.js} +3 -3
- package/dist/{chunk-XEVG546F.js.map → chunk-JXESKY4A.js.map} +1 -1
- package/dist/{chunk-7AHYOMHJ.js → chunk-KEURQGCQ.js} +40 -5
- package/dist/chunk-KEURQGCQ.js.map +1 -0
- package/dist/{chunk-JPGVRWWL.js → chunk-MDKPL2R2.js} +470 -124
- package/dist/chunk-MDKPL2R2.js.map +1 -0
- package/dist/{chunk-UIZSWUKP.js → chunk-NZAXAFI3.js} +104 -6
- package/dist/chunk-NZAXAFI3.js.map +1 -0
- package/dist/{chunk-VOY2RXOC.cjs → chunk-O6NA3Z43.cjs} +6 -6
- package/dist/{chunk-VOY2RXOC.cjs.map → chunk-O6NA3Z43.cjs.map} +1 -1
- package/dist/chunk-PE3V7GUL.cjs +4 -0
- package/dist/{chunk-LJFJTTZQ.cjs.map → chunk-PE3V7GUL.cjs.map} +1 -1
- package/dist/{chunk-I4CXL4SR.js → chunk-RXDJL5QT.js} +5 -4
- package/dist/chunk-RXDJL5QT.js.map +1 -0
- package/dist/{chunk-LWBQ4P4N.cjs → chunk-S6OEQHEI.cjs} +62 -614
- package/dist/chunk-S6OEQHEI.cjs.map +1 -0
- package/dist/{chunk-7PO6SEJF.js → chunk-U7VECK2G.js} +240 -3
- package/dist/chunk-U7VECK2G.js.map +1 -0
- package/dist/{chunk-ECFXGXWO.cjs → chunk-VSM3NLUX.cjs} +312 -210
- package/dist/chunk-VSM3NLUX.cjs.map +1 -0
- package/dist/{chunk-IQO7ANVS.cjs → chunk-VZC4BWWH.cjs} +10 -9
- package/dist/chunk-VZC4BWWH.cjs.map +1 -0
- package/dist/{chunk-JV2KH24V.js → chunk-W3DD3XP5.js} +312 -210
- package/dist/chunk-W3DD3XP5.js.map +1 -0
- package/dist/{chunk-GGYKYORQ.cjs → chunk-WQSGX6XA.cjs} +27 -6
- package/dist/chunk-WQSGX6XA.cjs.map +1 -0
- package/dist/{chunk-W7UH2PWL.js → chunk-WTYNK7Q4.js} +179 -282
- package/dist/chunk-WTYNK7Q4.js.map +1 -0
- package/dist/{chunk-7CBEP2ZQ.js → chunk-XXBWX7DT.js} +949 -197
- package/dist/chunk-XXBWX7DT.js.map +1 -0
- package/dist/{chunk-CB575O6L.cjs → chunk-ZCVTH3CH.cjs} +470 -130
- package/dist/chunk-ZCVTH3CH.cjs.map +1 -0
- package/dist/evals/base.d.ts.map +1 -1
- package/dist/evals/index.cjs +4 -4
- package/dist/evals/index.js +1 -1
- package/dist/evals/scoreTraces/index.cjs +5 -4
- package/dist/evals/scoreTraces/index.cjs.map +1 -1
- package/dist/evals/scoreTraces/index.js +3 -2
- package/dist/evals/scoreTraces/index.js.map +1 -1
- package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/integration/index.cjs +2 -2
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.cjs +26 -10
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +5 -1
- package/dist/llm/model/aisdk/v5/model.d.ts +47 -0
- package/dist/llm/model/aisdk/v5/model.d.ts.map +1 -0
- package/dist/llm/model/gateways/base.d.ts +8 -0
- package/dist/llm/model/gateways/base.d.ts.map +1 -1
- package/dist/llm/model/gateways/models-dev.d.ts +1 -0
- package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
- package/dist/llm/model/gateways/netlify.d.ts +2 -1
- package/dist/llm/model/gateways/netlify.d.ts.map +1 -1
- package/dist/llm/model/is-v2-model.d.ts +3 -0
- package/dist/llm/model/is-v2-model.d.ts.map +1 -0
- package/dist/llm/model/model-method-from-agent.d.ts +4 -0
- package/dist/llm/model/model-method-from-agent.d.ts.map +1 -0
- package/dist/llm/model/model.loop.d.ts +2 -2
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/model.loop.types.d.ts +2 -0
- package/dist/llm/model/model.loop.types.d.ts.map +1 -1
- package/dist/llm/model/provider-registry.d.ts +11 -1
- package/dist/llm/model/provider-registry.d.ts.map +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +56 -7
- package/dist/llm/model/registry-generator.d.ts.map +1 -1
- package/dist/llm/model/resolve-model.d.ts +1 -1
- package/dist/llm/model/resolve-model.d.ts.map +1 -1
- package/dist/llm/model/router.d.ts +12 -5
- package/dist/llm/model/router.d.ts.map +1 -1
- package/dist/llm/model/shared.types.d.ts +10 -4
- package/dist/llm/model/shared.types.d.ts.map +1 -1
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/network/index.d.ts.map +1 -1
- package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts +37 -0
- package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts.map +1 -0
- package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
- package/dist/loop/test-utils/generateText.d.ts.map +1 -1
- package/dist/loop/test-utils/options.d.ts.map +1 -1
- package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
- package/dist/loop/test-utils/textStream.d.ts.map +1 -1
- package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -1
- package/dist/loop/test-utils/tools.d.ts.map +1 -1
- package/dist/loop/test-utils/utils.d.ts +1 -1
- package/dist/loop/test-utils/utils.d.ts.map +1 -1
- package/dist/loop/types.d.ts +8 -3
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +12 -12
- package/dist/loop/workflows/agentic-execution/index.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +9 -9
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +4 -4
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +13 -12
- package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
- package/dist/loop/workflows/run-state.d.ts +2 -2
- package/dist/loop/workflows/run-state.d.ts.map +1 -1
- package/dist/loop/workflows/schema.d.ts +4 -4
- package/dist/loop/workflows/stream.d.ts.map +1 -1
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +127 -3
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +8 -8
- package/dist/memory/index.js +4 -4
- package/dist/models-dev-6PRLJKVZ.js +3 -0
- package/dist/{models-dev-DNBKXHT4.js.map → models-dev-6PRLJKVZ.js.map} +1 -1
- package/dist/models-dev-WHMI5G6Y.cjs +12 -0
- package/dist/{models-dev-YBEEQIX6.cjs.map → models-dev-WHMI5G6Y.cjs.map} +1 -1
- package/dist/netlify-46I3SNNV.cjs +12 -0
- package/dist/{netlify-GWNGSIRZ.cjs.map → netlify-46I3SNNV.cjs.map} +1 -1
- package/dist/netlify-EBQ6YUC6.js +3 -0
- package/dist/{netlify-7G2L5VSH.js.map → netlify-EBQ6YUC6.js.map} +1 -1
- package/dist/processors/index.cjs +11 -11
- package/dist/processors/index.js +1 -1
- package/dist/provider-registry-HDG6UMUC.js +3 -0
- package/dist/provider-registry-HDG6UMUC.js.map +1 -0
- package/dist/provider-registry-RP2W4B24.cjs +40 -0
- package/dist/provider-registry-RP2W4B24.cjs.map +1 -0
- package/dist/provider-registry.json +140 -18
- package/dist/{registry-generator-MK63POJO.cjs → registry-generator-JPCV47SC.cjs} +6 -4
- package/dist/registry-generator-JPCV47SC.cjs.map +1 -0
- package/dist/{registry-generator-H4YNODDH.js → registry-generator-XD4FPZTU.js} +6 -4
- package/dist/registry-generator-XD4FPZTU.js.map +1 -0
- package/dist/relevance/index.cjs +2 -2
- package/dist/relevance/index.js +1 -1
- package/dist/server/auth.d.ts +11 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/index.cjs +12 -1
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +12 -1
- package/dist/server/index.js.map +1 -1
- package/dist/storage/domains/workflows/inmemory.d.ts +1 -1
- package/dist/storage/domains/workflows/inmemory.d.ts.map +1 -1
- package/dist/storage/index.cjs +29 -29
- package/dist/storage/index.js +1 -1
- package/dist/storage/types.d.ts +2 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/RunOutput.d.ts +1 -1
- package/dist/stream/RunOutput.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/execute.d.ts +6 -3
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/base/input.d.ts +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +11 -11
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +4 -3
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +68 -31
- package/dist/test-utils/llm-mock.cjs.map +1 -1
- package/dist/test-utils/llm-mock.d.ts +4 -2
- package/dist/test-utils/llm-mock.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.js +67 -30
- package/dist/test-utils/llm-mock.js.map +1 -1
- package/dist/tools/index.cjs +4 -4
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/tool-builder/builder.d.ts.map +1 -1
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/validation.d.ts +12 -0
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/utils.cjs +25 -21
- package/dist/utils.d.ts +4 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/voice/aisdk/index.d.ts +3 -0
- package/dist/voice/aisdk/index.d.ts.map +1 -0
- package/dist/voice/aisdk/speech.d.ts +23 -0
- package/dist/voice/aisdk/speech.d.ts.map +1 -0
- package/dist/voice/aisdk/transcription.d.ts +22 -0
- package/dist/voice/aisdk/transcription.d.ts.map +1 -0
- package/dist/voice/composite-voice.d.ts +4 -3
- package/dist/voice/composite-voice.d.ts.map +1 -1
- package/dist/voice/index.cjs +12 -4
- package/dist/voice/index.d.ts +1 -0
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +1 -1
- package/dist/workflows/default.d.ts +24 -8
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/evented/execution-engine.d.ts +3 -1
- package/dist/workflows/evented/execution-engine.d.ts.map +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/evented/workflow-event-processor/index.d.ts +5 -4
- package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
- package/dist/workflows/evented/workflow-event-processor/loop.d.ts +1 -1
- package/dist/workflows/evented/workflow-event-processor/loop.d.ts.map +1 -1
- package/dist/workflows/evented/workflow-event-processor/parallel.d.ts +2 -2
- package/dist/workflows/evented/workflow-event-processor/parallel.d.ts.map +1 -1
- package/dist/workflows/evented/workflow-event-processor/sleep.d.ts +2 -2
- package/dist/workflows/evented/workflow-event-processor/sleep.d.ts.map +1 -1
- package/dist/workflows/evented/workflow.d.ts +2 -1
- package/dist/workflows/evented/workflow.d.ts.map +1 -1
- package/dist/workflows/execution-engine.d.ts +4 -2
- package/dist/workflows/execution-engine.d.ts.map +1 -1
- package/dist/workflows/index.cjs +28 -16
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/step.d.ts +1 -0
- package/dist/workflows/step.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +54 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/utils.d.ts +20 -0
- package/dist/workflows/utils.d.ts.map +1 -1
- package/dist/workflows/workflow.d.ts +108 -40
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +19 -27
- package/src/llm/model/provider-types.generated.d.ts +56 -7
- package/dist/chunk-22443P6A.cjs.map +0 -1
- package/dist/chunk-2ZVKF4HP.cjs.map +0 -1
- package/dist/chunk-4CDL2QJT.js.map +0 -1
- package/dist/chunk-7AHYOMHJ.js.map +0 -1
- package/dist/chunk-7CBEP2ZQ.js.map +0 -1
- package/dist/chunk-7PO6SEJF.js.map +0 -1
- package/dist/chunk-CB575O6L.cjs.map +0 -1
- package/dist/chunk-ECFXGXWO.cjs.map +0 -1
- package/dist/chunk-ET6UOTTU.cjs.map +0 -1
- package/dist/chunk-GGYKYORQ.cjs.map +0 -1
- package/dist/chunk-HDJFSJCK.js.map +0 -1
- package/dist/chunk-I4CXL4SR.js.map +0 -1
- package/dist/chunk-IQO7ANVS.cjs.map +0 -1
- package/dist/chunk-JPGVRWWL.js.map +0 -1
- package/dist/chunk-JV2KH24V.js.map +0 -1
- package/dist/chunk-JYYQQEBH.cjs.map +0 -1
- package/dist/chunk-LJFJTTZQ.cjs +0 -4
- package/dist/chunk-LWBQ4P4N.cjs.map +0 -1
- package/dist/chunk-MV7KHWUT.js.map +0 -1
- package/dist/chunk-QUKUN6NR.cjs.map +0 -1
- package/dist/chunk-SNPVZPLB.js.map +0 -1
- package/dist/chunk-UIZSWUKP.js.map +0 -1
- package/dist/chunk-W7UH2PWL.js.map +0 -1
- package/dist/chunk-WM6CK2F3.cjs.map +0 -1
- package/dist/chunk-YCVEJ3UN.cjs.map +0 -1
- package/dist/chunk-ZGHTOYHW.js.map +0 -1
- package/dist/chunk-ZV5CC35D.js +0 -3
- package/dist/chunk-ZWNI5IWX.cjs.map +0 -1
- package/dist/models-dev-DNBKXHT4.js +0 -3
- package/dist/models-dev-YBEEQIX6.cjs +0 -12
- package/dist/netlify-7G2L5VSH.js +0 -3
- package/dist/netlify-GWNGSIRZ.cjs +0 -12
- package/dist/registry-generator-H4YNODDH.js.map +0 -1
- package/dist/registry-generator-MK63POJO.cjs.map +0 -1
|
@@ -173,7 +173,7 @@ function convertImageFilePart(part, downloadedAssets) {
|
|
|
173
173
|
const { data: convertedData, mediaType: convertedMediaType } = convertToDataContent(originalData);
|
|
174
174
|
let mediaType = convertedMediaType ?? part.mediaType;
|
|
175
175
|
let data = convertedData;
|
|
176
|
-
if (data instanceof URL) {
|
|
176
|
+
if (data instanceof URL && downloadedAssets) {
|
|
177
177
|
const downloadedFile = downloadedAssets[data.toString()];
|
|
178
178
|
if (downloadedFile) {
|
|
179
179
|
data = downloadedFile.data;
|
|
@@ -675,18 +675,20 @@ async function downloadAssetsFromMessages({
|
|
|
675
675
|
}
|
|
676
676
|
}
|
|
677
677
|
return { mediaType, data };
|
|
678
|
-
}).filter((part) => part.data instanceof URL).map((part) =>
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
678
|
+
}).filter((part) => part.data instanceof URL).map((part) => {
|
|
679
|
+
return {
|
|
680
|
+
url: part.data,
|
|
681
|
+
isUrlSupportedByModel: part.mediaType != null && isUrlSupported({
|
|
682
|
+
url: part.data.toString(),
|
|
683
|
+
mediaType: part.mediaType,
|
|
684
|
+
supportedUrls: supportedUrls ?? {}
|
|
685
|
+
})
|
|
686
|
+
};
|
|
687
|
+
});
|
|
686
688
|
const downloadedFiles = await pMap(
|
|
687
689
|
filesToDownload,
|
|
688
690
|
async (fileItem) => {
|
|
689
|
-
if (
|
|
691
|
+
if (fileItem.isUrlSupportedByModel) {
|
|
690
692
|
return null;
|
|
691
693
|
}
|
|
692
694
|
return {
|
|
@@ -1041,7 +1043,10 @@ var MessageList = class _MessageList {
|
|
|
1041
1043
|
supportedUrls: options?.supportedUrls
|
|
1042
1044
|
});
|
|
1043
1045
|
let messages = [...systemMessages, ...modelMessages];
|
|
1044
|
-
|
|
1046
|
+
const hasImageOrFileContent = modelMessages.some(
|
|
1047
|
+
(message) => message.role === "user" && typeof message.content !== "string" && message.content.some((part) => part.type === "image" || part.type === "file")
|
|
1048
|
+
);
|
|
1049
|
+
if (hasImageOrFileContent) {
|
|
1045
1050
|
messages = messages.map((message) => {
|
|
1046
1051
|
if (message.role === "user") {
|
|
1047
1052
|
if (typeof message.content === "string") {
|
|
@@ -1853,6 +1858,12 @@ var MessageList = class _MessageList {
|
|
|
1853
1858
|
return ti;
|
|
1854
1859
|
});
|
|
1855
1860
|
}
|
|
1861
|
+
if (!message.threadId && this.memoryInfo?.threadId) {
|
|
1862
|
+
message.threadId = this.memoryInfo.threadId;
|
|
1863
|
+
if (!message.resourceId && this.memoryInfo?.resourceId) {
|
|
1864
|
+
message.resourceId = this.memoryInfo.resourceId;
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1856
1867
|
return message;
|
|
1857
1868
|
}
|
|
1858
1869
|
aiV4UIMessageToMastraDBMessage(message, messageSource) {
|
|
@@ -1890,137 +1901,180 @@ var MessageList = class _MessageList {
|
|
|
1890
1901
|
if (typeof coreMessage.content === "string") {
|
|
1891
1902
|
parts.push({
|
|
1892
1903
|
type: "text",
|
|
1893
|
-
text: coreMessage.content
|
|
1894
|
-
// Preserve providerOptions from CoreMessage (e.g., for system messages with cacheControl)
|
|
1895
|
-
..."providerOptions" in coreMessage && coreMessage.providerOptions ? { providerMetadata: coreMessage.providerOptions } : {}
|
|
1904
|
+
text: coreMessage.content
|
|
1896
1905
|
});
|
|
1897
1906
|
} else if (Array.isArray(coreMessage.content)) {
|
|
1898
|
-
for (const
|
|
1899
|
-
switch (
|
|
1900
|
-
case "text":
|
|
1907
|
+
for (const aiV4Part of coreMessage.content) {
|
|
1908
|
+
switch (aiV4Part.type) {
|
|
1909
|
+
case "text": {
|
|
1901
1910
|
const prevPart = parts.at(-1);
|
|
1902
1911
|
if (coreMessage.role === "assistant" && prevPart && prevPart.type === "tool-invocation") {
|
|
1903
1912
|
parts.push({ type: "step-start" });
|
|
1904
1913
|
}
|
|
1905
|
-
const
|
|
1906
|
-
..."providerOptions" in coreMessage && coreMessage.providerOptions ? coreMessage.providerOptions : {},
|
|
1907
|
-
..."providerOptions" in part && part.providerOptions ? part.providerOptions : {}
|
|
1908
|
-
};
|
|
1909
|
-
parts.push({
|
|
1914
|
+
const part = {
|
|
1910
1915
|
type: "text",
|
|
1911
|
-
text:
|
|
1912
|
-
|
|
1913
|
-
|
|
1916
|
+
text: aiV4Part.text
|
|
1917
|
+
};
|
|
1918
|
+
if (aiV4Part.providerOptions) {
|
|
1919
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
1920
|
+
}
|
|
1921
|
+
parts.push(part);
|
|
1914
1922
|
break;
|
|
1915
|
-
|
|
1916
|
-
|
|
1923
|
+
}
|
|
1924
|
+
case "tool-call": {
|
|
1925
|
+
const part = {
|
|
1917
1926
|
type: "tool-invocation",
|
|
1918
1927
|
toolInvocation: {
|
|
1919
1928
|
state: "call",
|
|
1920
|
-
toolCallId:
|
|
1921
|
-
toolName:
|
|
1922
|
-
args:
|
|
1929
|
+
toolCallId: aiV4Part.toolCallId,
|
|
1930
|
+
toolName: aiV4Part.toolName,
|
|
1931
|
+
args: aiV4Part.args
|
|
1923
1932
|
}
|
|
1924
|
-
}
|
|
1933
|
+
};
|
|
1934
|
+
if (aiV4Part.providerOptions) {
|
|
1935
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
1936
|
+
}
|
|
1937
|
+
parts.push(part);
|
|
1925
1938
|
break;
|
|
1939
|
+
}
|
|
1926
1940
|
case "tool-result":
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1941
|
+
{
|
|
1942
|
+
let toolArgs = {};
|
|
1943
|
+
const toolCallInSameMsg = coreMessage.content.find(
|
|
1944
|
+
(p) => p.type === "tool-call" && p.toolCallId === aiV4Part.toolCallId
|
|
1945
|
+
);
|
|
1946
|
+
if (toolCallInSameMsg && toolCallInSameMsg.type === "tool-call") {
|
|
1947
|
+
toolArgs = toolCallInSameMsg.args;
|
|
1948
|
+
}
|
|
1949
|
+
if (Object.keys(toolArgs).length === 0) {
|
|
1950
|
+
for (let i = this.messages.length - 1; i >= 0; i--) {
|
|
1951
|
+
const msg = this.messages[i];
|
|
1952
|
+
if (msg && msg.role === "assistant" && msg.content.parts) {
|
|
1953
|
+
const toolCallPart = msg.content.parts.find(
|
|
1954
|
+
(p) => p.type === "tool-invocation" && p.toolInvocation.toolCallId === aiV4Part.toolCallId && p.toolInvocation.state === "call"
|
|
1955
|
+
);
|
|
1956
|
+
if (toolCallPart && toolCallPart.type === "tool-invocation" && toolCallPart.toolInvocation.args) {
|
|
1957
|
+
toolArgs = toolCallPart.toolInvocation.args;
|
|
1958
|
+
break;
|
|
1959
|
+
}
|
|
1944
1960
|
}
|
|
1945
1961
|
}
|
|
1946
1962
|
}
|
|
1963
|
+
const invocation = {
|
|
1964
|
+
state: "result",
|
|
1965
|
+
toolCallId: aiV4Part.toolCallId,
|
|
1966
|
+
toolName: aiV4Part.toolName,
|
|
1967
|
+
result: aiV4Part.result ?? "",
|
|
1968
|
+
// undefined will cause AI SDK to throw an error, but for client side tool calls this really could be undefined
|
|
1969
|
+
args: toolArgs
|
|
1970
|
+
// Use the args from the corresponding tool-call
|
|
1971
|
+
};
|
|
1972
|
+
const part = {
|
|
1973
|
+
type: "tool-invocation",
|
|
1974
|
+
toolInvocation: invocation
|
|
1975
|
+
};
|
|
1976
|
+
if (aiV4Part.providerOptions) {
|
|
1977
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
1978
|
+
}
|
|
1979
|
+
parts.push(part);
|
|
1980
|
+
toolInvocations.push(invocation);
|
|
1947
1981
|
}
|
|
1948
|
-
const invocation = {
|
|
1949
|
-
state: "result",
|
|
1950
|
-
toolCallId: part.toolCallId,
|
|
1951
|
-
toolName: part.toolName,
|
|
1952
|
-
result: part.result ?? "",
|
|
1953
|
-
// undefined will cause AI SDK to throw an error, but for client side tool calls this really could be undefined
|
|
1954
|
-
args: toolArgs
|
|
1955
|
-
// Use the args from the corresponding tool-call
|
|
1956
|
-
};
|
|
1957
|
-
parts.push({
|
|
1958
|
-
type: "tool-invocation",
|
|
1959
|
-
toolInvocation: invocation
|
|
1960
|
-
});
|
|
1961
|
-
toolInvocations.push(invocation);
|
|
1962
1982
|
break;
|
|
1963
1983
|
case "reasoning":
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1984
|
+
{
|
|
1985
|
+
const part = {
|
|
1986
|
+
type: "reasoning",
|
|
1987
|
+
reasoning: "",
|
|
1988
|
+
// leave this blank so we aren't double storing it in the db along with details
|
|
1989
|
+
details: [{ type: "text", text: aiV4Part.text, signature: aiV4Part.signature }]
|
|
1990
|
+
};
|
|
1991
|
+
if (aiV4Part.providerOptions) {
|
|
1992
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
1993
|
+
}
|
|
1994
|
+
parts.push(part);
|
|
1995
|
+
}
|
|
1970
1996
|
break;
|
|
1971
1997
|
case "redacted-reasoning":
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1998
|
+
{
|
|
1999
|
+
const part = {
|
|
2000
|
+
type: "reasoning",
|
|
2001
|
+
reasoning: "",
|
|
2002
|
+
// No text reasoning for redacted parts
|
|
2003
|
+
details: [{ type: "redacted", data: aiV4Part.data }]
|
|
2004
|
+
};
|
|
2005
|
+
if (aiV4Part.providerOptions) {
|
|
2006
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2007
|
+
}
|
|
2008
|
+
parts.push(part);
|
|
2009
|
+
}
|
|
1978
2010
|
break;
|
|
1979
|
-
case "image":
|
|
1980
|
-
|
|
2011
|
+
case "image": {
|
|
2012
|
+
const part = {
|
|
1981
2013
|
type: "file",
|
|
1982
|
-
data: imageContentToString(
|
|
1983
|
-
mimeType:
|
|
1984
|
-
}
|
|
2014
|
+
data: imageContentToString(aiV4Part.image),
|
|
2015
|
+
mimeType: aiV4Part.mimeType
|
|
2016
|
+
};
|
|
2017
|
+
if (aiV4Part.providerOptions) {
|
|
2018
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2019
|
+
}
|
|
2020
|
+
parts.push(part);
|
|
1985
2021
|
break;
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
2022
|
+
}
|
|
2023
|
+
case "file": {
|
|
2024
|
+
if (aiV4Part.data instanceof URL) {
|
|
2025
|
+
const part = {
|
|
1989
2026
|
type: "file",
|
|
1990
|
-
data:
|
|
1991
|
-
mimeType:
|
|
1992
|
-
}
|
|
1993
|
-
|
|
1994
|
-
|
|
2027
|
+
data: aiV4Part.data.toString(),
|
|
2028
|
+
mimeType: aiV4Part.mimeType
|
|
2029
|
+
};
|
|
2030
|
+
if (aiV4Part.providerOptions) {
|
|
2031
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2032
|
+
}
|
|
2033
|
+
parts.push(part);
|
|
2034
|
+
} else if (typeof aiV4Part.data === "string") {
|
|
2035
|
+
const categorized = categorizeFileData(aiV4Part.data, aiV4Part.mimeType);
|
|
1995
2036
|
if (categorized.type === "url" || categorized.type === "dataUri") {
|
|
1996
|
-
|
|
2037
|
+
const part = {
|
|
1997
2038
|
type: "file",
|
|
1998
|
-
data:
|
|
2039
|
+
data: aiV4Part.data,
|
|
1999
2040
|
mimeType: categorized.mimeType || "image/png"
|
|
2000
|
-
}
|
|
2041
|
+
};
|
|
2042
|
+
if (aiV4Part.providerOptions) {
|
|
2043
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2044
|
+
}
|
|
2045
|
+
parts.push(part);
|
|
2001
2046
|
} else {
|
|
2002
2047
|
try {
|
|
2003
|
-
|
|
2048
|
+
const part = {
|
|
2004
2049
|
type: "file",
|
|
2005
2050
|
mimeType: categorized.mimeType || "image/png",
|
|
2006
|
-
data: convertDataContentToBase64String(
|
|
2007
|
-
}
|
|
2051
|
+
data: convertDataContentToBase64String(aiV4Part.data)
|
|
2052
|
+
};
|
|
2053
|
+
if (aiV4Part.providerOptions) {
|
|
2054
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2055
|
+
}
|
|
2056
|
+
parts.push(part);
|
|
2008
2057
|
} catch (error) {
|
|
2009
2058
|
console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
|
|
2010
2059
|
}
|
|
2011
2060
|
}
|
|
2012
2061
|
} else {
|
|
2013
2062
|
try {
|
|
2014
|
-
|
|
2063
|
+
const part = {
|
|
2015
2064
|
type: "file",
|
|
2016
|
-
mimeType:
|
|
2017
|
-
data: convertDataContentToBase64String(
|
|
2018
|
-
}
|
|
2065
|
+
mimeType: aiV4Part.mimeType,
|
|
2066
|
+
data: convertDataContentToBase64String(aiV4Part.data)
|
|
2067
|
+
};
|
|
2068
|
+
if (aiV4Part.providerOptions) {
|
|
2069
|
+
part.providerMetadata = aiV4Part.providerOptions;
|
|
2070
|
+
}
|
|
2071
|
+
parts.push(part);
|
|
2019
2072
|
} catch (error) {
|
|
2020
2073
|
console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
|
|
2021
2074
|
}
|
|
2022
2075
|
}
|
|
2023
2076
|
break;
|
|
2077
|
+
}
|
|
2024
2078
|
}
|
|
2025
2079
|
}
|
|
2026
2080
|
}
|
|
@@ -2031,6 +2085,9 @@ var MessageList = class _MessageList {
|
|
|
2031
2085
|
if (toolInvocations.length) content.toolInvocations = toolInvocations;
|
|
2032
2086
|
if (typeof coreMessage.content === `string`) content.content = coreMessage.content;
|
|
2033
2087
|
if (experimentalAttachments.length) content.experimental_attachments = experimentalAttachments;
|
|
2088
|
+
if (coreMessage.providerOptions) {
|
|
2089
|
+
content.providerMetadata = coreMessage.providerOptions;
|
|
2090
|
+
}
|
|
2034
2091
|
return {
|
|
2035
2092
|
id,
|
|
2036
2093
|
role: _MessageList.getRole(coreMessage),
|
|
@@ -2381,6 +2438,9 @@ var MessageList = class _MessageList {
|
|
|
2381
2438
|
if (dbMsg.createdAt) metadata.createdAt = dbMsg.createdAt;
|
|
2382
2439
|
if (dbMsg.threadId) metadata.threadId = dbMsg.threadId;
|
|
2383
2440
|
if (dbMsg.resourceId) metadata.resourceId = dbMsg.resourceId;
|
|
2441
|
+
if (dbMsg.content.providerMetadata) {
|
|
2442
|
+
metadata.providerMetadata = dbMsg.content.providerMetadata;
|
|
2443
|
+
}
|
|
2384
2444
|
const hasToolInvocationParts = dbMsg.content.parts?.some((p) => p.type === "tool-invocation");
|
|
2385
2445
|
if (dbMsg.content.toolInvocations && !hasToolInvocationParts) {
|
|
2386
2446
|
for (const invocation of dbMsg.content.toolInvocations) {
|
|
@@ -2447,18 +2507,20 @@ var MessageList = class _MessageList {
|
|
|
2447
2507
|
continue;
|
|
2448
2508
|
}
|
|
2449
2509
|
if (part.type === "reasoning") {
|
|
2450
|
-
const
|
|
2451
|
-
const text = reasoningPart.text || reasoningPart.reasoning || (reasoningPart.details?.reduce((p, c) => {
|
|
2510
|
+
const text = part.reasoning || (part.details?.reduce((p, c) => {
|
|
2452
2511
|
if (c.type === `text` && c.text) return p + c.text;
|
|
2453
2512
|
return p;
|
|
2454
2513
|
}, "") ?? "");
|
|
2455
|
-
if (text ||
|
|
2456
|
-
|
|
2514
|
+
if (text || part.details?.length) {
|
|
2515
|
+
const v5UIPart = {
|
|
2457
2516
|
type: "reasoning",
|
|
2458
2517
|
text: text || "",
|
|
2459
|
-
state: "done"
|
|
2460
|
-
|
|
2461
|
-
|
|
2518
|
+
state: "done"
|
|
2519
|
+
};
|
|
2520
|
+
if (part.providerMetadata) {
|
|
2521
|
+
v5UIPart.providerMetadata = part.providerMetadata;
|
|
2522
|
+
}
|
|
2523
|
+
parts.push(v5UIPart);
|
|
2462
2524
|
}
|
|
2463
2525
|
continue;
|
|
2464
2526
|
}
|
|
@@ -2471,12 +2533,15 @@ var MessageList = class _MessageList {
|
|
|
2471
2533
|
}
|
|
2472
2534
|
const categorized = typeof part.data === "string" ? categorizeFileData(part.data, part.mimeType) : { type: "raw", mimeType: part.mimeType};
|
|
2473
2535
|
if (categorized.type === "url" && typeof part.data === "string") {
|
|
2474
|
-
|
|
2536
|
+
const v5UIPart = {
|
|
2475
2537
|
type: "file",
|
|
2476
2538
|
url: part.data,
|
|
2477
|
-
mediaType: categorized.mimeType || "image/png"
|
|
2478
|
-
|
|
2479
|
-
|
|
2539
|
+
mediaType: categorized.mimeType || "image/png"
|
|
2540
|
+
};
|
|
2541
|
+
if (part.providerMetadata) {
|
|
2542
|
+
v5UIPart.providerMetadata = part.providerMetadata;
|
|
2543
|
+
}
|
|
2544
|
+
parts.push(v5UIPart);
|
|
2480
2545
|
} else {
|
|
2481
2546
|
let filePartData;
|
|
2482
2547
|
let extractedMimeType = part.mimeType;
|
|
@@ -2500,27 +2565,37 @@ var MessageList = class _MessageList {
|
|
|
2500
2565
|
} else {
|
|
2501
2566
|
dataUri = createDataUri(filePartData, finalMimeType);
|
|
2502
2567
|
}
|
|
2503
|
-
|
|
2568
|
+
const v5UIPart = {
|
|
2504
2569
|
type: "file",
|
|
2505
2570
|
url: dataUri,
|
|
2506
2571
|
// Use url field with data URI
|
|
2507
|
-
mediaType: finalMimeType
|
|
2508
|
-
|
|
2509
|
-
|
|
2572
|
+
mediaType: finalMimeType
|
|
2573
|
+
};
|
|
2574
|
+
if (part.providerMetadata) {
|
|
2575
|
+
v5UIPart.providerMetadata = part.providerMetadata;
|
|
2576
|
+
}
|
|
2577
|
+
parts.push(v5UIPart);
|
|
2510
2578
|
}
|
|
2511
2579
|
} else if (part.type === "source") {
|
|
2512
|
-
const
|
|
2513
|
-
parts.push({
|
|
2580
|
+
const v5UIPart = {
|
|
2514
2581
|
type: "source-url",
|
|
2515
|
-
url:
|
|
2516
|
-
|
|
2517
|
-
|
|
2582
|
+
url: part.source.url,
|
|
2583
|
+
sourceId: part.source.id,
|
|
2584
|
+
title: part.source.title
|
|
2585
|
+
};
|
|
2586
|
+
if (part.providerMetadata) {
|
|
2587
|
+
v5UIPart.providerMetadata = part.providerMetadata;
|
|
2588
|
+
}
|
|
2589
|
+
parts.push(v5UIPart);
|
|
2518
2590
|
} else if (part.type === "text") {
|
|
2519
|
-
|
|
2591
|
+
const v5UIPart = {
|
|
2520
2592
|
type: "text",
|
|
2521
|
-
text: part.text
|
|
2522
|
-
|
|
2523
|
-
|
|
2593
|
+
text: part.text
|
|
2594
|
+
};
|
|
2595
|
+
if (part.providerMetadata) {
|
|
2596
|
+
v5UIPart.providerMetadata = part.providerMetadata;
|
|
2597
|
+
}
|
|
2598
|
+
parts.push(v5UIPart);
|
|
2524
2599
|
hasNonToolReasoningParts = true;
|
|
2525
2600
|
} else {
|
|
2526
2601
|
parts.push(part);
|
|
@@ -2684,32 +2759,69 @@ var MessageList = class _MessageList {
|
|
|
2684
2759
|
}
|
|
2685
2760
|
};
|
|
2686
2761
|
}
|
|
2762
|
+
/**
|
|
2763
|
+
* Convert image or file to data URI or URL for V2 file part
|
|
2764
|
+
*/
|
|
2765
|
+
static getDataStringFromAIV5DataPart = (part) => {
|
|
2766
|
+
let mimeType;
|
|
2767
|
+
let data;
|
|
2768
|
+
if ("data" in part) {
|
|
2769
|
+
mimeType = part.mediaType || "application/octet-stream";
|
|
2770
|
+
data = part.data;
|
|
2771
|
+
} else if ("image" in part) {
|
|
2772
|
+
mimeType = part.mediaType || "image/jpeg";
|
|
2773
|
+
data = part.image;
|
|
2774
|
+
} else {
|
|
2775
|
+
throw new MastraError({
|
|
2776
|
+
id: "MASTRA_AIV5_DATA_PART_INVALID",
|
|
2777
|
+
domain: "AGENT" /* AGENT */,
|
|
2778
|
+
category: "USER" /* USER */,
|
|
2779
|
+
text: "Invalid AIV5 data part in getDataStringFromAIV5DataPart",
|
|
2780
|
+
details: {
|
|
2781
|
+
part
|
|
2782
|
+
}
|
|
2783
|
+
});
|
|
2784
|
+
}
|
|
2785
|
+
if (data instanceof URL) {
|
|
2786
|
+
return data.toString();
|
|
2787
|
+
} else {
|
|
2788
|
+
if (data instanceof Buffer) {
|
|
2789
|
+
const base64 = data.toString("base64");
|
|
2790
|
+
return `data:${mimeType};base64,${base64}`;
|
|
2791
|
+
} else if (typeof data === "string") {
|
|
2792
|
+
return data.startsWith("data:") || data.startsWith("http") ? data : `data:${mimeType};base64,${data}`;
|
|
2793
|
+
} else if (data instanceof Uint8Array) {
|
|
2794
|
+
const base64 = Buffer.from(data).toString("base64");
|
|
2795
|
+
return `data:${mimeType};base64,${base64}`;
|
|
2796
|
+
} else if (data instanceof ArrayBuffer) {
|
|
2797
|
+
const base64 = Buffer.from(data).toString("base64");
|
|
2798
|
+
return `data:${mimeType};base64,${base64}`;
|
|
2799
|
+
} else {
|
|
2800
|
+
return "";
|
|
2801
|
+
}
|
|
2802
|
+
}
|
|
2803
|
+
};
|
|
2687
2804
|
/**
|
|
2688
2805
|
* Direct conversion from AIV5 ModelMessage to MastraDBMessage
|
|
2689
2806
|
* Combines logic from aiV5ModelMessageToMastraMessageV3 + mastraMessageV3ToV2
|
|
2690
2807
|
*/
|
|
2691
2808
|
static aiV5ModelMessageToMastraDBMessage(modelMsg, _messageSource) {
|
|
2692
2809
|
const content = Array.isArray(modelMsg.content) ? modelMsg.content : [{ type: "text", text: modelMsg.content }];
|
|
2693
|
-
const
|
|
2810
|
+
const mastraDBParts = [];
|
|
2694
2811
|
const toolInvocations = [];
|
|
2695
2812
|
const reasoningParts = [];
|
|
2696
2813
|
const experimental_attachments = [];
|
|
2697
|
-
const textParts = [];
|
|
2698
2814
|
let lastPartWasToolResult = false;
|
|
2699
2815
|
for (const part of content) {
|
|
2700
|
-
const providerMetadata = {
|
|
2701
|
-
...modelMsg.providerMetadata || {},
|
|
2702
|
-
...part.providerMetadata || {}
|
|
2703
|
-
};
|
|
2704
|
-
const hasProviderMetadata = Object.keys(providerMetadata).length > 0;
|
|
2705
2816
|
if (part.type === "text") {
|
|
2706
2817
|
const textPart = {
|
|
2707
2818
|
type: "text",
|
|
2708
|
-
text: part.text
|
|
2709
|
-
...hasProviderMetadata && { experimental_providerMetadata: providerMetadata }
|
|
2819
|
+
text: part.text
|
|
2710
2820
|
};
|
|
2711
|
-
|
|
2712
|
-
|
|
2821
|
+
if (part.providerOptions) {
|
|
2822
|
+
textPart.providerMetadata = part.providerOptions;
|
|
2823
|
+
}
|
|
2824
|
+
mastraDBParts.push(textPart);
|
|
2713
2825
|
lastPartWasToolResult = false;
|
|
2714
2826
|
} else if (part.type === "tool-call") {
|
|
2715
2827
|
const toolCallPart = part;
|
|
@@ -2720,10 +2832,12 @@ var MessageList = class _MessageList {
|
|
|
2720
2832
|
toolName: toolCallPart.toolName,
|
|
2721
2833
|
args: toolCallPart.input,
|
|
2722
2834
|
state: "call"
|
|
2723
|
-
}
|
|
2724
|
-
...hasProviderMetadata && { providerMetadata }
|
|
2835
|
+
}
|
|
2725
2836
|
};
|
|
2726
|
-
|
|
2837
|
+
if (part.providerOptions) {
|
|
2838
|
+
toolInvocationPart.providerMetadata = part.providerOptions;
|
|
2839
|
+
}
|
|
2840
|
+
mastraDBParts.push(toolInvocationPart);
|
|
2727
2841
|
toolInvocations.push({
|
|
2728
2842
|
toolCallId: toolCallPart.toolCallId,
|
|
2729
2843
|
toolName: toolCallPart.toolName,
|
|
@@ -2734,78 +2848,67 @@ var MessageList = class _MessageList {
|
|
|
2734
2848
|
} else if (part.type === "tool-result") {
|
|
2735
2849
|
const toolResultPart = part;
|
|
2736
2850
|
const matchingCall = toolInvocations.find((inv) => inv.toolCallId === toolResultPart.toolCallId);
|
|
2737
|
-
const matchingV2Part =
|
|
2851
|
+
const matchingV2Part = mastraDBParts.find(
|
|
2738
2852
|
(p) => p.type === "tool-invocation" && "toolInvocation" in p && p.toolInvocation.toolCallId === toolResultPart.toolCallId
|
|
2739
2853
|
);
|
|
2854
|
+
const updateMatchingCallInvocationResult = (toolResultPart2, matchingCall2) => {
|
|
2855
|
+
matchingCall2.state = "result";
|
|
2856
|
+
matchingCall2.result = typeof toolResultPart2.output === "object" && toolResultPart2.output && "value" in toolResultPart2.output ? toolResultPart2.output.value : toolResultPart2.output;
|
|
2857
|
+
};
|
|
2740
2858
|
if (matchingCall) {
|
|
2741
|
-
matchingCall
|
|
2742
|
-
matchingCall.result = typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output;
|
|
2859
|
+
updateMatchingCallInvocationResult(toolResultPart, matchingCall);
|
|
2743
2860
|
} else {
|
|
2744
|
-
const
|
|
2745
|
-
|
|
2861
|
+
const call = {
|
|
2862
|
+
state: "call",
|
|
2746
2863
|
toolCallId: toolResultPart.toolCallId,
|
|
2747
|
-
toolName:
|
|
2748
|
-
args: {}
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2864
|
+
toolName: toolResultPart.toolName || "unknown",
|
|
2865
|
+
args: {}
|
|
2866
|
+
};
|
|
2867
|
+
updateMatchingCallInvocationResult(toolResultPart, call);
|
|
2868
|
+
toolInvocations.push(call);
|
|
2752
2869
|
}
|
|
2753
2870
|
if (matchingV2Part && matchingV2Part.type === "tool-invocation") {
|
|
2754
|
-
matchingV2Part.toolInvocation
|
|
2755
|
-
matchingV2Part.toolInvocation.result = typeof toolResultPart.output === "object" && toolResultPart.output && "value" in toolResultPart.output ? toolResultPart.output.value : toolResultPart.output;
|
|
2756
|
-
if (hasProviderMetadata) {
|
|
2757
|
-
matchingV2Part.providerMetadata = providerMetadata;
|
|
2758
|
-
}
|
|
2871
|
+
updateMatchingCallInvocationResult(toolResultPart, matchingV2Part.toolInvocation);
|
|
2759
2872
|
} else {
|
|
2760
|
-
const resultPartWithName = toolResultPart;
|
|
2761
2873
|
const toolInvocationPart = {
|
|
2762
2874
|
type: "tool-invocation",
|
|
2763
2875
|
toolInvocation: {
|
|
2764
2876
|
toolCallId: toolResultPart.toolCallId,
|
|
2765
|
-
toolName:
|
|
2877
|
+
toolName: toolResultPart.toolName || "unknown",
|
|
2766
2878
|
args: {},
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
},
|
|
2770
|
-
...hasProviderMetadata && { providerMetadata }
|
|
2879
|
+
state: "call"
|
|
2880
|
+
}
|
|
2771
2881
|
};
|
|
2772
|
-
|
|
2882
|
+
updateMatchingCallInvocationResult(toolResultPart, toolInvocationPart.toolInvocation);
|
|
2883
|
+
mastraDBParts.push(toolInvocationPart);
|
|
2773
2884
|
}
|
|
2774
2885
|
lastPartWasToolResult = true;
|
|
2775
2886
|
} else if (part.type === "reasoning") {
|
|
2776
|
-
const reasoningPart = part;
|
|
2777
2887
|
const v2ReasoningPart = {
|
|
2778
2888
|
type: "reasoning",
|
|
2779
|
-
reasoning:
|
|
2780
|
-
|
|
2781
|
-
|
|
2889
|
+
reasoning: "",
|
|
2890
|
+
// leave this blank so we aren't double storing it in the db along with details
|
|
2891
|
+
details: [{ type: "text", text: part.text }]
|
|
2782
2892
|
};
|
|
2783
|
-
|
|
2784
|
-
|
|
2893
|
+
if (part.providerOptions) {
|
|
2894
|
+
v2ReasoningPart.providerMetadata = part.providerOptions;
|
|
2895
|
+
}
|
|
2896
|
+
mastraDBParts.push(v2ReasoningPart);
|
|
2897
|
+
reasoningParts.push(part.text);
|
|
2785
2898
|
lastPartWasToolResult = false;
|
|
2786
2899
|
} else if (part.type === "image") {
|
|
2787
2900
|
const imagePart = part;
|
|
2788
|
-
|
|
2789
|
-
const
|
|
2790
|
-
if ("url" in imagePart && typeof imagePart.url === "string") {
|
|
2791
|
-
imageData = imagePart.url;
|
|
2792
|
-
} else if ("data" in imagePart) {
|
|
2793
|
-
if (typeof imagePart.data === "string") {
|
|
2794
|
-
imageData = imagePart.data.startsWith("data:") || imagePart.data.startsWith("http") ? imagePart.data : `data:${mimeType};base64,${imagePart.data}`;
|
|
2795
|
-
} else {
|
|
2796
|
-
const base64 = Buffer.from(imagePart.data).toString("base64");
|
|
2797
|
-
imageData = `data:${mimeType};base64,${base64}`;
|
|
2798
|
-
}
|
|
2799
|
-
} else {
|
|
2800
|
-
imageData = "";
|
|
2801
|
-
}
|
|
2901
|
+
const mimeType = imagePart.mediaType || "image/jpeg";
|
|
2902
|
+
const imageData = this.getDataStringFromAIV5DataPart(imagePart);
|
|
2802
2903
|
const imageFilePart = {
|
|
2803
2904
|
type: "file",
|
|
2804
2905
|
data: imageData,
|
|
2805
|
-
mimeType
|
|
2806
|
-
...hasProviderMetadata && { providerMetadata }
|
|
2906
|
+
mimeType
|
|
2807
2907
|
};
|
|
2808
|
-
|
|
2908
|
+
if (part.providerOptions) {
|
|
2909
|
+
imageFilePart.providerMetadata = part.providerOptions;
|
|
2910
|
+
}
|
|
2911
|
+
mastraDBParts.push(imageFilePart);
|
|
2809
2912
|
experimental_attachments.push({
|
|
2810
2913
|
url: imageData,
|
|
2811
2914
|
contentType: mimeType
|
|
@@ -2814,26 +2917,16 @@ var MessageList = class _MessageList {
|
|
|
2814
2917
|
} else if (part.type === "file") {
|
|
2815
2918
|
const filePart = part;
|
|
2816
2919
|
const mimeType = filePart.mediaType || "application/octet-stream";
|
|
2817
|
-
|
|
2818
|
-
if ("url" in filePart && typeof filePart.url === "string") {
|
|
2819
|
-
fileData = filePart.url;
|
|
2820
|
-
} else if ("data" in filePart) {
|
|
2821
|
-
if (typeof filePart.data === "string") {
|
|
2822
|
-
fileData = filePart.data.startsWith("data:") || filePart.data.startsWith("http") ? filePart.data : `data:${mimeType};base64,${filePart.data}`;
|
|
2823
|
-
} else {
|
|
2824
|
-
const base64 = Buffer.from(filePart.data).toString("base64");
|
|
2825
|
-
fileData = `data:${mimeType};base64,${base64}`;
|
|
2826
|
-
}
|
|
2827
|
-
} else {
|
|
2828
|
-
fileData = "";
|
|
2829
|
-
}
|
|
2920
|
+
const fileData = this.getDataStringFromAIV5DataPart(filePart);
|
|
2830
2921
|
const v2FilePart = {
|
|
2831
2922
|
type: "file",
|
|
2832
2923
|
data: fileData,
|
|
2833
|
-
mimeType
|
|
2834
|
-
...hasProviderMetadata && { providerMetadata }
|
|
2924
|
+
mimeType
|
|
2835
2925
|
};
|
|
2836
|
-
|
|
2926
|
+
if (part.providerOptions) {
|
|
2927
|
+
v2FilePart.providerMetadata = part.providerOptions;
|
|
2928
|
+
}
|
|
2929
|
+
mastraDBParts.push(v2FilePart);
|
|
2837
2930
|
experimental_attachments.push({
|
|
2838
2931
|
url: fileData,
|
|
2839
2932
|
contentType: mimeType
|
|
@@ -2841,34 +2934,34 @@ var MessageList = class _MessageList {
|
|
|
2841
2934
|
lastPartWasToolResult = false;
|
|
2842
2935
|
}
|
|
2843
2936
|
}
|
|
2844
|
-
if (modelMsg.role === "assistant" && lastPartWasToolResult &&
|
|
2845
|
-
const lastPart =
|
|
2937
|
+
if (modelMsg.role === "assistant" && lastPartWasToolResult && mastraDBParts.length > 0) {
|
|
2938
|
+
const lastPart = mastraDBParts[mastraDBParts.length - 1];
|
|
2846
2939
|
if (lastPart && lastPart.type !== "text") {
|
|
2847
2940
|
const emptyTextPart = { type: "text", text: "" };
|
|
2848
|
-
|
|
2849
|
-
textParts.push({ text: "" });
|
|
2941
|
+
mastraDBParts.push(emptyTextPart);
|
|
2850
2942
|
}
|
|
2851
2943
|
}
|
|
2852
|
-
|
|
2853
|
-
if (textParts.length > 0) {
|
|
2854
|
-
contentString = textParts.map((p) => p.text).join("\n");
|
|
2855
|
-
}
|
|
2944
|
+
const contentString = mastraDBParts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
|
|
2856
2945
|
const metadata = {};
|
|
2857
2946
|
const id = `id` in modelMsg && typeof modelMsg.id === `string` ? modelMsg.id : `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
2858
|
-
|
|
2947
|
+
const message = {
|
|
2859
2948
|
id,
|
|
2860
2949
|
role: _MessageList.getRole(modelMsg),
|
|
2861
2950
|
createdAt: /* @__PURE__ */ new Date(),
|
|
2862
2951
|
content: {
|
|
2863
2952
|
format: 2,
|
|
2864
|
-
parts:
|
|
2953
|
+
parts: mastraDBParts,
|
|
2865
2954
|
toolInvocations: toolInvocations.length > 0 ? toolInvocations : void 0,
|
|
2866
2955
|
reasoning: reasoningParts.length > 0 ? reasoningParts.join("\n") : void 0,
|
|
2867
2956
|
experimental_attachments: experimental_attachments.length > 0 ? experimental_attachments : void 0,
|
|
2868
|
-
content: contentString,
|
|
2957
|
+
content: contentString || void 0,
|
|
2869
2958
|
metadata
|
|
2870
2959
|
}
|
|
2871
2960
|
};
|
|
2961
|
+
if (modelMsg.providerOptions) {
|
|
2962
|
+
message.content.providerMetadata = modelMsg.providerOptions;
|
|
2963
|
+
}
|
|
2964
|
+
return message;
|
|
2872
2965
|
}
|
|
2873
2966
|
aiV4CoreMessagesToAIV5ModelMessages(messages, source) {
|
|
2874
2967
|
return this.aiV5UIMessagesToAIV5ModelMessages(
|
|
@@ -2879,7 +2972,16 @@ var MessageList = class _MessageList {
|
|
|
2879
2972
|
const sanitized = this.sanitizeV5UIMessages(messages, filterIncompleteToolCalls);
|
|
2880
2973
|
const preprocessed = this.addStartStepPartsForAIV5(sanitized);
|
|
2881
2974
|
const result = AIV5.convertToModelMessages(preprocessed);
|
|
2882
|
-
return result
|
|
2975
|
+
return result.map((modelMsg, index) => {
|
|
2976
|
+
const uiMsg = preprocessed[index];
|
|
2977
|
+
if (uiMsg?.metadata && typeof uiMsg.metadata === "object" && "providerMetadata" in uiMsg.metadata && uiMsg.metadata.providerMetadata) {
|
|
2978
|
+
return {
|
|
2979
|
+
...modelMsg,
|
|
2980
|
+
providerOptions: uiMsg.metadata.providerMetadata
|
|
2981
|
+
};
|
|
2982
|
+
}
|
|
2983
|
+
return modelMsg;
|
|
2984
|
+
});
|
|
2883
2985
|
}
|
|
2884
2986
|
addStartStepPartsForAIV5(messages) {
|
|
2885
2987
|
for (const message of messages) {
|
|
@@ -3012,5 +3114,5 @@ var MessageList = class _MessageList {
|
|
|
3012
3114
|
};
|
|
3013
3115
|
|
|
3014
3116
|
export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
|
|
3015
|
-
//# sourceMappingURL=chunk-
|
|
3016
|
-
//# sourceMappingURL=chunk-
|
|
3117
|
+
//# sourceMappingURL=chunk-W3DD3XP5.js.map
|
|
3118
|
+
//# sourceMappingURL=chunk-W3DD3XP5.js.map
|