@mastra/server 0.10.13 → 0.10.14
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/dist/_tsup-dts-rollup.d.cts +1078 -0
- package/dist/_tsup-dts-rollup.d.ts +1078 -0
- package/dist/chunk-2KZFMI6P.cjs +37 -0
- package/dist/chunk-2SLFAFTR.cjs +148 -0
- package/dist/chunk-4D66QEKC.js +81 -0
- package/dist/chunk-5PQQ42EZ.js +320 -0
- package/dist/chunk-75ZPJI57.cjs +9 -0
- package/dist/chunk-7TP2LX5L.cjs +129 -0
- package/dist/chunk-B2PAS2IB.cjs +514 -0
- package/dist/chunk-BK4XT6EG.js +270 -0
- package/dist/chunk-CCGRCYWJ.cjs +18 -0
- package/dist/chunk-CRCR3ZUK.js +142 -0
- package/dist/chunk-DN7K6FJK.cjs +251 -0
- package/dist/chunk-FRVBFMO2.cjs +128 -0
- package/dist/chunk-G7KH752Y.cjs +145 -0
- package/dist/chunk-GHC4YV6R.js +504 -0
- package/dist/chunk-H7DMHBKY.js +498 -0
- package/dist/chunk-JMLYCXMK.cjs +332 -0
- package/dist/chunk-KHZKYUNR.js +112 -0
- package/dist/chunk-LCM566I4.js +35 -0
- package/dist/chunk-LF7P5PLR.js +14 -0
- package/dist/chunk-LI436ITD.cjs +2042 -0
- package/dist/chunk-LRCAAFUA.js +122 -0
- package/dist/chunk-LZ3VJXSO.cjs +278 -0
- package/dist/chunk-MEGCYGBU.js +2039 -0
- package/dist/chunk-MKLYEKEF.js +241 -0
- package/dist/chunk-MLKGABMK.js +7 -0
- package/dist/chunk-PZQDCRPV.cjs +16 -0
- package/dist/chunk-QGX47B5D.cjs +86 -0
- package/dist/chunk-RG473F6Y.js +141 -0
- package/dist/chunk-RHSWAXKB.cjs +118 -0
- package/dist/chunk-RSEO4XPX.js +16 -0
- package/dist/chunk-SDPGVWQJ.cjs +512 -0
- package/dist/chunk-WNVFNNWN.js +121 -0
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/server/handlers/a2a.cjs +30 -0
- package/dist/server/handlers/a2a.d.cts +6 -0
- package/dist/server/handlers/a2a.d.ts +6 -0
- package/dist/server/handlers/a2a.js +1 -0
- package/dist/server/handlers/agents.cjs +30 -0
- package/dist/server/handlers/agents.d.cts +6 -0
- package/dist/server/handlers/agents.d.ts +6 -0
- package/dist/server/handlers/agents.js +1 -0
- package/dist/server/handlers/error.cjs +10 -0
- package/dist/server/handlers/error.d.cts +1 -0
- package/dist/server/handlers/error.d.ts +1 -0
- package/dist/server/handlers/error.js +1 -0
- package/dist/server/handlers/legacyWorkflows.cjs +46 -0
- package/dist/server/handlers/legacyWorkflows.d.cts +10 -0
- package/dist/server/handlers/legacyWorkflows.d.ts +10 -0
- package/dist/server/handlers/legacyWorkflows.js +1 -0
- package/dist/server/handlers/logs.cjs +18 -0
- package/dist/server/handlers/logs.d.cts +3 -0
- package/dist/server/handlers/logs.d.ts +3 -0
- package/dist/server/handlers/logs.js +1 -0
- package/dist/server/handlers/memory.cjs +38 -0
- package/dist/server/handlers/memory.d.cts +8 -0
- package/dist/server/handlers/memory.d.ts +8 -0
- package/dist/server/handlers/memory.js +1 -0
- package/dist/server/handlers/network.cjs +22 -0
- package/dist/server/handlers/network.d.cts +4 -0
- package/dist/server/handlers/network.d.ts +4 -0
- package/dist/server/handlers/network.js +1 -0
- package/dist/server/handlers/telemetry.cjs +14 -0
- package/dist/server/handlers/telemetry.d.cts +2 -0
- package/dist/server/handlers/telemetry.d.ts +2 -0
- package/dist/server/handlers/telemetry.js +1 -0
- package/dist/server/handlers/tools.cjs +22 -0
- package/dist/server/handlers/tools.d.cts +4 -0
- package/dist/server/handlers/tools.d.ts +4 -0
- package/dist/server/handlers/tools.js +1 -0
- package/dist/server/handlers/utils.cjs +10 -0
- package/dist/server/handlers/utils.d.cts +1 -0
- package/dist/server/handlers/utils.d.ts +1 -0
- package/dist/server/handlers/utils.js +1 -0
- package/dist/server/handlers/vNextNetwork.cjs +218 -0
- package/dist/server/handlers/vNextNetwork.d.cts +6 -0
- package/dist/server/handlers/vNextNetwork.d.ts +6 -0
- package/dist/server/handlers/vNextNetwork.js +211 -0
- package/dist/server/handlers/vector.cjs +30 -0
- package/dist/server/handlers/vector.d.cts +6 -0
- package/dist/server/handlers/vector.d.ts +6 -0
- package/dist/server/handlers/vector.js +1 -0
- package/dist/server/handlers/voice.cjs +22 -0
- package/dist/server/handlers/voice.d.cts +4 -0
- package/dist/server/handlers/voice.d.ts +4 -0
- package/dist/server/handlers/voice.js +1 -0
- package/dist/server/handlers/workflows.cjs +62 -0
- package/dist/server/handlers/workflows.d.cts +14 -0
- package/dist/server/handlers/workflows.d.ts +14 -0
- package/dist/server/handlers/workflows.js +1 -0
- package/dist/server/handlers.cjs +60 -0
- package/dist/server/handlers.d.cts +11 -0
- package/dist/server/handlers.d.ts +11 -0
- package/dist/server/handlers.js +11 -0
- package/package.json +2 -2
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { stringify, esm_default } from './chunk-MEGCYGBU.js';
|
|
2
|
+
import { validateBody } from './chunk-RSEO4XPX.js';
|
|
3
|
+
import { handleError } from './chunk-LF7P5PLR.js';
|
|
4
|
+
import { HTTPException } from './chunk-LCM566I4.js';
|
|
5
|
+
import { __export } from './chunk-MLKGABMK.js';
|
|
6
|
+
import { RuntimeContext } from '@mastra/core/runtime-context';
|
|
7
|
+
|
|
8
|
+
// src/server/handlers/agents.ts
|
|
9
|
+
var agents_exports = {};
|
|
10
|
+
__export(agents_exports, {
|
|
11
|
+
generateHandler: () => generateHandler,
|
|
12
|
+
getAgentByIdHandler: () => getAgentByIdHandler,
|
|
13
|
+
getAgentsHandler: () => getAgentsHandler,
|
|
14
|
+
getEvalsByAgentIdHandler: () => getEvalsByAgentIdHandler,
|
|
15
|
+
getLiveEvalsByAgentIdHandler: () => getLiveEvalsByAgentIdHandler,
|
|
16
|
+
streamGenerateHandler: () => streamGenerateHandler
|
|
17
|
+
});
|
|
18
|
+
async function getAgentsHandler({ mastra, runtimeContext }) {
|
|
19
|
+
try {
|
|
20
|
+
const agents = mastra.getAgents();
|
|
21
|
+
const serializedAgentsMap = await Promise.all(
|
|
22
|
+
Object.entries(agents).map(async ([id, agent]) => {
|
|
23
|
+
const instructions = await agent.getInstructions({ runtimeContext });
|
|
24
|
+
const tools = await agent.getTools({ runtimeContext });
|
|
25
|
+
const llm = await agent.getLLM({ runtimeContext });
|
|
26
|
+
const defaultGenerateOptions = await agent.getDefaultGenerateOptions({ runtimeContext });
|
|
27
|
+
const defaultStreamOptions = await agent.getDefaultStreamOptions({ runtimeContext });
|
|
28
|
+
const serializedAgentTools = Object.entries(tools || {}).reduce((acc, [key, tool]) => {
|
|
29
|
+
const _tool = tool;
|
|
30
|
+
acc[key] = {
|
|
31
|
+
..._tool,
|
|
32
|
+
inputSchema: _tool.inputSchema ? stringify(esm_default(_tool.inputSchema)) : void 0,
|
|
33
|
+
outputSchema: _tool.outputSchema ? stringify(esm_default(_tool.outputSchema)) : void 0
|
|
34
|
+
};
|
|
35
|
+
return acc;
|
|
36
|
+
}, {});
|
|
37
|
+
let serializedAgentWorkflows = {};
|
|
38
|
+
if ("getWorkflows" in agent) {
|
|
39
|
+
const logger = mastra.getLogger();
|
|
40
|
+
try {
|
|
41
|
+
const workflows = await agent.getWorkflows({ runtimeContext });
|
|
42
|
+
serializedAgentWorkflows = Object.entries(workflows || {}).reduce((acc, [key, workflow]) => {
|
|
43
|
+
return {
|
|
44
|
+
...acc,
|
|
45
|
+
[key]: {
|
|
46
|
+
name: workflow.name
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}, {});
|
|
50
|
+
} catch (error) {
|
|
51
|
+
logger.error("Error getting workflows for agent", { agentName: agent.name, error });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
id,
|
|
56
|
+
name: agent.name,
|
|
57
|
+
instructions,
|
|
58
|
+
tools: serializedAgentTools,
|
|
59
|
+
workflows: serializedAgentWorkflows,
|
|
60
|
+
provider: llm?.getProvider(),
|
|
61
|
+
modelId: llm?.getModelId(),
|
|
62
|
+
defaultGenerateOptions,
|
|
63
|
+
defaultStreamOptions
|
|
64
|
+
};
|
|
65
|
+
})
|
|
66
|
+
);
|
|
67
|
+
const serializedAgents = serializedAgentsMap.reduce((acc, { id, ...rest }) => {
|
|
68
|
+
acc[id] = rest;
|
|
69
|
+
return acc;
|
|
70
|
+
}, {});
|
|
71
|
+
return serializedAgents;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
return handleError(error, "Error getting agents");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function getAgentByIdHandler({
|
|
77
|
+
mastra,
|
|
78
|
+
runtimeContext,
|
|
79
|
+
agentId,
|
|
80
|
+
isPlayground = false
|
|
81
|
+
}) {
|
|
82
|
+
try {
|
|
83
|
+
const agent = mastra.getAgent(agentId);
|
|
84
|
+
if (!agent) {
|
|
85
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
86
|
+
}
|
|
87
|
+
const tools = await agent.getTools({ runtimeContext });
|
|
88
|
+
const serializedAgentTools = Object.entries(tools || {}).reduce((acc, [key, tool]) => {
|
|
89
|
+
const _tool = tool;
|
|
90
|
+
acc[key] = {
|
|
91
|
+
..._tool,
|
|
92
|
+
inputSchema: _tool.inputSchema ? stringify(esm_default(_tool.inputSchema)) : void 0,
|
|
93
|
+
outputSchema: _tool.outputSchema ? stringify(esm_default(_tool.outputSchema)) : void 0
|
|
94
|
+
};
|
|
95
|
+
return acc;
|
|
96
|
+
}, {});
|
|
97
|
+
let serializedAgentWorkflows = {};
|
|
98
|
+
if ("getWorkflows" in agent) {
|
|
99
|
+
const logger = mastra.getLogger();
|
|
100
|
+
try {
|
|
101
|
+
const workflows = await agent.getWorkflows({ runtimeContext });
|
|
102
|
+
serializedAgentWorkflows = Object.entries(workflows || {}).reduce((acc, [key, workflow]) => {
|
|
103
|
+
return {
|
|
104
|
+
...acc,
|
|
105
|
+
[key]: {
|
|
106
|
+
name: workflow.name,
|
|
107
|
+
steps: Object.entries(workflow.steps).reduce((acc2, [key2, step]) => {
|
|
108
|
+
return {
|
|
109
|
+
...acc2,
|
|
110
|
+
[key2]: {
|
|
111
|
+
id: step.id,
|
|
112
|
+
description: step.description
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}, {})
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}, {});
|
|
119
|
+
} catch (error) {
|
|
120
|
+
logger.error("Error getting workflows for agent", { agentName: agent.name, error });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
let proxyRuntimeContext = runtimeContext;
|
|
124
|
+
if (isPlayground) {
|
|
125
|
+
proxyRuntimeContext = new Proxy(runtimeContext, {
|
|
126
|
+
get(target, prop) {
|
|
127
|
+
if (prop === "get") {
|
|
128
|
+
return function(key) {
|
|
129
|
+
const value = target.get(key);
|
|
130
|
+
return value ?? `<${key}>`;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return Reflect.get(target, prop);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const instructions = await agent.getInstructions({ runtimeContext: proxyRuntimeContext });
|
|
138
|
+
const llm = await agent.getLLM({ runtimeContext });
|
|
139
|
+
const defaultGenerateOptions = await agent.getDefaultGenerateOptions({ runtimeContext: proxyRuntimeContext });
|
|
140
|
+
const defaultStreamOptions = await agent.getDefaultStreamOptions({ runtimeContext: proxyRuntimeContext });
|
|
141
|
+
return {
|
|
142
|
+
name: agent.name,
|
|
143
|
+
instructions,
|
|
144
|
+
tools: serializedAgentTools,
|
|
145
|
+
workflows: serializedAgentWorkflows,
|
|
146
|
+
provider: llm?.getProvider(),
|
|
147
|
+
modelId: llm?.getModelId(),
|
|
148
|
+
defaultGenerateOptions,
|
|
149
|
+
defaultStreamOptions
|
|
150
|
+
};
|
|
151
|
+
} catch (error) {
|
|
152
|
+
return handleError(error, "Error getting agent");
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function getEvalsByAgentIdHandler({
|
|
156
|
+
mastra,
|
|
157
|
+
runtimeContext,
|
|
158
|
+
agentId
|
|
159
|
+
}) {
|
|
160
|
+
try {
|
|
161
|
+
const agent = mastra.getAgent(agentId);
|
|
162
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "test") || [];
|
|
163
|
+
const instructions = await agent.getInstructions({ runtimeContext });
|
|
164
|
+
return {
|
|
165
|
+
id: agentId,
|
|
166
|
+
name: agent.name,
|
|
167
|
+
instructions,
|
|
168
|
+
evals
|
|
169
|
+
};
|
|
170
|
+
} catch (error) {
|
|
171
|
+
return handleError(error, "Error getting test evals");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function getLiveEvalsByAgentIdHandler({
|
|
175
|
+
mastra,
|
|
176
|
+
runtimeContext,
|
|
177
|
+
agentId
|
|
178
|
+
}) {
|
|
179
|
+
try {
|
|
180
|
+
const agent = mastra.getAgent(agentId);
|
|
181
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "live") || [];
|
|
182
|
+
const instructions = await agent.getInstructions({ runtimeContext });
|
|
183
|
+
return {
|
|
184
|
+
id: agentId,
|
|
185
|
+
name: agent.name,
|
|
186
|
+
instructions,
|
|
187
|
+
evals
|
|
188
|
+
};
|
|
189
|
+
} catch (error) {
|
|
190
|
+
return handleError(error, "Error getting live evals");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async function generateHandler({
|
|
194
|
+
mastra,
|
|
195
|
+
runtimeContext,
|
|
196
|
+
agentId,
|
|
197
|
+
body,
|
|
198
|
+
abortSignal
|
|
199
|
+
}) {
|
|
200
|
+
try {
|
|
201
|
+
const agent = mastra.getAgent(agentId);
|
|
202
|
+
if (!agent) {
|
|
203
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
204
|
+
}
|
|
205
|
+
const { messages, resourceId, resourceid, runtimeContext: agentRuntimeContext, ...rest } = body;
|
|
206
|
+
const finalResourceId = resourceId ?? resourceid;
|
|
207
|
+
const finalRuntimeContext = new RuntimeContext([
|
|
208
|
+
...Array.from(runtimeContext.entries()),
|
|
209
|
+
...Array.from(Object.entries(agentRuntimeContext ?? {}))
|
|
210
|
+
]);
|
|
211
|
+
validateBody({ messages });
|
|
212
|
+
const result = await agent.generate(messages, {
|
|
213
|
+
...rest,
|
|
214
|
+
// @ts-expect-error TODO fix types
|
|
215
|
+
resourceId: finalResourceId,
|
|
216
|
+
runtimeContext: finalRuntimeContext,
|
|
217
|
+
signal: abortSignal
|
|
218
|
+
});
|
|
219
|
+
return result;
|
|
220
|
+
} catch (error) {
|
|
221
|
+
return handleError(error, "Error generating from agent");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function streamGenerateHandler({
|
|
225
|
+
mastra,
|
|
226
|
+
runtimeContext,
|
|
227
|
+
agentId,
|
|
228
|
+
body,
|
|
229
|
+
abortSignal
|
|
230
|
+
}) {
|
|
231
|
+
try {
|
|
232
|
+
const agent = mastra.getAgent(agentId);
|
|
233
|
+
if (!agent) {
|
|
234
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
235
|
+
}
|
|
236
|
+
const { messages, resourceId, resourceid, runtimeContext: agentRuntimeContext, ...rest } = body;
|
|
237
|
+
const finalResourceId = resourceId ?? resourceid;
|
|
238
|
+
const finalRuntimeContext = new RuntimeContext([
|
|
239
|
+
...Array.from(runtimeContext.entries()),
|
|
240
|
+
...Array.from(Object.entries(agentRuntimeContext ?? {}))
|
|
241
|
+
]);
|
|
242
|
+
validateBody({ messages });
|
|
243
|
+
const streamResult = await agent.stream(messages, {
|
|
244
|
+
...rest,
|
|
245
|
+
// @ts-expect-error TODO fix types
|
|
246
|
+
resourceId: finalResourceId,
|
|
247
|
+
runtimeContext: finalRuntimeContext,
|
|
248
|
+
signal: abortSignal
|
|
249
|
+
});
|
|
250
|
+
const streamResponse = rest.output ? streamResult.toTextStreamResponse({
|
|
251
|
+
headers: {
|
|
252
|
+
"Transfer-Encoding": "chunked"
|
|
253
|
+
}
|
|
254
|
+
}) : streamResult.toDataStreamResponse({
|
|
255
|
+
sendUsage: true,
|
|
256
|
+
sendReasoning: true,
|
|
257
|
+
getErrorMessage: (error) => {
|
|
258
|
+
return `An error occurred while processing your request. ${error instanceof Error ? error.message : JSON.stringify(error)}`;
|
|
259
|
+
},
|
|
260
|
+
headers: {
|
|
261
|
+
"Transfer-Encoding": "chunked"
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
return streamResponse;
|
|
265
|
+
} catch (error) {
|
|
266
|
+
return handleError(error, "error streaming agent response");
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export { agents_exports, generateHandler, getAgentByIdHandler, getAgentsHandler, getEvalsByAgentIdHandler, getLiveEvalsByAgentIdHandler, streamGenerateHandler };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk2KZFMI6P_cjs = require('./chunk-2KZFMI6P.cjs');
|
|
4
|
+
|
|
5
|
+
// src/server/handlers/utils.ts
|
|
6
|
+
function validateBody(body) {
|
|
7
|
+
const errorResponse = Object.entries(body).reduce((acc, [key, value]) => {
|
|
8
|
+
if (!value) {
|
|
9
|
+
acc[key] = `Argument "${key}" is required`;
|
|
10
|
+
}
|
|
11
|
+
return acc;
|
|
12
|
+
}, {});
|
|
13
|
+
if (Object.keys(errorResponse).length > 0) {
|
|
14
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: Object.values(errorResponse)[0] });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.validateBody = validateBody;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { validateBody } from './chunk-RSEO4XPX.js';
|
|
2
|
+
import { handleError } from './chunk-LF7P5PLR.js';
|
|
3
|
+
import { HTTPException } from './chunk-LCM566I4.js';
|
|
4
|
+
import { __export } from './chunk-MLKGABMK.js';
|
|
5
|
+
|
|
6
|
+
// src/server/handlers/network.ts
|
|
7
|
+
var network_exports = {};
|
|
8
|
+
__export(network_exports, {
|
|
9
|
+
generateHandler: () => generateHandler,
|
|
10
|
+
getNetworkByIdHandler: () => getNetworkByIdHandler,
|
|
11
|
+
getNetworksHandler: () => getNetworksHandler,
|
|
12
|
+
streamGenerateHandler: () => streamGenerateHandler
|
|
13
|
+
});
|
|
14
|
+
async function getNetworksHandler({
|
|
15
|
+
mastra,
|
|
16
|
+
runtimeContext
|
|
17
|
+
}) {
|
|
18
|
+
try {
|
|
19
|
+
const networks = mastra.getNetworks();
|
|
20
|
+
const serializedNetworks = await Promise.all(
|
|
21
|
+
networks.map(async (network) => {
|
|
22
|
+
const routingAgent = network.getRoutingAgent();
|
|
23
|
+
const routingLLM = await routingAgent.getLLM({ runtimeContext });
|
|
24
|
+
const agents = network.getAgents();
|
|
25
|
+
return {
|
|
26
|
+
id: network.formatAgentId(routingAgent.name),
|
|
27
|
+
name: routingAgent.name,
|
|
28
|
+
instructions: routingAgent.instructions,
|
|
29
|
+
agents: await Promise.all(
|
|
30
|
+
agents.map(async (agent) => {
|
|
31
|
+
const llm = await agent.getLLM({ runtimeContext });
|
|
32
|
+
return {
|
|
33
|
+
name: agent.name,
|
|
34
|
+
provider: llm?.getProvider(),
|
|
35
|
+
modelId: llm?.getModelId()
|
|
36
|
+
};
|
|
37
|
+
})
|
|
38
|
+
),
|
|
39
|
+
routingModel: {
|
|
40
|
+
provider: routingLLM?.getProvider(),
|
|
41
|
+
modelId: routingLLM?.getModelId()
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
return serializedNetworks;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return handleError(error, "Error getting networks");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function getNetworkByIdHandler({
|
|
52
|
+
mastra,
|
|
53
|
+
networkId,
|
|
54
|
+
runtimeContext
|
|
55
|
+
}) {
|
|
56
|
+
try {
|
|
57
|
+
const networks = mastra.getNetworks();
|
|
58
|
+
const network = networks.find((network2) => {
|
|
59
|
+
const routingAgent2 = network2.getRoutingAgent();
|
|
60
|
+
return network2.formatAgentId(routingAgent2.name) === networkId;
|
|
61
|
+
});
|
|
62
|
+
if (!network) {
|
|
63
|
+
throw new HTTPException(404, { message: "Network not found" });
|
|
64
|
+
}
|
|
65
|
+
const routingAgent = network.getRoutingAgent();
|
|
66
|
+
const routingLLM = await routingAgent.getLLM({ runtimeContext });
|
|
67
|
+
const agents = network.getAgents();
|
|
68
|
+
const serializedNetwork = {
|
|
69
|
+
id: network.formatAgentId(routingAgent.name),
|
|
70
|
+
name: routingAgent.name,
|
|
71
|
+
instructions: routingAgent.instructions,
|
|
72
|
+
agents: await Promise.all(
|
|
73
|
+
agents.map(async (agent) => {
|
|
74
|
+
const llm = await agent.getLLM({ runtimeContext });
|
|
75
|
+
return {
|
|
76
|
+
name: agent.name,
|
|
77
|
+
provider: llm?.getProvider(),
|
|
78
|
+
modelId: llm?.getModelId()
|
|
79
|
+
};
|
|
80
|
+
})
|
|
81
|
+
),
|
|
82
|
+
routingModel: {
|
|
83
|
+
provider: routingLLM?.getProvider(),
|
|
84
|
+
modelId: routingLLM?.getModelId()
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
return serializedNetwork;
|
|
88
|
+
} catch (error) {
|
|
89
|
+
return handleError(error, "Error getting network by ID");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function generateHandler({
|
|
93
|
+
mastra,
|
|
94
|
+
runtimeContext,
|
|
95
|
+
networkId,
|
|
96
|
+
body
|
|
97
|
+
}) {
|
|
98
|
+
try {
|
|
99
|
+
const network = mastra.getNetwork(networkId);
|
|
100
|
+
if (!network) {
|
|
101
|
+
throw new HTTPException(404, { message: "Network not found" });
|
|
102
|
+
}
|
|
103
|
+
validateBody({ messages: body.messages });
|
|
104
|
+
const { messages, ...rest } = body;
|
|
105
|
+
const result = await network.generate(messages, { ...rest, runtimeContext });
|
|
106
|
+
return result;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
return handleError(error, "Error generating from network");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function streamGenerateHandler({
|
|
112
|
+
mastra,
|
|
113
|
+
networkId,
|
|
114
|
+
body,
|
|
115
|
+
runtimeContext
|
|
116
|
+
}) {
|
|
117
|
+
try {
|
|
118
|
+
const network = mastra.getNetwork(networkId);
|
|
119
|
+
if (!network) {
|
|
120
|
+
throw new HTTPException(404, { message: "Network not found" });
|
|
121
|
+
}
|
|
122
|
+
validateBody({ messages: body.messages });
|
|
123
|
+
const { messages, output, ...rest } = body;
|
|
124
|
+
const streamResult = await network.stream(messages, {
|
|
125
|
+
output,
|
|
126
|
+
...rest,
|
|
127
|
+
runtimeContext
|
|
128
|
+
});
|
|
129
|
+
const streamResponse = output ? streamResult.toTextStreamResponse() : streamResult.toDataStreamResponse({
|
|
130
|
+
sendUsage: true,
|
|
131
|
+
sendReasoning: true,
|
|
132
|
+
getErrorMessage: (error) => {
|
|
133
|
+
return `An error occurred while processing your request. ${error instanceof Error ? error.message : JSON.stringify(error)}`;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return streamResponse;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
return handleError(error, "Error streaming from network");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { generateHandler, getNetworkByIdHandler, getNetworksHandler, network_exports, streamGenerateHandler };
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkCCGRCYWJ_cjs = require('./chunk-CCGRCYWJ.cjs');
|
|
4
|
+
var chunkPZQDCRPV_cjs = require('./chunk-PZQDCRPV.cjs');
|
|
5
|
+
var chunk2KZFMI6P_cjs = require('./chunk-2KZFMI6P.cjs');
|
|
6
|
+
var chunk75ZPJI57_cjs = require('./chunk-75ZPJI57.cjs');
|
|
7
|
+
|
|
8
|
+
// src/server/handlers/memory.ts
|
|
9
|
+
var memory_exports = {};
|
|
10
|
+
chunk75ZPJI57_cjs.__export(memory_exports, {
|
|
11
|
+
createThreadHandler: () => createThreadHandler,
|
|
12
|
+
deleteThreadHandler: () => deleteThreadHandler,
|
|
13
|
+
getMemoryStatusHandler: () => getMemoryStatusHandler,
|
|
14
|
+
getMessagesHandler: () => getMessagesHandler,
|
|
15
|
+
getThreadByIdHandler: () => getThreadByIdHandler,
|
|
16
|
+
getThreadsHandler: () => getThreadsHandler,
|
|
17
|
+
saveMessagesHandler: () => saveMessagesHandler,
|
|
18
|
+
updateThreadHandler: () => updateThreadHandler
|
|
19
|
+
});
|
|
20
|
+
async function getMemoryFromContext({
|
|
21
|
+
mastra,
|
|
22
|
+
agentId,
|
|
23
|
+
networkId,
|
|
24
|
+
runtimeContext
|
|
25
|
+
}) {
|
|
26
|
+
const agent = agentId ? mastra.getAgent(agentId) : null;
|
|
27
|
+
if (agentId && !agent) {
|
|
28
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Agent not found" });
|
|
29
|
+
}
|
|
30
|
+
const network = networkId ? mastra.vnext_getNetwork(networkId) : null;
|
|
31
|
+
if (networkId && !network) {
|
|
32
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Network not found" });
|
|
33
|
+
}
|
|
34
|
+
if (agent) {
|
|
35
|
+
return agent?.getMemory() || mastra.getMemory();
|
|
36
|
+
}
|
|
37
|
+
if (network) {
|
|
38
|
+
return await network?.getMemory({ runtimeContext }) || mastra.getMemory();
|
|
39
|
+
}
|
|
40
|
+
return mastra.getMemory();
|
|
41
|
+
}
|
|
42
|
+
async function getMemoryStatusHandler({
|
|
43
|
+
mastra,
|
|
44
|
+
agentId,
|
|
45
|
+
networkId,
|
|
46
|
+
runtimeContext
|
|
47
|
+
}) {
|
|
48
|
+
try {
|
|
49
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
50
|
+
if (!memory) {
|
|
51
|
+
return { result: false };
|
|
52
|
+
}
|
|
53
|
+
return { result: true };
|
|
54
|
+
} catch (error) {
|
|
55
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error getting memory status");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function getThreadsHandler({
|
|
59
|
+
mastra,
|
|
60
|
+
agentId,
|
|
61
|
+
resourceId,
|
|
62
|
+
networkId,
|
|
63
|
+
runtimeContext
|
|
64
|
+
}) {
|
|
65
|
+
try {
|
|
66
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
67
|
+
if (!memory) {
|
|
68
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
69
|
+
}
|
|
70
|
+
chunkCCGRCYWJ_cjs.validateBody({ resourceId });
|
|
71
|
+
const threads = await memory.getThreadsByResourceId({ resourceId });
|
|
72
|
+
return threads;
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error getting threads");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function getThreadByIdHandler({
|
|
78
|
+
mastra,
|
|
79
|
+
agentId,
|
|
80
|
+
threadId,
|
|
81
|
+
networkId,
|
|
82
|
+
runtimeContext
|
|
83
|
+
}) {
|
|
84
|
+
try {
|
|
85
|
+
chunkCCGRCYWJ_cjs.validateBody({ threadId });
|
|
86
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
87
|
+
if (!memory) {
|
|
88
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
89
|
+
}
|
|
90
|
+
const thread = await memory.getThreadById({ threadId });
|
|
91
|
+
if (!thread) {
|
|
92
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Thread not found" });
|
|
93
|
+
}
|
|
94
|
+
return thread;
|
|
95
|
+
} catch (error) {
|
|
96
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error getting thread");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function saveMessagesHandler({
|
|
100
|
+
mastra,
|
|
101
|
+
agentId,
|
|
102
|
+
body,
|
|
103
|
+
networkId,
|
|
104
|
+
runtimeContext
|
|
105
|
+
}) {
|
|
106
|
+
try {
|
|
107
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
108
|
+
if (!memory) {
|
|
109
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
110
|
+
}
|
|
111
|
+
if (!body?.messages) {
|
|
112
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Messages are required" });
|
|
113
|
+
}
|
|
114
|
+
if (!Array.isArray(body.messages)) {
|
|
115
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Messages should be an array" });
|
|
116
|
+
}
|
|
117
|
+
const processedMessages = body.messages.map((message) => ({
|
|
118
|
+
...message,
|
|
119
|
+
id: memory.generateId(),
|
|
120
|
+
createdAt: message.createdAt ? new Date(message.createdAt) : /* @__PURE__ */ new Date()
|
|
121
|
+
}));
|
|
122
|
+
const result = await memory.saveMessages({ messages: processedMessages, memoryConfig: {} });
|
|
123
|
+
return result;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error saving messages");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function createThreadHandler({
|
|
129
|
+
mastra,
|
|
130
|
+
agentId,
|
|
131
|
+
body,
|
|
132
|
+
networkId,
|
|
133
|
+
runtimeContext
|
|
134
|
+
}) {
|
|
135
|
+
try {
|
|
136
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
137
|
+
if (!memory) {
|
|
138
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
139
|
+
}
|
|
140
|
+
chunkCCGRCYWJ_cjs.validateBody({ resourceId: body?.resourceId });
|
|
141
|
+
const result = await memory.createThread({
|
|
142
|
+
resourceId: body?.resourceId,
|
|
143
|
+
title: body?.title,
|
|
144
|
+
metadata: body?.metadata,
|
|
145
|
+
threadId: body?.threadId
|
|
146
|
+
});
|
|
147
|
+
return result;
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error saving thread to memory");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function updateThreadHandler({
|
|
153
|
+
mastra,
|
|
154
|
+
agentId,
|
|
155
|
+
threadId,
|
|
156
|
+
body,
|
|
157
|
+
networkId,
|
|
158
|
+
runtimeContext
|
|
159
|
+
}) {
|
|
160
|
+
try {
|
|
161
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
162
|
+
if (!body) {
|
|
163
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Body is required" });
|
|
164
|
+
}
|
|
165
|
+
const { title, metadata, resourceId } = body;
|
|
166
|
+
const updatedAt = /* @__PURE__ */ new Date();
|
|
167
|
+
chunkCCGRCYWJ_cjs.validateBody({ threadId });
|
|
168
|
+
if (!memory) {
|
|
169
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
170
|
+
}
|
|
171
|
+
const thread = await memory.getThreadById({ threadId });
|
|
172
|
+
if (!thread) {
|
|
173
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Thread not found" });
|
|
174
|
+
}
|
|
175
|
+
const updatedThread = {
|
|
176
|
+
...thread,
|
|
177
|
+
title: title || thread.title,
|
|
178
|
+
metadata: metadata || thread.metadata,
|
|
179
|
+
resourceId: resourceId || thread.resourceId,
|
|
180
|
+
createdAt: thread.createdAt,
|
|
181
|
+
updatedAt
|
|
182
|
+
};
|
|
183
|
+
const result = await memory.saveThread({ thread: updatedThread });
|
|
184
|
+
return result;
|
|
185
|
+
} catch (error) {
|
|
186
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error updating thread");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async function deleteThreadHandler({
|
|
190
|
+
mastra,
|
|
191
|
+
agentId,
|
|
192
|
+
threadId,
|
|
193
|
+
networkId,
|
|
194
|
+
runtimeContext
|
|
195
|
+
}) {
|
|
196
|
+
try {
|
|
197
|
+
chunkCCGRCYWJ_cjs.validateBody({ threadId });
|
|
198
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
199
|
+
if (!memory) {
|
|
200
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
201
|
+
}
|
|
202
|
+
const thread = await memory.getThreadById({ threadId });
|
|
203
|
+
if (!thread) {
|
|
204
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Thread not found" });
|
|
205
|
+
}
|
|
206
|
+
await memory.deleteThread(threadId);
|
|
207
|
+
return { result: "Thread deleted" };
|
|
208
|
+
} catch (error) {
|
|
209
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error deleting thread");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async function getMessagesHandler({
|
|
213
|
+
mastra,
|
|
214
|
+
agentId,
|
|
215
|
+
threadId,
|
|
216
|
+
limit,
|
|
217
|
+
networkId,
|
|
218
|
+
runtimeContext
|
|
219
|
+
}) {
|
|
220
|
+
if (limit !== void 0 && (!Number.isInteger(limit) || limit <= 0)) {
|
|
221
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Invalid limit: must be a positive integer" });
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
chunkCCGRCYWJ_cjs.validateBody({ threadId });
|
|
225
|
+
const memory = await getMemoryFromContext({ mastra, agentId, networkId, runtimeContext });
|
|
226
|
+
if (!memory) {
|
|
227
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(400, { message: "Memory is not initialized" });
|
|
228
|
+
}
|
|
229
|
+
const thread = await memory.getThreadById({ threadId });
|
|
230
|
+
if (!thread) {
|
|
231
|
+
throw new chunk2KZFMI6P_cjs.HTTPException(404, { message: "Thread not found" });
|
|
232
|
+
}
|
|
233
|
+
const result = await memory.query({
|
|
234
|
+
threadId,
|
|
235
|
+
...limit && { selectBy: { last: limit } }
|
|
236
|
+
});
|
|
237
|
+
return { messages: result.messages, uiMessages: result.uiMessages };
|
|
238
|
+
} catch (error) {
|
|
239
|
+
return chunkPZQDCRPV_cjs.handleError(error, "Error getting messages");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
exports.createThreadHandler = createThreadHandler;
|
|
244
|
+
exports.deleteThreadHandler = deleteThreadHandler;
|
|
245
|
+
exports.getMemoryStatusHandler = getMemoryStatusHandler;
|
|
246
|
+
exports.getMessagesHandler = getMessagesHandler;
|
|
247
|
+
exports.getThreadByIdHandler = getThreadByIdHandler;
|
|
248
|
+
exports.getThreadsHandler = getThreadsHandler;
|
|
249
|
+
exports.memory_exports = memory_exports;
|
|
250
|
+
exports.saveMessagesHandler = saveMessagesHandler;
|
|
251
|
+
exports.updateThreadHandler = updateThreadHandler;
|