@mastra/core 1.0.0-beta.13 → 1.0.0-beta.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/CHANGELOG.md +170 -0
- package/dist/agent/agent.d.ts +2 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.types.d.ts +6 -7
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +17 -9
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/message-list/index.cjs +3 -3
- package/dist/agent/message-list/index.js +1 -1
- package/dist/agent/trip-wire.d.ts +2 -2
- package/dist/agent/trip-wire.d.ts.map +1 -1
- package/dist/agent/utils.d.ts +4 -1
- package/dist/agent/utils.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +3 -3
- package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts +3 -3
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts +3 -3
- package/dist/agent/workflows/prepare-stream/prepare-memory-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +3 -3
- package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
- package/dist/bundler/types.d.ts +1 -0
- package/dist/bundler/types.d.ts.map +1 -1
- package/dist/chunk-2AU5ZHBL.js +79 -0
- package/dist/chunk-2AU5ZHBL.js.map +1 -0
- package/dist/{chunk-BQDZIQ3G.js → chunk-3IP3DZ7G.js} +85 -18
- package/dist/chunk-3IP3DZ7G.js.map +1 -0
- package/dist/{chunk-WYWRMIQC.js → chunk-4AT6YQKZ.js} +4 -103
- package/dist/chunk-4AT6YQKZ.js.map +1 -0
- package/dist/{chunk-62Q7K656.js → chunk-4CMIJQF6.js} +114 -110
- package/dist/chunk-4CMIJQF6.js.map +1 -0
- package/dist/{chunk-MXBVP7HX.cjs → chunk-53SZJCBX.cjs} +220 -174
- package/dist/chunk-53SZJCBX.cjs.map +1 -0
- package/dist/{chunk-2IU4RGU5.js → chunk-5UQ5TB6J.js} +5 -5
- package/dist/{chunk-2IU4RGU5.js.map → chunk-5UQ5TB6J.js.map} +1 -1
- package/dist/{chunk-WYGUWVTF.js → chunk-67LM2UCT.js} +8 -8
- package/dist/chunk-67LM2UCT.js.map +1 -0
- package/dist/{chunk-U4CSOY6T.cjs → chunk-6CG7IY57.cjs} +110 -43
- package/dist/chunk-6CG7IY57.cjs.map +1 -0
- package/dist/{chunk-X6IBA7FP.cjs → chunk-72E3YF6A.cjs} +9 -110
- package/dist/chunk-72E3YF6A.cjs.map +1 -0
- package/dist/{chunk-GIWC35YQ.js → chunk-AYBJ5GAD.js} +180 -4
- package/dist/chunk-AYBJ5GAD.js.map +1 -0
- package/dist/{chunk-VEPP75C4.cjs → chunk-DBW6S25C.cjs} +10 -10
- package/dist/{chunk-VEPP75C4.cjs.map → chunk-DBW6S25C.cjs.map} +1 -1
- package/dist/{chunk-Y7MZ5LJT.cjs → chunk-EGHGFLL3.cjs} +101 -102
- package/dist/chunk-EGHGFLL3.cjs.map +1 -0
- package/dist/{chunk-LGB4VNZI.cjs → chunk-ETWAR2YE.cjs} +5 -5
- package/dist/{chunk-LGB4VNZI.cjs.map → chunk-ETWAR2YE.cjs.map} +1 -1
- package/dist/{chunk-OWIEOL55.cjs → chunk-F75EQ574.cjs} +695 -254
- package/dist/chunk-F75EQ574.cjs.map +1 -0
- package/dist/{chunk-AGHLXC4I.cjs → chunk-FPDJ4XN6.cjs} +181 -5
- package/dist/chunk-FPDJ4XN6.cjs.map +1 -0
- package/dist/{chunk-VETAQUW3.js → chunk-GBQXIVL6.js} +3 -3
- package/dist/{chunk-VETAQUW3.js.map → chunk-GBQXIVL6.js.map} +1 -1
- package/dist/{chunk-4BC5FUAO.js → chunk-GELVUDUY.js} +5 -4
- package/dist/chunk-GELVUDUY.js.map +1 -0
- package/dist/chunk-GVAPYQRO.cjs +252 -0
- package/dist/chunk-GVAPYQRO.cjs.map +1 -0
- package/dist/{chunk-R5AJGM55.cjs → chunk-JAGQZZ43.cjs} +410 -265
- package/dist/chunk-JAGQZZ43.cjs.map +1 -0
- package/dist/{chunk-ARAQIW6E.js → chunk-K66U47VL.js} +617 -188
- package/dist/chunk-K66U47VL.js.map +1 -0
- package/dist/{chunk-RCJLMMTO.js → chunk-LDXKZYOV.js} +4 -4
- package/dist/{chunk-RCJLMMTO.js.map → chunk-LDXKZYOV.js.map} +1 -1
- package/dist/{chunk-MLKE7HRS.cjs → chunk-O3ULBGV6.cjs} +4 -4
- package/dist/{chunk-MLKE7HRS.cjs.map → chunk-O3ULBGV6.cjs.map} +1 -1
- package/dist/{chunk-PJAK4U6R.cjs → chunk-O5BQBZEF.cjs} +15 -15
- package/dist/chunk-O5BQBZEF.cjs.map +1 -0
- package/dist/{chunk-H4VUIOWU.cjs → chunk-OOUFPYSX.cjs} +5 -4
- package/dist/chunk-OOUFPYSX.cjs.map +1 -0
- package/dist/{chunk-5VZGJTPR.js → chunk-QDVYP2T7.js} +56 -10
- package/dist/chunk-QDVYP2T7.js.map +1 -0
- package/dist/{chunk-E5BQRAJK.js → chunk-QF4MHFSU.js} +364 -221
- package/dist/chunk-QF4MHFSU.js.map +1 -0
- package/dist/{chunk-WPTTKULS.js → chunk-SLBWA2F3.js} +3 -3
- package/dist/{chunk-WPTTKULS.js.map → chunk-SLBWA2F3.js.map} +1 -1
- package/dist/chunk-ST7NBF4H.cjs +84 -0
- package/dist/chunk-ST7NBF4H.cjs.map +1 -0
- package/dist/{chunk-7HEAVZRS.cjs → chunk-TDM43G4I.cjs} +8 -8
- package/dist/{chunk-7HEAVZRS.cjs.map → chunk-TDM43G4I.cjs.map} +1 -1
- package/dist/{chunk-SZYSDJTN.cjs → chunk-TRUNX3AX.cjs} +117 -112
- package/dist/chunk-TRUNX3AX.cjs.map +1 -0
- package/dist/chunk-VE6HQ7H6.js +250 -0
- package/dist/chunk-VE6HQ7H6.js.map +1 -0
- package/dist/{chunk-MRRFTNF4.js → chunk-VZJOEGQA.js} +3 -4
- package/dist/chunk-VZJOEGQA.js.map +1 -0
- package/dist/evals/index.cjs +4 -4
- package/dist/evals/index.js +1 -1
- package/dist/evals/run/index.d.ts.map +1 -1
- package/dist/evals/scoreTraces/index.cjs +3 -3
- package/dist/evals/scoreTraces/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/llm/index.cjs +15 -15
- package/dist/llm/index.js +5 -5
- package/dist/llm/model/aisdk/generate-to-stream.d.ts +20 -0
- package/dist/llm/model/aisdk/generate-to-stream.d.ts.map +1 -0
- package/dist/llm/model/aisdk/v5/model.d.ts +4 -0
- package/dist/llm/model/aisdk/v5/model.d.ts.map +1 -1
- package/dist/llm/model/aisdk/v6/model.d.ts +51 -0
- package/dist/llm/model/aisdk/v6/model.d.ts.map +1 -0
- package/dist/llm/model/model.loop.d.ts +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +84 -0
- package/dist/llm/model/resolve-model.d.ts +2 -2
- package/dist/llm/model/resolve-model.d.ts.map +1 -1
- package/dist/llm/model/shared.types.d.ts +18 -7
- package/dist/llm/model/shared.types.d.ts.map +1 -1
- package/dist/loop/index.cjs +2 -2
- package/dist/loop/index.js +1 -1
- package/dist/loop/network/index.d.ts +2 -2
- package/dist/loop/network/index.d.ts.map +1 -1
- package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts +1 -1
- package/dist/loop/test-utils/MastraLanguageModelV2Mock.d.ts.map +1 -1
- package/dist/loop/test-utils/MastraLanguageModelV3Mock.d.ts +37 -0
- package/dist/loop/test-utils/MastraLanguageModelV3Mock.d.ts.map +1 -0
- package/dist/loop/test-utils/fullStream.d.ts +2 -1
- package/dist/loop/test-utils/fullStream.d.ts.map +1 -1
- package/dist/loop/test-utils/resultObject.d.ts +2 -1
- package/dist/loop/test-utils/resultObject.d.ts.map +1 -1
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -1
- package/dist/loop/test-utils/utils-v3.d.ts +55 -0
- package/dist/loop/test-utils/utils-v3.d.ts.map +1 -0
- package/dist/loop/types.d.ts +5 -6
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +36 -36
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +25 -25
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +12 -12
- package/dist/loop/workflows/agentic-loop/index.d.ts +36 -36
- package/dist/loop/workflows/run-state.d.ts +2 -2
- package/dist/loop/workflows/run-state.d.ts.map +1 -1
- package/dist/loop/workflows/schema.d.ts +12 -12
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +6 -6
- package/dist/memory/index.js +1 -1
- package/dist/models-dev-E3WWI7VA.js +3 -0
- package/dist/{models-dev-EO22XOXQ.js.map → models-dev-E3WWI7VA.js.map} +1 -1
- package/dist/models-dev-PPS7X4JM.cjs +12 -0
- package/dist/{models-dev-D3EKFGAO.cjs.map → models-dev-PPS7X4JM.cjs.map} +1 -1
- package/dist/netlify-TY656UYF.js +3 -0
- package/dist/{netlify-AE4LNCAI.js.map → netlify-TY656UYF.js.map} +1 -1
- package/dist/netlify-VZFM5UH3.cjs +12 -0
- package/dist/{netlify-WE42TZIT.cjs.map → netlify-VZFM5UH3.cjs.map} +1 -1
- package/dist/processors/index.cjs +37 -37
- package/dist/processors/index.d.ts +7 -7
- package/dist/processors/index.d.ts.map +1 -1
- package/dist/processors/index.js +1 -1
- package/dist/processors/runner.d.ts.map +1 -1
- package/dist/processors/step-schema.d.ts +26 -26
- package/dist/processors/step-schema.d.ts.map +1 -1
- package/dist/provider-registry-NXVD764B.js +3 -0
- package/dist/{provider-registry-6LF3NGC5.js.map → provider-registry-NXVD764B.js.map} +1 -1
- package/dist/provider-registry-ZIWSEUQE.cjs +40 -0
- package/dist/{provider-registry-73FKMXJV.cjs.map → provider-registry-ZIWSEUQE.cjs.map} +1 -1
- package/dist/provider-registry.json +176 -0
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.cjs.map +1 -1
- package/dist/relevance/index.js +2 -2
- package/dist/relevance/index.js.map +1 -1
- package/dist/storage/index.cjs +38 -38
- package/dist/storage/index.js +1 -1
- package/dist/stream/aisdk/v5/execute.d.ts +4 -4
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/output.d.ts +2 -2
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/transform.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts +7 -5
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +12 -12
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +29 -21
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +4 -4
- package/dist/test-utils/llm-mock.cjs.map +1 -1
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/test-utils/llm-mock.js.map +1 -1
- package/dist/token-6GSAFR2W-LTZ7QQUP.js +61 -0
- package/dist/token-6GSAFR2W-LTZ7QQUP.js.map +1 -0
- package/dist/token-6GSAFR2W-UEEINYAN.cjs +63 -0
- package/dist/token-6GSAFR2W-UEEINYAN.cjs.map +1 -0
- package/dist/token-util-NEHG7TUY-QTFZ26EN.js +8 -0
- package/dist/token-util-NEHG7TUY-QTFZ26EN.js.map +1 -0
- package/dist/token-util-NEHG7TUY-WZL2DNCG.cjs +10 -0
- package/dist/token-util-NEHG7TUY-WZL2DNCG.cjs.map +1 -0
- package/dist/utils.cjs +22 -22
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/vector/embed.d.ts +1 -0
- package/dist/vector/embed.d.ts.map +1 -1
- package/dist/vector/index.cjs +5300 -0
- package/dist/vector/index.cjs.map +1 -1
- package/dist/vector/index.js +5279 -1
- package/dist/vector/index.js.map +1 -1
- package/dist/vector/vector.d.ts +14 -1
- package/dist/vector/vector.d.ts.map +1 -1
- package/dist/voice/composite-voice.d.ts.map +1 -1
- package/dist/voice/index.cjs +6 -6
- package/dist/voice/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/evented/step-executor.d.ts +4 -0
- package/dist/workflows/evented/step-executor.d.ts.map +1 -1
- package/dist/workflows/evented/workflow-event-processor/index.d.ts +15 -0
- package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
- package/dist/workflows/evented/workflow.d.ts +5 -0
- package/dist/workflows/evented/workflow.d.ts.map +1 -1
- package/dist/workflows/index.cjs +23 -23
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/workflow.d.ts +4 -1
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/package.json +10 -12
- package/src/llm/model/provider-types.generated.d.ts +84 -0
- package/dist/chunk-4BC5FUAO.js.map +0 -1
- package/dist/chunk-5VZGJTPR.js.map +0 -1
- package/dist/chunk-62Q7K656.js.map +0 -1
- package/dist/chunk-AGHLXC4I.cjs.map +0 -1
- package/dist/chunk-ARAQIW6E.js.map +0 -1
- package/dist/chunk-BQDZIQ3G.js.map +0 -1
- package/dist/chunk-E5BQRAJK.js.map +0 -1
- package/dist/chunk-GIWC35YQ.js.map +0 -1
- package/dist/chunk-H4VUIOWU.cjs.map +0 -1
- package/dist/chunk-IXZ2T2QX.cjs +0 -448
- package/dist/chunk-IXZ2T2QX.cjs.map +0 -1
- package/dist/chunk-MRRFTNF4.js.map +0 -1
- package/dist/chunk-MXBVP7HX.cjs.map +0 -1
- package/dist/chunk-OWIEOL55.cjs.map +0 -1
- package/dist/chunk-PJAK4U6R.cjs.map +0 -1
- package/dist/chunk-R5AJGM55.cjs.map +0 -1
- package/dist/chunk-SZYSDJTN.cjs.map +0 -1
- package/dist/chunk-U4CSOY6T.cjs.map +0 -1
- package/dist/chunk-UBSPZTQX.js +0 -434
- package/dist/chunk-UBSPZTQX.js.map +0 -1
- package/dist/chunk-WYGUWVTF.js.map +0 -1
- package/dist/chunk-WYWRMIQC.js.map +0 -1
- package/dist/chunk-X6IBA7FP.cjs.map +0 -1
- package/dist/chunk-Y7MZ5LJT.cjs.map +0 -1
- package/dist/llm/model/is-v2-model.d.ts +0 -3
- package/dist/llm/model/is-v2-model.d.ts.map +0 -1
- package/dist/models-dev-D3EKFGAO.cjs +0 -12
- package/dist/models-dev-EO22XOXQ.js +0 -3
- package/dist/netlify-AE4LNCAI.js +0 -3
- package/dist/netlify-WE42TZIT.cjs +0 -12
- package/dist/provider-registry-6LF3NGC5.js +0 -3
- package/dist/provider-registry-73FKMXJV.cjs +0 -40
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createStep, createWorkflow, Agent, tryGenerateWithJsonFallback, Workflow } from './chunk-
|
|
2
|
-
import { resolveModelConfig } from './chunk-
|
|
1
|
+
import { createStep, createWorkflow, Agent, isSupportedLanguageModel, tryGenerateWithJsonFallback, Workflow } from './chunk-QF4MHFSU.js';
|
|
2
|
+
import { resolveModelConfig } from './chunk-QDVYP2T7.js';
|
|
3
3
|
import { MastraError } from './chunk-YPLZDWG7.js';
|
|
4
4
|
import { randomUUID } from 'crypto';
|
|
5
5
|
import { z } from 'zod';
|
|
@@ -289,7 +289,7 @@ var MastraScorer = class _MastraScorer {
|
|
|
289
289
|
if (scorerStep.name === "generateScore") {
|
|
290
290
|
const schema = z.object({ score: z.number() });
|
|
291
291
|
let result;
|
|
292
|
-
if (resolvedModel
|
|
292
|
+
if (isSupportedLanguageModel(resolvedModel)) {
|
|
293
293
|
result = await tryGenerateWithJsonFallback(judge, prompt, {
|
|
294
294
|
structuredOutput: {
|
|
295
295
|
schema
|
|
@@ -305,7 +305,7 @@ var MastraScorer = class _MastraScorer {
|
|
|
305
305
|
return { result: result.object.score, prompt };
|
|
306
306
|
} else if (scorerStep.name === "generateReason") {
|
|
307
307
|
let result;
|
|
308
|
-
if (resolvedModel
|
|
308
|
+
if (isSupportedLanguageModel(resolvedModel)) {
|
|
309
309
|
result = await judge.generate(prompt, { tracingContext });
|
|
310
310
|
} else {
|
|
311
311
|
result = await judge.generateLegacy(prompt, { tracingContext });
|
|
@@ -314,7 +314,7 @@ var MastraScorer = class _MastraScorer {
|
|
|
314
314
|
} else {
|
|
315
315
|
const promptStep = originalStep;
|
|
316
316
|
let result;
|
|
317
|
-
if (resolvedModel
|
|
317
|
+
if (isSupportedLanguageModel(resolvedModel)) {
|
|
318
318
|
result = await tryGenerateWithJsonFallback(judge, prompt, {
|
|
319
319
|
structuredOutput: {
|
|
320
320
|
schema: promptStep.outputSchema
|
|
@@ -571,7 +571,7 @@ async function executeWorkflow(target, item) {
|
|
|
571
571
|
}
|
|
572
572
|
async function executeAgent(agent, item) {
|
|
573
573
|
const model = await agent.getModel();
|
|
574
|
-
if (model
|
|
574
|
+
if (isSupportedLanguageModel(model)) {
|
|
575
575
|
return await agent.generate(item.input, {
|
|
576
576
|
scorers: {},
|
|
577
577
|
returnScorerData: true,
|
|
@@ -677,5 +677,5 @@ async function runScorers(scorers, targetResult, item) {
|
|
|
677
677
|
}
|
|
678
678
|
|
|
679
679
|
export { MastraScorer, createScorer, runEvals };
|
|
680
|
-
//# sourceMappingURL=chunk-
|
|
681
|
-
//# sourceMappingURL=chunk-
|
|
680
|
+
//# sourceMappingURL=chunk-67LM2UCT.js.map
|
|
681
|
+
//# sourceMappingURL=chunk-67LM2UCT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evals/base.ts","../src/evals/run/scorerAccumulator.ts","../src/evals/run/index.ts"],"names":[],"mappings":"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","file":"chunk-67LM2UCT.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { z } from 'zod';\nimport { Agent, isSupportedLanguageModel } from '../agent';\nimport { tryGenerateWithJsonFallback } from '../agent/utils';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport { resolveModelConfig } from '../llm/model/resolve-model';\nimport type { MastraModelConfig } from '../llm/model/shared.types';\nimport type { Mastra } from '../mastra';\nimport type { TracingContext } from '../observability';\nimport { InternalSpans } from '../observability';\nimport { createWorkflow, createStep } from '../workflows';\nimport type { ScoringSamplingConfig, ScorerRunInputForAgent, ScorerRunOutputForAgent } from './types';\n\ninterface ScorerStepDefinition {\n name: string;\n definition: any;\n isPromptObject: boolean;\n}\n\n// Predefined type shortcuts for common scorer patterns\ntype ScorerTypeShortcuts = {\n agent: {\n input: ScorerRunInputForAgent;\n output: ScorerRunOutputForAgent;\n };\n};\n\n// Pipeline scorer\n// TInput and TRunOutput establish the type contract for the entire scorer pipeline,\n// ensuring type safety flows through all steps and contexts\ninterface ScorerConfig<TID extends string, TInput = any, TRunOutput = any> {\n id: TID;\n name?: string;\n description: string;\n judge?: {\n model: MastraModelConfig;\n instructions: string;\n };\n // Optional type specification - can be enum shortcut or explicit schemas\n type?:\n | keyof ScorerTypeShortcuts\n | {\n input: z.ZodSchema<TInput>;\n output: z.ZodSchema<TRunOutput>;\n };\n}\n\n// Standardized input type for all pipelines\ninterface ScorerRun<TInput = any, TOutput = any> {\n runId?: string;\n input?: TInput;\n output: TOutput;\n groundTruth?: any;\n requestContext?: Record<string, any>;\n tracingContext?: TracingContext;\n}\n\n// Prompt object definition with conditional typing\ninterface PromptObject<\n TOutput,\n TAccumulated extends Record<string, any>,\n TStepName extends string = string,\n TInput = any,\n TRunOutput = any,\n> {\n description: string;\n outputSchema: z.ZodSchema<TOutput>;\n judge?: {\n model: MastraModelConfig;\n instructions: string;\n };\n\n // Support both sync and async createPrompt\n createPrompt: (context: PromptObjectContext<TAccumulated, TStepName, TInput, TRunOutput>) => string | Promise<string>;\n}\n\n// Helper types\ntype StepResultKey<T extends string> = `${T}StepResult`;\n\n// Simple utility type to extract resolved types from potentially async functions\ntype Awaited<T> = T extends Promise<infer U> ? U : T;\n\n// Simplified context type\ntype StepContext<TAccumulated extends Record<string, any>, TInput, TRunOutput> = {\n run: ScorerRun<TInput, TRunOutput>;\n results: TAccumulated;\n};\n\n// Simplified AccumulatedResults - don't try to resolve Promise types here\ntype AccumulatedResults<T extends Record<string, any>, K extends string, V> = T & Record<StepResultKey<K>, V>;\n\n// Special context type for generateReason that includes the score\ntype GenerateReasonContext<TAccumulated extends Record<string, any>, TInput, TRunOutput> = StepContext<\n TAccumulated,\n TInput,\n TRunOutput\n> & {\n score: TAccumulated extends Record<'generateScoreStepResult', infer TScore> ? TScore : never;\n};\n\ntype ScorerRunResult<TAccumulatedResults extends Record<string, any>, TInput, TRunOutput> = Promise<\n ScorerRun<TInput, TRunOutput> & {\n score: TAccumulatedResults extends Record<'generateScoreStepResult', infer TScore> ? TScore : never;\n reason?: TAccumulatedResults extends Record<'generateReasonStepResult', infer TReason> ? TReason : undefined;\n\n // Prompts\n preprocessPrompt?: string;\n analyzePrompt?: string;\n generateScorePrompt?: string;\n generateReasonPrompt?: string;\n\n // Results\n preprocessStepResult?: TAccumulatedResults extends Record<'preprocessStepResult', infer TPreprocess>\n ? TPreprocess\n : undefined;\n analyzeStepResult?: TAccumulatedResults extends Record<'analyzeStepResult', infer TAnalyze> ? TAnalyze : undefined;\n } & { runId: string }\n>;\n\n// Conditional type for PromptObject context\ntype PromptObjectContext<\n TAccumulated extends Record<string, any>,\n TStepName extends string,\n TInput,\n TRunOutput,\n> = TStepName extends 'generateReason'\n ? GenerateReasonContext<TAccumulated, TInput, TRunOutput>\n : StepContext<TAccumulated, TInput, TRunOutput>;\n\n// Function step types that support both sync and async\ntype FunctionStep<TAccumulated extends Record<string, any>, TInput, TRunOutput, TOutput> =\n | ((context: StepContext<TAccumulated, TInput, TRunOutput>) => TOutput)\n | ((context: StepContext<TAccumulated, TInput, TRunOutput>) => Promise<TOutput>);\n\ntype GenerateReasonFunctionStep<TAccumulated extends Record<string, any>, TInput, TRunOutput> =\n | ((context: GenerateReasonContext<TAccumulated, TInput, TRunOutput>) => any)\n | ((context: GenerateReasonContext<TAccumulated, TInput, TRunOutput>) => Promise<any>);\n\ntype GenerateScoreFunctionStep<TAccumulated extends Record<string, any>, TInput, TRunOutput> =\n | ((context: StepContext<TAccumulated, TInput, TRunOutput>) => number)\n | ((context: StepContext<TAccumulated, TInput, TRunOutput>) => Promise<number>);\n\n// Special prompt object type for generateScore that always returns a number\ninterface GenerateScorePromptObject<TAccumulated extends Record<string, any>, TInput, TRunOutput> {\n description: string;\n judge?: {\n model: MastraModelConfig;\n instructions: string;\n };\n // Support both sync and async createPrompt\n createPrompt: (context: StepContext<TAccumulated, TInput, TRunOutput>) => string | Promise<string>;\n}\n\n// Special prompt object type for generateReason that always returns a string\ninterface GenerateReasonPromptObject<TAccumulated extends Record<string, any>, TInput, TRunOutput> {\n description: string;\n judge?: {\n model: MastraModelConfig;\n instructions: string;\n };\n // Support both sync and async createPrompt\n createPrompt: (context: GenerateReasonContext<TAccumulated, TInput, TRunOutput>) => string | Promise<string>;\n}\n\n// Step definition types that support both function and prompt object steps\ntype PreprocessStepDef<TAccumulated extends Record<string, any>, TStepOutput, TInput, TRunOutput> =\n | FunctionStep<TAccumulated, TInput, TRunOutput, TStepOutput>\n | PromptObject<TStepOutput, TAccumulated, 'preprocess', TInput, TRunOutput>;\n\ntype AnalyzeStepDef<TAccumulated extends Record<string, any>, TStepOutput, TInput, TRunOutput> =\n | FunctionStep<TAccumulated, TInput, TRunOutput, TStepOutput>\n | PromptObject<TStepOutput, TAccumulated, 'analyze', TInput, TRunOutput>;\n\n// Conditional type for generateScore step definition\ntype GenerateScoreStepDef<TAccumulated extends Record<string, any>, TInput, TRunOutput> =\n | GenerateScoreFunctionStep<TAccumulated, TInput, TRunOutput>\n | GenerateScorePromptObject<TAccumulated, TInput, TRunOutput>;\n\n// Conditional type for generateReason step definition\ntype GenerateReasonStepDef<TAccumulated extends Record<string, any>, TInput, TRunOutput> =\n | GenerateReasonFunctionStep<TAccumulated, TInput, TRunOutput>\n | GenerateReasonPromptObject<TAccumulated, TInput, TRunOutput>;\n\nclass MastraScorer<\n TID extends string = string,\n TInput = any,\n TRunOutput = any,\n TAccumulatedResults extends Record<string, any> = {},\n> {\n #mastra?: Mastra;\n\n constructor(\n public config: ScorerConfig<TID, TInput, TRunOutput>,\n private steps: Array<ScorerStepDefinition> = [],\n private originalPromptObjects: Map<\n string,\n | PromptObject<any, any, any, TInput, TRunOutput>\n | GenerateReasonPromptObject<any, TInput, TRunOutput>\n | GenerateScorePromptObject<any, TInput, TRunOutput>\n > = new Map(),\n mastra?: Mastra,\n ) {\n this.#mastra = mastra;\n if (!this.config.id) {\n throw new MastraError({\n id: 'MASTR_SCORER_FAILED_TO_CREATE_MISSING_ID',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n text: `Scorers must have an ID field. Please provide an ID in the scorer config.`,\n });\n }\n }\n\n /**\n * Registers the Mastra instance with the scorer.\n * This enables access to custom gateways for model resolution.\n * @internal\n */\n __registerMastra(mastra: Mastra): void {\n this.#mastra = mastra;\n }\n\n get type() {\n return this.config.type;\n }\n\n get id(): TID {\n return this.config.id;\n }\n\n get name(): string {\n return this.config.name ?? this.config.id;\n }\n\n get description(): string {\n return this.config.description;\n }\n\n get judge() {\n return this.config.judge;\n }\n\n preprocess<TPreprocessOutput>(\n stepDef: PreprocessStepDef<TAccumulatedResults, TPreprocessOutput, TInput, TRunOutput>,\n ): MastraScorer<\n TID,\n TInput,\n TRunOutput,\n AccumulatedResults<TAccumulatedResults, 'preprocess', Awaited<TPreprocessOutput>>\n > {\n const isPromptObj = this.isPromptObject(stepDef);\n\n if (isPromptObj) {\n const promptObj = stepDef as PromptObject<\n TPreprocessOutput,\n TAccumulatedResults,\n 'preprocess',\n TInput,\n TRunOutput\n >;\n this.originalPromptObjects.set('preprocess', promptObj);\n }\n\n return new MastraScorer(\n this.config,\n [\n ...this.steps,\n {\n name: 'preprocess',\n definition: stepDef as FunctionStep<any, TInput, TRunOutput, TPreprocessOutput>,\n isPromptObject: isPromptObj,\n },\n ],\n new Map(this.originalPromptObjects),\n this.#mastra,\n );\n }\n\n analyze<TAnalyzeOutput>(\n stepDef: AnalyzeStepDef<TAccumulatedResults, TAnalyzeOutput, TInput, TRunOutput>,\n ): MastraScorer<\n TID,\n TInput,\n TRunOutput,\n AccumulatedResults<TAccumulatedResults, 'analyze', Awaited<TAnalyzeOutput>>\n > {\n const isPromptObj = this.isPromptObject(stepDef);\n\n if (isPromptObj) {\n const promptObj = stepDef as PromptObject<TAnalyzeOutput, TAccumulatedResults, 'analyze', TInput, TRunOutput>;\n this.originalPromptObjects.set('analyze', promptObj);\n }\n\n return new MastraScorer(\n this.config,\n [\n ...this.steps,\n {\n name: 'analyze',\n definition: isPromptObj ? undefined : (stepDef as FunctionStep<any, TInput, TRunOutput, TAnalyzeOutput>),\n isPromptObject: isPromptObj,\n },\n ],\n new Map(this.originalPromptObjects),\n this.#mastra,\n );\n }\n\n generateScore<TScoreOutput extends number = number>(\n stepDef: GenerateScoreStepDef<TAccumulatedResults, TInput, TRunOutput>,\n ): MastraScorer<\n TID,\n TInput,\n TRunOutput,\n AccumulatedResults<TAccumulatedResults, 'generateScore', Awaited<TScoreOutput>>\n > {\n const isPromptObj = this.isPromptObject(stepDef);\n\n if (isPromptObj) {\n const promptObj = stepDef as GenerateScorePromptObject<TAccumulatedResults, TInput, TRunOutput>;\n this.originalPromptObjects.set('generateScore', promptObj);\n }\n\n return new MastraScorer(\n this.config,\n [\n ...this.steps,\n {\n name: 'generateScore',\n definition: isPromptObj ? undefined : (stepDef as GenerateScoreFunctionStep<any, TInput, TRunOutput>),\n isPromptObject: isPromptObj,\n },\n ],\n new Map(this.originalPromptObjects),\n this.#mastra,\n );\n }\n\n generateReason<TReasonOutput = string>(\n stepDef: GenerateReasonStepDef<TAccumulatedResults, TInput, TRunOutput>,\n ): MastraScorer<\n TID,\n TInput,\n TRunOutput,\n AccumulatedResults<TAccumulatedResults, 'generateReason', Awaited<TReasonOutput>>\n > {\n const isPromptObj = this.isPromptObject(stepDef);\n\n if (isPromptObj) {\n const promptObj = stepDef as GenerateReasonPromptObject<TAccumulatedResults, TInput, TRunOutput>;\n this.originalPromptObjects.set('generateReason', promptObj);\n }\n\n return new MastraScorer(\n this.config,\n [\n ...this.steps,\n {\n name: 'generateReason',\n definition: isPromptObj ? undefined : (stepDef as GenerateReasonFunctionStep<any, TInput, TRunOutput>),\n isPromptObject: isPromptObj,\n },\n ],\n new Map(this.originalPromptObjects),\n this.#mastra,\n );\n }\n\n private get hasGenerateScore(): boolean {\n return this.steps.some(step => step.name === 'generateScore');\n }\n\n async run(input: ScorerRun<TInput, TRunOutput>): ScorerRunResult<TAccumulatedResults, TInput, TRunOutput> {\n // Runtime check: execute only allowed after generateScore\n if (!this.hasGenerateScore) {\n throw new MastraError({\n id: 'MASTR_SCORER_FAILED_TO_RUN_MISSING_GENERATE_SCORE',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n text: `Cannot execute pipeline without generateScore() step`,\n details: {\n scorerId: this.config.id ?? this.config.name,\n steps: this.steps.map(s => s.name).join(', '),\n },\n });\n }\n\n const { tracingContext } = input;\n\n let runId = input.runId;\n if (!runId) {\n runId = randomUUID();\n }\n\n const run = { ...input, runId };\n\n const workflow = this.toMastraWorkflow();\n const workflowRun = await workflow.createRun();\n const workflowResult = await workflowRun.start({\n inputData: {\n run,\n },\n tracingContext,\n });\n\n if (workflowResult.status === 'failed') {\n throw new MastraError({\n id: 'MASTR_SCORER_FAILED_TO_RUN_WORKFLOW_FAILED',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n text: `Scorer Run Failed: ${workflowResult.error}`,\n details: {\n scorerId: this.config.id ?? this.config.name,\n steps: this.steps.map(s => s.name).join(', '),\n },\n });\n }\n\n return this.transformToScorerResult({ workflowResult, originalInput: run });\n }\n\n private isPromptObject(stepDef: any): boolean {\n // Check if it's a generateScore prompt object (has description and createPrompt, but no outputSchema)\n if (\n typeof stepDef === 'object' &&\n 'description' in stepDef &&\n 'createPrompt' in stepDef &&\n !('outputSchema' in stepDef)\n ) {\n return true;\n }\n\n // For other steps, check for description, outputSchema, and createPrompt\n const isOtherPromptObject =\n typeof stepDef === 'object' && 'description' in stepDef && 'outputSchema' in stepDef && 'createPrompt' in stepDef;\n\n return isOtherPromptObject;\n }\n\n getSteps(): Array<{ name: string; type: 'function' | 'prompt'; description?: string }> {\n return this.steps.map(step => ({\n name: step.name,\n type: step.isPromptObject ? 'prompt' : 'function',\n description: step.definition.description,\n }));\n }\n\n private toMastraWorkflow() {\n // Convert each scorer step to a workflow step\n const workflowSteps = this.steps.map(scorerStep => {\n return createStep({\n id: scorerStep.name,\n description: `Scorer step: ${scorerStep.name}`,\n inputSchema: z.any(),\n outputSchema: z.any(),\n execute: async ({ inputData, getInitData, tracingContext }) => {\n const { accumulatedResults = {}, generatedPrompts = {} } = inputData;\n const { run } = getInitData();\n\n const context = this.createScorerContext(scorerStep.name, run, accumulatedResults);\n\n let stepResult;\n let newGeneratedPrompts = generatedPrompts;\n if (scorerStep.isPromptObject) {\n const { result, prompt } = await this.executePromptStep(scorerStep, tracingContext, context);\n stepResult = result;\n newGeneratedPrompts = {\n ...generatedPrompts,\n [`${scorerStep.name}Prompt`]: prompt,\n };\n } else {\n stepResult = await this.executeFunctionStep(scorerStep, context);\n }\n\n const newAccumulatedResults = {\n ...accumulatedResults,\n [`${scorerStep.name}StepResult`]: stepResult,\n };\n\n return {\n stepResult,\n accumulatedResults: newAccumulatedResults,\n generatedPrompts: newGeneratedPrompts,\n };\n },\n });\n });\n\n const workflow = createWorkflow({\n id: `scorer-${this.config.id ?? this.config.name}`,\n description: this.config.description,\n inputSchema: z.object({\n run: z.any(), // ScorerRun\n }),\n outputSchema: z.object({\n run: z.any(),\n score: z.number(),\n reason: z.string().optional(),\n preprocessResult: z.any().optional(),\n analyzeResult: z.any().optional(),\n preprocessPrompt: z.string().optional(),\n analyzePrompt: z.string().optional(),\n generateScorePrompt: z.string().optional(),\n generateReasonPrompt: z.string().optional(),\n }),\n options: {\n // mark all spans generated as part of the scorer workflow internal\n tracingPolicy: {\n internal: InternalSpans.ALL,\n },\n validateInputs: false,\n },\n });\n\n let chainedWorkflow = workflow;\n for (const step of workflowSteps) {\n // @ts-ignore - Complain about the type mismatch when we chain the steps\n chainedWorkflow = chainedWorkflow.then(step);\n }\n\n return chainedWorkflow.commit();\n }\n\n private createScorerContext(\n stepName: string,\n run: ScorerRun<TInput, TRunOutput>,\n accumulatedResults: Record<string, any>,\n ) {\n if (stepName === 'generateReason') {\n const score = accumulatedResults.generateScoreStepResult;\n return { run, results: accumulatedResults, score };\n }\n\n return { run, results: accumulatedResults };\n }\n\n private async executeFunctionStep(scorerStep: ScorerStepDefinition, context: any) {\n return await scorerStep.definition(context);\n }\n\n private async executePromptStep(scorerStep: ScorerStepDefinition, tracingContext: TracingContext, context: any) {\n const originalStep = this.originalPromptObjects.get(scorerStep.name);\n if (!originalStep) {\n throw new Error(`Step \"${scorerStep.name}\" is not a prompt object`);\n }\n\n const prompt = await originalStep.createPrompt(context);\n const modelConfig = originalStep.judge?.model ?? this.config.judge?.model;\n const instructions = originalStep.judge?.instructions ?? this.config.judge?.instructions;\n\n if (!modelConfig || !instructions) {\n throw new MastraError({\n id: 'MASTR_SCORER_FAILED_TO_RUN_MISSING_MODEL_OR_INSTRUCTIONS',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n text: `Step \"${scorerStep.name}\" requires a model and instructions`,\n details: {\n scorerId: this.config.id ?? this.config.name,\n step: scorerStep.name,\n },\n });\n }\n\n // Resolve the model configuration to a LanguageModel instance\n // Pass the Mastra instance to enable custom gateway resolution\n const resolvedModel = await resolveModelConfig(modelConfig, undefined, this.#mastra);\n\n const judge = new Agent({\n id: 'judge',\n name: 'judge',\n model: resolvedModel,\n instructions,\n options: { tracingPolicy: { internal: InternalSpans.ALL } },\n });\n\n // GenerateScore output must be a number\n if (scorerStep.name === 'generateScore') {\n const schema = z.object({ score: z.number() });\n let result;\n if (isSupportedLanguageModel(resolvedModel)) {\n result = await tryGenerateWithJsonFallback(judge, prompt, {\n structuredOutput: {\n schema,\n },\n tracingContext,\n });\n } else {\n result = await judge.generateLegacy(prompt, {\n output: schema,\n tracingContext,\n });\n }\n return { result: result.object.score, prompt };\n\n // GenerateReason output must be a string\n } else if (scorerStep.name === 'generateReason') {\n let result;\n if (isSupportedLanguageModel(resolvedModel)) {\n result = await judge.generate(prompt, { tracingContext });\n } else {\n result = await judge.generateLegacy(prompt, { tracingContext });\n }\n return { result: result.text, prompt };\n } else {\n const promptStep = originalStep as PromptObject<any, any, any, TInput, TRunOutput>;\n let result;\n if (isSupportedLanguageModel(resolvedModel)) {\n result = await tryGenerateWithJsonFallback(judge, prompt, {\n structuredOutput: {\n schema: promptStep.outputSchema,\n },\n tracingContext,\n });\n } else {\n result = await judge.generateLegacy(prompt, {\n output: promptStep.outputSchema,\n tracingContext,\n });\n }\n return { result: result.object, prompt };\n }\n }\n\n private transformToScorerResult({\n workflowResult,\n originalInput,\n }: {\n workflowResult: any;\n originalInput: ScorerRun<TInput, TRunOutput> & { runId: string };\n }) {\n const finalStepResult = workflowResult.result;\n const accumulatedResults = finalStepResult?.accumulatedResults || {};\n const generatedPrompts = finalStepResult?.generatedPrompts || {};\n\n return {\n ...originalInput,\n score: accumulatedResults.generateScoreStepResult,\n generateScorePrompt: generatedPrompts.generateScorePrompt,\n reason: accumulatedResults.generateReasonStepResult,\n generateReasonPrompt: generatedPrompts.generateReasonPrompt,\n preprocessStepResult: accumulatedResults.preprocessStepResult,\n preprocessPrompt: generatedPrompts.preprocessPrompt,\n analyzeStepResult: accumulatedResults.analyzeStepResult,\n analyzePrompt: generatedPrompts.analyzePrompt,\n };\n }\n}\n\n// Overload: enum type shortcuts (e.g., type: 'agent')\nexport function createScorer<TID extends string, TType extends keyof ScorerTypeShortcuts>(\n config: Omit<ScorerConfig<TID, any, any>, 'type'> & {\n type: TType;\n },\n): MastraScorer<TID, ScorerTypeShortcuts[TType]['input'], ScorerTypeShortcuts[TType]['output'], {}>;\n\n// Overload: infer TInput/TRunOutput from provided Zod schemas in config.type\nexport function createScorer<TID extends string, TInputSchema extends z.ZodTypeAny, TOutputSchema extends z.ZodTypeAny>(\n config: Omit<ScorerConfig<TID, z.infer<TInputSchema>, z.infer<TOutputSchema>>, 'type'> & {\n type: { input: TInputSchema; output: TOutputSchema };\n },\n): MastraScorer<TID, z.infer<TInputSchema>, z.infer<TOutputSchema>, {}>;\n\n// Overload: explicit generics (backwards compatible)\nexport function createScorer<TInput = any, TRunOutput = any, TID extends string = string>(\n config: ScorerConfig<TID, TInput, TRunOutput>,\n): MastraScorer<TID, TInput, TRunOutput, {}>;\n\n// Implementation\nexport function createScorer(config: any): any {\n return new MastraScorer({\n id: config.id,\n name: config.name ?? config.id,\n description: config.description,\n judge: config.judge,\n type: config.type,\n });\n}\n\nexport type MastraScorerEntry = {\n scorer: MastraScorer<any, any, any, any>;\n sampling?: ScoringSamplingConfig;\n};\n\nexport type MastraScorers = Record<string, MastraScorerEntry>;\n\n// Export types and interfaces for use in test files\nexport type { ScorerConfig, ScorerRun, PromptObject };\n\nexport { MastraScorer };\n","export class ScoreAccumulator {\n private flatScores: Record<string, number[]> = {};\n private workflowScores: Record<string, number[]> = {};\n private stepScores: Record<string, Record<string, number[]>> = {};\n\n addScores(scorerResults: Record<string, any>) {\n const isTargetWorkflowAndHasStepScores = 'steps' in scorerResults;\n if (isTargetWorkflowAndHasStepScores) {\n this.addNestedScores(scorerResults);\n } else {\n this.addFlatScores(scorerResults);\n }\n }\n\n private addFlatScores(scorerResults: Record<string, any>) {\n for (const [scorerName, result] of Object.entries(scorerResults)) {\n if (!this.flatScores[scorerName]) {\n this.flatScores[scorerName] = [];\n }\n this.flatScores[scorerName].push((result as { score: number }).score);\n }\n }\n\n private addNestedScores(scorerResults: Record<string, any>) {\n if ('workflow' in scorerResults && scorerResults.workflow) {\n for (const [scorerName, result] of Object.entries(scorerResults.workflow)) {\n if (!this.workflowScores[scorerName]) {\n this.workflowScores[scorerName] = [];\n }\n this.workflowScores[scorerName].push((result as { score: number }).score);\n }\n }\n\n if ('steps' in scorerResults && scorerResults.steps) {\n for (const [stepId, stepResults] of Object.entries(scorerResults.steps)) {\n if (!this.stepScores[stepId]) {\n this.stepScores[stepId] = {};\n }\n for (const [scorerName, result] of Object.entries(stepResults as Record<string, any>)) {\n if (!this.stepScores[stepId][scorerName]) {\n this.stepScores[stepId][scorerName] = [];\n }\n this.stepScores[stepId][scorerName].push((result as { score: number }).score);\n }\n }\n }\n }\n\n addStepScores(stepScorerResults: Record<string, Record<string, any>>) {\n for (const [stepId, stepResults] of Object.entries(stepScorerResults)) {\n if (!this.stepScores[stepId]) {\n this.stepScores[stepId] = {};\n }\n for (const [scorerName, result] of Object.entries(stepResults)) {\n if (!this.stepScores[stepId][scorerName]) {\n this.stepScores[stepId][scorerName] = [];\n }\n this.stepScores[stepId][scorerName].push((result as { score: number }).score);\n }\n }\n }\n\n getAverageScores(): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const [scorerName, scoreArray] of Object.entries(this.flatScores)) {\n result[scorerName] = this.getAverageScore(scoreArray);\n }\n\n // Add workflow scores\n if (Object.keys(this.workflowScores).length > 0) {\n result.workflow = {};\n for (const [scorerName, scoreArray] of Object.entries(this.workflowScores)) {\n result.workflow[scorerName] = this.getAverageScore(scoreArray);\n }\n }\n\n if (Object.keys(this.stepScores).length > 0) {\n result.steps = {};\n for (const [stepId, stepScorers] of Object.entries(this.stepScores)) {\n result.steps[stepId] = {};\n for (const [scorerName, scoreArray] of Object.entries(stepScorers)) {\n result.steps[stepId][scorerName] = this.getAverageScore(scoreArray);\n }\n }\n }\n\n return result;\n }\n\n private getAverageScore(scoreArray: number[]): number {\n if (scoreArray.length > 0) {\n return scoreArray.reduce((a, b) => a + b, 0) / scoreArray.length;\n } else {\n return 0;\n }\n }\n}\n","import type { CoreMessage } from '@internal/ai-sdk-v4';\nimport type { Agent, AiMessageType, UIMessageWithMetadata } from '../../agent';\nimport { isSupportedLanguageModel } from '../../agent';\nimport { MastraError } from '../../error';\nimport type { TracingContext } from '../../observability';\nimport type { RequestContext } from '../../request-context';\nimport { Workflow } from '../../workflows';\nimport type { WorkflowResult, StepResult } from '../../workflows';\nimport type { MastraScorer } from '../base';\nimport { ScoreAccumulator } from './scorerAccumulator';\n\ntype RunEvalsDataItem<TTarget = unknown> = {\n input: TTarget extends Workflow<any, any>\n ? any\n : TTarget extends Agent\n ? string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[]\n : unknown;\n groundTruth?: any;\n requestContext?: RequestContext;\n tracingContext?: TracingContext;\n};\n\ntype WorkflowScorerConfig = {\n workflow?: MastraScorer<any, any, any, any>[];\n steps?: Record<string, MastraScorer<any, any, any, any>[]>;\n};\n\ntype RunEvalsResult = {\n scores: Record<string, any>;\n summary: {\n totalItems: number;\n };\n};\n\n// Agent with scorers array\nexport function runEvals<TAgent extends Agent>(config: {\n data: RunEvalsDataItem<TAgent>[];\n scorers: MastraScorer<any, any, any, any>[];\n target: TAgent;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TAgent>;\n targetResult: ReturnType<Agent['generate']>;\n scorerResults: Record<string, any>; // Flat structure: { scorerName: result }\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\n// Workflow with scorers array\nexport function runEvals<TWorkflow extends Workflow<any, any, any, any, any, any, any>>(config: {\n data: RunEvalsDataItem<TWorkflow>[];\n scorers: MastraScorer<any, any, any, any>[];\n target: TWorkflow;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TWorkflow>;\n targetResult: WorkflowResult<any, any, any, any>;\n scorerResults: Record<string, any>; // Flat structure: { scorerName: result }\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\n// Workflow with workflow configuration\nexport function runEvals<TWorkflow extends Workflow<any, any, any, any, any, any, any>>(config: {\n data: RunEvalsDataItem<TWorkflow>[];\n scorers: WorkflowScorerConfig;\n target: TWorkflow;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TWorkflow>;\n targetResult: WorkflowResult<any, any, any, any>;\n scorerResults: {\n workflow?: Record<string, any>;\n steps?: Record<string, Record<string, any>>;\n };\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\nexport async function runEvals(config: {\n data: RunEvalsDataItem<any>[];\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig;\n target: Agent | Workflow;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<any>;\n targetResult: any;\n scorerResults: any;\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult> {\n const { data, scorers, target, onItemComplete, concurrency = 1 } = config;\n\n validateEvalsInputs(data, scorers, target);\n\n let totalItems = 0;\n const scoreAccumulator = new ScoreAccumulator();\n\n const pMap = (await import('p-map')).default;\n await pMap(\n data,\n async (item: RunEvalsDataItem<any>) => {\n const targetResult = await executeTarget(target, item);\n const scorerResults = await runScorers(scorers, targetResult, item);\n scoreAccumulator.addScores(scorerResults);\n\n if (onItemComplete) {\n await onItemComplete({\n item,\n targetResult: targetResult as any,\n scorerResults: scorerResults as any,\n });\n }\n\n totalItems++;\n },\n { concurrency },\n );\n\n return {\n scores: scoreAccumulator.getAverageScores(),\n summary: {\n totalItems,\n },\n };\n}\n\nfunction isWorkflow(target: Agent | Workflow): target is Workflow {\n return target instanceof Workflow;\n}\n\nfunction isWorkflowScorerConfig(scorers: any): scorers is WorkflowScorerConfig {\n return typeof scorers === 'object' && !Array.isArray(scorers) && ('workflow' in scorers || 'steps' in scorers);\n}\n\nfunction validateEvalsInputs(\n data: RunEvalsDataItem<any>[],\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig,\n target: Agent | Workflow,\n): void {\n if (data.length === 0) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED',\n category: 'USER',\n text: 'Failed to run experiment: Data array is empty',\n });\n }\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (!item || typeof item !== 'object' || !('input' in item)) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'INVALID_DATA_ITEM',\n category: 'USER',\n text: `Invalid data item at index ${i}: must have 'input' properties`,\n });\n }\n }\n\n // Validate scorers\n if (Array.isArray(scorers)) {\n if (scorers.length === 0) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'NO_SCORERS_PROVIDED',\n category: 'USER',\n text: 'At least one scorer must be provided',\n });\n }\n } else if (isWorkflow(target) && isWorkflowScorerConfig(scorers)) {\n const hasScorers =\n (scorers.workflow && scorers.workflow.length > 0) || (scorers.steps && Object.keys(scorers.steps).length > 0);\n\n if (!hasScorers) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'NO_SCORERS_PROVIDED',\n category: 'USER',\n text: 'At least one workflow or step scorer must be provided',\n });\n }\n } else if (!isWorkflow(target) && !Array.isArray(scorers)) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'INVALID_AGENT_SCORERS',\n category: 'USER',\n text: 'Agent scorers must be an array of scorers',\n });\n }\n}\n\nasync function executeTarget(target: Agent | Workflow, item: RunEvalsDataItem<any>) {\n try {\n if (isWorkflow(target)) {\n return await executeWorkflow(target, item);\n } else {\n return await executeAgent(target, item);\n }\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_TARGET_FAILED_TO_GENERATE_RESULT',\n category: 'USER',\n text: 'Failed to run experiment: Error generating result from target',\n details: {\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n}\n\nasync function executeWorkflow(target: Workflow, item: RunEvalsDataItem<any>) {\n const run = await target.createRun({ disableScorers: true });\n const workflowResult = await run.start({\n inputData: item.input,\n requestContext: item.requestContext,\n });\n\n return {\n scoringData: {\n input: item.input,\n output: workflowResult.status === 'success' ? workflowResult.result : undefined,\n stepResults: workflowResult.steps as Record<string, StepResult<any, any, any, any>>,\n },\n };\n}\n\nasync function executeAgent(agent: Agent, item: RunEvalsDataItem<any>) {\n const model = await agent.getModel();\n if (isSupportedLanguageModel(model)) {\n return await agent.generate(item.input as any, {\n scorers: {},\n returnScorerData: true,\n requestContext: item.requestContext,\n });\n } else {\n return await agent.generateLegacy(item.input as any, {\n scorers: {},\n returnScorerData: true,\n requestContext: item.requestContext,\n });\n }\n}\n\nasync function runScorers(\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig,\n targetResult: any,\n item: RunEvalsDataItem<any>,\n): Promise<Record<string, any>> {\n const scorerResults: Record<string, any> = {};\n\n if (Array.isArray(scorers)) {\n for (const scorer of scorers) {\n try {\n const score = await scorer.run({\n input: targetResult.scoringData?.input,\n output: targetResult.scoringData?.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n tracingContext: item.tracingContext,\n });\n\n scorerResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_RESULT',\n category: 'USER',\n text: `Failed to run experiment: Error running scorer ${scorer.id}`,\n details: {\n scorerId: scorer.id,\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n }\n } else {\n // Handle workflow scorer config\n if (scorers.workflow) {\n const workflowScorerResults: Record<string, any> = {};\n for (const scorer of scorers.workflow) {\n const score = await scorer.run({\n input: targetResult.scoringData.input,\n output: targetResult.scoringData.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n tracingContext: item.tracingContext,\n });\n workflowScorerResults[scorer.id] = score;\n }\n if (Object.keys(workflowScorerResults).length > 0) {\n scorerResults.workflow = workflowScorerResults;\n }\n }\n\n if (scorers.steps) {\n const stepScorerResults: Record<string, any> = {};\n for (const [stepId, stepScorers] of Object.entries(scorers.steps)) {\n const stepResult = targetResult.scoringData.stepResults?.[stepId];\n if (stepResult?.status === 'success' && stepResult.payload && stepResult.output) {\n const stepResults: Record<string, any> = {};\n for (const scorer of stepScorers) {\n try {\n const score = await scorer.run({\n input: stepResult.payload,\n output: stepResult.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n tracingContext: item.tracingContext,\n });\n stepResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_STEP_RESULT',\n category: 'USER',\n text: `Failed to run experiment: Error running scorer ${scorer.id} on step ${stepId}`,\n details: {\n scorerId: scorer.id,\n stepId,\n },\n },\n error,\n );\n }\n }\n if (Object.keys(stepResults).length > 0) {\n stepScorerResults[stepId] = stepResults;\n }\n }\n }\n if (Object.keys(stepScorerResults).length > 0) {\n scorerResults.steps = stepScorerResults;\n }\n }\n }\n\n return scorerResults;\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkJAGQZZ43_cjs = require('./chunk-JAGQZZ43.cjs');
|
|
4
4
|
var chunkL3NKIMF5_cjs = require('./chunk-L3NKIMF5.cjs');
|
|
5
|
+
var chunkHWMMIRIF_cjs = require('./chunk-HWMMIRIF.cjs');
|
|
5
6
|
var chunkZ55SJVEC_cjs = require('./chunk-Z55SJVEC.cjs');
|
|
6
7
|
var chunkUVHSM2GU_cjs = require('./chunk-UVHSM2GU.cjs');
|
|
7
|
-
var chunkHWMMIRIF_cjs = require('./chunk-HWMMIRIF.cjs');
|
|
8
8
|
var chunkDGV2FWB4_cjs = require('./chunk-DGV2FWB4.cjs');
|
|
9
9
|
var chunkAF74UXR5_cjs = require('./chunk-AF74UXR5.cjs');
|
|
10
10
|
var EventEmitter = require('events');
|
|
@@ -27,11 +27,11 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
27
27
|
}
|
|
28
28
|
async execute(params) {
|
|
29
29
|
const { step, stepResults, runId, requestContext, retryCount = 0 } = params;
|
|
30
|
-
const abortController = new AbortController();
|
|
30
|
+
const abortController = params.abortController ?? new AbortController();
|
|
31
31
|
let suspended;
|
|
32
32
|
let bailed;
|
|
33
33
|
const startedAt = Date.now();
|
|
34
|
-
const { inputData, validationError } = await
|
|
34
|
+
const { inputData, validationError } = await chunkJAGQZZ43_cjs.validateStepInput({
|
|
35
35
|
prevOutput: typeof params.foreachIdx === "number" ? params.input?.[params.foreachIdx] : params.input,
|
|
36
36
|
step,
|
|
37
37
|
validateInputs: params.validateInputs ?? true
|
|
@@ -56,7 +56,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
56
56
|
throw validationError;
|
|
57
57
|
}
|
|
58
58
|
const stepResult = await step.execute(
|
|
59
|
-
|
|
59
|
+
chunkJAGQZZ43_cjs.createDeprecationProxy(
|
|
60
60
|
{
|
|
61
61
|
workflowId: params.workflowId,
|
|
62
62
|
runId,
|
|
@@ -71,9 +71,9 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
71
71
|
resumeData: params.resumeData,
|
|
72
72
|
suspendData: suspendDataToUse,
|
|
73
73
|
getInitData: () => stepResults?.input,
|
|
74
|
-
getStepResult:
|
|
74
|
+
getStepResult: chunkJAGQZZ43_cjs.getStepResult.bind(this, stepResults),
|
|
75
75
|
suspend: async (suspendPayload) => {
|
|
76
|
-
const { suspendData, validationError: validationError2 } = await
|
|
76
|
+
const { suspendData, validationError: validationError2 } = await chunkJAGQZZ43_cjs.validateStepSuspendData({
|
|
77
77
|
suspendData: suspendPayload,
|
|
78
78
|
step,
|
|
79
79
|
validateInputs: params.validateInputs ?? true
|
|
@@ -91,7 +91,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
91
91
|
abort: () => {
|
|
92
92
|
abortController?.abort();
|
|
93
93
|
},
|
|
94
|
-
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new
|
|
94
|
+
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new chunkJAGQZZ43_cjs.EventEmitterPubSub(params.emitter),
|
|
95
95
|
[chunkL3NKIMF5_cjs.STREAM_FORMAT_SYMBOL]: void 0,
|
|
96
96
|
// TODO
|
|
97
97
|
engine: {},
|
|
@@ -101,7 +101,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
paramName: "runCount",
|
|
104
|
-
deprecationMessage:
|
|
104
|
+
deprecationMessage: chunkJAGQZZ43_cjs.runCountDeprecationMessage,
|
|
105
105
|
logger: this.logger
|
|
106
106
|
}
|
|
107
107
|
)
|
|
@@ -151,7 +151,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
151
151
|
}
|
|
152
152
|
async evaluateConditions(params) {
|
|
153
153
|
const { step, stepResults, runId, requestContext, retryCount = 0 } = params;
|
|
154
|
-
const abortController = new AbortController();
|
|
154
|
+
const abortController = params.abortController ?? new AbortController();
|
|
155
155
|
const ee = new EventEmitter__default.default();
|
|
156
156
|
const results = await Promise.all(
|
|
157
157
|
step.conditions.map((condition) => {
|
|
@@ -199,7 +199,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
199
199
|
iterationCount
|
|
200
200
|
}) {
|
|
201
201
|
return condition(
|
|
202
|
-
|
|
202
|
+
chunkJAGQZZ43_cjs.createDeprecationProxy(
|
|
203
203
|
{
|
|
204
204
|
workflowId,
|
|
205
205
|
runId,
|
|
@@ -210,7 +210,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
210
210
|
retryCount,
|
|
211
211
|
resumeData,
|
|
212
212
|
getInitData: () => stepResults?.input,
|
|
213
|
-
getStepResult:
|
|
213
|
+
getStepResult: chunkJAGQZZ43_cjs.getStepResult.bind(this, stepResults),
|
|
214
214
|
bail: (_result) => {
|
|
215
215
|
throw new Error("Not implemented");
|
|
216
216
|
},
|
|
@@ -219,7 +219,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
219
219
|
abort: () => {
|
|
220
220
|
abortController?.abort();
|
|
221
221
|
},
|
|
222
|
-
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new
|
|
222
|
+
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new chunkJAGQZZ43_cjs.EventEmitterPubSub(emitter),
|
|
223
223
|
[chunkL3NKIMF5_cjs.STREAM_FORMAT_SYMBOL]: void 0,
|
|
224
224
|
// TODO
|
|
225
225
|
engine: {},
|
|
@@ -230,7 +230,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
230
230
|
},
|
|
231
231
|
{
|
|
232
232
|
paramName: "runCount",
|
|
233
|
-
deprecationMessage:
|
|
233
|
+
deprecationMessage: chunkJAGQZZ43_cjs.runCountDeprecationMessage,
|
|
234
234
|
logger: this.logger
|
|
235
235
|
}
|
|
236
236
|
)
|
|
@@ -238,7 +238,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
238
238
|
}
|
|
239
239
|
async resolveSleep(params) {
|
|
240
240
|
const { step, stepResults, runId, requestContext, retryCount = 0 } = params;
|
|
241
|
-
const abortController = new AbortController();
|
|
241
|
+
const abortController = params.abortController ?? new AbortController();
|
|
242
242
|
const ee = new EventEmitter__default.default();
|
|
243
243
|
if (step.duration) {
|
|
244
244
|
return step.duration;
|
|
@@ -248,7 +248,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
248
248
|
}
|
|
249
249
|
try {
|
|
250
250
|
return await step.fn(
|
|
251
|
-
|
|
251
|
+
chunkJAGQZZ43_cjs.createDeprecationProxy(
|
|
252
252
|
{
|
|
253
253
|
workflowId: params.workflowId,
|
|
254
254
|
runId,
|
|
@@ -262,7 +262,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
262
262
|
retryCount,
|
|
263
263
|
resumeData: params.resumeData,
|
|
264
264
|
getInitData: () => stepResults?.input,
|
|
265
|
-
getStepResult:
|
|
265
|
+
getStepResult: chunkJAGQZZ43_cjs.getStepResult.bind(this, stepResults),
|
|
266
266
|
suspend: async (_suspendPayload) => {
|
|
267
267
|
throw new Error("Not implemented");
|
|
268
268
|
},
|
|
@@ -274,7 +274,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
274
274
|
},
|
|
275
275
|
// TODO
|
|
276
276
|
writer: void 0,
|
|
277
|
-
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new
|
|
277
|
+
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new chunkJAGQZZ43_cjs.EventEmitterPubSub(ee),
|
|
278
278
|
[chunkL3NKIMF5_cjs.STREAM_FORMAT_SYMBOL]: void 0,
|
|
279
279
|
// TODO
|
|
280
280
|
engine: {},
|
|
@@ -284,7 +284,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
284
284
|
},
|
|
285
285
|
{
|
|
286
286
|
paramName: "runCount",
|
|
287
|
-
deprecationMessage:
|
|
287
|
+
deprecationMessage: chunkJAGQZZ43_cjs.runCountDeprecationMessage,
|
|
288
288
|
logger: this.logger
|
|
289
289
|
}
|
|
290
290
|
)
|
|
@@ -296,7 +296,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
296
296
|
}
|
|
297
297
|
async resolveSleepUntil(params) {
|
|
298
298
|
const { step, stepResults, runId, requestContext, retryCount = 0 } = params;
|
|
299
|
-
const abortController = new AbortController();
|
|
299
|
+
const abortController = params.abortController ?? new AbortController();
|
|
300
300
|
const ee = new EventEmitter__default.default();
|
|
301
301
|
if (step.date) {
|
|
302
302
|
return step.date.getTime() - Date.now();
|
|
@@ -306,7 +306,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
306
306
|
}
|
|
307
307
|
try {
|
|
308
308
|
const result = await step.fn(
|
|
309
|
-
|
|
309
|
+
chunkJAGQZZ43_cjs.createDeprecationProxy(
|
|
310
310
|
{
|
|
311
311
|
workflowId: params.workflowId,
|
|
312
312
|
runId,
|
|
@@ -320,7 +320,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
320
320
|
retryCount,
|
|
321
321
|
resumeData: params.resumeData,
|
|
322
322
|
getInitData: () => stepResults?.input,
|
|
323
|
-
getStepResult:
|
|
323
|
+
getStepResult: chunkJAGQZZ43_cjs.getStepResult.bind(this, stepResults),
|
|
324
324
|
suspend: async (_suspendPayload) => {
|
|
325
325
|
throw new Error("Not implemented");
|
|
326
326
|
},
|
|
@@ -332,7 +332,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
332
332
|
},
|
|
333
333
|
// TODO
|
|
334
334
|
writer: void 0,
|
|
335
|
-
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new
|
|
335
|
+
[chunkL3NKIMF5_cjs.PUBSUB_SYMBOL]: this.mastra?.pubsub ?? new chunkJAGQZZ43_cjs.EventEmitterPubSub(ee),
|
|
336
336
|
[chunkL3NKIMF5_cjs.STREAM_FORMAT_SYMBOL]: void 0,
|
|
337
337
|
// TODO
|
|
338
338
|
engine: {},
|
|
@@ -342,7 +342,7 @@ var StepExecutor = class extends chunkDGV2FWB4_cjs.MastraBase {
|
|
|
342
342
|
},
|
|
343
343
|
{
|
|
344
344
|
paramName: "runCount",
|
|
345
|
-
deprecationMessage:
|
|
345
|
+
deprecationMessage: chunkJAGQZZ43_cjs.runCountDeprecationMessage,
|
|
346
346
|
logger: this.logger
|
|
347
347
|
}
|
|
348
348
|
)
|
|
@@ -928,10 +928,52 @@ async function processWorkflowSleepUntil({
|
|
|
928
928
|
// src/workflows/evented/workflow-event-processor/index.ts
|
|
929
929
|
var WorkflowEventProcessor = class extends EventProcessor {
|
|
930
930
|
stepExecutor;
|
|
931
|
+
// Map of runId -> AbortController for active workflow runs
|
|
932
|
+
abortControllers = /* @__PURE__ */ new Map();
|
|
933
|
+
// Map of child runId -> parent runId for tracking nested workflows
|
|
934
|
+
parentChildRelationships = /* @__PURE__ */ new Map();
|
|
931
935
|
constructor({ mastra }) {
|
|
932
936
|
super({ mastra });
|
|
933
937
|
this.stepExecutor = new StepExecutor({ mastra });
|
|
934
938
|
}
|
|
939
|
+
/**
|
|
940
|
+
* Get or create an AbortController for a workflow run
|
|
941
|
+
*/
|
|
942
|
+
getOrCreateAbortController(runId) {
|
|
943
|
+
let controller = this.abortControllers.get(runId);
|
|
944
|
+
if (!controller) {
|
|
945
|
+
controller = new AbortController();
|
|
946
|
+
this.abortControllers.set(runId, controller);
|
|
947
|
+
}
|
|
948
|
+
return controller;
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Cancel a workflow run and all its nested child workflows
|
|
952
|
+
*/
|
|
953
|
+
cancelRunAndChildren(runId) {
|
|
954
|
+
const controller = this.abortControllers.get(runId);
|
|
955
|
+
if (controller) {
|
|
956
|
+
controller.abort();
|
|
957
|
+
}
|
|
958
|
+
for (const [childRunId, parentRunId] of this.parentChildRelationships.entries()) {
|
|
959
|
+
if (parentRunId === runId) {
|
|
960
|
+
this.cancelRunAndChildren(childRunId);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Clean up abort controller and relationships when a workflow completes.
|
|
966
|
+
* Also cleans up any orphaned child entries that reference this run as parent.
|
|
967
|
+
*/
|
|
968
|
+
cleanupRun(runId) {
|
|
969
|
+
this.abortControllers.delete(runId);
|
|
970
|
+
this.parentChildRelationships.delete(runId);
|
|
971
|
+
for (const [childRunId, parentRunId] of this.parentChildRelationships.entries()) {
|
|
972
|
+
if (parentRunId === runId) {
|
|
973
|
+
this.parentChildRelationships.delete(childRunId);
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
}
|
|
935
977
|
__registerMastra(mastra) {
|
|
936
978
|
super.__registerMastra(mastra);
|
|
937
979
|
this.stepExecutor.__registerMastra(mastra);
|
|
@@ -963,6 +1005,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
963
1005
|
});
|
|
964
1006
|
}
|
|
965
1007
|
async processWorkflowCancel({ workflowId, runId }) {
|
|
1008
|
+
this.cancelRunAndChildren(runId);
|
|
966
1009
|
const storage = this.mastra.getStorage();
|
|
967
1010
|
const currentState = await storage?.loadWorkflowSnapshot({
|
|
968
1011
|
workflowName: workflowId,
|
|
@@ -998,6 +1041,10 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
998
1041
|
stepResults,
|
|
999
1042
|
requestContext
|
|
1000
1043
|
}) {
|
|
1044
|
+
this.getOrCreateAbortController(runId);
|
|
1045
|
+
if (parentWorkflow?.runId) {
|
|
1046
|
+
this.parentChildRelationships.set(runId, parentWorkflow.runId);
|
|
1047
|
+
}
|
|
1001
1048
|
const existingRun = await this.mastra.getStorage()?.getWorkflowRunById({ runId, workflowName: workflow.id });
|
|
1002
1049
|
const resourceId = existingRun?.resourceId;
|
|
1003
1050
|
await this.mastra.getStorage()?.persistWorkflowSnapshot({
|
|
@@ -1068,6 +1115,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1068
1115
|
}
|
|
1069
1116
|
async processWorkflowEnd(args) {
|
|
1070
1117
|
const { resumeSteps, prevResult, resumeData, parentWorkflow, activeSteps, requestContext, runId, timeTravel } = args;
|
|
1118
|
+
this.cleanupRun(runId);
|
|
1071
1119
|
if (parentWorkflow) {
|
|
1072
1120
|
await this.mastra.pubsub.publish("workflows", {
|
|
1073
1121
|
type: "workflow.step.end",
|
|
@@ -1143,6 +1191,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1143
1191
|
requestContext,
|
|
1144
1192
|
timeTravel
|
|
1145
1193
|
} = args;
|
|
1194
|
+
this.cleanupRun(runId);
|
|
1146
1195
|
await this.mastra.getStorage()?.updateWorkflowState({
|
|
1147
1196
|
workflowName: workflowId,
|
|
1148
1197
|
runId,
|
|
@@ -1430,7 +1479,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1430
1479
|
workflowName: step.step.id,
|
|
1431
1480
|
runId
|
|
1432
1481
|
}) ?? { context: {} };
|
|
1433
|
-
const timeTravelParams =
|
|
1482
|
+
const timeTravelParams = chunkJAGQZZ43_cjs.createTimeTravelExecutionParams({
|
|
1434
1483
|
steps: timeTravel.steps.slice(1),
|
|
1435
1484
|
inputData: timeTravel.inputData,
|
|
1436
1485
|
resumeData: timeTravel.resumeData,
|
|
@@ -1521,7 +1570,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1521
1570
|
for (const [key, value] of Object.entries(requestContext)) {
|
|
1522
1571
|
rc.set(key, value);
|
|
1523
1572
|
}
|
|
1524
|
-
const { resumeData: timeTravelResumeData, validationError: timeTravelResumeValidationError } = await
|
|
1573
|
+
const { resumeData: timeTravelResumeData, validationError: timeTravelResumeValidationError } = await chunkJAGQZZ43_cjs.validateStepResumeData({
|
|
1525
1574
|
resumeData: timeTravel?.stepResults[step.step.id]?.status === "suspended" ? timeTravel?.resumeData : void 0,
|
|
1526
1575
|
step: step.step
|
|
1527
1576
|
});
|
|
@@ -1536,6 +1585,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1536
1585
|
} else if (resumeSteps?.length > 0 && resumeSteps?.[0] === step.step.id) {
|
|
1537
1586
|
resumeDataToUse = resumeData;
|
|
1538
1587
|
}
|
|
1588
|
+
const abortController = this.getOrCreateAbortController(runId);
|
|
1539
1589
|
const stepResult = await this.stepExecutor.execute({
|
|
1540
1590
|
workflowId,
|
|
1541
1591
|
step: step.step,
|
|
@@ -1549,7 +1599,8 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
1549
1599
|
resumeData: resumeDataToUse,
|
|
1550
1600
|
retryCount,
|
|
1551
1601
|
foreachIdx: step.type === "foreach" ? executionPath[1] : void 0,
|
|
1552
|
-
validateInputs: workflow.options.validateInputs
|
|
1602
|
+
validateInputs: workflow.options.validateInputs,
|
|
1603
|
+
abortController
|
|
1553
1604
|
});
|
|
1554
1605
|
requestContext = Object.fromEntries(rc.entries());
|
|
1555
1606
|
if (stepResult.status === "bailed") {
|
|
@@ -2038,7 +2089,7 @@ var WorkflowEventProcessor = class extends EventProcessor {
|
|
|
2038
2089
|
|
|
2039
2090
|
// src/workflows/evented/workflow.ts
|
|
2040
2091
|
function cloneWorkflow(workflow, opts) {
|
|
2041
|
-
const wf = new
|
|
2092
|
+
const wf = new chunkJAGQZZ43_cjs.Workflow({
|
|
2042
2093
|
id: opts.id,
|
|
2043
2094
|
inputSchema: workflow.inputSchema,
|
|
2044
2095
|
outputSchema: workflow.outputSchema,
|
|
@@ -2206,7 +2257,7 @@ function createWorkflow(params) {
|
|
|
2206
2257
|
executionEngine
|
|
2207
2258
|
});
|
|
2208
2259
|
}
|
|
2209
|
-
var EventedWorkflow = class extends
|
|
2260
|
+
var EventedWorkflow = class extends chunkJAGQZZ43_cjs.Workflow {
|
|
2210
2261
|
constructor(params) {
|
|
2211
2262
|
super(params);
|
|
2212
2263
|
this.engineType = "evented";
|
|
@@ -2236,7 +2287,9 @@ var EventedWorkflow = class extends chunkR5AJGM55_cjs.Workflow {
|
|
|
2236
2287
|
workflowStatus: run.workflowRunStatus,
|
|
2237
2288
|
stepResults: {}
|
|
2238
2289
|
});
|
|
2239
|
-
const workflowSnapshotInStorage = await this.getWorkflowRunExecutionResult(runIdToUse,
|
|
2290
|
+
const workflowSnapshotInStorage = await this.getWorkflowRunExecutionResult(runIdToUse, {
|
|
2291
|
+
withNestedWorkflows: false
|
|
2292
|
+
});
|
|
2240
2293
|
if (!workflowSnapshotInStorage && shouldPersistSnapshot) {
|
|
2241
2294
|
await this.mastra?.getStorage()?.persistWorkflowSnapshot({
|
|
2242
2295
|
workflowName: this.id,
|
|
@@ -2263,11 +2316,30 @@ var EventedWorkflow = class extends chunkR5AJGM55_cjs.Workflow {
|
|
|
2263
2316
|
return run;
|
|
2264
2317
|
}
|
|
2265
2318
|
};
|
|
2266
|
-
var EventedRun = class extends
|
|
2319
|
+
var EventedRun = class extends chunkJAGQZZ43_cjs.Run {
|
|
2267
2320
|
constructor(params) {
|
|
2268
2321
|
super(params);
|
|
2269
2322
|
this.serializedStepGraph = params.serializedStepGraph;
|
|
2270
2323
|
}
|
|
2324
|
+
/**
|
|
2325
|
+
* Set up abort signal handler to publish workflow.cancel event when abortController.abort() is called.
|
|
2326
|
+
* This ensures consistent cancellation behavior whether abort() is called directly or via cancel().
|
|
2327
|
+
*/
|
|
2328
|
+
setupAbortHandler() {
|
|
2329
|
+
const abortHandler = () => {
|
|
2330
|
+
this.mastra?.pubsub.publish("workflows", {
|
|
2331
|
+
type: "workflow.cancel",
|
|
2332
|
+
runId: this.runId,
|
|
2333
|
+
data: {
|
|
2334
|
+
workflowId: this.workflowId,
|
|
2335
|
+
runId: this.runId
|
|
2336
|
+
}
|
|
2337
|
+
}).catch((err) => {
|
|
2338
|
+
console.error(`Failed to publish workflow.cancel for runId ${this.runId}:`, err);
|
|
2339
|
+
});
|
|
2340
|
+
};
|
|
2341
|
+
this.abortController.signal.addEventListener("abort", abortHandler, { once: true });
|
|
2342
|
+
}
|
|
2271
2343
|
async start({
|
|
2272
2344
|
inputData,
|
|
2273
2345
|
initialState,
|
|
@@ -2306,6 +2378,7 @@ var EventedRun = class extends chunkR5AJGM55_cjs.Run {
|
|
|
2306
2378
|
if (!this.mastra?.pubsub) {
|
|
2307
2379
|
throw new Error("Mastra instance with pubsub is required for workflow execution");
|
|
2308
2380
|
}
|
|
2381
|
+
this.setupAbortHandler();
|
|
2309
2382
|
const result = await this.executionEngine.execute({
|
|
2310
2383
|
workflowId: this.workflowId,
|
|
2311
2384
|
runId: this.runId,
|
|
@@ -2421,6 +2494,7 @@ var EventedRun = class extends chunkR5AJGM55_cjs.Run {
|
|
|
2421
2494
|
if (!this.mastra?.pubsub) {
|
|
2422
2495
|
throw new Error("Mastra instance with pubsub is required for workflow execution");
|
|
2423
2496
|
}
|
|
2497
|
+
this.setupAbortHandler();
|
|
2424
2498
|
const executionResultPromise = this.executionEngine.execute({
|
|
2425
2499
|
workflowId: this.workflowId,
|
|
2426
2500
|
runId: this.runId,
|
|
@@ -2484,14 +2558,7 @@ var EventedRun = class extends chunkR5AJGM55_cjs.Run {
|
|
|
2484
2558
|
status: "canceled"
|
|
2485
2559
|
}
|
|
2486
2560
|
});
|
|
2487
|
-
|
|
2488
|
-
type: "workflow.cancel",
|
|
2489
|
-
runId: this.runId,
|
|
2490
|
-
data: {
|
|
2491
|
-
workflowId: this.workflowId,
|
|
2492
|
-
runId: this.runId
|
|
2493
|
-
}
|
|
2494
|
-
});
|
|
2561
|
+
this.abortController.abort();
|
|
2495
2562
|
}
|
|
2496
2563
|
};
|
|
2497
2564
|
|
|
@@ -2539,7 +2606,7 @@ function isExecutableStep(step) {
|
|
|
2539
2606
|
}
|
|
2540
2607
|
|
|
2541
2608
|
// src/workflows/evented/execution-engine.ts
|
|
2542
|
-
var EventedExecutionEngine = class extends
|
|
2609
|
+
var EventedExecutionEngine = class extends chunkJAGQZZ43_cjs.ExecutionEngine {
|
|
2543
2610
|
eventProcessor;
|
|
2544
2611
|
constructor({
|
|
2545
2612
|
mastra,
|
|
@@ -2622,7 +2689,7 @@ var EventedExecutionEngine = class extends chunkR5AJGM55_cjs.ExecutionEngine {
|
|
|
2622
2689
|
await ack?.();
|
|
2623
2690
|
await pubsub.unsubscribe("workflows-finish", finishCb);
|
|
2624
2691
|
if (event.type === "workflow.fail" && event.data.stepResults) {
|
|
2625
|
-
event.data.stepResults =
|
|
2692
|
+
event.data.stepResults = chunkJAGQZZ43_cjs.hydrateSerializedStepErrors(event.data.stepResults);
|
|
2626
2693
|
}
|
|
2627
2694
|
resolve(event.data);
|
|
2628
2695
|
return;
|
|
@@ -2682,5 +2749,5 @@ exports.cloneStep = cloneStep;
|
|
|
2682
2749
|
exports.cloneWorkflow = cloneWorkflow;
|
|
2683
2750
|
exports.createStep = createStep;
|
|
2684
2751
|
exports.createWorkflow = createWorkflow;
|
|
2685
|
-
//# sourceMappingURL=chunk-
|
|
2686
|
-
//# sourceMappingURL=chunk-
|
|
2752
|
+
//# sourceMappingURL=chunk-6CG7IY57.cjs.map
|
|
2753
|
+
//# sourceMappingURL=chunk-6CG7IY57.cjs.map
|