@mastra/ai-sdk 0.2.5-alpha.0 → 0.2.6-alpha.0
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 +24 -0
- package/dist/chat-route.d.ts.map +1 -1
- package/dist/index.cjs +76 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +76 -13
- package/dist/index.js.map +1 -1
- package/dist/to-ai-sdk-format.d.ts +1 -0
- package/dist/to-ai-sdk-format.d.ts.map +1 -1
- package/dist/transformers.d.ts +12 -1
- package/dist/transformers.d.ts.map +1 -1
- package/dist/utils.d.ts +7 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/workflow-route.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -8,6 +8,12 @@ import { DefaultGeneratedFile, DefaultGeneratedFileWithType } from '@mastra/core
|
|
|
8
8
|
var isDataChunkType = (chunk) => {
|
|
9
9
|
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("data-");
|
|
10
10
|
};
|
|
11
|
+
var isAgentExecutionDataChunkType = (chunk) => {
|
|
12
|
+
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("agent-execution-event-") && "payload" in chunk && typeof chunk.payload === "object" && "type" in chunk.payload && chunk.payload.type?.startsWith("data-");
|
|
13
|
+
};
|
|
14
|
+
var isWorkflowExecutionDataChunkType = (chunk) => {
|
|
15
|
+
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("workflow-execution-event-") && "payload" in chunk && typeof chunk.payload === "object" && "type" in chunk.payload && chunk.payload.type?.startsWith("data-");
|
|
16
|
+
};
|
|
11
17
|
|
|
12
18
|
// src/helpers.ts
|
|
13
19
|
function convertMastraChunkToAISDKv5({
|
|
@@ -441,7 +447,7 @@ function AgentNetworkToAISDKTransformer() {
|
|
|
441
447
|
}
|
|
442
448
|
});
|
|
443
449
|
}
|
|
444
|
-
function AgentStreamToAISDKTransformer() {
|
|
450
|
+
function AgentStreamToAISDKTransformer(lastMessageId) {
|
|
445
451
|
let bufferedSteps = /* @__PURE__ */ new Map();
|
|
446
452
|
return new TransformStream({
|
|
447
453
|
transform(chunk, controller) {
|
|
@@ -452,7 +458,7 @@ function AgentStreamToAISDKTransformer() {
|
|
|
452
458
|
sendSources: false,
|
|
453
459
|
sendStart: true,
|
|
454
460
|
sendFinish: true,
|
|
455
|
-
responseMessageId:
|
|
461
|
+
responseMessageId: lastMessageId,
|
|
456
462
|
onError() {
|
|
457
463
|
return "Error";
|
|
458
464
|
}
|
|
@@ -636,7 +642,9 @@ function transformWorkflow(payload, bufferedWorkflows, isNested) {
|
|
|
636
642
|
name: payload.payload.id,
|
|
637
643
|
status: payload.payload.status,
|
|
638
644
|
input: payload.payload.payload ?? null,
|
|
639
|
-
output: null
|
|
645
|
+
output: null,
|
|
646
|
+
suspendPayload: null,
|
|
647
|
+
resumePayload: null
|
|
640
648
|
};
|
|
641
649
|
bufferedWorkflows.set(payload.runId, current);
|
|
642
650
|
return {
|
|
@@ -669,6 +677,27 @@ function transformWorkflow(payload, bufferedWorkflows, isNested) {
|
|
|
669
677
|
}
|
|
670
678
|
};
|
|
671
679
|
}
|
|
680
|
+
case "workflow-step-suspended": {
|
|
681
|
+
const current = bufferedWorkflows.get(payload.runId);
|
|
682
|
+
if (!current) return null;
|
|
683
|
+
current.steps[payload.payload.id] = {
|
|
684
|
+
...current.steps[payload.payload.id],
|
|
685
|
+
status: payload.payload.status,
|
|
686
|
+
suspendPayload: payload.payload.suspendPayload ?? null,
|
|
687
|
+
resumePayload: payload.payload.resumePayload ?? null,
|
|
688
|
+
output: null
|
|
689
|
+
};
|
|
690
|
+
return {
|
|
691
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
692
|
+
id: payload.runId,
|
|
693
|
+
data: {
|
|
694
|
+
name: current.name,
|
|
695
|
+
status: "suspended",
|
|
696
|
+
steps: current.steps,
|
|
697
|
+
output: null
|
|
698
|
+
}
|
|
699
|
+
};
|
|
700
|
+
}
|
|
672
701
|
case "workflow-finish": {
|
|
673
702
|
const current = bufferedWorkflows.get(payload.runId);
|
|
674
703
|
if (!current) return null;
|
|
@@ -743,7 +772,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
743
772
|
name: payload.payload.agentId,
|
|
744
773
|
status: "running",
|
|
745
774
|
input: payload.payload.args || null,
|
|
746
|
-
output: null
|
|
775
|
+
output: null,
|
|
776
|
+
suspendPayload: null,
|
|
777
|
+
resumePayload: null
|
|
747
778
|
});
|
|
748
779
|
bufferedNetworks.set(payload.runId, current);
|
|
749
780
|
return {
|
|
@@ -761,7 +792,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
761
792
|
name: payload.payload.name,
|
|
762
793
|
status: "running",
|
|
763
794
|
input: payload.payload.args || null,
|
|
764
|
-
output: null
|
|
795
|
+
output: null,
|
|
796
|
+
suspendPayload: null,
|
|
797
|
+
resumePayload: null
|
|
765
798
|
});
|
|
766
799
|
bufferedNetworks.set(payload.runId, current);
|
|
767
800
|
return {
|
|
@@ -779,7 +812,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
779
812
|
name: payload.payload.args?.toolName,
|
|
780
813
|
status: "running",
|
|
781
814
|
input: payload.payload.args?.args || null,
|
|
782
|
-
output: null
|
|
815
|
+
output: null,
|
|
816
|
+
suspendPayload: null,
|
|
817
|
+
resumePayload: null
|
|
783
818
|
});
|
|
784
819
|
bufferedNetworks.set(payload.runId, current);
|
|
785
820
|
return {
|
|
@@ -798,7 +833,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
798
833
|
name: payload.payload.agentId,
|
|
799
834
|
status: "success",
|
|
800
835
|
input: null,
|
|
801
|
-
output: payload.payload.result
|
|
836
|
+
output: payload.payload.result,
|
|
837
|
+
suspendPayload: null,
|
|
838
|
+
resumePayload: null
|
|
802
839
|
});
|
|
803
840
|
return {
|
|
804
841
|
type: isNested ? "data-tool-network" : "data-network",
|
|
@@ -818,7 +855,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
818
855
|
name: payload.payload.toolName,
|
|
819
856
|
status: "success",
|
|
820
857
|
input: null,
|
|
821
|
-
output: payload.payload.result
|
|
858
|
+
output: payload.payload.result,
|
|
859
|
+
suspendPayload: null,
|
|
860
|
+
resumePayload: null
|
|
822
861
|
});
|
|
823
862
|
return {
|
|
824
863
|
type: isNested ? "data-tool-network" : "data-network",
|
|
@@ -837,7 +876,9 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
837
876
|
name: payload.payload.name,
|
|
838
877
|
status: "success",
|
|
839
878
|
input: null,
|
|
840
|
-
output: payload.payload.result
|
|
879
|
+
output: payload.payload.result,
|
|
880
|
+
suspendPayload: null,
|
|
881
|
+
resumePayload: null
|
|
841
882
|
});
|
|
842
883
|
return {
|
|
843
884
|
type: isNested ? "data-tool-network" : "data-network",
|
|
@@ -901,6 +942,24 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
|
901
942
|
}
|
|
902
943
|
return payload;
|
|
903
944
|
}
|
|
945
|
+
if (isAgentExecutionDataChunkType(payload)) {
|
|
946
|
+
if (!("data" in payload.payload)) {
|
|
947
|
+
throw new Error(
|
|
948
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
949
|
+
${JSON.stringify(payload)}`
|
|
950
|
+
);
|
|
951
|
+
}
|
|
952
|
+
return payload.payload;
|
|
953
|
+
}
|
|
954
|
+
if (isWorkflowExecutionDataChunkType(payload)) {
|
|
955
|
+
if (!("data" in payload.payload)) {
|
|
956
|
+
throw new Error(
|
|
957
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
958
|
+
${JSON.stringify(payload)}`
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
return payload.payload;
|
|
962
|
+
}
|
|
904
963
|
return null;
|
|
905
964
|
}
|
|
906
965
|
}
|
|
@@ -916,7 +975,7 @@ function toAISdkFormat(stream, options = { from: "agent" }) {
|
|
|
916
975
|
return stream.pipeThrough(AgentNetworkToAISDKTransformer());
|
|
917
976
|
}
|
|
918
977
|
const agentReadable = "fullStream" in stream ? stream.fullStream : stream;
|
|
919
|
-
return agentReadable.pipeThrough(AgentStreamToAISDKTransformer());
|
|
978
|
+
return agentReadable.pipeThrough(AgentStreamToAISDKTransformer(options?.lastMessageId));
|
|
920
979
|
}
|
|
921
980
|
|
|
922
981
|
// src/chat-route.ts
|
|
@@ -1050,10 +1109,14 @@ function chatRoute({
|
|
|
1050
1109
|
...rest,
|
|
1051
1110
|
runtimeContext: runtimeContext || defaultOptions?.runtimeContext
|
|
1052
1111
|
});
|
|
1112
|
+
let lastMessageId;
|
|
1113
|
+
if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
|
|
1114
|
+
lastMessageId = messages[messages.length - 1].id;
|
|
1115
|
+
}
|
|
1053
1116
|
const uiMessageStream = createUIMessageStream({
|
|
1054
1117
|
originalMessages: messages,
|
|
1055
1118
|
execute: async ({ writer }) => {
|
|
1056
|
-
for await (const part of toAISdkFormat(result, { from: "agent" })) {
|
|
1119
|
+
for await (const part of toAISdkFormat(result, { from: "agent", lastMessageId })) {
|
|
1057
1120
|
writer.write(part);
|
|
1058
1121
|
}
|
|
1059
1122
|
}
|
|
@@ -1113,7 +1176,7 @@ function workflowRoute({
|
|
|
1113
1176
|
}
|
|
1114
1177
|
},
|
|
1115
1178
|
handler: async (c) => {
|
|
1116
|
-
const { inputData, ...rest } = await c.req.json();
|
|
1179
|
+
const { inputData, resumeData, ...rest } = await c.req.json();
|
|
1117
1180
|
const mastra = c.get("mastra");
|
|
1118
1181
|
let workflowToUse = workflow;
|
|
1119
1182
|
if (!workflow) {
|
|
@@ -1133,7 +1196,7 @@ function workflowRoute({
|
|
|
1133
1196
|
throw new Error(`Workflow ${workflowToUse} not found`);
|
|
1134
1197
|
}
|
|
1135
1198
|
const run = await workflowObj.createRunAsync();
|
|
1136
|
-
const stream = run.
|
|
1199
|
+
const stream = resumeData ? run.resumeStream({ resumeData, ...rest }) : run.stream({ inputData, ...rest });
|
|
1137
1200
|
const uiMessageStream = createUIMessageStream({
|
|
1138
1201
|
execute: async ({ writer }) => {
|
|
1139
1202
|
for await (const part of toAISdkFormat(stream, { from: "workflow" })) {
|