@mastra/server 0.0.1-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/LICENSE +44 -0
- package/README.md +159 -0
- package/dist/_tsup-dts-rollup.d.cts +592 -0
- package/dist/_tsup-dts-rollup.d.ts +592 -0
- package/dist/chunk-2FJURXCL.cjs +213 -0
- package/dist/chunk-2JQC6JWP.js +46 -0
- package/dist/chunk-2YONKUWB.js +117 -0
- package/dist/chunk-3AHQ5RGN.js +11 -0
- package/dist/chunk-3RVHWGWO.js +95 -0
- package/dist/chunk-4C3EPMMF.cjs +122 -0
- package/dist/chunk-4JINXASC.js +120 -0
- package/dist/chunk-5JOF627H.cjs +123 -0
- package/dist/chunk-5MCUD7TP.js +142 -0
- package/dist/chunk-5WF7YIIE.cjs +150 -0
- package/dist/chunk-A4DCRMIV.js +125 -0
- package/dist/chunk-A7DF4ETD.cjs +100 -0
- package/dist/chunk-FV45V6WC.cjs +43 -0
- package/dist/chunk-L7XE5QTW.js +16 -0
- package/dist/chunk-M56ECCHK.cjs +128 -0
- package/dist/chunk-QH6XWSXP.cjs +5579 -0
- package/dist/chunk-QN4KF3BH.cjs +18 -0
- package/dist/chunk-RBQASTUP.js +203 -0
- package/dist/chunk-S6GTZWMY.js +275 -0
- package/dist/chunk-SKKC3EDG.cjs +286 -0
- package/dist/chunk-TRDNDNGQ.js +40 -0
- package/dist/chunk-VB7KH62D.cjs +51 -0
- package/dist/chunk-VK6FX47H.js +5576 -0
- package/dist/chunk-YCJ2OJTL.cjs +129 -0
- package/dist/chunk-YNSGUC2O.js +116 -0
- package/dist/chunk-ZLBRQFDD.cjs +13 -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/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/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/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 +18 -0
- package/dist/server/handlers/voice.d.cts +3 -0
- package/dist/server/handlers/voice.d.ts +3 -0
- package/dist/server/handlers/voice.js +1 -0
- package/dist/server/handlers/workflows.cjs +42 -0
- package/dist/server/handlers/workflows.d.cts +9 -0
- package/dist/server/handlers/workflows.d.ts +9 -0
- package/dist/server/handlers/workflows.js +1 -0
- package/dist/server/handlers.cjs +50 -0
- package/dist/server/handlers.d.cts +9 -0
- package/dist/server/handlers.d.ts +9 -0
- package/dist/server/handlers.js +9 -0
- package/package.json +71 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { handleError } from './chunk-3AHQ5RGN.js';
|
|
2
|
+
import { __export, HTTPException } from './chunk-TRDNDNGQ.js';
|
|
3
|
+
|
|
4
|
+
// src/server/handlers/vector.ts
|
|
5
|
+
var vector_exports = {};
|
|
6
|
+
__export(vector_exports, {
|
|
7
|
+
createIndex: () => createIndex,
|
|
8
|
+
deleteIndex: () => deleteIndex,
|
|
9
|
+
describeIndex: () => describeIndex,
|
|
10
|
+
listIndexes: () => listIndexes,
|
|
11
|
+
queryVectors: () => queryVectors,
|
|
12
|
+
upsertVectors: () => upsertVectors
|
|
13
|
+
});
|
|
14
|
+
function getVector(mastra, vectorName) {
|
|
15
|
+
if (!vectorName) {
|
|
16
|
+
throw new HTTPException(400, { message: "Vector name is required" });
|
|
17
|
+
}
|
|
18
|
+
const vector = mastra.getVector(vectorName);
|
|
19
|
+
if (!vector) {
|
|
20
|
+
throw new HTTPException(404, { message: `Vector store ${vectorName} not found` });
|
|
21
|
+
}
|
|
22
|
+
return vector;
|
|
23
|
+
}
|
|
24
|
+
async function upsertVectors({ mastra, vectorName, index }) {
|
|
25
|
+
try {
|
|
26
|
+
if (!index?.indexName || !index?.vectors || !Array.isArray(index.vectors)) {
|
|
27
|
+
throw new HTTPException(400, { message: "Invalid request index. indexName and vectors array are required." });
|
|
28
|
+
}
|
|
29
|
+
const vector = getVector(mastra, vectorName);
|
|
30
|
+
const result = await vector.upsert(index);
|
|
31
|
+
return { ids: result };
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return handleError(error, "Error upserting vectors");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function createIndex({
|
|
37
|
+
mastra,
|
|
38
|
+
vectorName,
|
|
39
|
+
index
|
|
40
|
+
}) {
|
|
41
|
+
try {
|
|
42
|
+
const { indexName, dimension, metric } = index;
|
|
43
|
+
if (!indexName || typeof dimension !== "number" || dimension <= 0) {
|
|
44
|
+
throw new HTTPException(400, {
|
|
45
|
+
message: "Invalid request index, indexName and positive dimension number are required."
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (metric && !["cosine", "euclidean", "dotproduct"].includes(metric)) {
|
|
49
|
+
throw new HTTPException(400, { message: "Invalid metric. Must be one of: cosine, euclidean, dotproduct" });
|
|
50
|
+
}
|
|
51
|
+
const vector = getVector(mastra, vectorName);
|
|
52
|
+
await vector.createIndex({ indexName, dimension, metric });
|
|
53
|
+
return { success: true };
|
|
54
|
+
} catch (error) {
|
|
55
|
+
return handleError(error, "Error creating index");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function queryVectors({
|
|
59
|
+
mastra,
|
|
60
|
+
vectorName,
|
|
61
|
+
query
|
|
62
|
+
}) {
|
|
63
|
+
try {
|
|
64
|
+
if (!query?.indexName || !query?.queryVector || !Array.isArray(query.queryVector)) {
|
|
65
|
+
throw new HTTPException(400, { message: "Invalid request query. indexName and queryVector array are required." });
|
|
66
|
+
}
|
|
67
|
+
const vector = getVector(mastra, vectorName);
|
|
68
|
+
const results = await vector.query(query);
|
|
69
|
+
return results;
|
|
70
|
+
} catch (error) {
|
|
71
|
+
return handleError(error, "Error querying vectors");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function listIndexes({ mastra, vectorName }) {
|
|
75
|
+
try {
|
|
76
|
+
const vector = getVector(mastra, vectorName);
|
|
77
|
+
const indexes = await vector.listIndexes();
|
|
78
|
+
return indexes.filter(Boolean);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
return handleError(error, "Error listing indexes");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function describeIndex({
|
|
84
|
+
mastra,
|
|
85
|
+
vectorName,
|
|
86
|
+
indexName
|
|
87
|
+
}) {
|
|
88
|
+
try {
|
|
89
|
+
if (!indexName) {
|
|
90
|
+
throw new HTTPException(400, { message: "Index name is required" });
|
|
91
|
+
}
|
|
92
|
+
const vector = getVector(mastra, vectorName);
|
|
93
|
+
const stats = await vector.describeIndex(indexName);
|
|
94
|
+
return {
|
|
95
|
+
dimension: stats.dimension,
|
|
96
|
+
count: stats.count,
|
|
97
|
+
metric: stats.metric?.toLowerCase()
|
|
98
|
+
};
|
|
99
|
+
} catch (error) {
|
|
100
|
+
return handleError(error, "Error describing index");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function deleteIndex({
|
|
104
|
+
mastra,
|
|
105
|
+
vectorName,
|
|
106
|
+
indexName
|
|
107
|
+
}) {
|
|
108
|
+
try {
|
|
109
|
+
if (!indexName) {
|
|
110
|
+
throw new HTTPException(400, { message: "Index name is required" });
|
|
111
|
+
}
|
|
112
|
+
const vector = getVector(mastra, vectorName);
|
|
113
|
+
await vector.deleteIndex(indexName);
|
|
114
|
+
return { success: true };
|
|
115
|
+
} catch (error) {
|
|
116
|
+
return handleError(error, "Error deleting index");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { createIndex, deleteIndex, describeIndex, listIndexes, queryVectors, upsertVectors, vector_exports };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkQN4KF3BH_cjs = require('./chunk-QN4KF3BH.cjs');
|
|
4
|
+
var chunkZLBRQFDD_cjs = require('./chunk-ZLBRQFDD.cjs');
|
|
5
|
+
var chunkFV45V6WC_cjs = require('./chunk-FV45V6WC.cjs');
|
|
6
|
+
|
|
7
|
+
// src/server/handlers/network.ts
|
|
8
|
+
var network_exports = {};
|
|
9
|
+
chunkFV45V6WC_cjs.__export(network_exports, {
|
|
10
|
+
generateHandler: () => generateHandler,
|
|
11
|
+
getNetworkByIdHandler: () => getNetworkByIdHandler,
|
|
12
|
+
getNetworksHandler: () => getNetworksHandler,
|
|
13
|
+
streamGenerateHandler: () => streamGenerateHandler
|
|
14
|
+
});
|
|
15
|
+
async function getNetworksHandler({ mastra }) {
|
|
16
|
+
try {
|
|
17
|
+
const networks = mastra.getNetworks();
|
|
18
|
+
const serializedNetworks = networks.map((network) => {
|
|
19
|
+
const routingAgent = network.getRoutingAgent();
|
|
20
|
+
const agents = network.getAgents();
|
|
21
|
+
return {
|
|
22
|
+
id: network.formatAgentId(routingAgent.name),
|
|
23
|
+
name: routingAgent.name,
|
|
24
|
+
instructions: routingAgent.instructions,
|
|
25
|
+
agents: agents.map((agent) => ({
|
|
26
|
+
name: agent.name,
|
|
27
|
+
provider: agent.llm?.getProvider(),
|
|
28
|
+
modelId: agent.llm?.getModelId()
|
|
29
|
+
})),
|
|
30
|
+
routingModel: {
|
|
31
|
+
provider: routingAgent.llm?.getProvider(),
|
|
32
|
+
modelId: routingAgent.llm?.getModelId()
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
return serializedNetworks;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting networks");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function getNetworkByIdHandler({ mastra, networkId }) {
|
|
42
|
+
try {
|
|
43
|
+
const networks = mastra.getNetworks();
|
|
44
|
+
const network = networks.find((network2) => {
|
|
45
|
+
const routingAgent2 = network2.getRoutingAgent();
|
|
46
|
+
return network2.formatAgentId(routingAgent2.name) === networkId;
|
|
47
|
+
});
|
|
48
|
+
if (!network) {
|
|
49
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Network not found" });
|
|
50
|
+
}
|
|
51
|
+
const routingAgent = network.getRoutingAgent();
|
|
52
|
+
const agents = network.getAgents();
|
|
53
|
+
const serializedNetwork = {
|
|
54
|
+
id: network.formatAgentId(routingAgent.name),
|
|
55
|
+
name: routingAgent.name,
|
|
56
|
+
instructions: routingAgent.instructions,
|
|
57
|
+
agents: agents.map((agent) => ({
|
|
58
|
+
name: agent.name,
|
|
59
|
+
provider: agent.llm?.getProvider(),
|
|
60
|
+
modelId: agent.llm?.getModelId()
|
|
61
|
+
})),
|
|
62
|
+
routingModel: {
|
|
63
|
+
provider: routingAgent.llm?.getProvider(),
|
|
64
|
+
modelId: routingAgent.llm?.getModelId()
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
return serializedNetwork;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting network by ID");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function generateHandler({
|
|
73
|
+
mastra,
|
|
74
|
+
networkId,
|
|
75
|
+
body
|
|
76
|
+
}) {
|
|
77
|
+
try {
|
|
78
|
+
const network = mastra.getNetwork(networkId);
|
|
79
|
+
if (!network) {
|
|
80
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Network not found" });
|
|
81
|
+
}
|
|
82
|
+
chunkQN4KF3BH_cjs.validateBody({ messages: body.messages });
|
|
83
|
+
const { messages, ...rest } = body;
|
|
84
|
+
const result = await network.generate(messages, rest);
|
|
85
|
+
return result;
|
|
86
|
+
} catch (error) {
|
|
87
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error generating from network");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function streamGenerateHandler({
|
|
91
|
+
mastra,
|
|
92
|
+
networkId,
|
|
93
|
+
body
|
|
94
|
+
}) {
|
|
95
|
+
try {
|
|
96
|
+
const network = mastra.getNetwork(networkId);
|
|
97
|
+
if (!network) {
|
|
98
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Network not found" });
|
|
99
|
+
}
|
|
100
|
+
chunkQN4KF3BH_cjs.validateBody({ messages: body.messages });
|
|
101
|
+
const { messages, output, ...rest } = body;
|
|
102
|
+
const streamResult = await network.stream(messages, {
|
|
103
|
+
output,
|
|
104
|
+
...rest
|
|
105
|
+
});
|
|
106
|
+
const streamResponse = output ? streamResult.toTextStreamResponse() : streamResult.toDataStreamResponse({
|
|
107
|
+
sendUsage: true,
|
|
108
|
+
sendReasoning: true,
|
|
109
|
+
getErrorMessage: (error) => {
|
|
110
|
+
return `An error occurred while processing your request. ${error instanceof Error ? error.message : JSON.stringify(error)}`;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return streamResponse;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error streaming from network");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
exports.generateHandler = generateHandler;
|
|
120
|
+
exports.getNetworkByIdHandler = getNetworkByIdHandler;
|
|
121
|
+
exports.getNetworksHandler = getNetworksHandler;
|
|
122
|
+
exports.network_exports = network_exports;
|
|
123
|
+
exports.streamGenerateHandler = streamGenerateHandler;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { stringify, esm_default } from './chunk-VK6FX47H.js';
|
|
2
|
+
import { validateBody } from './chunk-L7XE5QTW.js';
|
|
3
|
+
import { handleError } from './chunk-3AHQ5RGN.js';
|
|
4
|
+
import { __export, HTTPException } from './chunk-TRDNDNGQ.js';
|
|
5
|
+
|
|
6
|
+
// src/server/handlers/agents.ts
|
|
7
|
+
var agents_exports = {};
|
|
8
|
+
__export(agents_exports, {
|
|
9
|
+
generateHandler: () => generateHandler,
|
|
10
|
+
getAgentByIdHandler: () => getAgentByIdHandler,
|
|
11
|
+
getAgentsHandler: () => getAgentsHandler,
|
|
12
|
+
getEvalsByAgentIdHandler: () => getEvalsByAgentIdHandler,
|
|
13
|
+
getLiveEvalsByAgentIdHandler: () => getLiveEvalsByAgentIdHandler,
|
|
14
|
+
streamGenerateHandler: () => streamGenerateHandler
|
|
15
|
+
});
|
|
16
|
+
async function getAgentsHandler({ mastra }) {
|
|
17
|
+
try {
|
|
18
|
+
const agents = mastra.getAgents();
|
|
19
|
+
const serializedAgents = Object.entries(agents).reduce((acc, [_id, _agent]) => {
|
|
20
|
+
const agent = _agent;
|
|
21
|
+
const serializedAgentTools = Object.entries(agent?.tools || {}).reduce((acc2, [key, tool]) => {
|
|
22
|
+
const _tool = tool;
|
|
23
|
+
acc2[key] = {
|
|
24
|
+
..._tool,
|
|
25
|
+
inputSchema: _tool.inputSchema ? stringify(esm_default(_tool.inputSchema)) : void 0,
|
|
26
|
+
outputSchema: _tool.outputSchema ? stringify(esm_default(_tool.outputSchema)) : void 0
|
|
27
|
+
};
|
|
28
|
+
return acc2;
|
|
29
|
+
}, {});
|
|
30
|
+
acc[_id] = {
|
|
31
|
+
name: agent.name,
|
|
32
|
+
instructions: agent.instructions,
|
|
33
|
+
tools: serializedAgentTools,
|
|
34
|
+
provider: agent.llm?.getProvider(),
|
|
35
|
+
modelId: agent.llm?.getModelId()
|
|
36
|
+
};
|
|
37
|
+
return acc;
|
|
38
|
+
}, {});
|
|
39
|
+
return serializedAgents;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
return handleError(error, "Error getting agents");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function getAgentByIdHandler({ mastra, agentId }) {
|
|
45
|
+
try {
|
|
46
|
+
const agent = mastra.getAgent(agentId);
|
|
47
|
+
if (!agent) {
|
|
48
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
49
|
+
}
|
|
50
|
+
const serializedAgentTools = Object.entries(agent?.tools || {}).reduce((acc, [key, tool]) => {
|
|
51
|
+
const _tool = tool;
|
|
52
|
+
acc[key] = {
|
|
53
|
+
..._tool,
|
|
54
|
+
inputSchema: _tool.inputSchema ? stringify(esm_default(_tool.inputSchema)) : void 0,
|
|
55
|
+
outputSchema: _tool.outputSchema ? stringify(esm_default(_tool.outputSchema)) : void 0
|
|
56
|
+
};
|
|
57
|
+
return acc;
|
|
58
|
+
}, {});
|
|
59
|
+
return {
|
|
60
|
+
name: agent.name,
|
|
61
|
+
instructions: agent.instructions,
|
|
62
|
+
tools: serializedAgentTools,
|
|
63
|
+
provider: agent.llm?.getProvider(),
|
|
64
|
+
modelId: agent.llm?.getModelId()
|
|
65
|
+
};
|
|
66
|
+
} catch (error) {
|
|
67
|
+
return handleError(error, "Error getting agent");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function getEvalsByAgentIdHandler({ mastra, agentId }) {
|
|
71
|
+
try {
|
|
72
|
+
const agent = mastra.getAgent(agentId);
|
|
73
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "test") || [];
|
|
74
|
+
return {
|
|
75
|
+
id: agentId,
|
|
76
|
+
name: agent.name,
|
|
77
|
+
instructions: agent.instructions,
|
|
78
|
+
evals
|
|
79
|
+
};
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return handleError(error, "Error getting test evals");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function getLiveEvalsByAgentIdHandler({ mastra, agentId }) {
|
|
85
|
+
try {
|
|
86
|
+
const agent = mastra.getAgent(agentId);
|
|
87
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "live") || [];
|
|
88
|
+
return {
|
|
89
|
+
id: agentId,
|
|
90
|
+
name: agent.name,
|
|
91
|
+
instructions: agent.instructions,
|
|
92
|
+
evals
|
|
93
|
+
};
|
|
94
|
+
} catch (error) {
|
|
95
|
+
return handleError(error, "Error getting live evals");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function generateHandler({
|
|
99
|
+
mastra,
|
|
100
|
+
agentId,
|
|
101
|
+
body
|
|
102
|
+
}) {
|
|
103
|
+
try {
|
|
104
|
+
const agent = mastra.getAgent(agentId);
|
|
105
|
+
if (!agent) {
|
|
106
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
107
|
+
}
|
|
108
|
+
const { messages, ...rest } = body;
|
|
109
|
+
validateBody({ messages });
|
|
110
|
+
const result = await agent.generate(messages, rest);
|
|
111
|
+
return result;
|
|
112
|
+
} catch (error) {
|
|
113
|
+
return handleError(error, "Error generating from agent");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async function streamGenerateHandler({
|
|
117
|
+
mastra,
|
|
118
|
+
agentId,
|
|
119
|
+
body
|
|
120
|
+
}) {
|
|
121
|
+
try {
|
|
122
|
+
const agent = mastra.getAgent(agentId);
|
|
123
|
+
if (!agent) {
|
|
124
|
+
throw new HTTPException(404, { message: "Agent not found" });
|
|
125
|
+
}
|
|
126
|
+
const { messages, output, ...rest } = body;
|
|
127
|
+
validateBody({ messages });
|
|
128
|
+
const streamResult = await agent.stream(messages, { output, ...rest });
|
|
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
|
+
throw new HTTPException(error?.status ?? 500, { message: error?.message ?? "Error streaming from agent" });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { agents_exports, generateHandler, getAgentByIdHandler, getAgentsHandler, getEvalsByAgentIdHandler, getLiveEvalsByAgentIdHandler, streamGenerateHandler };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkQH6XWSXP_cjs = require('./chunk-QH6XWSXP.cjs');
|
|
4
|
+
var chunkQN4KF3BH_cjs = require('./chunk-QN4KF3BH.cjs');
|
|
5
|
+
var chunkZLBRQFDD_cjs = require('./chunk-ZLBRQFDD.cjs');
|
|
6
|
+
var chunkFV45V6WC_cjs = require('./chunk-FV45V6WC.cjs');
|
|
7
|
+
|
|
8
|
+
// src/server/handlers/agents.ts
|
|
9
|
+
var agents_exports = {};
|
|
10
|
+
chunkFV45V6WC_cjs.__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 }) {
|
|
19
|
+
try {
|
|
20
|
+
const agents = mastra.getAgents();
|
|
21
|
+
const serializedAgents = Object.entries(agents).reduce((acc, [_id, _agent]) => {
|
|
22
|
+
const agent = _agent;
|
|
23
|
+
const serializedAgentTools = Object.entries(agent?.tools || {}).reduce((acc2, [key, tool]) => {
|
|
24
|
+
const _tool = tool;
|
|
25
|
+
acc2[key] = {
|
|
26
|
+
..._tool,
|
|
27
|
+
inputSchema: _tool.inputSchema ? chunkQH6XWSXP_cjs.stringify(chunkQH6XWSXP_cjs.esm_default(_tool.inputSchema)) : void 0,
|
|
28
|
+
outputSchema: _tool.outputSchema ? chunkQH6XWSXP_cjs.stringify(chunkQH6XWSXP_cjs.esm_default(_tool.outputSchema)) : void 0
|
|
29
|
+
};
|
|
30
|
+
return acc2;
|
|
31
|
+
}, {});
|
|
32
|
+
acc[_id] = {
|
|
33
|
+
name: agent.name,
|
|
34
|
+
instructions: agent.instructions,
|
|
35
|
+
tools: serializedAgentTools,
|
|
36
|
+
provider: agent.llm?.getProvider(),
|
|
37
|
+
modelId: agent.llm?.getModelId()
|
|
38
|
+
};
|
|
39
|
+
return acc;
|
|
40
|
+
}, {});
|
|
41
|
+
return serializedAgents;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting agents");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function getAgentByIdHandler({ mastra, agentId }) {
|
|
47
|
+
try {
|
|
48
|
+
const agent = mastra.getAgent(agentId);
|
|
49
|
+
if (!agent) {
|
|
50
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Agent not found" });
|
|
51
|
+
}
|
|
52
|
+
const serializedAgentTools = Object.entries(agent?.tools || {}).reduce((acc, [key, tool]) => {
|
|
53
|
+
const _tool = tool;
|
|
54
|
+
acc[key] = {
|
|
55
|
+
..._tool,
|
|
56
|
+
inputSchema: _tool.inputSchema ? chunkQH6XWSXP_cjs.stringify(chunkQH6XWSXP_cjs.esm_default(_tool.inputSchema)) : void 0,
|
|
57
|
+
outputSchema: _tool.outputSchema ? chunkQH6XWSXP_cjs.stringify(chunkQH6XWSXP_cjs.esm_default(_tool.outputSchema)) : void 0
|
|
58
|
+
};
|
|
59
|
+
return acc;
|
|
60
|
+
}, {});
|
|
61
|
+
return {
|
|
62
|
+
name: agent.name,
|
|
63
|
+
instructions: agent.instructions,
|
|
64
|
+
tools: serializedAgentTools,
|
|
65
|
+
provider: agent.llm?.getProvider(),
|
|
66
|
+
modelId: agent.llm?.getModelId()
|
|
67
|
+
};
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting agent");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function getEvalsByAgentIdHandler({ mastra, agentId }) {
|
|
73
|
+
try {
|
|
74
|
+
const agent = mastra.getAgent(agentId);
|
|
75
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "test") || [];
|
|
76
|
+
return {
|
|
77
|
+
id: agentId,
|
|
78
|
+
name: agent.name,
|
|
79
|
+
instructions: agent.instructions,
|
|
80
|
+
evals
|
|
81
|
+
};
|
|
82
|
+
} catch (error) {
|
|
83
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting test evals");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function getLiveEvalsByAgentIdHandler({ mastra, agentId }) {
|
|
87
|
+
try {
|
|
88
|
+
const agent = mastra.getAgent(agentId);
|
|
89
|
+
const evals = await mastra.getStorage()?.getEvalsByAgentName?.(agent.name, "live") || [];
|
|
90
|
+
return {
|
|
91
|
+
id: agentId,
|
|
92
|
+
name: agent.name,
|
|
93
|
+
instructions: agent.instructions,
|
|
94
|
+
evals
|
|
95
|
+
};
|
|
96
|
+
} catch (error) {
|
|
97
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error getting live evals");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function generateHandler({
|
|
101
|
+
mastra,
|
|
102
|
+
agentId,
|
|
103
|
+
body
|
|
104
|
+
}) {
|
|
105
|
+
try {
|
|
106
|
+
const agent = mastra.getAgent(agentId);
|
|
107
|
+
if (!agent) {
|
|
108
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Agent not found" });
|
|
109
|
+
}
|
|
110
|
+
const { messages, ...rest } = body;
|
|
111
|
+
chunkQN4KF3BH_cjs.validateBody({ messages });
|
|
112
|
+
const result = await agent.generate(messages, rest);
|
|
113
|
+
return result;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return chunkZLBRQFDD_cjs.handleError(error, "Error generating from agent");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function streamGenerateHandler({
|
|
119
|
+
mastra,
|
|
120
|
+
agentId,
|
|
121
|
+
body
|
|
122
|
+
}) {
|
|
123
|
+
try {
|
|
124
|
+
const agent = mastra.getAgent(agentId);
|
|
125
|
+
if (!agent) {
|
|
126
|
+
throw new chunkFV45V6WC_cjs.HTTPException(404, { message: "Agent not found" });
|
|
127
|
+
}
|
|
128
|
+
const { messages, output, ...rest } = body;
|
|
129
|
+
chunkQN4KF3BH_cjs.validateBody({ messages });
|
|
130
|
+
const streamResult = await agent.stream(messages, { output, ...rest });
|
|
131
|
+
const streamResponse = output ? streamResult.toTextStreamResponse() : streamResult.toDataStreamResponse({
|
|
132
|
+
sendUsage: true,
|
|
133
|
+
sendReasoning: true,
|
|
134
|
+
getErrorMessage: (error) => {
|
|
135
|
+
return `An error occurred while processing your request. ${error instanceof Error ? error.message : JSON.stringify(error)}`;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return streamResponse;
|
|
139
|
+
} catch (error) {
|
|
140
|
+
throw new chunkFV45V6WC_cjs.HTTPException(error?.status ?? 500, { message: error?.message ?? "Error streaming from agent" });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
exports.agents_exports = agents_exports;
|
|
145
|
+
exports.generateHandler = generateHandler;
|
|
146
|
+
exports.getAgentByIdHandler = getAgentByIdHandler;
|
|
147
|
+
exports.getAgentsHandler = getAgentsHandler;
|
|
148
|
+
exports.getEvalsByAgentIdHandler = getEvalsByAgentIdHandler;
|
|
149
|
+
exports.getLiveEvalsByAgentIdHandler = getLiveEvalsByAgentIdHandler;
|
|
150
|
+
exports.streamGenerateHandler = streamGenerateHandler;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { handleError } from './chunk-3AHQ5RGN.js';
|
|
2
|
+
import { __export, HTTPException } from './chunk-TRDNDNGQ.js';
|
|
3
|
+
import { TABLE_TRACES } from '@mastra/core/storage';
|
|
4
|
+
|
|
5
|
+
// src/server/handlers/telemetry.ts
|
|
6
|
+
var telemetry_exports = {};
|
|
7
|
+
__export(telemetry_exports, {
|
|
8
|
+
getTelemetryHandler: () => getTelemetryHandler,
|
|
9
|
+
storeTelemetryHandler: () => storeTelemetryHandler
|
|
10
|
+
});
|
|
11
|
+
async function getTelemetryHandler({ mastra, body }) {
|
|
12
|
+
try {
|
|
13
|
+
const telemetry = mastra.getTelemetry();
|
|
14
|
+
const storage = mastra.getStorage();
|
|
15
|
+
if (!telemetry) {
|
|
16
|
+
throw new HTTPException(400, { message: "Telemetry is not initialized" });
|
|
17
|
+
}
|
|
18
|
+
if (!storage) {
|
|
19
|
+
throw new HTTPException(400, { message: "Storage is not initialized" });
|
|
20
|
+
}
|
|
21
|
+
if (!body) {
|
|
22
|
+
throw new HTTPException(400, { message: "Body is required" });
|
|
23
|
+
}
|
|
24
|
+
const { name, scope, page, perPage, attribute } = body;
|
|
25
|
+
const attributes = attribute ? Object.fromEntries(
|
|
26
|
+
(Array.isArray(attribute) ? attribute : [attribute]).map((attr) => {
|
|
27
|
+
const [key, value] = attr.split(":");
|
|
28
|
+
return [key, value];
|
|
29
|
+
})
|
|
30
|
+
) : void 0;
|
|
31
|
+
const traces = await storage.getTraces({
|
|
32
|
+
name,
|
|
33
|
+
scope,
|
|
34
|
+
page: Number(page ?? 0),
|
|
35
|
+
perPage: Number(perPage ?? 100),
|
|
36
|
+
attributes
|
|
37
|
+
});
|
|
38
|
+
return { traces };
|
|
39
|
+
} catch (error2) {
|
|
40
|
+
return handleError(error2, "Error getting telemetry");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function storeTelemetryHandler({ mastra, body }) {
|
|
44
|
+
try {
|
|
45
|
+
const storage = mastra.getStorage();
|
|
46
|
+
if (!storage) {
|
|
47
|
+
throw new HTTPException(400, { message: "Storage is not initialized" });
|
|
48
|
+
}
|
|
49
|
+
const now = /* @__PURE__ */ new Date();
|
|
50
|
+
const items = body?.resourceSpans?.[0]?.scopeSpans;
|
|
51
|
+
const allSpans = items.reduce((acc, scopedSpans) => {
|
|
52
|
+
const { scope, spans } = scopedSpans;
|
|
53
|
+
for (const span of spans) {
|
|
54
|
+
const {
|
|
55
|
+
spanId,
|
|
56
|
+
parentSpanId,
|
|
57
|
+
traceId,
|
|
58
|
+
name,
|
|
59
|
+
kind,
|
|
60
|
+
attributes,
|
|
61
|
+
status,
|
|
62
|
+
events,
|
|
63
|
+
links,
|
|
64
|
+
startTimeUnixNano,
|
|
65
|
+
endTimeUnixNano,
|
|
66
|
+
...rest
|
|
67
|
+
} = span;
|
|
68
|
+
const startTime = Number(BigInt(startTimeUnixNano) / 1000n);
|
|
69
|
+
const endTime = Number(BigInt(endTimeUnixNano) / 1000n);
|
|
70
|
+
acc.push({
|
|
71
|
+
id: spanId,
|
|
72
|
+
parentSpanId,
|
|
73
|
+
traceId,
|
|
74
|
+
name,
|
|
75
|
+
scope: scope.name,
|
|
76
|
+
kind,
|
|
77
|
+
status: JSON.stringify(status),
|
|
78
|
+
events: JSON.stringify(events),
|
|
79
|
+
links: JSON.stringify(links),
|
|
80
|
+
attributes: JSON.stringify(
|
|
81
|
+
attributes.reduce((acc2, attr) => {
|
|
82
|
+
const valueKey = Object.keys(attr.value)[0];
|
|
83
|
+
if (valueKey) {
|
|
84
|
+
acc2[attr.key] = attr.value[valueKey];
|
|
85
|
+
}
|
|
86
|
+
return acc2;
|
|
87
|
+
}, {})
|
|
88
|
+
),
|
|
89
|
+
startTime,
|
|
90
|
+
endTime,
|
|
91
|
+
other: JSON.stringify(rest),
|
|
92
|
+
createdAt: now
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return acc;
|
|
96
|
+
}, []);
|
|
97
|
+
return storage.__batchInsert({
|
|
98
|
+
tableName: TABLE_TRACES,
|
|
99
|
+
records: allSpans
|
|
100
|
+
}).then(() => {
|
|
101
|
+
return {
|
|
102
|
+
status: "success",
|
|
103
|
+
message: "Traces received and processed successfully",
|
|
104
|
+
traceCount: body.resourceSpans?.length || 0
|
|
105
|
+
};
|
|
106
|
+
}).catch(() => {
|
|
107
|
+
return {
|
|
108
|
+
status: "error",
|
|
109
|
+
message: "Failed to process traces",
|
|
110
|
+
// @ts-ignore
|
|
111
|
+
error: error.message
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
} catch (error2) {
|
|
115
|
+
console.error("Error processing traces:", error2);
|
|
116
|
+
return {
|
|
117
|
+
status: "error",
|
|
118
|
+
message: "Failed to process traces",
|
|
119
|
+
// @ts-ignore
|
|
120
|
+
error: error2.message
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export { getTelemetryHandler, storeTelemetryHandler, telemetry_exports };
|