oh-my-knowledge 0.18.0 → 0.20.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.
Files changed (113) hide show
  1. package/README.md +596 -326
  2. package/README.zh.md +917 -0
  3. package/dist/src/analysis/failure-clusterer.d.ts +96 -0
  4. package/dist/src/analysis/failure-clusterer.d.ts.map +1 -0
  5. package/dist/src/analysis/failure-clusterer.js +298 -0
  6. package/dist/src/analysis/failure-clusterer.js.map +1 -0
  7. package/dist/src/analysis/sample-diagnostics.d.ts +78 -0
  8. package/dist/src/analysis/sample-diagnostics.d.ts.map +1 -0
  9. package/dist/src/analysis/sample-diagnostics.js +259 -0
  10. package/dist/src/analysis/sample-diagnostics.js.map +1 -0
  11. package/dist/src/analysis/saturation.d.ts +85 -0
  12. package/dist/src/analysis/saturation.d.ts.map +1 -0
  13. package/dist/src/analysis/saturation.js +174 -0
  14. package/dist/src/analysis/saturation.js.map +1 -0
  15. package/dist/src/cli.js +772 -18
  16. package/dist/src/cli.js.map +1 -1
  17. package/dist/src/eval-core/bootstrap.d.ts +72 -0
  18. package/dist/src/eval-core/bootstrap.d.ts.map +1 -0
  19. package/dist/src/eval-core/bootstrap.js +174 -0
  20. package/dist/src/eval-core/bootstrap.js.map +1 -0
  21. package/dist/src/eval-core/evaluation-execution.d.ts +15 -1
  22. package/dist/src/eval-core/evaluation-execution.d.ts.map +1 -1
  23. package/dist/src/eval-core/evaluation-execution.js +37 -3
  24. package/dist/src/eval-core/evaluation-execution.js.map +1 -1
  25. package/dist/src/eval-core/evaluation-job.d.ts +10 -2
  26. package/dist/src/eval-core/evaluation-job.d.ts.map +1 -1
  27. package/dist/src/eval-core/evaluation-job.js +9 -1
  28. package/dist/src/eval-core/evaluation-job.js.map +1 -1
  29. package/dist/src/eval-core/evaluation-reporting.d.ts.map +1 -1
  30. package/dist/src/eval-core/evaluation-reporting.js +90 -0
  31. package/dist/src/eval-core/evaluation-reporting.js.map +1 -1
  32. package/dist/src/eval-core/schema.d.ts.map +1 -1
  33. package/dist/src/eval-core/schema.js +69 -0
  34. package/dist/src/eval-core/schema.js.map +1 -1
  35. package/dist/src/eval-core/verdict.d.ts +74 -0
  36. package/dist/src/eval-core/verdict.d.ts.map +1 -0
  37. package/dist/src/eval-core/verdict.js +283 -0
  38. package/dist/src/eval-core/verdict.js.map +1 -0
  39. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts +16 -3
  40. package/dist/src/eval-workflows/each-evaluation-workflow.d.ts.map +1 -1
  41. package/dist/src/eval-workflows/each-evaluation-workflow.js +10 -2
  42. package/dist/src/eval-workflows/each-evaluation-workflow.js.map +1 -1
  43. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +17 -1
  44. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
  45. package/dist/src/eval-workflows/evaluation-pipeline.js +45 -3
  46. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
  47. package/dist/src/eval-workflows/run-evaluation.d.ts +23 -2
  48. package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
  49. package/dist/src/eval-workflows/run-evaluation.js +104 -4
  50. package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
  51. package/dist/src/grading/assertions.d.ts +16 -0
  52. package/dist/src/grading/assertions.d.ts.map +1 -1
  53. package/dist/src/grading/assertions.js +385 -111
  54. package/dist/src/grading/assertions.js.map +1 -1
  55. package/dist/src/grading/debias-validate.d.ts +84 -0
  56. package/dist/src/grading/debias-validate.d.ts.map +1 -0
  57. package/dist/src/grading/debias-validate.js +173 -0
  58. package/dist/src/grading/debias-validate.js.map +1 -0
  59. package/dist/src/grading/gold-cli.d.ts +88 -0
  60. package/dist/src/grading/gold-cli.d.ts.map +1 -0
  61. package/dist/src/grading/gold-cli.js +251 -0
  62. package/dist/src/grading/gold-cli.js.map +1 -0
  63. package/dist/src/grading/gold-dataset.d.ts +73 -0
  64. package/dist/src/grading/gold-dataset.d.ts.map +1 -0
  65. package/dist/src/grading/gold-dataset.js +161 -0
  66. package/dist/src/grading/gold-dataset.js.map +1 -0
  67. package/dist/src/grading/human-gold.d.ts +102 -0
  68. package/dist/src/grading/human-gold.d.ts.map +1 -0
  69. package/dist/src/grading/human-gold.js +188 -0
  70. package/dist/src/grading/human-gold.js.map +1 -0
  71. package/dist/src/grading/index.d.ts +27 -2
  72. package/dist/src/grading/index.d.ts.map +1 -1
  73. package/dist/src/grading/index.js +36 -18
  74. package/dist/src/grading/index.js.map +1 -1
  75. package/dist/src/grading/judge.d.ts +65 -2
  76. package/dist/src/grading/judge.d.ts.map +1 -1
  77. package/dist/src/grading/judge.js +280 -23
  78. package/dist/src/grading/judge.js.map +1 -1
  79. package/dist/src/inputs/eval-config.js +19 -0
  80. package/dist/src/inputs/eval-config.js.map +1 -1
  81. package/dist/src/observability/{production-analyzer.d.ts → skill-health-analyzer.d.ts} +24 -2
  82. package/dist/src/observability/skill-health-analyzer.d.ts.map +1 -0
  83. package/dist/src/observability/{production-analyzer.js → skill-health-analyzer.js} +61 -6
  84. package/dist/src/observability/skill-health-analyzer.js.map +1 -0
  85. package/dist/src/observability/trace-adapter.d.ts.map +1 -1
  86. package/dist/src/observability/trace-adapter.js +27 -1
  87. package/dist/src/observability/trace-adapter.js.map +1 -1
  88. package/dist/src/renderer/html-renderer.d.ts.map +1 -1
  89. package/dist/src/renderer/html-renderer.js +40 -6
  90. package/dist/src/renderer/html-renderer.js.map +1 -1
  91. package/dist/src/renderer/layout.d.ts.map +1 -1
  92. package/dist/src/renderer/layout.js +138 -4
  93. package/dist/src/renderer/layout.js.map +1 -1
  94. package/dist/src/renderer/skill-health-renderer.d.ts +2 -2
  95. package/dist/src/renderer/skill-health-renderer.d.ts.map +1 -1
  96. package/dist/src/renderer/skill-health-renderer.js +39 -4
  97. package/dist/src/renderer/skill-health-renderer.js.map +1 -1
  98. package/dist/src/renderer/summary.d.ts +28 -1
  99. package/dist/src/renderer/summary.d.ts.map +1 -1
  100. package/dist/src/renderer/summary.js +322 -8
  101. package/dist/src/renderer/summary.js.map +1 -1
  102. package/dist/src/renderer/table.d.ts.map +1 -1
  103. package/dist/src/renderer/table.js +63 -2
  104. package/dist/src/renderer/table.js.map +1 -1
  105. package/dist/src/server/report-server.d.ts +2 -1
  106. package/dist/src/server/report-server.d.ts.map +1 -1
  107. package/dist/src/server/report-server.js +397 -2
  108. package/dist/src/server/report-server.js.map +1 -1
  109. package/dist/src/types.d.ts +247 -0
  110. package/dist/src/types.d.ts.map +1 -1
  111. package/package.json +24 -6
  112. package/dist/src/observability/production-analyzer.d.ts.map +0 -1
  113. package/dist/src/observability/production-analyzer.js.map +0 -1
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Verdict — turn a finished report into a one-line ship/no-ship recommendation.
3
+ *
4
+ * Why this exists
5
+ * ---------------
6
+ * v0.21 makes the data trustworthy. v0.22 closes the last mile: senior
7
+ * engineers' #1 complaint is "the report has all the right numbers but I
8
+ * still need 30 minutes to read it before I can decide". This module
9
+ * aggregates the four data sources omk already produces — Bootstrap CI on
10
+ * the pairwise diff, three-layer CI gate, saturation curve, and (when
11
+ * available) Krippendorff α against gold — and emits one of four verdicts:
12
+ *
13
+ * - **PROGRESS** diff CI shows real positive shift, no layer regressed
14
+ * - **CAUTIOUS** positive shift but at least one layer broke its gate,
15
+ * or saturation says we're not powered yet
16
+ * - **REGRESS** diff CI clearly negative, or a layer dropped a gate
17
+ * - **NOISE** diff CI contains 0 — can't separate from noise
18
+ * - **UNDERPOWERED** N too small / saturation low confidence and no signal
19
+ * - **SOLO** single-variant report; nothing to compare against
20
+ *
21
+ * The output is intentionally text-template-driven so the same rule engine
22
+ * powers both `omk bench verdict` (CLI, terse) and the HTML report's
23
+ * top-of-page "verdict pill" (Phase v0.22.2). Both surfaces must agree.
24
+ *
25
+ * Subjectivity caveat: the ship recommendation is rule-based, not statistically
26
+ * proven optimal. Each rule's source (NIST AI 800-3 / Krippendorff thresholds /
27
+ * empirical) is documented inline so users can audit and override.
28
+ */
29
+ import { evaluateCiGates } from './ci-gates.js';
30
+ /**
31
+ * Compute a verdict for a finished report. Pure function — no I/O.
32
+ */
33
+ export function computeVerdict(report, options = {}) {
34
+ const { ciThreshold = 3.5, triviallySmallDiff = 0.1 } = options;
35
+ const variants = report.meta?.variants ?? [];
36
+ const summary = report.summary ?? {};
37
+ const sampleCount = report.meta?.sampleCount ?? 0;
38
+ if (variants.length < 2) {
39
+ // Single-variant — no comparison possible. Just report whether the variant
40
+ // passes its own three-layer gate.
41
+ const gate = evaluateCiGates(summary, ciThreshold);
42
+ return {
43
+ level: 'SOLO',
44
+ headline: gate.allPass
45
+ ? `SOLO · single variant, three-layer gate PASS @ threshold ${ciThreshold}`
46
+ : `SOLO · single variant, three-layer gate FAIL — see ci output`,
47
+ rationale: {
48
+ layerWinners: gate.lines.join('; '),
49
+ sampleSize: `N=${sampleCount}`,
50
+ },
51
+ variants,
52
+ };
53
+ }
54
+ // Build per-pair verdicts. Convention: variants[0] = control, [1..] = treatments.
55
+ // If --bootstrap wasn't used, pairComparisons is empty — synthesize pseudo-pairs
56
+ // (without CI) so verdictForPair's no-CI path runs and we still get a verdict.
57
+ const explicitPairs = report.meta?.pairComparisons ?? [];
58
+ const pairs = explicitPairs.length > 0
59
+ ? explicitPairs
60
+ : variants.slice(1).map((treatment) => ({ control: variants[0], treatment }));
61
+ const perPair = pairs.map((p) => verdictForPair(p, summary, sampleCount, report, ciThreshold, triviallySmallDiff));
62
+ // Worst-case roll-up: REGRESS dominates, then CAUTIOUS, then NOISE/UNDERPOWERED, then PROGRESS.
63
+ const order = ['REGRESS', 'CAUTIOUS', 'UNDERPOWERED', 'NOISE', 'PROGRESS'];
64
+ let topLevel = 'PROGRESS';
65
+ for (const level of order) {
66
+ if (perPair.some((p) => p.level === level)) {
67
+ topLevel = level;
68
+ break;
69
+ }
70
+ }
71
+ // Single representative pair for the top-level rationale (the worst one).
72
+ const representative = perPair.find((p) => p.level === topLevel) ?? perPair[0];
73
+ const significance = representative
74
+ ? formatSignificance(representative)
75
+ : 'no pairwise comparison available — was --bootstrap used?';
76
+ const layerWinners = formatLayerWinners(summary, variants);
77
+ const sampleSize = formatSampleSize(report);
78
+ const judgeAgreement = formatJudgeAgreement(report);
79
+ const shipRecommendation = recommendation(topLevel, perPair);
80
+ return {
81
+ level: topLevel,
82
+ headline: representative
83
+ ? `${topLevel} · ${representative.treatment} vs ${representative.control}: ${representative.headline}`
84
+ : `${topLevel} · ${variants.length} variants`,
85
+ perPair,
86
+ rationale: {
87
+ significance,
88
+ layerWinners,
89
+ sampleSize,
90
+ judgeAgreement,
91
+ shipRecommendation,
92
+ },
93
+ variants,
94
+ };
95
+ }
96
+ /**
97
+ * Per-pair verdict logic. The hierarchy of checks matters:
98
+ * 1. If a layer regressed past the gate → REGRESS (loudest signal).
99
+ * 2. If diff CI is clearly negative → REGRESS.
100
+ * 3. If diff CI contains 0:
101
+ * - and N is too small / saturation low confidence → UNDERPOWERED
102
+ * - otherwise → NOISE
103
+ * 4. If diff CI is positive but trivially small → CAUTIOUS.
104
+ * 5. If diff CI is positive AND treatment passes all gates → PROGRESS.
105
+ * 6. If diff CI is positive but treatment broke a gate → CAUTIOUS.
106
+ */
107
+ function verdictForPair(pair, summary, sampleCount, report, ciThreshold, triviallySmallDiff) {
108
+ const { control, treatment, diffBootstrapCI: diff } = pair;
109
+ // Layer-gate check: did any layer fall below threshold for either variant?
110
+ const cGate = evaluateCiGates({ [control]: summary[control] }, ciThreshold);
111
+ const tGate = evaluateCiGates({ [treatment]: summary[treatment] }, ciThreshold);
112
+ // No bootstrap CI available → fall back to point-estimate diff comparison.
113
+ if (!diff) {
114
+ const cMean = avgComposite(summary[control]);
115
+ const tMean = avgComposite(summary[treatment]);
116
+ const delta = tMean - cMean;
117
+ const headline = `Δ=${delta >= 0 ? '+' : ''}${delta.toFixed(2)} (no CI; rerun with --bootstrap)`;
118
+ if (Math.abs(delta) < triviallySmallDiff) {
119
+ return { control, treatment, level: 'NOISE', headline };
120
+ }
121
+ return {
122
+ control,
123
+ treatment,
124
+ level: delta > 0 ? 'CAUTIOUS' : 'REGRESS',
125
+ headline,
126
+ };
127
+ }
128
+ const headlineCore = `Δ=${diff.estimate >= 0 ? '+' : ''}${diff.estimate} CI=[${diff.low}, ${diff.high}]`;
129
+ if (!diff.significant) {
130
+ // Diff CI contains 0. Distinguish "underpowered (saturation says: more samples needed)"
131
+ // from "noise (saturation says: we're saturated, the effect just isn't there)".
132
+ const satVerdict = report.variance?.saturation?.verdicts?.[treatment];
133
+ const underpowered = sampleCount < 20 ||
134
+ (satVerdict && !satVerdict.saturated && satVerdict.confidence !== 'high');
135
+ if (underpowered) {
136
+ return {
137
+ control,
138
+ treatment,
139
+ level: 'UNDERPOWERED',
140
+ headline: `${headlineCore} · N=${sampleCount} likely too small`,
141
+ };
142
+ }
143
+ return { control, treatment, level: 'NOISE', headline: `${headlineCore} · CI spans 0` };
144
+ }
145
+ // diff is significant.
146
+ if (diff.estimate < 0) {
147
+ return { control, treatment, level: 'REGRESS', headline: `${headlineCore} · treatment loses` };
148
+ }
149
+ // diff > 0 and significant. Did treatment break a gate?
150
+ if (!tGate.allPass) {
151
+ return {
152
+ control,
153
+ treatment,
154
+ level: 'CAUTIOUS',
155
+ headline: `${headlineCore} · gain real, but treatment broke layer gate`,
156
+ };
157
+ }
158
+ // Trivially small diff?
159
+ if (diff.estimate < triviallySmallDiff) {
160
+ return {
161
+ control,
162
+ treatment,
163
+ level: 'CAUTIOUS',
164
+ headline: `${headlineCore} · significant but practically tiny`,
165
+ };
166
+ }
167
+ // Did control break a gate? Then treatment winning isn't surprising — flag.
168
+ if (!cGate.allPass) {
169
+ return {
170
+ control,
171
+ treatment,
172
+ level: 'PROGRESS',
173
+ headline: `${headlineCore} · treatment recovers from broken control`,
174
+ };
175
+ }
176
+ return { control, treatment, level: 'PROGRESS', headline: `${headlineCore} · clean win` };
177
+ }
178
+ function avgComposite(s) {
179
+ if (!s)
180
+ return 0;
181
+ if (typeof s.avgCompositeScore === 'number')
182
+ return s.avgCompositeScore;
183
+ // Fallback: average of the three layers when composite isn't on the summary.
184
+ const layers = [s.avgFactScore, s.avgBehaviorScore, s.avgJudgeScore].filter((x) => typeof x === 'number');
185
+ if (layers.length === 0)
186
+ return 0;
187
+ return layers.reduce((a, b) => a + b, 0) / layers.length;
188
+ }
189
+ function formatSignificance(p) {
190
+ return `${p.level} · ${p.headline}`;
191
+ }
192
+ function formatLayerWinners(summary, variants) {
193
+ if (variants.length < 2)
194
+ return '—';
195
+ const control = variants[0];
196
+ const treatment = variants[1];
197
+ const c = summary[control];
198
+ const t = summary[treatment];
199
+ if (!c || !t)
200
+ return '—';
201
+ const layers = [
202
+ ['fact', c.avgFactScore, t.avgFactScore],
203
+ ['behavior', c.avgBehaviorScore, t.avgBehaviorScore],
204
+ ['judge', c.avgJudgeScore, t.avgJudgeScore],
205
+ ];
206
+ return layers
207
+ .map(([name, cv, tv]) => {
208
+ if (typeof cv !== 'number' || typeof tv !== 'number')
209
+ return `${name}=—`;
210
+ const delta = tv - cv;
211
+ const sign = delta >= 0 ? '+' : '';
212
+ return `${name}: ${cv.toFixed(2)}→${tv.toFixed(2)} (${sign}${delta.toFixed(2)})`;
213
+ })
214
+ .join(', ');
215
+ }
216
+ function formatSampleSize(report) {
217
+ const n = report.meta?.sampleCount ?? 0;
218
+ const sat = report.variance?.saturation?.verdicts;
219
+ if (!sat)
220
+ return `N=${n}`;
221
+ const variants = report.meta?.variants ?? [];
222
+ const treatment = variants[1];
223
+ const v = treatment ? sat[treatment] : undefined;
224
+ if (!v)
225
+ return `N=${n}`;
226
+ if (v.saturated)
227
+ return `N=${n}, saturated @ N=${v.atN ?? '?'} (${v.confidence} confidence)`;
228
+ return `N=${n}, not yet saturated (${v.confidence} confidence)`;
229
+ }
230
+ function formatJudgeAgreement(report) {
231
+ const a = report.meta?.humanAgreement;
232
+ if (!a)
233
+ return undefined;
234
+ const verdict = Number.isNaN(a.alpha)
235
+ ? 'undefined'
236
+ : a.alpha >= 0.8 ? 'strong'
237
+ : a.alpha >= 0.667 ? 'acceptable'
238
+ : a.alpha >= 0.4 ? 'weak'
239
+ : 'poor';
240
+ return `α=${Number.isNaN(a.alpha) ? 'NaN' : a.alpha.toFixed(2)} (${verdict}) vs gold ${a.goldAnnotator}`;
241
+ }
242
+ function recommendation(level, _perPair) {
243
+ switch (level) {
244
+ case 'PROGRESS':
245
+ return 'SHIP — treatment is significantly better and passes all layer gates.';
246
+ case 'CAUTIOUS':
247
+ return 'INVESTIGATE — the gain is real but at least one warning fired (broken gate, trivially small, or partial recovery). Do not ship blind.';
248
+ case 'REGRESS':
249
+ return 'DO NOT SHIP — treatment regresses. Check the worst layer and re-run with the fix.';
250
+ case 'NOISE':
251
+ return 'NO CALL — diff CI spans 0. The data shows no separable effect at this N.';
252
+ case 'UNDERPOWERED':
253
+ return 'INSUFFICIENT DATA — increase N (try 2× current) and re-run.';
254
+ case 'SOLO':
255
+ return 'ADD A CONTROL — single-variant report. Re-run with --control baseline --treatment <name>.';
256
+ }
257
+ }
258
+ /**
259
+ * Plain-text formatter for `omk bench verdict <id>`. Stays under 6 lines per the
260
+ * v0.22 spec — one verdict + four rationale bullets + one ship recommendation.
261
+ */
262
+ export function formatVerdictText(result, options = {}) {
263
+ const lines = [];
264
+ lines.push(`Verdict: ${result.level}`);
265
+ lines.push(` ${result.headline}`);
266
+ if (result.rationale.layerWinners)
267
+ lines.push(` Layer winners: ${result.rationale.layerWinners}`);
268
+ if (result.rationale.sampleSize)
269
+ lines.push(` Sample size: ${result.rationale.sampleSize}`);
270
+ if (result.rationale.judgeAgreement)
271
+ lines.push(` Judge α: ${result.rationale.judgeAgreement}`);
272
+ if (result.rationale.shipRecommendation)
273
+ lines.push(` ${result.rationale.shipRecommendation}`);
274
+ if (options.verbose && result.perPair && result.perPair.length > 1) {
275
+ lines.push('');
276
+ lines.push(' Per-pair detail:');
277
+ for (const p of result.perPair) {
278
+ lines.push(` ${p.level}: ${p.treatment} vs ${p.control} — ${p.headline}`);
279
+ }
280
+ }
281
+ return lines.join('\n');
282
+ }
283
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../../src/eval-core/verdict.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Artifact, JobStore, ProgressCallback, Report, VariantResult, VariantSummary } from '../types.js';
1
+ import type { Artifact, JobStore, ProgressCallback, Report, VarianceData, VariantResult, VariantSummary } from '../types.js';
2
2
  interface RunSingleEvaluationOptions {
3
3
  samplesPath: string;
4
4
  skillDir: string;
@@ -17,6 +17,12 @@ interface RunSingleEvaluationOptions {
17
17
  skipPreflight: boolean;
18
18
  mcpConfig?: string;
19
19
  verbose: boolean;
20
+ /** Forwarded to grade(); each sample × dimension is judged N times. Default 1. */
21
+ judgeRepeat?: number;
22
+ /** Forwarded to pipeline; ≥ 2 entries triggers multi-judge ensemble mode. */
23
+ judgeModels?: import('../types.js').JudgeConfig[];
24
+ /** v0.21 Phase 3a length-debias toggle. Default true. */
25
+ lengthDebias?: boolean;
20
26
  }
21
27
  export interface EachSkillResult {
22
28
  name: string;
@@ -24,6 +30,8 @@ export interface EachSkillResult {
24
30
  samplesPath: string;
25
31
  sampleCount: number;
26
32
  summary: Record<string, VariantSummary>;
33
+ /** repeat > 1 时由 runMultiple 聚合,承载三层独立 variance + t 检验 */
34
+ variance?: VarianceData;
27
35
  results: Array<{
28
36
  sample_id: string;
29
37
  variants: {
@@ -32,7 +40,7 @@ export interface EachSkillResult {
32
40
  };
33
41
  }>;
34
42
  }
35
- export declare function buildEachReport({ skillDir, skillEntries, skillResults, model, judgeModel, noJudge, executorName, judgeExecutorName, project, owner, tags, dryRun, concurrency, timeoutMs, totalCostUSD, }: {
43
+ export declare function buildEachReport({ skillDir, skillEntries, skillResults, model, judgeModel, noJudge, executorName, judgeExecutorName, project, owner, tags, dryRun, concurrency, timeoutMs, totalCostUSD, repeat, }: {
36
44
  skillDir: string;
37
45
  skillEntries: Array<{
38
46
  name: string;
@@ -52,6 +60,7 @@ export declare function buildEachReport({ skillDir, skillEntries, skillResults,
52
60
  concurrency: number;
53
61
  timeoutMs?: number;
54
62
  totalCostUSD: number;
63
+ repeat?: number;
55
64
  }): {
56
65
  report: {
57
66
  id: string;
@@ -91,7 +100,7 @@ export declare function buildEachReport({ skillDir, skillEntries, skillResults,
91
100
  };
92
101
  job: import("../types.js").EvaluationJob;
93
102
  };
94
- export declare function executeEachEvaluationRuns({ skillDir, skillEntries, model, judgeModel, outputDir, project, owner, tags, noJudge, concurrency, timeoutMs, executorName, judgeExecutorName, jobStore, persistJob, onProgress, onSkillProgress, skipPreflight, mcpConfig, verbose, runSingleEvaluation, }: {
103
+ export declare function executeEachEvaluationRuns({ skillDir, skillEntries, model, judgeModel, outputDir, project, owner, tags, noJudge, concurrency, timeoutMs, executorName, judgeExecutorName, jobStore, persistJob, onProgress, onSkillProgress, skipPreflight, mcpConfig, verbose, repeat, judgeRepeat, judgeModels, lengthDebias, runSingleEvaluation, }: {
95
104
  skillDir: string;
96
105
  skillEntries: Array<{
97
106
  name: string;
@@ -121,6 +130,10 @@ export declare function executeEachEvaluationRuns({ skillDir, skillEntries, mode
121
130
  skipPreflight?: boolean;
122
131
  mcpConfig?: string;
123
132
  verbose?: boolean;
133
+ repeat?: number;
134
+ judgeRepeat?: number;
135
+ judgeModels?: import('../types.js').JudgeConfig[];
136
+ lengthDebias?: boolean;
124
137
  runSingleEvaluation: (options: RunSingleEvaluationOptions) => Promise<{
125
138
  report: Report;
126
139
  filePath: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"each-evaluation-workflow.d.ts","sourceRoot":"","sources":["../../../src/eval-workflows/each-evaluation-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"each-evaluation-workflow.d.ts","sourceRoot":"","sources":["../../../src/eval-workflows/each-evaluation-workflow.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ function buildEachOverview(skillResults, totalCostUSD) {
22
22
  }),
23
23
  };
24
24
  }
25
- export function buildEachReport({ skillDir, skillEntries, skillResults, model, judgeModel, noJudge, executorName, judgeExecutorName, project, owner, tags, dryRun, concurrency, timeoutMs, totalCostUSD, }) {
25
+ export function buildEachReport({ skillDir, skillEntries, skillResults, model, judgeModel, noJudge, executorName, judgeExecutorName, project, owner, tags, dryRun, concurrency, timeoutMs, totalCostUSD, repeat, }) {
26
26
  const runId = generateRunId(['each']);
27
27
  const request = buildEvaluationRequest({
28
28
  samplesPath: '',
@@ -47,6 +47,8 @@ export function buildEachReport({ skillDir, skillEntries, skillResults, model, j
47
47
  project,
48
48
  owner,
49
49
  tags,
50
+ repeat,
51
+ each: true,
50
52
  });
51
53
  const createdAt = new Date().toISOString();
52
54
  const { run: initialRun, startedAt } = createEvaluationRun(runId, createdAt);
@@ -90,7 +92,7 @@ export function buildEachReport({ skillDir, skillEntries, skillResults, model, j
90
92
  job,
91
93
  };
92
94
  }
93
- export async function executeEachEvaluationRuns({ skillDir, skillEntries, model, judgeModel, outputDir = DEFAULT_OUTPUT_DIR, project, owner, tags, noJudge = false, concurrency = 1, timeoutMs, executorName, judgeExecutorName, jobStore = null, persistJob = true, onProgress = null, onSkillProgress = null, skipPreflight = false, mcpConfig, verbose = false, runSingleEvaluation, }) {
95
+ export async function executeEachEvaluationRuns({ skillDir, skillEntries, model, judgeModel, outputDir = DEFAULT_OUTPUT_DIR, project, owner, tags, noJudge = false, concurrency = 1, timeoutMs, executorName, judgeExecutorName, jobStore = null, persistJob = true, onProgress = null, onSkillProgress = null, skipPreflight = false, mcpConfig, verbose = false, repeat, judgeRepeat, judgeModels, lengthDebias, runSingleEvaluation, }) {
94
96
  const skillResults = [];
95
97
  let totalCostUSD = 0;
96
98
  for (let i = 0; i < skillEntries.length; i++) {
@@ -122,6 +124,9 @@ export async function executeEachEvaluationRuns({ skillDir, skillEntries, model,
122
124
  skipPreflight: skipPreflight || i > 0,
123
125
  mcpConfig,
124
126
  verbose,
127
+ judgeRepeat,
128
+ judgeModels,
129
+ lengthDebias,
125
130
  });
126
131
  skillResults.push({
127
132
  name: entry.name,
@@ -132,6 +137,8 @@ export async function executeEachEvaluationRuns({ skillDir, skillEntries, model,
132
137
  baseline: report.summary.baseline || {},
133
138
  skill: (report.summary.skill || {}),
134
139
  },
140
+ // runMultiple 跑 N 次后会把 variance 挂到 report.variance,这里搬到 skill 维度
141
+ ...(report.variance ? { variance: report.variance } : {}),
135
142
  results: report.results.map((result) => ({
136
143
  sample_id: result.sample_id,
137
144
  variants: {
@@ -159,6 +166,7 @@ export async function executeEachEvaluationRuns({ skillDir, skillEntries, model,
159
166
  concurrency,
160
167
  timeoutMs,
161
168
  totalCostUSD,
169
+ repeat,
162
170
  });
163
171
  const filePath = persistReport(combinedReport, outputDir);
164
172
  const resolvedJobStore = persistJob ? (jobStore ?? createFileJobStore(DEFAULT_JOBS_DIR)) : null;
@@ -1 +1 @@
1
- {"version":3,"file":"each-evaluation-workflow.js","sourceRoot":"","sources":["../../../src/eval-workflows/each-evaluation-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"each-evaluation-workflow.js","sourceRoot":"","sources":["../../../src/eval-workflows/each-evaluation-workflow.ts"],"names":[],"mappings":"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"}
@@ -30,8 +30,24 @@ export interface EvaluationPipelineOptions {
30
30
  existingResults?: Record<string, Record<string, VariantResult>>;
31
31
  requires?: DependencyRequirements;
32
32
  layeredStats?: boolean;
33
+ /** 透传到 meta.request.repeat */
34
+ repeat?: number;
35
+ /** 透传到 meta.request.each */
36
+ each?: boolean;
37
+ /** 透传到 meta.request.judgeRepeat 与 grade(),每条 sample × dimension judge N 次 */
38
+ judgeRepeat?: number;
39
+ /** Multi-judge ensemble configs (≥ 2 entries triggers ensemble mode). */
40
+ judgeModels?: import('../types.js').JudgeConfig[];
41
+ /** --bootstrap. */
42
+ bootstrap?: boolean;
43
+ /** --bootstrap-samples N. Default 1000. */
44
+ bootstrapSamples?: number;
45
+ /** v0.21 length-debias toggle. Default true; --no-debias-length flips to false. */
46
+ lengthDebias?: boolean;
47
+ /** v0.22 — hard budget caps. */
48
+ budget?: import('../types.js').EvalBudget;
33
49
  }
34
- export declare function executeEvaluationPipeline({ samplesPath, skillDir, samples, tasks, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, executor, judgeExecutor, outputDir, project, owner, tags, blind, concurrency, timeoutMs, noCache, jobStore, persistJob, onProgress, skipPreflight, verbose, retry, existingResults, requires, layeredStats, }: EvaluationPipelineOptions): Promise<{
50
+ export declare function executeEvaluationPipeline({ samplesPath, skillDir, samples, tasks, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, executor, judgeExecutor, outputDir, project, owner, tags, blind, concurrency, timeoutMs, noCache, jobStore, persistJob, onProgress, skipPreflight, verbose, retry, existingResults, requires, layeredStats, repeat, each, judgeRepeat, judgeModels, bootstrap, bootstrapSamples, lengthDebias, budget, }: EvaluationPipelineOptions): Promise<{
35
51
  report: Report;
36
52
  filePath: string | null;
37
53
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation-pipeline.d.ts","sourceRoot":"","sources":["../../../src/eval-workflows/evaluation-pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAgBjF,OAAO,KAAK,EACV,QAAQ,EAIR,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,aAAa,EACd,MAAM,aAAa,CAAC;AAuLrB,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,UAAU,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,yBAAyB,CAAC,EAC9C,WAAW,EACX,QAAQ,EACR,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,SAA8B,EAC9B,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAa,EACb,WAAe,EACf,SAAS,EACT,OAAe,EACf,QAAe,EACf,UAAiB,EACjB,UAAiB,EACjB,aAAqB,EACrB,OAAe,EACf,KAAS,EACT,eAAe,EACf,QAAQ,EACR,YAAoB,GACrB,EAAE,yBAAyB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA4FlF"}
1
+ {"version":3,"file":"evaluation-pipeline.d.ts","sourceRoot":"","sources":["../../../src/eval-workflows/evaluation-pipeline.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { preflightDependencies, formatDependencyErrors } from '../eval-core/depe
9
9
  import { createFileJobStore, DEFAULT_JOBS_DIR, } from '../server/job-store.js';
10
10
  import { stopAllServers } from '../inputs/mcp-resolver.js';
11
11
  import { buildEvaluationRequest, createFailedJob, createEvaluationRun, createQueuedJob, createSucceededJob, finalizeEvaluationRun, markJobRunning, failEvaluationRun, } from '../eval-core/evaluation-job.js';
12
- async function initializeEvaluationRunState({ samplesPath, skillDir, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, concurrency, timeoutMs, noCache, blind, project, owner, tags, runId, jobStore, persistJob, }) {
12
+ async function initializeEvaluationRunState({ samplesPath, skillDir, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, concurrency, timeoutMs, noCache, blind, project, owner, tags, runId, jobStore, persistJob, repeat, each, judgeRepeat, judgeModels, bootstrap, bootstrapSamples, lengthDebias, budget, }) {
13
13
  const request = buildEvaluationRequest({
14
14
  samplesPath,
15
15
  skillDir,
@@ -27,6 +27,14 @@ async function initializeEvaluationRunState({ samplesPath, skillDir, artifacts,
27
27
  project,
28
28
  owner,
29
29
  tags,
30
+ repeat,
31
+ each,
32
+ judgeRepeat,
33
+ judgeModels,
34
+ bootstrap,
35
+ bootstrapSamples,
36
+ lengthDebias,
37
+ budget,
30
38
  });
31
39
  const createdAt = new Date().toISOString();
32
40
  const { run: initialRun, startedAt } = createEvaluationRun(runId, createdAt);
@@ -118,7 +126,7 @@ function finalizeEvaluationReport({ report, results, artifacts, variantNames, bl
118
126
  }
119
127
  return report;
120
128
  }
121
- export async function executeEvaluationPipeline({ samplesPath, skillDir, samples, tasks, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, executor, judgeExecutor, outputDir = DEFAULT_OUTPUT_DIR, project, owner, tags, blind = false, concurrency = 1, timeoutMs, noCache = false, jobStore = null, persistJob = true, onProgress = null, skipPreflight = false, verbose = false, retry = 0, existingResults, requires, layeredStats = false, }) {
129
+ export async function executeEvaluationPipeline({ samplesPath, skillDir, samples, tasks, artifacts, model, judgeModel, noJudge, executorName, judgeExecutorName, executor, judgeExecutor, outputDir = DEFAULT_OUTPUT_DIR, project, owner, tags, blind = false, concurrency = 1, timeoutMs, noCache = false, jobStore = null, persistJob = true, onProgress = null, skipPreflight = false, verbose = false, retry = 0, existingResults, requires, layeredStats = false, repeat, each, judgeRepeat, judgeModels, bootstrap, bootstrapSamples, lengthDebias = true, budget, }) {
122
130
  const variantNames = artifacts.map((artifact) => artifact.name);
123
131
  const runState = await initializeEvaluationRunState({
124
132
  samplesPath,
@@ -139,6 +147,14 @@ export async function executeEvaluationPipeline({ samplesPath, skillDir, samples
139
147
  runId: generateRunId(variantNames),
140
148
  jobStore,
141
149
  persistJob,
150
+ repeat,
151
+ each,
152
+ judgeRepeat,
153
+ judgeModels,
154
+ bootstrap,
155
+ bootstrapSamples,
156
+ lengthDebias,
157
+ budget,
142
158
  });
143
159
  try {
144
160
  if (!skipPreflight) {
@@ -155,7 +171,22 @@ export async function executeEvaluationPipeline({ samplesPath, skillDir, samples
155
171
  throw new Error(formatDependencyErrors(depResult.missing));
156
172
  }
157
173
  }
158
- const { results, totalCostUSD, skipped } = await executeTasks({
174
+ // Pre-build a per-executor map for ensemble judges. Each unique executor name
175
+ // gets one ExecutorFn, shared across all judges using that executor. The default
176
+ // judge's executor is also included so single-judge fallbacks have it available.
177
+ let judgeExecutors;
178
+ if (judgeModels && judgeModels.length >= 2) {
179
+ const { createExecutor } = await import('../executors/index.js');
180
+ judgeExecutors = {};
181
+ const seen = new Set();
182
+ for (const jc of judgeModels) {
183
+ if (!seen.has(jc.executor)) {
184
+ seen.add(jc.executor);
185
+ judgeExecutors[jc.executor] = createExecutor(jc.executor);
186
+ }
187
+ }
188
+ }
189
+ const { results, totalCostUSD, skipped, budgetExhausted } = await executeTasks({
159
190
  tasks,
160
191
  executor,
161
192
  judgeExecutor,
@@ -170,6 +201,11 @@ export async function executeEvaluationPipeline({ samplesPath, skillDir, samples
170
201
  onProgress,
171
202
  retry,
172
203
  existingResults,
204
+ judgeRepeat,
205
+ judgeModels,
206
+ judgeExecutors,
207
+ lengthDebias,
208
+ budget,
173
209
  });
174
210
  if (skipped > 0 && onProgress) {
175
211
  onProgress({ phase: 'done', completed: tasks.length, total: tasks.length, sample_id: '', variant: '', skipped: true });
@@ -199,6 +235,12 @@ export async function executeEvaluationPipeline({ samplesPath, skillDir, samples
199
235
  blind,
200
236
  samplesPath,
201
237
  });
238
+ if (budgetExhausted) {
239
+ report.meta.budgetExhausted = true;
240
+ }
241
+ if (budget) {
242
+ report.meta.budget = budget;
243
+ }
202
244
  const filePath = persistReport(report, outputDir);
203
245
  await persistSuccessfulJob(runState, job);
204
246
  return { report, filePath };