@mastra/server 1.15.0 → 1.16.0-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 +18 -0
- package/dist/_types/@internal_core/dist/index.d.ts +7 -0
- package/dist/{chunk-5N4O5XJZ.js → chunk-7LQDR5AI.js} +84 -8
- package/dist/chunk-7LQDR5AI.js.map +1 -0
- package/dist/{chunk-M2PIFW7O.cjs → chunk-AOAIJJY6.cjs} +331 -58
- package/dist/chunk-AOAIJJY6.cjs.map +1 -0
- package/dist/{chunk-47RDD2HN.js → chunk-APJA4LIB.js} +4 -3
- package/dist/chunk-APJA4LIB.js.map +1 -0
- package/dist/{chunk-7D3YBNO6.cjs → chunk-FOHX5HVN.cjs} +4 -3
- package/dist/chunk-FOHX5HVN.cjs.map +1 -0
- package/dist/{chunk-2SQXNXDG.cjs → chunk-FXX6WI5F.cjs} +6 -3
- package/dist/chunk-FXX6WI5F.cjs.map +1 -0
- package/dist/{chunk-NDI2C7UD.js → chunk-I3QRIKI5.js} +279 -9
- package/dist/chunk-I3QRIKI5.js.map +1 -0
- package/dist/{chunk-3KRZUGE2.cjs → chunk-LG2MUCSW.cjs} +22 -19
- package/dist/chunk-LG2MUCSW.cjs.map +1 -0
- package/dist/{chunk-XJ4C64FH.cjs → chunk-MPXNKSVP.cjs} +21 -21
- package/dist/{chunk-XJ4C64FH.cjs.map → chunk-MPXNKSVP.cjs.map} +1 -1
- package/dist/{chunk-KTKTSTDR.cjs → chunk-N5RFB7A4.cjs} +89 -7
- package/dist/chunk-N5RFB7A4.cjs.map +1 -0
- package/dist/{chunk-BN5YN4UU.js → chunk-R344LGXP.js} +9 -6
- package/dist/chunk-R344LGXP.js.map +1 -0
- package/dist/{chunk-H37CMPNZ.js → chunk-UYAZFEAW.js} +6 -3
- package/dist/chunk-UYAZFEAW.js.map +1 -0
- package/dist/{chunk-EYPXYWPY.js → chunk-Y452XTPZ.js} +3 -3
- package/dist/{chunk-EYPXYWPY.js.map → chunk-Y452XTPZ.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/server/handlers/datasets.cjs +33 -21
- package/dist/server/handlers/datasets.d.ts +808 -472
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +19 -19
- package/dist/server/handlers/observability-new-endpoints.d.ts +8 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +24 -24
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.d.ts +10 -0
- package/dist/server/handlers/scores.d.ts.map +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers.cjs +4 -4
- package/dist/server/handlers.js +2 -2
- package/dist/server/schemas/datasets.d.ts +138 -0
- package/dist/server/schemas/datasets.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +69 -45
- package/dist/server/schemas/index.js +2 -2
- package/dist/server/schemas/scores.d.ts +8 -0
- package/dist/server/schemas/scores.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +56 -51
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.js +10 -5
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +333 -1
- package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +4 -0
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/scorers.d.ts +10 -0
- package/dist/server/server-adapter/routes/scorers.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-2SQXNXDG.cjs.map +0 -1
- package/dist/chunk-3KRZUGE2.cjs.map +0 -1
- package/dist/chunk-47RDD2HN.js.map +0 -1
- package/dist/chunk-5N4O5XJZ.js.map +0 -1
- package/dist/chunk-7D3YBNO6.cjs.map +0 -1
- package/dist/chunk-BN5YN4UU.js.map +0 -1
- package/dist/chunk-H37CMPNZ.js.map +0 -1
- package/dist/chunk-KTKTSTDR.cjs.map +0 -1
- package/dist/chunk-M2PIFW7O.cjs.map +0 -1
- package/dist/chunk-NDI2C7UD.js.map +0 -1
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkN5RFB7A4_cjs = require('./chunk-N5RFB7A4.cjs');
|
|
4
4
|
var chunkZYXDUS6Q_cjs = require('./chunk-ZYXDUS6Q.cjs');
|
|
5
5
|
var chunkY2BKW5ND_cjs = require('./chunk-Y2BKW5ND.cjs');
|
|
6
6
|
var chunkYJLDMFSE_cjs = require('./chunk-YJLDMFSE.cjs');
|
|
7
7
|
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
|
|
8
|
+
var agent = require('@mastra/core/agent');
|
|
8
9
|
var error = require('@mastra/core/error');
|
|
9
10
|
var features = require('@mastra/core/features');
|
|
11
|
+
var llm = require('@mastra/core/llm');
|
|
12
|
+
var requestContext = require('@mastra/core/request-context');
|
|
13
|
+
var zod = require('zod');
|
|
10
14
|
|
|
11
15
|
function assertDatasetsAvailable() {
|
|
12
16
|
if (!features.coreFeatures.has("datasets")) {
|
|
@@ -34,8 +38,8 @@ var LIST_DATASETS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
34
38
|
method: "GET",
|
|
35
39
|
path: "/datasets",
|
|
36
40
|
responseType: "json",
|
|
37
|
-
queryParamSchema:
|
|
38
|
-
responseSchema:
|
|
41
|
+
queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
|
|
42
|
+
responseSchema: chunkN5RFB7A4_cjs.listDatasetsResponseSchema,
|
|
39
43
|
summary: "List all datasets",
|
|
40
44
|
description: "Returns a paginated list of all datasets",
|
|
41
45
|
tags: ["Datasets"],
|
|
@@ -61,8 +65,8 @@ var CREATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
61
65
|
method: "POST",
|
|
62
66
|
path: "/datasets",
|
|
63
67
|
responseType: "json",
|
|
64
|
-
bodySchema:
|
|
65
|
-
responseSchema:
|
|
68
|
+
bodySchema: chunkN5RFB7A4_cjs.createDatasetBodySchema,
|
|
69
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema,
|
|
66
70
|
summary: "Create a new dataset",
|
|
67
71
|
description: "Creates a new dataset with the specified name and optional metadata",
|
|
68
72
|
tags: ["Datasets"],
|
|
@@ -70,14 +74,25 @@ var CREATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
70
74
|
handler: async ({ mastra, ...params }) => {
|
|
71
75
|
assertDatasetsAvailable();
|
|
72
76
|
try {
|
|
73
|
-
const {
|
|
77
|
+
const {
|
|
78
|
+
name,
|
|
79
|
+
description,
|
|
80
|
+
metadata,
|
|
81
|
+
inputSchema,
|
|
82
|
+
groundTruthSchema,
|
|
83
|
+
requestContextSchema,
|
|
84
|
+
targetType,
|
|
85
|
+
targetIds
|
|
86
|
+
} = params;
|
|
74
87
|
const ds = await mastra.datasets.create({
|
|
75
88
|
name,
|
|
76
89
|
description,
|
|
77
90
|
metadata,
|
|
78
91
|
inputSchema,
|
|
79
92
|
groundTruthSchema,
|
|
80
|
-
requestContextSchema
|
|
93
|
+
requestContextSchema,
|
|
94
|
+
targetType,
|
|
95
|
+
targetIds
|
|
81
96
|
});
|
|
82
97
|
const details = await ds.getDetails();
|
|
83
98
|
return details;
|
|
@@ -93,8 +108,8 @@ var GET_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
93
108
|
method: "GET",
|
|
94
109
|
path: "/datasets/:datasetId",
|
|
95
110
|
responseType: "json",
|
|
96
|
-
pathParamSchema:
|
|
97
|
-
responseSchema:
|
|
111
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
112
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema.nullable(),
|
|
98
113
|
summary: "Get dataset by ID",
|
|
99
114
|
description: "Returns details for a specific dataset",
|
|
100
115
|
tags: ["Datasets"],
|
|
@@ -116,9 +131,9 @@ var UPDATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
116
131
|
method: "PATCH",
|
|
117
132
|
path: "/datasets/:datasetId",
|
|
118
133
|
responseType: "json",
|
|
119
|
-
pathParamSchema:
|
|
120
|
-
bodySchema:
|
|
121
|
-
responseSchema:
|
|
134
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
135
|
+
bodySchema: chunkN5RFB7A4_cjs.updateDatasetBodySchema,
|
|
136
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema,
|
|
122
137
|
summary: "Update dataset",
|
|
123
138
|
description: "Updates a dataset with the specified fields",
|
|
124
139
|
tags: ["Datasets"],
|
|
@@ -126,7 +141,17 @@ var UPDATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
126
141
|
handler: async ({ mastra, datasetId, ...params }) => {
|
|
127
142
|
assertDatasetsAvailable();
|
|
128
143
|
try {
|
|
129
|
-
const {
|
|
144
|
+
const {
|
|
145
|
+
name,
|
|
146
|
+
description,
|
|
147
|
+
metadata,
|
|
148
|
+
inputSchema,
|
|
149
|
+
groundTruthSchema,
|
|
150
|
+
requestContextSchema,
|
|
151
|
+
tags,
|
|
152
|
+
targetType,
|
|
153
|
+
targetIds
|
|
154
|
+
} = params;
|
|
130
155
|
const ds = await mastra.datasets.get({ id: datasetId });
|
|
131
156
|
const result = await ds.update({
|
|
132
157
|
name,
|
|
@@ -134,7 +159,10 @@ var UPDATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
134
159
|
metadata,
|
|
135
160
|
inputSchema,
|
|
136
161
|
groundTruthSchema,
|
|
137
|
-
requestContextSchema
|
|
162
|
+
requestContextSchema,
|
|
163
|
+
tags,
|
|
164
|
+
targetType,
|
|
165
|
+
targetIds
|
|
138
166
|
});
|
|
139
167
|
return result;
|
|
140
168
|
} catch (error$1) {
|
|
@@ -161,7 +189,7 @@ var DELETE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
161
189
|
method: "DELETE",
|
|
162
190
|
path: "/datasets/:datasetId",
|
|
163
191
|
responseType: "json",
|
|
164
|
-
pathParamSchema:
|
|
192
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
165
193
|
responseSchema: chunkZYXDUS6Q_cjs.successResponseSchema,
|
|
166
194
|
summary: "Delete dataset",
|
|
167
195
|
description: "Deletes a dataset and all its items",
|
|
@@ -185,9 +213,9 @@ var LIST_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
185
213
|
method: "GET",
|
|
186
214
|
path: "/datasets/:datasetId/items",
|
|
187
215
|
responseType: "json",
|
|
188
|
-
pathParamSchema:
|
|
189
|
-
queryParamSchema:
|
|
190
|
-
responseSchema:
|
|
216
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
217
|
+
queryParamSchema: chunkN5RFB7A4_cjs.listItemsQuerySchema,
|
|
218
|
+
responseSchema: chunkN5RFB7A4_cjs.listItemsResponseSchema,
|
|
191
219
|
summary: "List dataset items",
|
|
192
220
|
description: "Returns a paginated list of items in the dataset",
|
|
193
221
|
tags: ["Datasets"],
|
|
@@ -219,9 +247,9 @@ var ADD_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
219
247
|
method: "POST",
|
|
220
248
|
path: "/datasets/:datasetId/items",
|
|
221
249
|
responseType: "json",
|
|
222
|
-
pathParamSchema:
|
|
223
|
-
bodySchema:
|
|
224
|
-
responseSchema:
|
|
250
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
251
|
+
bodySchema: chunkN5RFB7A4_cjs.addItemBodySchema,
|
|
252
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema,
|
|
225
253
|
summary: "Add item to dataset",
|
|
226
254
|
description: "Adds a new item to the dataset (auto-increments dataset version)",
|
|
227
255
|
tags: ["Datasets"],
|
|
@@ -250,8 +278,8 @@ var GET_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
250
278
|
method: "GET",
|
|
251
279
|
path: "/datasets/:datasetId/items/:itemId",
|
|
252
280
|
responseType: "json",
|
|
253
|
-
pathParamSchema:
|
|
254
|
-
responseSchema:
|
|
281
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
|
|
282
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema.nullable(),
|
|
255
283
|
summary: "Get dataset item by ID",
|
|
256
284
|
description: "Returns details for a specific dataset item",
|
|
257
285
|
tags: ["Datasets"],
|
|
@@ -277,9 +305,9 @@ var UPDATE_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
277
305
|
method: "PATCH",
|
|
278
306
|
path: "/datasets/:datasetId/items/:itemId",
|
|
279
307
|
responseType: "json",
|
|
280
|
-
pathParamSchema:
|
|
281
|
-
bodySchema:
|
|
282
|
-
responseSchema:
|
|
308
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
|
|
309
|
+
bodySchema: chunkN5RFB7A4_cjs.updateItemBodySchema,
|
|
310
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema,
|
|
283
311
|
summary: "Update dataset item",
|
|
284
312
|
description: "Updates a dataset item (auto-increments dataset version)",
|
|
285
313
|
tags: ["Datasets"],
|
|
@@ -312,7 +340,7 @@ var DELETE_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
312
340
|
method: "DELETE",
|
|
313
341
|
path: "/datasets/:datasetId/items/:itemId",
|
|
314
342
|
responseType: "json",
|
|
315
|
-
pathParamSchema:
|
|
343
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
|
|
316
344
|
responseSchema: chunkZYXDUS6Q_cjs.successResponseSchema,
|
|
317
345
|
summary: "Delete dataset item",
|
|
318
346
|
description: "Deletes a dataset item",
|
|
@@ -340,9 +368,9 @@ var LIST_EXPERIMENTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
340
368
|
method: "GET",
|
|
341
369
|
path: "/datasets/:datasetId/experiments",
|
|
342
370
|
responseType: "json",
|
|
343
|
-
pathParamSchema:
|
|
344
|
-
queryParamSchema:
|
|
345
|
-
responseSchema:
|
|
371
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
372
|
+
queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
|
|
373
|
+
responseSchema: chunkN5RFB7A4_cjs.listExperimentsResponseSchema,
|
|
346
374
|
summary: "List experiments for dataset",
|
|
347
375
|
description: "Returns a paginated list of experiments for the dataset",
|
|
348
376
|
tags: ["Datasets"],
|
|
@@ -366,9 +394,9 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
366
394
|
method: "POST",
|
|
367
395
|
path: "/datasets/:datasetId/experiments",
|
|
368
396
|
responseType: "json",
|
|
369
|
-
pathParamSchema:
|
|
370
|
-
bodySchema:
|
|
371
|
-
responseSchema:
|
|
397
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
398
|
+
bodySchema: chunkN5RFB7A4_cjs.triggerExperimentBodySchema,
|
|
399
|
+
responseSchema: chunkN5RFB7A4_cjs.experimentSummaryResponseSchema,
|
|
372
400
|
summary: "Trigger a new experiment",
|
|
373
401
|
description: "Triggers a new experiment on the dataset against the specified target. Returns immediately with pending status; execution happens in background.",
|
|
374
402
|
tags: ["Datasets"],
|
|
@@ -376,7 +404,15 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
376
404
|
handler: async ({ mastra, datasetId, ...params }) => {
|
|
377
405
|
assertDatasetsAvailable();
|
|
378
406
|
try {
|
|
379
|
-
const {
|
|
407
|
+
const {
|
|
408
|
+
targetType,
|
|
409
|
+
targetId,
|
|
410
|
+
scorerIds,
|
|
411
|
+
version,
|
|
412
|
+
maxConcurrency,
|
|
413
|
+
requestContext: rawRequestContext
|
|
414
|
+
} = params;
|
|
415
|
+
const requestContext$1 = rawRequestContext instanceof requestContext.RequestContext ? rawRequestContext.all : rawRequestContext;
|
|
380
416
|
const ds = await mastra.datasets.get({ id: datasetId });
|
|
381
417
|
const result = await ds.startExperimentAsync({
|
|
382
418
|
targetType,
|
|
@@ -384,7 +420,7 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
384
420
|
scorers: scorerIds,
|
|
385
421
|
version,
|
|
386
422
|
maxConcurrency,
|
|
387
|
-
requestContext
|
|
423
|
+
requestContext: requestContext$1
|
|
388
424
|
});
|
|
389
425
|
return {
|
|
390
426
|
experimentId: result.experimentId,
|
|
@@ -408,8 +444,8 @@ var GET_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
408
444
|
method: "GET",
|
|
409
445
|
path: "/datasets/:datasetId/experiments/:experimentId",
|
|
410
446
|
responseType: "json",
|
|
411
|
-
pathParamSchema:
|
|
412
|
-
responseSchema:
|
|
447
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndExperimentIdPathParams,
|
|
448
|
+
responseSchema: chunkN5RFB7A4_cjs.experimentResponseSchema.nullable(),
|
|
413
449
|
summary: "Get experiment by ID",
|
|
414
450
|
description: "Returns details for a specific experiment",
|
|
415
451
|
tags: ["Datasets"],
|
|
@@ -435,9 +471,9 @@ var LIST_EXPERIMENT_RESULTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
435
471
|
method: "GET",
|
|
436
472
|
path: "/datasets/:datasetId/experiments/:experimentId/results",
|
|
437
473
|
responseType: "json",
|
|
438
|
-
pathParamSchema:
|
|
439
|
-
queryParamSchema:
|
|
440
|
-
responseSchema:
|
|
474
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndExperimentIdPathParams,
|
|
475
|
+
queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
|
|
476
|
+
responseSchema: chunkN5RFB7A4_cjs.listExperimentResultsResponseSchema,
|
|
441
477
|
summary: "List experiment results",
|
|
442
478
|
description: "Returns a paginated list of results for the experiment",
|
|
443
479
|
tags: ["Datasets"],
|
|
@@ -464,13 +500,50 @@ var LIST_EXPERIMENT_RESULTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
464
500
|
}
|
|
465
501
|
}
|
|
466
502
|
});
|
|
503
|
+
var UPDATE_EXPERIMENT_RESULT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
504
|
+
method: "PATCH",
|
|
505
|
+
path: "/datasets/:datasetId/experiments/:experimentId/results/:resultId",
|
|
506
|
+
responseType: "json",
|
|
507
|
+
pathParamSchema: chunkN5RFB7A4_cjs.experimentResultIdPathParams,
|
|
508
|
+
bodySchema: chunkN5RFB7A4_cjs.updateExperimentResultBodySchema,
|
|
509
|
+
responseSchema: chunkN5RFB7A4_cjs.experimentResultResponseSchema,
|
|
510
|
+
summary: "Update an experiment result",
|
|
511
|
+
description: "Updates the status and/or tags on an experiment result",
|
|
512
|
+
tags: ["Datasets"],
|
|
513
|
+
requiresAuth: true,
|
|
514
|
+
handler: async ({ mastra, resultId, experimentId, ...params }) => {
|
|
515
|
+
assertDatasetsAvailable();
|
|
516
|
+
try {
|
|
517
|
+
const storage = mastra.getStorage();
|
|
518
|
+
if (!storage) {
|
|
519
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage not configured" });
|
|
520
|
+
}
|
|
521
|
+
const experimentsStore = await storage.getStore("experiments");
|
|
522
|
+
if (!experimentsStore) {
|
|
523
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Experiments storage not available" });
|
|
524
|
+
}
|
|
525
|
+
const result = await experimentsStore.updateExperimentResult({
|
|
526
|
+
id: resultId,
|
|
527
|
+
experimentId,
|
|
528
|
+
status: params.status,
|
|
529
|
+
tags: params.tags
|
|
530
|
+
});
|
|
531
|
+
return result;
|
|
532
|
+
} catch (error$1) {
|
|
533
|
+
if (error$1 instanceof error.MastraError) {
|
|
534
|
+
throw new chunk64ITUOXI_cjs.HTTPException(getHttpStatusForMastraError(error$1.id), { message: error$1.message });
|
|
535
|
+
}
|
|
536
|
+
return chunkY2BKW5ND_cjs.handleError(error$1, "Error updating experiment result");
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
});
|
|
467
540
|
var COMPARE_EXPERIMENTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
468
541
|
method: "POST",
|
|
469
542
|
path: "/datasets/:datasetId/compare",
|
|
470
543
|
responseType: "json",
|
|
471
|
-
pathParamSchema:
|
|
472
|
-
bodySchema:
|
|
473
|
-
responseSchema:
|
|
544
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
545
|
+
bodySchema: chunkN5RFB7A4_cjs.compareExperimentsBodySchema,
|
|
546
|
+
responseSchema: chunkN5RFB7A4_cjs.comparisonResponseSchema,
|
|
474
547
|
summary: "Compare two experiments",
|
|
475
548
|
description: "Compares two experiments to detect score regressions",
|
|
476
549
|
tags: ["Datasets"],
|
|
@@ -497,9 +570,9 @@ var LIST_DATASET_VERSIONS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
497
570
|
method: "GET",
|
|
498
571
|
path: "/datasets/:datasetId/versions",
|
|
499
572
|
responseType: "json",
|
|
500
|
-
pathParamSchema:
|
|
501
|
-
queryParamSchema:
|
|
502
|
-
responseSchema:
|
|
573
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
574
|
+
queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
|
|
575
|
+
responseSchema: chunkN5RFB7A4_cjs.listDatasetVersionsResponseSchema,
|
|
503
576
|
summary: "List dataset versions",
|
|
504
577
|
description: "Returns a paginated list of all versions for the dataset",
|
|
505
578
|
tags: ["Datasets"],
|
|
@@ -523,8 +596,8 @@ var LIST_ITEM_VERSIONS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
523
596
|
method: "GET",
|
|
524
597
|
path: "/datasets/:datasetId/items/:itemId/history",
|
|
525
598
|
responseType: "json",
|
|
526
|
-
pathParamSchema:
|
|
527
|
-
responseSchema:
|
|
599
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
|
|
600
|
+
responseSchema: chunkN5RFB7A4_cjs.listItemVersionsResponseSchema,
|
|
528
601
|
summary: "Get item history",
|
|
529
602
|
description: "Returns the full SCD-2 history of the item across all dataset versions",
|
|
530
603
|
tags: ["Datasets"],
|
|
@@ -550,8 +623,8 @@ var GET_ITEM_VERSION_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
550
623
|
method: "GET",
|
|
551
624
|
path: "/datasets/:datasetId/items/:itemId/versions/:datasetVersion",
|
|
552
625
|
responseType: "json",
|
|
553
|
-
pathParamSchema:
|
|
554
|
-
responseSchema:
|
|
626
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetItemVersionPathParams,
|
|
627
|
+
responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema.nullable(),
|
|
555
628
|
summary: "Get item at specific dataset version",
|
|
556
629
|
description: "Returns the item as it existed at a specific dataset version",
|
|
557
630
|
tags: ["Datasets"],
|
|
@@ -580,9 +653,9 @@ var BATCH_INSERT_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
580
653
|
method: "POST",
|
|
581
654
|
path: "/datasets/:datasetId/items/batch",
|
|
582
655
|
responseType: "json",
|
|
583
|
-
pathParamSchema:
|
|
584
|
-
bodySchema:
|
|
585
|
-
responseSchema:
|
|
656
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
657
|
+
bodySchema: chunkN5RFB7A4_cjs.batchInsertItemsBodySchema,
|
|
658
|
+
responseSchema: chunkN5RFB7A4_cjs.batchInsertItemsResponseSchema,
|
|
586
659
|
summary: "Batch insert items to dataset",
|
|
587
660
|
description: "Adds multiple items to the dataset in a single operation (single version entry)",
|
|
588
661
|
tags: ["Datasets"],
|
|
@@ -612,9 +685,9 @@ var BATCH_DELETE_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
612
685
|
method: "DELETE",
|
|
613
686
|
path: "/datasets/:datasetId/items/batch",
|
|
614
687
|
responseType: "json",
|
|
615
|
-
pathParamSchema:
|
|
616
|
-
bodySchema:
|
|
617
|
-
responseSchema:
|
|
688
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
689
|
+
bodySchema: chunkN5RFB7A4_cjs.batchDeleteItemsBodySchema,
|
|
690
|
+
responseSchema: chunkN5RFB7A4_cjs.batchDeleteItemsResponseSchema,
|
|
618
691
|
summary: "Batch delete items from dataset",
|
|
619
692
|
description: "Deletes multiple items from the dataset in a single operation (single version entry)",
|
|
620
693
|
tags: ["Datasets"],
|
|
@@ -634,14 +707,213 @@ var BATCH_DELETE_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
|
634
707
|
}
|
|
635
708
|
}
|
|
636
709
|
});
|
|
710
|
+
var GENERATE_ITEMS_SYSTEM_PROMPT = `You are a test data generation expert. Your job is to generate realistic, diverse test data items for an AI agent evaluation dataset.
|
|
711
|
+
|
|
712
|
+
You will be given context about the agent being tested \u2014 its purpose, system prompt, and available tools. Use this to generate inputs that thoroughly exercise the agent's capabilities.
|
|
713
|
+
|
|
714
|
+
Generate test items that:
|
|
715
|
+
1. Are realistic and diverse \u2014 cover edge cases, different complexities, and various scenarios
|
|
716
|
+
2. Match the provided schemas exactly
|
|
717
|
+
3. Include ground truth values when a ground truth schema is provided
|
|
718
|
+
4. Vary in difficulty (easy, medium, hard cases)
|
|
719
|
+
5. Include potential edge cases and tricky inputs
|
|
720
|
+
6. Test different aspects of the agent's capabilities based on its tools and instructions
|
|
721
|
+
|
|
722
|
+
Return the items as a JSON array.`;
|
|
723
|
+
var GENERATE_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
724
|
+
method: "POST",
|
|
725
|
+
path: "/datasets/:datasetId/generate-items",
|
|
726
|
+
responseType: "json",
|
|
727
|
+
pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
|
|
728
|
+
bodySchema: chunkN5RFB7A4_cjs.generateItemsBodySchema,
|
|
729
|
+
responseSchema: chunkN5RFB7A4_cjs.generateItemsResponseSchema,
|
|
730
|
+
summary: "Generate dataset items using AI",
|
|
731
|
+
description: "Uses an LLM to generate synthetic dataset items based on the dataset schema and a user prompt. Returns generated items for review \u2014 they are NOT automatically added to the dataset.",
|
|
732
|
+
tags: ["Datasets"],
|
|
733
|
+
requiresAuth: true,
|
|
734
|
+
handler: async ({ mastra, datasetId, modelId, prompt, count, agentContext }) => {
|
|
735
|
+
assertDatasetsAvailable();
|
|
736
|
+
try {
|
|
737
|
+
const ds = await mastra.datasets.get({ id: datasetId });
|
|
738
|
+
const dataset = await ds.getDetails();
|
|
739
|
+
const model = await llm.resolveModelConfig(modelId, void 0, mastra);
|
|
740
|
+
const schemaContext = [
|
|
741
|
+
dataset.inputSchema ? `Input schema:
|
|
742
|
+
${JSON.stringify(dataset.inputSchema, null, 2)}` : null,
|
|
743
|
+
dataset.groundTruthSchema ? `Ground truth schema:
|
|
744
|
+
${JSON.stringify(dataset.groundTruthSchema, null, 2)}` : null
|
|
745
|
+
].filter(Boolean).join("\n\n");
|
|
746
|
+
const generatorAgent = new agent.Agent({
|
|
747
|
+
id: "dataset-item-generator",
|
|
748
|
+
name: "dataset-item-generator",
|
|
749
|
+
instructions: GENERATE_ITEMS_SYSTEM_PROMPT,
|
|
750
|
+
model
|
|
751
|
+
});
|
|
752
|
+
const itemSchema = zod.z.object({
|
|
753
|
+
input: zod.z.string().describe("The input data as a JSON string matching the input schema, or a plain text string if no schema"),
|
|
754
|
+
groundTruth: zod.z.string().optional().describe("The expected output as a JSON string matching the ground truth schema")
|
|
755
|
+
});
|
|
756
|
+
const outputSchema = zod.z.object({
|
|
757
|
+
items: zod.z.array(itemSchema).min(1).max(count)
|
|
758
|
+
});
|
|
759
|
+
const agentContextParts = [];
|
|
760
|
+
if (agentContext?.description) {
|
|
761
|
+
agentContextParts.push(`Agent description: ${agentContext.description}`);
|
|
762
|
+
}
|
|
763
|
+
if (agentContext?.instructions) {
|
|
764
|
+
agentContextParts.push(`Agent system prompt:
|
|
765
|
+
${agentContext.instructions}`);
|
|
766
|
+
}
|
|
767
|
+
if (agentContext?.tools?.length) {
|
|
768
|
+
agentContextParts.push(`Agent tools: ${agentContext.tools.join(", ")}`);
|
|
769
|
+
}
|
|
770
|
+
const agentContextSection = agentContextParts.length > 0 ? agentContextParts.join("\n\n") : null;
|
|
771
|
+
const userMessage = [
|
|
772
|
+
`Generate exactly ${count} test items for a dataset named "${dataset.name}".`,
|
|
773
|
+
dataset.description ? `Dataset description: ${dataset.description}` : null,
|
|
774
|
+
agentContextSection ? `--- AGENT CONTEXT ---
|
|
775
|
+
${agentContextSection}` : null,
|
|
776
|
+
schemaContext || null,
|
|
777
|
+
`User's request: ${prompt}`,
|
|
778
|
+
`Return exactly ${count} items.`
|
|
779
|
+
].filter(Boolean).join("\n\n");
|
|
780
|
+
const result = await generatorAgent.generate(userMessage, {
|
|
781
|
+
structuredOutput: { schema: outputSchema }
|
|
782
|
+
});
|
|
783
|
+
const generated = await result.object;
|
|
784
|
+
const items = generated.items.map((item) => {
|
|
785
|
+
let input = item.input;
|
|
786
|
+
try {
|
|
787
|
+
input = JSON.parse(item.input);
|
|
788
|
+
} catch {
|
|
789
|
+
}
|
|
790
|
+
let groundTruth = item.groundTruth;
|
|
791
|
+
if (item.groundTruth) {
|
|
792
|
+
try {
|
|
793
|
+
groundTruth = JSON.parse(item.groundTruth);
|
|
794
|
+
} catch {
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
return { input, groundTruth };
|
|
798
|
+
});
|
|
799
|
+
return { items };
|
|
800
|
+
} catch (error$1) {
|
|
801
|
+
if (error$1 instanceof error.MastraError) {
|
|
802
|
+
throw new chunk64ITUOXI_cjs.HTTPException(getHttpStatusForMastraError(error$1.id), { message: error$1.message });
|
|
803
|
+
}
|
|
804
|
+
return chunkY2BKW5ND_cjs.handleError(error$1, "Error generating dataset items");
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
});
|
|
808
|
+
var CLUSTER_FAILURES_SYSTEM_PROMPT = `You are an AI evaluation expert specializing in failure analysis. Given a set of failure items from an AI agent experiment, identify common failure patterns and assign descriptive tags to each item.
|
|
809
|
+
|
|
810
|
+
For each cluster you identify, provide:
|
|
811
|
+
- A short, descriptive tag label (2-5 words, lowercase, hyphenated, e.g., "no-tool-usage", "hallucination")
|
|
812
|
+
- A description explaining the common failure pattern
|
|
813
|
+
- The IDs of items that belong to this cluster
|
|
814
|
+
|
|
815
|
+
Also return a "proposedTags" array mapping each item ID to the tags you recommend, along with a brief "reason" explaining WHY those tags apply to that specific item. The reason should reference concrete evidence from the item's input/output/error.
|
|
816
|
+
|
|
817
|
+
Guidelines:
|
|
818
|
+
- Create between 1 and 8 clusters depending on the diversity of failures
|
|
819
|
+
- Every item must be assigned to at least one cluster unless there is no clear pattern of failure
|
|
820
|
+
- Focus on the root cause of failures, not surface-level symptoms
|
|
821
|
+
- If items have scores, use low scores as signals for the failure type
|
|
822
|
+
- Be specific about what went wrong
|
|
823
|
+
- IMPORTANT: If existing tags are provided, PREFER reusing them over creating new ones. Only create new tags when no existing tag fits.
|
|
824
|
+
- Items may already have tags \u2014 consider those when assigning new ones and avoid duplicating existing tags on an item.
|
|
825
|
+
- The "reason" field should be 1-2 sentences explaining the specific evidence for each tag assignment.`;
|
|
826
|
+
var CLUSTER_FAILURES_ROUTE = chunkYJLDMFSE_cjs.createRoute({
|
|
827
|
+
method: "POST",
|
|
828
|
+
path: "/datasets/cluster-failures",
|
|
829
|
+
responseType: "json",
|
|
830
|
+
bodySchema: chunkN5RFB7A4_cjs.clusterFailuresBodySchema,
|
|
831
|
+
responseSchema: chunkN5RFB7A4_cjs.clusterFailuresResponseSchema,
|
|
832
|
+
summary: "Cluster experiment failures using AI",
|
|
833
|
+
description: "Uses an LLM to analyze failure items from an experiment and group them into meaningful failure pattern clusters.",
|
|
834
|
+
tags: ["Datasets"],
|
|
835
|
+
requiresAuth: true,
|
|
836
|
+
handler: async ({ mastra, modelId, items, availableTags, prompt }) => {
|
|
837
|
+
assertDatasetsAvailable();
|
|
838
|
+
try {
|
|
839
|
+
const model = await llm.resolveModelConfig(modelId, void 0, mastra);
|
|
840
|
+
const clusterAgent = new agent.Agent({
|
|
841
|
+
id: "failure-cluster-analyzer",
|
|
842
|
+
name: "failure-cluster-analyzer",
|
|
843
|
+
instructions: CLUSTER_FAILURES_SYSTEM_PROMPT,
|
|
844
|
+
model
|
|
845
|
+
});
|
|
846
|
+
const outputSchema = zod.z.object({
|
|
847
|
+
clusters: zod.z.array(
|
|
848
|
+
zod.z.object({
|
|
849
|
+
id: zod.z.string(),
|
|
850
|
+
label: zod.z.string(),
|
|
851
|
+
description: zod.z.string(),
|
|
852
|
+
itemIds: zod.z.array(zod.z.string())
|
|
853
|
+
})
|
|
854
|
+
),
|
|
855
|
+
proposedTags: zod.z.array(
|
|
856
|
+
zod.z.object({
|
|
857
|
+
itemId: zod.z.string(),
|
|
858
|
+
tags: zod.z.array(zod.z.string()),
|
|
859
|
+
reason: zod.z.string().describe("Brief explanation of why these tags were assigned")
|
|
860
|
+
})
|
|
861
|
+
)
|
|
862
|
+
});
|
|
863
|
+
const itemSummaries = items.map((item, i) => {
|
|
864
|
+
const parts = [`Item ${i + 1} (id: ${item.id}):`];
|
|
865
|
+
if (item.input !== void 0 && item.input !== null) parts.push(` Input: ${JSON.stringify(item.input)}`);
|
|
866
|
+
if (item.output !== void 0 && item.output !== null) parts.push(` Output: ${JSON.stringify(item.output)}`);
|
|
867
|
+
if (item.error !== void 0 && item.error !== null) {
|
|
868
|
+
parts.push(` Error: ${typeof item.error === "string" ? item.error : JSON.stringify(item.error)}`);
|
|
869
|
+
}
|
|
870
|
+
if (item.scores !== void 0 && item.scores !== null) {
|
|
871
|
+
parts.push(` Scores: ${JSON.stringify(item.scores)}`);
|
|
872
|
+
}
|
|
873
|
+
if (item.existingTags && item.existingTags.length > 0) {
|
|
874
|
+
parts.push(` Existing tags: ${item.existingTags.join(", ")}`);
|
|
875
|
+
}
|
|
876
|
+
return parts.join("\n");
|
|
877
|
+
});
|
|
878
|
+
let userMessage = `Analyze these ${items.length} failure items and group them into clusters of common failure patterns:
|
|
879
|
+
|
|
880
|
+
${itemSummaries.join("\n\n")}`;
|
|
881
|
+
if (availableTags && availableTags.length > 0) {
|
|
882
|
+
userMessage += `
|
|
883
|
+
|
|
884
|
+
Existing tag vocabulary (prefer reusing these): ${availableTags.join(", ")}`;
|
|
885
|
+
}
|
|
886
|
+
if (prompt) {
|
|
887
|
+
userMessage += `
|
|
888
|
+
|
|
889
|
+
Additional instructions from the reviewer: ${prompt}`;
|
|
890
|
+
}
|
|
891
|
+
userMessage += `
|
|
892
|
+
|
|
893
|
+
Return both "clusters" (grouping items by pattern) and "proposedTags" (a list mapping each item ID to the tag labels you recommend, with a "reason" explaining why). For proposedTags, only include NEW tags to add \u2014 do not repeat tags the item already has.`;
|
|
894
|
+
const result = await clusterAgent.generate(userMessage, {
|
|
895
|
+
structuredOutput: { schema: outputSchema }
|
|
896
|
+
});
|
|
897
|
+
const generated = await result.object;
|
|
898
|
+
return { clusters: generated.clusters, proposedTags: generated.proposedTags ?? [] };
|
|
899
|
+
} catch (error$1) {
|
|
900
|
+
if (error$1 instanceof error.MastraError) {
|
|
901
|
+
throw new chunk64ITUOXI_cjs.HTTPException(getHttpStatusForMastraError(error$1.id), { message: error$1.message });
|
|
902
|
+
}
|
|
903
|
+
return chunkY2BKW5ND_cjs.handleError(error$1, "Error clustering failures");
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
});
|
|
637
907
|
|
|
638
908
|
exports.ADD_ITEM_ROUTE = ADD_ITEM_ROUTE;
|
|
639
909
|
exports.BATCH_DELETE_ITEMS_ROUTE = BATCH_DELETE_ITEMS_ROUTE;
|
|
640
910
|
exports.BATCH_INSERT_ITEMS_ROUTE = BATCH_INSERT_ITEMS_ROUTE;
|
|
911
|
+
exports.CLUSTER_FAILURES_ROUTE = CLUSTER_FAILURES_ROUTE;
|
|
641
912
|
exports.COMPARE_EXPERIMENTS_ROUTE = COMPARE_EXPERIMENTS_ROUTE;
|
|
642
913
|
exports.CREATE_DATASET_ROUTE = CREATE_DATASET_ROUTE;
|
|
643
914
|
exports.DELETE_DATASET_ROUTE = DELETE_DATASET_ROUTE;
|
|
644
915
|
exports.DELETE_ITEM_ROUTE = DELETE_ITEM_ROUTE;
|
|
916
|
+
exports.GENERATE_ITEMS_ROUTE = GENERATE_ITEMS_ROUTE;
|
|
645
917
|
exports.GET_DATASET_ROUTE = GET_DATASET_ROUTE;
|
|
646
918
|
exports.GET_EXPERIMENT_ROUTE = GET_EXPERIMENT_ROUTE;
|
|
647
919
|
exports.GET_ITEM_ROUTE = GET_ITEM_ROUTE;
|
|
@@ -654,6 +926,7 @@ exports.LIST_ITEMS_ROUTE = LIST_ITEMS_ROUTE;
|
|
|
654
926
|
exports.LIST_ITEM_VERSIONS_ROUTE = LIST_ITEM_VERSIONS_ROUTE;
|
|
655
927
|
exports.TRIGGER_EXPERIMENT_ROUTE = TRIGGER_EXPERIMENT_ROUTE;
|
|
656
928
|
exports.UPDATE_DATASET_ROUTE = UPDATE_DATASET_ROUTE;
|
|
929
|
+
exports.UPDATE_EXPERIMENT_RESULT_ROUTE = UPDATE_EXPERIMENT_RESULT_ROUTE;
|
|
657
930
|
exports.UPDATE_ITEM_ROUTE = UPDATE_ITEM_ROUTE;
|
|
658
|
-
//# sourceMappingURL=chunk-
|
|
659
|
-
//# sourceMappingURL=chunk-
|
|
931
|
+
//# sourceMappingURL=chunk-AOAIJJY6.cjs.map
|
|
932
|
+
//# sourceMappingURL=chunk-AOAIJJY6.cjs.map
|