// src/evals/quality.evaluator.ts
import { Evaluator, S, latencyMetric, percentScore, tokenCountMetric } from '@m4trix/evals';
const inputSchema = S.Struct({ prompt: S.String });
const outputSchema = S.Struct({ expectedMinScore: S.Number });
export const qualityEvaluator = Evaluator.use({
name: 'withModel',
resolve: () => ({ model: 'demo-model' }),
})
.define({
name: 'quality',
displayName: 'Quality',
inputSchema,
outputSchema,
scoreSchema: S.Struct({ scores: S.Array(S.Unknown) }),
tags: ['smoke'],
})
.evaluate(async ({ input, output }) => {
const startedAt = Date.now();
const value = Math.min(100, input.prompt.length * 3);
return {
scores: [
percentScore.make(
{ value },
{ definePassed: (data) => data.value >= (output?.expectedMinScore ?? 50) },
),
],
metrics: [
tokenCountMetric.make({ input: input.prompt.length, output: 20 }),
latencyMetric.make({ ms: Date.now() - startedAt }),
],
};
});