@mastra/server 0.0.0-commonjs-20250414101718 → 0.0.0-custom-instrumentation-20250626084921
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/README.md +48 -135
- package/dist/_tsup-dts-rollup.d.cts +544 -62
- package/dist/_tsup-dts-rollup.d.ts +544 -62
- package/dist/chunk-4DTDPTQC.cjs +332 -0
- package/dist/{chunk-4JINXASC.js → chunk-55DOQLP6.js} +5 -4
- package/dist/{chunk-QN4KF3BH.cjs → chunk-57CJTIPW.cjs} +2 -2
- package/dist/{chunk-ZLBRQFDD.cjs → chunk-64U3UDTH.cjs} +2 -2
- package/dist/chunk-75ZPJI57.cjs +9 -0
- package/dist/{chunk-CWSDZEZG.cjs → chunk-B4MQFJ7G.cjs} +18 -12
- package/dist/{chunk-DVPP5S6I.js → chunk-BFOA2QQY.js} +14 -8
- package/dist/{chunk-M56ECCHK.cjs → chunk-BNEY4P4P.cjs} +20 -19
- package/dist/{chunk-YANVFOYA.js → chunk-C7564HUT.js} +56 -34
- package/dist/{chunk-4C3EPMMF.cjs → chunk-CPPYMJX5.cjs} +31 -25
- package/dist/chunk-GHC4YV6R.js +504 -0
- package/dist/chunk-GKM45O24.cjs +278 -0
- package/dist/{chunk-L7XE5QTW.js → chunk-H5PTF3Y4.js} +1 -1
- package/dist/chunk-IMBY5XUG.cjs +86 -0
- package/dist/{chunk-3AHQ5RGN.js → chunk-M5ABIP7D.js} +1 -1
- package/dist/chunk-MLKGABMK.js +7 -0
- package/dist/chunk-MN6F4D5A.cjs +2004 -0
- package/dist/{chunk-OPP7H5TW.js → chunk-N2YBMSO2.js} +78 -63
- package/dist/{chunk-TRDNDNGQ.js → chunk-NYN7KFXL.js} +1 -7
- package/dist/{chunk-FV45V6WC.cjs → chunk-OCWPVYNI.cjs} +0 -7
- package/dist/chunk-OSZM4EAY.js +2001 -0
- package/dist/chunk-PMUATKV2.js +270 -0
- package/dist/chunk-QLG2PFHE.js +81 -0
- package/dist/{chunk-3RVHWGWO.js → chunk-R5VGYBV6.js} +36 -19
- package/dist/{chunk-2FJURXCL.cjs → chunk-RQ2Z56EC.cjs} +93 -55
- package/dist/chunk-SDPGVWQJ.cjs +512 -0
- package/dist/chunk-SOBBILUG.js +421 -0
- package/dist/chunk-TO5U6HW3.cjs +435 -0
- package/dist/chunk-VPNDC2DI.cjs +148 -0
- package/dist/chunk-WJY57THV.cjs +118 -0
- package/dist/{chunk-YNSGUC2O.js → chunk-XR7VJOOP.js} +14 -8
- package/dist/{chunk-RBQASTUP.js → chunk-XUIJ7WRT.js} +63 -25
- 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 +7 -7
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/error.cjs +2 -2
- package/dist/server/handlers/error.js +1 -1
- 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 +4 -4
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/memory.cjs +9 -9
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/network.cjs +5 -5
- package/dist/server/handlers/network.js +1 -1
- package/dist/server/handlers/telemetry.cjs +3 -3
- package/dist/server/handlers/telemetry.js +1 -1
- package/dist/server/handlers/tools.cjs +5 -5
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +2 -2
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/vNextNetwork.cjs +200 -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 +193 -0
- package/dist/server/handlers/vector.cjs +7 -7
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/voice.cjs +8 -4
- package/dist/server/handlers/voice.d.cts +1 -0
- package/dist/server/handlers/voice.d.ts +1 -0
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +21 -13
- package/dist/server/handlers/workflows.d.cts +4 -2
- package/dist/server/handlers/workflows.d.ts +4 -2
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers.cjs +33 -23
- package/dist/server/handlers.d.cts +2 -0
- package/dist/server/handlers.d.ts +2 -0
- package/dist/server/handlers.js +11 -9
- package/package.json +13 -12
- package/dist/chunk-3EJZQ6TQ.js +0 -49
- package/dist/chunk-67WTHYAV.js +0 -156
- package/dist/chunk-A7DF4ETD.cjs +0 -100
- package/dist/chunk-B64YROKU.cjs +0 -317
- package/dist/chunk-JLDXUWK7.cjs +0 -126
- package/dist/chunk-QH6XWSXP.cjs +0 -5579
- package/dist/chunk-SKBVVI24.cjs +0 -54
- package/dist/chunk-VK6FX47H.js +0 -5576
- package/dist/chunk-Z46X3YCB.cjs +0 -164
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { stringify, esm_default } from './chunk-OSZM4EAY.js';
|
|
2
|
+
import { validateBody } from './chunk-H5PTF3Y4.js';
|
|
3
|
+
import { handleError } from './chunk-M5ABIP7D.js';
|
|
4
|
+
import { HTTPException } from './chunk-NYN7KFXL.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
|
+
throw new HTTPException(error?.status ?? 500, { message: error?.message ?? "Error streaming from agent" });
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export { agents_exports, generateHandler, getAgentByIdHandler, getAgentsHandler, getEvalsByAgentIdHandler, getLiveEvalsByAgentIdHandler, streamGenerateHandler };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { validateBody } from './chunk-H5PTF3Y4.js';
|
|
2
|
+
import { handleError } from './chunk-M5ABIP7D.js';
|
|
3
|
+
import { __export } from './chunk-MLKGABMK.js';
|
|
4
|
+
|
|
5
|
+
// src/server/handlers/logs.ts
|
|
6
|
+
var logs_exports = {};
|
|
7
|
+
__export(logs_exports, {
|
|
8
|
+
getLogTransports: () => getLogTransports,
|
|
9
|
+
getLogsByRunIdHandler: () => getLogsByRunIdHandler,
|
|
10
|
+
getLogsHandler: () => getLogsHandler
|
|
11
|
+
});
|
|
12
|
+
async function getLogsHandler({
|
|
13
|
+
mastra,
|
|
14
|
+
transportId,
|
|
15
|
+
params
|
|
16
|
+
}) {
|
|
17
|
+
try {
|
|
18
|
+
validateBody({ transportId });
|
|
19
|
+
const { fromDate, toDate, logLevel, filters: _filters, page, perPage } = params || {};
|
|
20
|
+
const filters = _filters ? Object.fromEntries(
|
|
21
|
+
(Array.isArray(_filters) ? _filters : [_filters]).map((attr) => {
|
|
22
|
+
const [key, value] = attr.split(":");
|
|
23
|
+
return [key, value];
|
|
24
|
+
})
|
|
25
|
+
) : void 0;
|
|
26
|
+
const logs = await mastra.getLogs(transportId, {
|
|
27
|
+
fromDate,
|
|
28
|
+
toDate,
|
|
29
|
+
logLevel,
|
|
30
|
+
filters,
|
|
31
|
+
page: page ? Number(page) : void 0,
|
|
32
|
+
perPage: perPage ? Number(perPage) : void 0
|
|
33
|
+
});
|
|
34
|
+
return logs;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
return handleError(error, "Error getting logs");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function getLogsByRunIdHandler({
|
|
40
|
+
mastra,
|
|
41
|
+
runId,
|
|
42
|
+
transportId,
|
|
43
|
+
params
|
|
44
|
+
}) {
|
|
45
|
+
try {
|
|
46
|
+
validateBody({ runId, transportId });
|
|
47
|
+
const { fromDate, toDate, logLevel, filters: _filters, page, perPage } = params || {};
|
|
48
|
+
const filters = _filters ? Object.fromEntries(
|
|
49
|
+
(Array.isArray(_filters) ? _filters : [_filters]).map((attr) => {
|
|
50
|
+
const [key, value] = attr.split(":");
|
|
51
|
+
return [key, value];
|
|
52
|
+
})
|
|
53
|
+
) : void 0;
|
|
54
|
+
const logs = await mastra.getLogsByRunId({
|
|
55
|
+
runId,
|
|
56
|
+
transportId,
|
|
57
|
+
fromDate,
|
|
58
|
+
toDate,
|
|
59
|
+
logLevel,
|
|
60
|
+
filters,
|
|
61
|
+
page: page ? Number(page) : void 0,
|
|
62
|
+
perPage: perPage ? Number(perPage) : void 0
|
|
63
|
+
});
|
|
64
|
+
return logs;
|
|
65
|
+
} catch (error) {
|
|
66
|
+
return handleError(error, "Error getting logs by run ID");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function getLogTransports({ mastra }) {
|
|
70
|
+
try {
|
|
71
|
+
const logger = mastra.getLogger();
|
|
72
|
+
const transports = logger.getTransports();
|
|
73
|
+
return {
|
|
74
|
+
transports: transports ? [...transports.keys()] : []
|
|
75
|
+
};
|
|
76
|
+
} catch (error) {
|
|
77
|
+
return handleError(error, "Error getting log Transports");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { getLogTransports, getLogsByRunIdHandler, getLogsHandler, logs_exports };
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { validateBody } from './chunk-
|
|
2
|
-
import { handleError } from './chunk-
|
|
3
|
-
import {
|
|
1
|
+
import { validateBody } from './chunk-H5PTF3Y4.js';
|
|
2
|
+
import { handleError } from './chunk-M5ABIP7D.js';
|
|
3
|
+
import { HTTPException } from './chunk-NYN7KFXL.js';
|
|
4
|
+
import { __export } from './chunk-MLKGABMK.js';
|
|
4
5
|
import { Readable } from 'stream';
|
|
5
6
|
|
|
6
7
|
// src/server/handlers/voice.ts
|
|
7
8
|
var voice_exports = {};
|
|
8
9
|
__export(voice_exports, {
|
|
9
10
|
generateSpeechHandler: () => generateSpeechHandler,
|
|
11
|
+
getListenerHandler: () => getListenerHandler,
|
|
10
12
|
getSpeakersHandler: () => getSpeakersHandler,
|
|
11
13
|
transcribeSpeechHandler: () => transcribeSpeechHandler
|
|
12
14
|
});
|
|
@@ -19,10 +21,11 @@ async function getSpeakersHandler({ mastra, agentId }) {
|
|
|
19
21
|
if (!agent) {
|
|
20
22
|
throw new HTTPException(404, { message: "Agent not found" });
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
const voice = await agent.getVoice();
|
|
25
|
+
if (!voice) {
|
|
23
26
|
throw new HTTPException(400, { message: "Agent does not have voice capabilities" });
|
|
24
27
|
}
|
|
25
|
-
const speakers = await
|
|
28
|
+
const speakers = await voice.getSpeakers();
|
|
26
29
|
return speakers;
|
|
27
30
|
} catch (error) {
|
|
28
31
|
return handleError(error, "Error getting speakers");
|
|
@@ -38,27 +41,21 @@ async function generateSpeechHandler({
|
|
|
38
41
|
throw new HTTPException(400, { message: "Agent ID is required" });
|
|
39
42
|
}
|
|
40
43
|
validateBody({
|
|
41
|
-
text:
|
|
42
|
-
speakerId: void 0,
|
|
43
|
-
...body
|
|
44
|
+
text: body?.text
|
|
44
45
|
});
|
|
45
46
|
const agent = mastra.getAgent(agentId);
|
|
46
47
|
if (!agent) {
|
|
47
48
|
throw new HTTPException(404, { message: "Agent not found" });
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
const voice = await agent.getVoice();
|
|
51
|
+
if (!voice) {
|
|
50
52
|
throw new HTTPException(400, { message: "Agent does not have voice capabilities" });
|
|
51
53
|
}
|
|
52
|
-
const audioStream = await
|
|
54
|
+
const audioStream = await voice.speak(body.text, { speaker: body.speakerId });
|
|
53
55
|
if (!audioStream) {
|
|
54
56
|
throw new HTTPException(500, { message: "Failed to generate speech" });
|
|
55
57
|
}
|
|
56
|
-
|
|
57
|
-
for await (const chunk of audioStream) {
|
|
58
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
59
|
-
}
|
|
60
|
-
const audioData = Buffer.concat(chunks);
|
|
61
|
-
return { audioData };
|
|
58
|
+
return audioStream;
|
|
62
59
|
} catch (error) {
|
|
63
60
|
return handleError(error, "Error generating speech");
|
|
64
61
|
}
|
|
@@ -79,17 +76,37 @@ async function transcribeSpeechHandler({
|
|
|
79
76
|
if (!agent) {
|
|
80
77
|
throw new HTTPException(404, { message: "Agent not found" });
|
|
81
78
|
}
|
|
82
|
-
|
|
79
|
+
const voice = await agent.getVoice();
|
|
80
|
+
if (!voice) {
|
|
83
81
|
throw new HTTPException(400, { message: "Agent does not have voice capabilities" });
|
|
84
82
|
}
|
|
85
83
|
const audioStream = new Readable();
|
|
86
84
|
audioStream.push(body.audioData);
|
|
87
85
|
audioStream.push(null);
|
|
88
|
-
const text = await
|
|
86
|
+
const text = await voice.listen(audioStream, body.options);
|
|
89
87
|
return { text };
|
|
90
88
|
} catch (error) {
|
|
91
89
|
return handleError(error, "Error transcribing speech");
|
|
92
90
|
}
|
|
93
91
|
}
|
|
92
|
+
async function getListenerHandler({ mastra, agentId }) {
|
|
93
|
+
try {
|
|
94
|
+
if (!agentId) {
|
|
95
|
+
throw new HTTPException(400, { message: "Agent ID is required" });
|
|
96
|
+
}
|
|
97
|
+
const agent = mastra.getAgent(agentId);
|
|
98
|
+
if (!agent) {
|
|
99
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
100
|
+
}
|
|
101
|
+
const voice = await agent.getVoice();
|
|
102
|
+
if (!voice) {
|
|
103
|
+
throw new HTTPException(400, { message: "Agent does not have voice capabilities" });
|
|
104
|
+
}
|
|
105
|
+
const listeners = await voice.getListener();
|
|
106
|
+
return listeners;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
return handleError(error, "Error getting listeners");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
94
111
|
|
|
95
|
-
export { generateSpeechHandler, getSpeakersHandler, transcribeSpeechHandler, voice_exports };
|
|
112
|
+
export { generateSpeechHandler, getListenerHandler, getSpeakersHandler, transcribeSpeechHandler, voice_exports };
|