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
@@ -2,13 +2,26 @@
2
2
  * Mixed grading: deterministic assertions + LLM judge + multi-dimensional scoring.
3
3
  */
4
4
  import { ASYNC_ASSERTION_TYPES, ratioToScore, runAssertions, runAsyncAssertions } from './assertions.js';
5
- import { buildTraceSummary, llmJudge } from './judge.js';
5
+ import { buildTraceSummary, llmJudgeEnsemble, llmJudgeRepeat } from './judge.js';
6
6
  import { computeLayeredScores } from './layered-scores.js';
7
7
  /**
8
8
  * Grade a model output against a sample's criteria.
9
9
  */
10
- export async function grade({ output, sample, executor, judgeModel, allowLlmJudge = true, execMetrics = {}, samplesDir = '.' }) {
10
+ export async function grade({ output, sample, executor, judgeModel, allowLlmJudge = true, execMetrics = {}, samplesDir = '.', judgeRepeat = 1, judgeModels, judgeExecutors, lengthDebias = true }) {
11
+ const useEnsemble = !!(judgeModels && judgeModels.length >= 2);
11
12
  const results = { compositeScore: 0 };
13
+ // Helper: build a config-keyed function for ensemble pathway. Each judge config
14
+ // names an executor by string; we resolve via judgeExecutors map (set by pipeline).
15
+ const executorByName = (name) => {
16
+ if (judgeExecutors && judgeExecutors[name])
17
+ return judgeExecutors[name];
18
+ // Fallback: pipeline only set up the default judgeExecutor and didn't pre-create
19
+ // others. Tests / single-judge callers hit this path. Use the passed-in executor
20
+ // for the base case; ensemble with mismatched executor names should fail loudly.
21
+ if (!judgeExecutors)
22
+ return executor;
23
+ throw new Error(`No executor registered for "${name}"; pipeline must populate judgeExecutors`);
24
+ };
12
25
  // 1. Deterministic assertions (pure, no LLM)
13
26
  const allAssertions = sample.assertions || [];
14
27
  const syncAssertions = allAssertions.filter((a) => !ASYNC_ASSERTION_TYPES.has(a.type));
@@ -54,14 +67,10 @@ export async function grade({ output, sample, executor, judgeModel, allowLlmJudg
54
67
  // Multi-dimensional scoring
55
68
  results.dimensions = {};
56
69
  for (const [dim, rubric] of Object.entries(sample.dimensions)) {
57
- results.dimensions[dim] = await llmJudge({
58
- output,
59
- rubric,
60
- prompt: sample.prompt,
61
- executor,
62
- model: judgeModel,
63
- traceSummary,
64
- });
70
+ const dimOptions = { output, rubric, prompt: sample.prompt, executor, model: judgeModel, traceSummary, lengthDebias };
71
+ results.dimensions[dim] = useEnsemble
72
+ ? await llmJudgeEnsemble(dimOptions, judgeModels, executorByName, judgeRepeat)
73
+ : await llmJudgeRepeat(dimOptions, judgeRepeat);
65
74
  }
66
75
  const dimValues = Object.values(results.dimensions);
67
76
  const dimScores = dimValues.map((d) => d.score).filter((s) => s > 0);
@@ -75,16 +84,25 @@ export async function grade({ output, sample, executor, judgeModel, allowLlmJudg
75
84
  }
76
85
  else if (allowLlmJudge && sample.rubric) {
77
86
  // Single rubric scoring
78
- const judge = await llmJudge({
79
- output,
80
- rubric: sample.rubric,
81
- prompt: sample.prompt,
82
- executor,
83
- model: judgeModel,
84
- traceSummary,
85
- });
87
+ const rubricOptions = { output, rubric: sample.rubric, prompt: sample.prompt, executor, model: judgeModel, traceSummary, lengthDebias };
88
+ const judge = useEnsemble
89
+ ? await llmJudgeEnsemble(rubricOptions, judgeModels, executorByName, judgeRepeat)
90
+ : await llmJudgeRepeat(rubricOptions, judgeRepeat);
86
91
  results.llmScore = judge.score;
87
92
  results.llmReason = judge.reason;
93
+ if (judge.reasoning)
94
+ results.llmReasoning = judge.reasoning;
95
+ if (judge.scoreSamples && judge.scoreSamples.length > 1) {
96
+ results.llmScoreSamples = judge.scoreSamples;
97
+ results.llmScoreStddev = judge.scoreStddev;
98
+ if (judge.judgeFailureCount && judge.judgeFailureCount > 0) {
99
+ results.llmScoreFailures = judge.judgeFailureCount;
100
+ }
101
+ }
102
+ if (judge.ensemble) {
103
+ results.llmEnsemble = judge.ensemble;
104
+ results.llmAgreement = judge.agreement;
105
+ }
88
106
  results.judgeCostUSD = (results.judgeCostUSD || 0) + (judge.judgeCostUSD || 0);
89
107
  }
90
108
  // 3. Layered scores + composite
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/grading/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/grading/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
- import type { DimensionResult, ExecutorFn, ToolCallInfo, TurnInfo } from '../types.js';
1
+ import type { DimensionResult, ExecutorFn, JudgeAgreement, JudgeConfig, ToolCallInfo, TurnInfo } from '../types.js';
2
+ export declare function buildJudgePrompt(prompt: string, rubric: string, output: string, traceSummary: string | null, lengthDebias?: boolean): string;
3
+ /**
4
+ * Stable hash of the judge prompt template. Saved into ReportMeta.judgePromptHash so
5
+ * downstream readers can detect "the judge prompt changed between these two reports".
6
+ *
7
+ * `lengthDebias` defaults to true (v0.21+ default). Pass false when running under
8
+ * `--no-debias-length` so the hash matches historical v2-cot reports.
9
+ */
10
+ export declare function getJudgePromptHash(lengthDebias?: boolean): string;
2
11
  interface LlmJudgeOptions {
3
12
  output: string;
4
13
  rubric: string;
@@ -6,8 +15,62 @@ interface LlmJudgeOptions {
6
15
  executor: ExecutorFn;
7
16
  model: string;
8
17
  traceSummary?: string | null;
18
+ /**
19
+ * When true (default since v0.21), the judge prompt includes an explicit
20
+ * "length is not a quality signal" instruction. Pass false to fall back to
21
+ * the legacy v2-cot prompt — only useful for reproducing pre-v0.21 reports
22
+ * or running A/B comparisons inside `omk bench debias-validate length`.
23
+ */
24
+ lengthDebias?: boolean;
9
25
  }
10
26
  export declare function buildTraceSummary(turns?: TurnInfo[], toolCalls?: ToolCallInfo[]): string | null;
11
- export declare function llmJudge({ output, rubric, prompt, executor, model, traceSummary }: LlmJudgeOptions): Promise<DimensionResult>;
27
+ export declare function llmJudge({ output, rubric, prompt, executor, model, traceSummary, lengthDebias }: LlmJudgeOptions): Promise<DimensionResult>;
28
+ /**
29
+ * Judge a single (output, rubric) pair N times and aggregate. Returns mean score,
30
+ * stddev across runs, raw score samples, and the first-call reasoning (we keep one
31
+ * reasoning sample, not N — only the score distribution matters for stability).
32
+ *
33
+ * Calls run with bounded concurrency (JUDGE_REPEAT_CONCURRENCY) to amortize latency
34
+ * without burning rate limit. N=3 finishes in ~1 round-trip; N=10 in ~4. Cost is
35
+ * summed across all N calls. When N <= 1 this is equivalent to llmJudge() with
36
+ * scoreSamples = [score], scoreStddev = 0. The repeat value is clamped to >= 1
37
+ * here as well as at the CLI layer — library callers shouldn't see surprises.
38
+ *
39
+ * Failures: any call returning score=0 (non-JSON / executor error / parse error) is
40
+ * counted in `judgeFailureCount`. stddev is computed only over successful calls. If
41
+ * stddev is 0 but judgeFailureCount > 0, that's NOT "judge agreed perfectly" — it
42
+ * means most calls failed and one happened to succeed. Always inspect both fields.
43
+ */
44
+ export declare function llmJudgeRepeat(options: LlmJudgeOptions, repeat: number): Promise<DimensionResult>;
45
+ /** Format a JudgeConfig as "executor:model" identifier for reports / logs. */
46
+ export declare function judgeId(config: JudgeConfig): string;
47
+ /**
48
+ * Compute pairwise inter-judge agreement metrics across an ensemble. For N judges
49
+ * we get N*(N-1)/2 pairs; metrics are pairwise-averaged.
50
+ *
51
+ * Each judge contributes ONE score per sample (its mean if judge-repeat > 1). We
52
+ * then compute Pearson and mean-abs-diff over the N-judge × M-sample score matrix.
53
+ *
54
+ * NOTE: Within a single (sample × dimension) call, each judge gives ONE aggregated
55
+ * score. So `pairwise` here means "two judges' scores on this one sample". With a
56
+ * single sample point Pearson is undefined (need ≥ 2). For per-sample agreement we
57
+ * fall back to mean-abs-diff alone; Pearson kicks in at the report-aggregate level
58
+ * (across many samples).
59
+ */
60
+ export declare function computeJudgeAgreement(judgeScores: number[][]): JudgeAgreement;
61
+ /**
62
+ * Judge a single (output, rubric) pair with N judge models in parallel. Each judge
63
+ * may use a different executor (e.g. claude:opus + openai:gpt-4o + gemini:pro). Each
64
+ * judge can also be repeated `judgeRepeat` times — final per-judge score is its mean.
65
+ *
66
+ * Returns: aggregate DimensionResult (score = mean across judges; this is the "consensus"
67
+ * score), per-judge breakdown in `ensemble`, and agreement metrics in `agreement`.
68
+ *
69
+ * The aggregate score is the mean of per-judge scores. This is a defensible default
70
+ * but not the only choice — one could argue median (robust to outlier judges) or
71
+ * majority vote (if scores are categorical). Mean is what most papers report; we
72
+ * provide the raw ensemble so downstream can recompute.
73
+ */
74
+ export declare function llmJudgeEnsemble(options: LlmJudgeOptions, judges: JudgeConfig[], executorByName: (name: string) => ExecutorFn, judgeRepeat?: number): Promise<DimensionResult>;
12
75
  export {};
13
76
  //# sourceMappingURL=judge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../../src/grading/judge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvF,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,GAAG,IAAI,CA6C/F;AAED,wBAAsB,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAiDnI"}
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../../src/grading/judge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAuB,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkCzI,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,UAAO,GAClB,MAAM,CA8BR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,UAAO,GAAG,MAAM,CAO9D;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,GAAG,IAAI,CA6C/F;AAED,wBAAsB,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BjJ;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAmC1B;AAMD,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEnD;AAkCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,CA8B7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,EAAE,EACrB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAC5C,WAAW,SAAI,GACd,OAAO,CAAC,eAAe,CAAC,CAwD1B"}
@@ -1,3 +1,72 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * Judge prompt template version.
4
+ *
5
+ * - 'v2-cot' — legacy; CoT scoring without explicit length-debias instruction.
6
+ * Kept for `--no-debias-length` so users can reproduce historical
7
+ * reports byte-for-byte.
8
+ * - 'v3-cot-length' — adds a paragraph telling the judge that length is not a quality
9
+ * signal. Default since v0.21 Phase 3a (research consistently shows
10
+ * LLM judges over-weight verbosity; explicit instruction mitigates).
11
+ *
12
+ * Bump when the prompt's intent or structure changes meaningfully — reports tagged
13
+ * with the same hash are score-comparable; mismatched hashes mean "we changed how we
14
+ * ask the judge to think" and should not be compared blind.
15
+ */
16
+ const JUDGE_PROMPT_VERSION_DEBIAS_OFF = 'v2-cot';
17
+ const JUDGE_PROMPT_VERSION_DEBIAS_ON = 'v3-cot-length';
18
+ const JUDGE_SYSTEM_PROMPT = '你是一个严格的 AI 输出质量评审员。先逐条对照评分标准做推理,再给最终分数。只返回 JSON,不要其他内容。';
19
+ const LENGTH_DEBIAS_INSTRUCTION = [
20
+ '## 重要:长度不是质量信号',
21
+ '评分时聚焦内容实质与正确性。回答的篇幅、行文丰富度、结构复杂度本身不是质量指标 ——',
22
+ '简洁正确的回答不应因短而扣分;冗长但偏题或重复的回答不应因长而加分。',
23
+ '研究显示 LLM 评委容易隐性偏向更长的回答,请在打分前先警觉这一点。',
24
+ ].join('\n');
25
+ export function buildJudgePrompt(prompt, rubric, output, traceSummary, lengthDebias = true) {
26
+ const version = lengthDebias ? JUDGE_PROMPT_VERSION_DEBIAS_ON : JUDGE_PROMPT_VERSION_DEBIAS_OFF;
27
+ const traceSection = traceSummary
28
+ ? ['', '## Agent 执行过程', traceSummary, '', '请同时考虑执行过程的合理性(工具选择、步骤效率、错误恢复)。']
29
+ : [];
30
+ const debiasSection = lengthDebias ? ['', LENGTH_DEBIAS_INSTRUCTION] : [];
31
+ return [
32
+ `请对以下 AI 输出进行质量评分(template ${version})。`,
33
+ '',
34
+ '## 原始任务',
35
+ prompt,
36
+ '',
37
+ '## 评分标准',
38
+ rubric,
39
+ '',
40
+ '## AI 输出',
41
+ output,
42
+ ...traceSection,
43
+ ...debiasSection,
44
+ '',
45
+ '## 评分流程',
46
+ '1. 逐条对照评分标准,先做推理(reasoning):列出 AI 输出哪些点对应哪条标准,哪些缺失,哪些有歧义。',
47
+ '2. 基于推理给出最终分数(1-5 的整数)和简短理由。',
48
+ '',
49
+ '请返回 JSON(不要包含 markdown 代码块标记):',
50
+ '{"reasoning": "<对照标准的逐条推理>", "score": <1-5的整数>, "reason": "<最终结论的简短理由>"}',
51
+ '',
52
+ '评分标准:1=完全不达标, 2=部分涉及, 3=基本达标, 4=较好, 5=优秀',
53
+ ].join('\n');
54
+ }
55
+ /**
56
+ * Stable hash of the judge prompt template. Saved into ReportMeta.judgePromptHash so
57
+ * downstream readers can detect "the judge prompt changed between these two reports".
58
+ *
59
+ * `lengthDebias` defaults to true (v0.21+ default). Pass false when running under
60
+ * `--no-debias-length` so the hash matches historical v2-cot reports.
61
+ */
62
+ export function getJudgePromptHash(lengthDebias = true) {
63
+ const version = lengthDebias ? JUDGE_PROMPT_VERSION_DEBIAS_ON : JUDGE_PROMPT_VERSION_DEBIAS_OFF;
64
+ // Hash the template-shaping function source + the version tag together. We hash a
65
+ // deterministic stringified form of the template (with placeholder inputs) so any
66
+ // structural edit shows up.
67
+ const sample = buildJudgePrompt('<P>', '<R>', '<O>', '<T>', lengthDebias);
68
+ return createHash('sha256').update(version + '\n' + sample).digest('hex').slice(0, 12);
69
+ }
1
70
  function getErrorMessage(err) {
2
71
  return err instanceof Error ? err.message : String(err);
3
72
  }
@@ -47,31 +116,11 @@ export function buildTraceSummary(turns, toolCalls) {
47
116
  }
48
117
  return lines.join('\n');
49
118
  }
50
- export async function llmJudge({ output, rubric, prompt, executor, model, traceSummary }) {
51
- const traceSection = traceSummary
52
- ? ['', '## Agent 执行过程', traceSummary, '', '请同时考虑执行过程的合理性(工具选择、步骤效率、错误恢复)。']
53
- : [];
54
- const judgePrompt = [
55
- '请对以下 AI 输出进行质量评分。',
56
- '',
57
- '## 原始任务',
58
- prompt,
59
- '',
60
- '## 评分标准',
61
- rubric,
62
- '',
63
- '## AI 输出',
64
- output,
65
- ...traceSection,
66
- '',
67
- '请返回 JSON(不要包含 markdown 代码块标记):',
68
- '{"score": <1-5的整数>, "reason": "<简短理由>"}',
69
- '',
70
- '评分标准:1=完全不达标, 2=部分涉及, 3=基本达标, 4=较好, 5=优秀',
71
- ].join('\n');
119
+ export async function llmJudge({ output, rubric, prompt, executor, model, traceSummary, lengthDebias }) {
120
+ const judgePrompt = buildJudgePrompt(prompt, rubric, output, traceSummary || null, lengthDebias ?? true);
72
121
  const result = await executor({
73
122
  model,
74
- system: '你是一个严格的 AI 输出质量评审员。只返回 JSON,不要其他内容。',
123
+ system: JUDGE_SYSTEM_PROMPT,
75
124
  prompt: judgePrompt,
76
125
  });
77
126
  if (!result.ok)
@@ -87,6 +136,7 @@ export async function llmJudge({ output, rubric, prompt, executor, model, traceS
87
136
  return {
88
137
  score: Number(parsed.score) || 0,
89
138
  reason: String(parsed.reason || ''),
139
+ reasoning: parsed.reasoning ? String(parsed.reasoning) : undefined,
90
140
  judgeCostUSD: result.costUSD,
91
141
  };
92
142
  }
@@ -95,4 +145,211 @@ export async function llmJudge({ output, rubric, prompt, executor, model, traceS
95
145
  return { score: 0, reason: 'failed to parse judge response', judgeCostUSD: result.costUSD };
96
146
  }
97
147
  }
148
+ /**
149
+ * Max concurrent judge calls within a single sample × dimension. Each judge call
150
+ * is one API request; running N=3 sequentially means 3× latency, but going wide
151
+ * open risks hitting per-account RPM limits. 3 is a conservative middle ground —
152
+ * for N=3 (the common case) it's fully parallel; for N=10 it's 4 batches.
153
+ */
154
+ const JUDGE_REPEAT_CONCURRENCY = 3;
155
+ async function runInChunks(items, chunkSize, fn) {
156
+ const results = new Array(items);
157
+ for (let start = 0; start < items; start += chunkSize) {
158
+ const end = Math.min(start + chunkSize, items);
159
+ const batch = await Promise.all(Array.from({ length: end - start }, (_, k) => fn(start + k)));
160
+ for (let k = 0; k < batch.length; k++)
161
+ results[start + k] = batch[k];
162
+ }
163
+ return results;
164
+ }
165
+ /**
166
+ * Judge a single (output, rubric) pair N times and aggregate. Returns mean score,
167
+ * stddev across runs, raw score samples, and the first-call reasoning (we keep one
168
+ * reasoning sample, not N — only the score distribution matters for stability).
169
+ *
170
+ * Calls run with bounded concurrency (JUDGE_REPEAT_CONCURRENCY) to amortize latency
171
+ * without burning rate limit. N=3 finishes in ~1 round-trip; N=10 in ~4. Cost is
172
+ * summed across all N calls. When N <= 1 this is equivalent to llmJudge() with
173
+ * scoreSamples = [score], scoreStddev = 0. The repeat value is clamped to >= 1
174
+ * here as well as at the CLI layer — library callers shouldn't see surprises.
175
+ *
176
+ * Failures: any call returning score=0 (non-JSON / executor error / parse error) is
177
+ * counted in `judgeFailureCount`. stddev is computed only over successful calls. If
178
+ * stddev is 0 but judgeFailureCount > 0, that's NOT "judge agreed perfectly" — it
179
+ * means most calls failed and one happened to succeed. Always inspect both fields.
180
+ */
181
+ export async function llmJudgeRepeat(options, repeat) {
182
+ const n = Math.max(1, Math.floor(repeat) || 1);
183
+ if (n === 1) {
184
+ const single = await llmJudge(options);
185
+ const failed = single.score <= 0 ? 1 : 0;
186
+ return { ...single, scoreSamples: [single.score], scoreStddev: 0, judgeFailureCount: failed };
187
+ }
188
+ // Run N judge calls with bounded concurrency. Result array preserves input order
189
+ // (call 0 → results[0]) so "first call reasoning" is well-defined regardless of
190
+ // which physical call returned first.
191
+ const calls = await runInChunks(n, JUDGE_REPEAT_CONCURRENCY, () => llmJudge(options));
192
+ const samples = calls.map((c) => c.score);
193
+ const totalCost = calls.reduce((sum, c) => sum + (c.judgeCostUSD || 0), 0);
194
+ const firstReasoning = calls[0]?.reasoning;
195
+ const firstReason = calls.find((c) => c.reason)?.reason || '';
196
+ const validSamples = samples.filter((s) => s > 0);
197
+ const failures = samples.length - validSamples.length;
198
+ const mean = validSamples.length > 0 ? validSamples.reduce((a, b) => a + b, 0) / validSamples.length : 0;
199
+ const variance = validSamples.length > 1
200
+ ? validSamples.reduce((s, x) => s + (x - mean) ** 2, 0) / (validSamples.length - 1)
201
+ : 0;
202
+ const stddev = Math.sqrt(variance);
203
+ return {
204
+ score: Number(mean.toFixed(2)),
205
+ reason: firstReason,
206
+ reasoning: firstReasoning,
207
+ judgeCostUSD: totalCost,
208
+ scoreSamples: samples,
209
+ scoreStddev: Number(stddev.toFixed(3)),
210
+ judgeFailureCount: failures,
211
+ };
212
+ }
213
+ // ===========================================================================
214
+ // Multi-judge ensemble — cross-model agreement
215
+ // ===========================================================================
216
+ /** Format a JudgeConfig as "executor:model" identifier for reports / logs. */
217
+ export function judgeId(config) {
218
+ return `${config.executor}:${config.model}`;
219
+ }
220
+ /**
221
+ * Pearson correlation between two number arrays of equal length. Returns null when
222
+ * either array has zero variance (constant scores) — Pearson is undefined in that
223
+ * case (division by zero), and reporting 0 would be misleading.
224
+ */
225
+ function pearson(a, b) {
226
+ if (a.length !== b.length || a.length < 2)
227
+ return null;
228
+ const n = a.length;
229
+ const meanA = a.reduce((s, x) => s + x, 0) / n;
230
+ const meanB = b.reduce((s, x) => s + x, 0) / n;
231
+ let num = 0;
232
+ let denomA = 0;
233
+ let denomB = 0;
234
+ for (let i = 0; i < n; i++) {
235
+ const da = a[i] - meanA;
236
+ const db = b[i] - meanB;
237
+ num += da * db;
238
+ denomA += da * da;
239
+ denomB += db * db;
240
+ }
241
+ if (denomA === 0 || denomB === 0)
242
+ return null;
243
+ return num / Math.sqrt(denomA * denomB);
244
+ }
245
+ /** Mean absolute difference between two equal-length number arrays. */
246
+ function meanAbsDiff(a, b) {
247
+ if (a.length !== b.length || a.length === 0)
248
+ return 0;
249
+ let sum = 0;
250
+ for (let i = 0; i < a.length; i++)
251
+ sum += Math.abs(a[i] - b[i]);
252
+ return sum / a.length;
253
+ }
254
+ /**
255
+ * Compute pairwise inter-judge agreement metrics across an ensemble. For N judges
256
+ * we get N*(N-1)/2 pairs; metrics are pairwise-averaged.
257
+ *
258
+ * Each judge contributes ONE score per sample (its mean if judge-repeat > 1). We
259
+ * then compute Pearson and mean-abs-diff over the N-judge × M-sample score matrix.
260
+ *
261
+ * NOTE: Within a single (sample × dimension) call, each judge gives ONE aggregated
262
+ * score. So `pairwise` here means "two judges' scores on this one sample". With a
263
+ * single sample point Pearson is undefined (need ≥ 2). For per-sample agreement we
264
+ * fall back to mean-abs-diff alone; Pearson kicks in at the report-aggregate level
265
+ * (across many samples).
266
+ */
267
+ export function computeJudgeAgreement(judgeScores) {
268
+ // judgeScores[i][j] = score from judge i on sample j. All rows same length.
269
+ const n = judgeScores.length;
270
+ if (n < 2)
271
+ return { meanAbsDiff: 0, pairCount: 0 };
272
+ let madSum = 0;
273
+ let pearsonSum = 0;
274
+ let pearsonCount = 0;
275
+ let pairs = 0;
276
+ for (let i = 0; i < n; i++) {
277
+ for (let j = i + 1; j < n; j++) {
278
+ pairs++;
279
+ madSum += meanAbsDiff(judgeScores[i], judgeScores[j]);
280
+ const p = pearson(judgeScores[i], judgeScores[j]);
281
+ if (p !== null) {
282
+ pearsonSum += p;
283
+ pearsonCount++;
284
+ }
285
+ }
286
+ }
287
+ const result = {
288
+ meanAbsDiff: Number((madSum / pairs).toFixed(3)),
289
+ pairCount: pairs,
290
+ };
291
+ if (pearsonCount > 0) {
292
+ result.pearson = Number((pearsonSum / pearsonCount).toFixed(3));
293
+ }
294
+ return result;
295
+ }
296
+ /**
297
+ * Judge a single (output, rubric) pair with N judge models in parallel. Each judge
298
+ * may use a different executor (e.g. claude:opus + openai:gpt-4o + gemini:pro). Each
299
+ * judge can also be repeated `judgeRepeat` times — final per-judge score is its mean.
300
+ *
301
+ * Returns: aggregate DimensionResult (score = mean across judges; this is the "consensus"
302
+ * score), per-judge breakdown in `ensemble`, and agreement metrics in `agreement`.
303
+ *
304
+ * The aggregate score is the mean of per-judge scores. This is a defensible default
305
+ * but not the only choice — one could argue median (robust to outlier judges) or
306
+ * majority vote (if scores are categorical). Mean is what most papers report; we
307
+ * provide the raw ensemble so downstream can recompute.
308
+ */
309
+ export async function llmJudgeEnsemble(options, judges, executorByName, judgeRepeat = 1) {
310
+ if (judges.length === 0) {
311
+ throw new Error('llmJudgeEnsemble called with empty judges array');
312
+ }
313
+ if (judges.length === 1) {
314
+ // Degenerate case — fall through to non-ensemble path.
315
+ return llmJudgeRepeat({ ...options, executor: executorByName(judges[0].executor), model: judges[0].model }, judgeRepeat);
316
+ }
317
+ // Run all judges in parallel — they're independent. Each judge internally handles
318
+ // its judge-repeat sequence.
319
+ const perJudge = await Promise.all(judges.map(async (jc) => {
320
+ const r = await llmJudgeRepeat({ ...options, executor: executorByName(jc.executor), model: jc.model }, judgeRepeat);
321
+ const entry = {
322
+ judge: judgeId(jc),
323
+ score: r.score,
324
+ scoreStddev: r.scoreStddev,
325
+ scoreSamples: r.scoreSamples,
326
+ judgeFailureCount: r.judgeFailureCount,
327
+ reasoning: r.reasoning,
328
+ costUSD: r.judgeCostUSD,
329
+ };
330
+ return { entry, raw: r };
331
+ }));
332
+ const ensemble = perJudge.map((p) => p.entry);
333
+ const totalCost = perJudge.reduce((s, p) => s + (p.raw.judgeCostUSD || 0), 0);
334
+ // Aggregate score = mean of per-judge means (consensus).
335
+ const validScores = ensemble.map((e) => e.score).filter((s) => s > 0);
336
+ const consensusScore = validScores.length > 0
337
+ ? Number((validScores.reduce((a, b) => a + b, 0) / validScores.length).toFixed(2))
338
+ : 0;
339
+ // Per-judge agreement: only one sample point here (this single output), so Pearson
340
+ // is undefined and we report mean-abs-diff. Aggregate-level Pearson (across all
341
+ // samples in the run) is computed by the report-level aggregator, not here.
342
+ const judgeScoreMatrix = ensemble.map((e) => [e.score]);
343
+ const agreement = computeJudgeAgreement(judgeScoreMatrix);
344
+ // Pick the "spokesperson" reasoning from the first judge that produced one.
345
+ const spokesperson = ensemble.find((e) => e.reasoning);
346
+ return {
347
+ score: consensusScore,
348
+ reason: `consensus across ${judges.length} judges`,
349
+ reasoning: spokesperson?.reasoning,
350
+ judgeCostUSD: totalCost,
351
+ ensemble,
352
+ agreement,
353
+ };
354
+ }
98
355
  //# sourceMappingURL=judge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../../src/grading/judge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../../src/grading/judge.ts"],"names":[],"mappings":"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"}
@@ -103,6 +103,24 @@ function validateEvalConfig(parsed, configPath) {
103
103
  assertBoolOpt('noCache');
104
104
  assertBoolOpt('blind');
105
105
  assertStringOpt('mcpConfig');
106
+ // v0.22 — budget validation. Top-level `budget: { totalUSD?, perSampleUSD?, perSampleMs? }`.
107
+ let budget;
108
+ if (obj.budget !== undefined) {
109
+ if (typeof obj.budget !== 'object' || obj.budget === null || Array.isArray(obj.budget)) {
110
+ throw new Error(`${configPath}: budget 必须是对象`);
111
+ }
112
+ const b = obj.budget;
113
+ for (const k of ['totalUSD', 'perSampleUSD', 'perSampleMs']) {
114
+ if (b[k] !== undefined && (typeof b[k] !== 'number' || b[k] < 0)) {
115
+ throw new Error(`${configPath}: budget.${k} 必须是非负数字`);
116
+ }
117
+ }
118
+ budget = {
119
+ totalUSD: b.totalUSD,
120
+ perSampleUSD: b.perSampleUSD,
121
+ perSampleMs: b.perSampleMs,
122
+ };
123
+ }
106
124
  return {
107
125
  samples: obj.samples,
108
126
  executor: obj.executor,
@@ -115,6 +133,7 @@ function validateEvalConfig(parsed, configPath) {
115
133
  blind: obj.blind,
116
134
  mcpConfig: obj.mcpConfig,
117
135
  variants,
136
+ budget,
118
137
  };
119
138
  }
120
139
  function resolveConfigPaths(config, configDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"eval-config.js","sourceRoot":"","sources":["../../../src/inputs/eval-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-config.js","sourceRoot":"","sources":["../../../src/inputs/eval-config.ts"],"names":[],"mappings":"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"}