MastraScorer
The MastraScorer
class is the base class for all scorers in Mastra. It provides a standard .run()
method for evaluating input/output pairs and supports multi-step scoring workflows with preprocess → analyze → generateScore → generateReason execution flow.
Note: Most users should use createScorer
to create scorer instances. Direct instantiation of MastraScorer
is not recommended.
How to Get a MastraScorer Instance
Use the createScorer
factory function, which returns a MastraScorer
instance:
const scorer = createScorer({
name: "My Custom Scorer",
description: "Evaluates responses based on custom criteria"
})
.generateScore(({ run, results }) => {
// scoring logic
return 0.85;
});
// scorer is now a MastraScorer instance
.run() Method
The .run()
method is the primary way to execute your scorer and evaluate input/output pairs. It processes the data through your defined steps (preprocess → analyze → generateScore → generateReason) and returns a comprehensive result object with the score, reasoning, and intermediate results.
const result = await scorer.run({
input: "What is machine learning?",
output: "Machine learning is a subset of artificial intelligence...",
runId: "optional-run-id",
runtimeContext: { /* optional context */ }
});
.run() Input
input:
output:
runId:
runtimeContext:
.run() Returns
runId:
score:
reason:
preprocessStepResult:
analyzeStepResult:
preprocessPrompt:
analyzePrompt:
generateScorePrompt:
generateReasonPrompt:
Step Execution Flow
When you call .run()
, the MastraScorer executes the defined steps in this order:
- preprocess (optional) - Extracts or transforms data
- analyze (optional) - Processes the input/output and preprocessed data
- generateScore (required) - Computes the numerical score
- generateReason (optional) - Provides explanation for the score
Each step receives the results from previous steps, allowing you to build complex evaluation pipelines.
Usage Example
const scorer = createScorer({
name: "Quality Scorer",
description: "Evaluates response quality"
})
.preprocess(({ run }) => {
// Extract key information
return { wordCount: run.output.split(' ').length };
})
.analyze(({ run, results }) => {
// Analyze the response
const hasSubstance = results.preprocessStepResult.wordCount > 10;
return { hasSubstance };
})
.generateScore(({ results }) => {
// Calculate score
return results.analyzeStepResult.hasSubstance ? 1.0 : 0.0;
})
.generateReason(({ score, results }) => {
// Explain the score
const wordCount = results.preprocessStepResult.wordCount;
return `Score: ${score}. Response has ${wordCount} words.`;
});
// Use the scorer
const result = await scorer.run({
input: "What is machine learning?",
output: "Machine learning is a subset of artificial intelligence..."
});
console.log(result.score); // 1.0
console.log(result.reason); // "Score: 1.0. Response has 12 words."
Integration
MastraScorer instances can be used for agents and workflow steps
See the createScorer reference for detailed information on defining custom scoring logic.