Completeness Evaluation
This example demonstrates how to use Mastra’s Completeness metric to evaluate how thoroughly responses cover key elements from the input.
Overview
The example shows how to:
- Configure the Completeness metric
- Evaluate responses for element coverage
- Analyze coverage scores
- Handle different coverage scenarios
Setup
Dependencies
Import the necessary dependencies:
src/index.ts
import { CompletenessMetric } from '@mastra/evals/nlp';
Metric Configuration
Set up the Completeness metric:
src/index.ts
const metric = new CompletenessMetric();
Example Usage
Complete Coverage Example
Evaluate a response that covers all elements:
src/index.ts
const text1 = 'The primary colors are red, blue, and yellow.';
const reference1 = 'The primary colors are red, blue, and yellow.';
console.log('Example 1 - Complete Coverage:');
console.log('Text:', text1);
console.log('Reference:', reference1);
const result1 = await metric.measure(reference1, text1);
console.log('Metric Result:', {
score: result1.score,
info: {
missingElements: result1.info.missingElements,
elementCounts: result1.info.elementCounts,
},
});
// Example Output:
// Metric Result: { score: 1, info: { missingElements: [], elementCounts: { input: 8, output: 8 } } }
Partial Coverage Example
Evaluate a response that covers some elements:
src/index.ts
const text2 = 'The primary colors are red and blue.';
const reference2 = 'The primary colors are red, blue, and yellow.';
console.log('Example 2 - Partial Coverage:');
console.log('Text:', text2);
console.log('Reference:', reference2);
const result2 = await metric.measure(reference2, text2);
console.log('Metric Result:', {
score: result2.score,
info: {
missingElements: result2.info.missingElements,
elementCounts: result2.info.elementCounts,
},
});
// Example Output:
// Metric Result: { score: 0.875, info: { missingElements: ['yellow'], elementCounts: { input: 8, output: 7 } } }
Minimal Coverage Example
Evaluate a response that covers very few elements:
src/index.ts
const text3 = 'The seasons include summer.';
const reference3 = 'The four seasons are spring, summer, fall, and winter.';
console.log('Example 3 - Minimal Coverage:');
console.log('Text:', text3);
console.log('Reference:', reference3);
const result3 = await metric.measure(reference3, text3);
console.log('Metric Result:', {
score: result3.score,
info: {
missingElements: result3.info.missingElements,
elementCounts: result3.info.elementCounts,
},
});
// Example Output:
// Metric Result: {
// score: 0.3333333333333333,
// info: {
// missingElements: [ 'four', 'spring', 'winter', 'be', 'fall', 'and' ],
// elementCounts: { input: 9, output: 4 }
// }
// }
Understanding the Results
The metric provides:
-
A score between 0 and 1:
- 1.0: Complete coverage - contains all input elements
- 0.7-0.9: High coverage - includes most key elements
- 0.4-0.6: Partial coverage - contains some key elements
- 0.1-0.3: Low coverage - missing most key elements
- 0.0: No coverage - output lacks all input elements
-
Detailed analysis of:
- List of input elements found
- List of output elements matched
- Missing elements from input
- Element count comparison
View Example on GitHub