@aigne/afs-llm-bench 1.12.0-beta.5

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 (73) hide show
  1. package/LICENSE.md +26 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  4. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  5. package/dist/bench.cjs +944 -0
  6. package/dist/bench.d.cts +89 -0
  7. package/dist/bench.d.cts.map +1 -0
  8. package/dist/bench.d.mts +89 -0
  9. package/dist/bench.d.mts.map +1 -0
  10. package/dist/bench.mjs +944 -0
  11. package/dist/bench.mjs.map +1 -0
  12. package/dist/errors.cjs +14 -0
  13. package/dist/errors.d.cts +13 -0
  14. package/dist/errors.d.cts.map +1 -0
  15. package/dist/errors.d.mts +13 -0
  16. package/dist/errors.d.mts.map +1 -0
  17. package/dist/errors.mjs +14 -0
  18. package/dist/errors.mjs.map +1 -0
  19. package/dist/index.cjs +38 -0
  20. package/dist/index.d.cts +10 -0
  21. package/dist/index.d.mts +10 -0
  22. package/dist/index.mjs +10 -0
  23. package/dist/judge.cjs +189 -0
  24. package/dist/judge.d.cts +67 -0
  25. package/dist/judge.d.cts.map +1 -0
  26. package/dist/judge.d.mts +67 -0
  27. package/dist/judge.d.mts.map +1 -0
  28. package/dist/judge.mjs +185 -0
  29. package/dist/judge.mjs.map +1 -0
  30. package/dist/outlier.cjs +73 -0
  31. package/dist/outlier.d.cts +30 -0
  32. package/dist/outlier.d.cts.map +1 -0
  33. package/dist/outlier.d.mts +30 -0
  34. package/dist/outlier.d.mts.map +1 -0
  35. package/dist/outlier.mjs +73 -0
  36. package/dist/outlier.mjs.map +1 -0
  37. package/dist/patcher.cjs +296 -0
  38. package/dist/patcher.d.cts +119 -0
  39. package/dist/patcher.d.cts.map +1 -0
  40. package/dist/patcher.d.mts +119 -0
  41. package/dist/patcher.d.mts.map +1 -0
  42. package/dist/patcher.mjs +291 -0
  43. package/dist/patcher.mjs.map +1 -0
  44. package/dist/prompts.cjs +123 -0
  45. package/dist/prompts.d.cts +30 -0
  46. package/dist/prompts.d.cts.map +1 -0
  47. package/dist/prompts.d.mts +30 -0
  48. package/dist/prompts.d.mts.map +1 -0
  49. package/dist/prompts.mjs +121 -0
  50. package/dist/prompts.mjs.map +1 -0
  51. package/dist/reporter.cjs +322 -0
  52. package/dist/reporter.d.cts +27 -0
  53. package/dist/reporter.d.cts.map +1 -0
  54. package/dist/reporter.d.mts +27 -0
  55. package/dist/reporter.d.mts.map +1 -0
  56. package/dist/reporter.mjs +322 -0
  57. package/dist/reporter.mjs.map +1 -0
  58. package/dist/runner.cjs +710 -0
  59. package/dist/runner.d.cts +345 -0
  60. package/dist/runner.d.cts.map +1 -0
  61. package/dist/runner.d.mts +345 -0
  62. package/dist/runner.d.mts.map +1 -0
  63. package/dist/runner.mjs +697 -0
  64. package/dist/runner.mjs.map +1 -0
  65. package/dist/scoring.cjs +47 -0
  66. package/dist/scoring.d.cts +28 -0
  67. package/dist/scoring.d.cts.map +1 -0
  68. package/dist/scoring.d.mts +28 -0
  69. package/dist/scoring.d.mts.map +1 -0
  70. package/dist/scoring.mjs +46 -0
  71. package/dist/scoring.mjs.map +1 -0
  72. package/manifest.json +39 -0
  73. package/package.json +62 -0
@@ -0,0 +1,345 @@
1
+ import { BenchPrompt, DimensionScores } from "./scoring.mjs";
2
+ import { OutlierEntry } from "./outlier.mjs";
3
+ import { Prompt } from "./prompts.mjs";
4
+ import { ValidationError } from "./errors.mjs";
5
+ import { AgentRunResult } from "@aigne/afs-agent";
6
+
7
+ //#region src/runner.d.ts
8
+ declare const ALLOWED_JUDGE_DIMENSIONS: readonly ["instruction_following"];
9
+ interface ToolEntry {
10
+ path: string;
11
+ ops: string[];
12
+ maxDepth?: number;
13
+ }
14
+ /** Permissive read-only AFS sandbox so benchmark prompts can explore mounts. */
15
+ declare function defaultBenchTools(): ToolEntry[];
16
+ declare function defaultBenchSystem(): string;
17
+ interface ExecLike {
18
+ exec(path: string, args: Record<string, unknown>): Promise<{
19
+ success: boolean;
20
+ data?: Record<string, unknown> | unknown;
21
+ error?: {
22
+ code?: string;
23
+ message?: string;
24
+ };
25
+ }>;
26
+ }
27
+ interface RunOneInput {
28
+ deps: ExecLike;
29
+ model: string;
30
+ /** Hub used to expand short `model` ids; ignored when `model` is a full
31
+ * AFS path. Defaults to `"vertex"` (see DEFAULT_HUB). */
32
+ hub?: string;
33
+ prompt: Prompt;
34
+ benchPrompt: BenchPrompt;
35
+ }
36
+ interface RunOneResult {
37
+ model: string;
38
+ prompt: string;
39
+ scores: DimensionScores;
40
+ raw: AgentRunResult;
41
+ /**
42
+ * Per-judge raw scores from a multi-judge dispatch (Phase 0 of Run 4).
43
+ * Keyed by judge model id; value is `null` when that judge failed for this
44
+ * sample. Absent when no judging was requested or only single-judge mode
45
+ * was used (existing single-judge behaviour stays in `scores.instruction_following`).
46
+ */
47
+ judges_raw?: Record<string, number | null>;
48
+ }
49
+ declare function runOne(input: RunOneInput): Promise<RunOneResult>;
50
+ declare function promptToBenchPrompt(prompt: Prompt): BenchPrompt;
51
+ /**
52
+ * Extract the raw `# Expected outcomes` section text. Returns the entire
53
+ * section body (including any markdown table) so the LLM judge has the full
54
+ * rubric. Empty string when the section is missing — the judge still runs
55
+ * but has no rubric to score against; in practice this means a low score.
56
+ */
57
+ declare function extractExpectedOutcomes(prompt: Prompt): string;
58
+ /**
59
+ * Extract expected_paths from the `# Expected paths` body section's first
60
+ * fenced code block. Strips `// …` line comments. Lines that don't start with
61
+ * `/` are ignored (so prose inside the block doesn't pollute the path set).
62
+ */
63
+ declare function extractExpectedPaths(prompt: Prompt): string[];
64
+ interface ValidatedRunArgs {
65
+ models: string[];
66
+ prompts: "all" | string[];
67
+ samples: number;
68
+ parallel: number;
69
+ /** Hub for short-model-id expansion. See `RunOneInput.hub`. */
70
+ hub?: string;
71
+ }
72
+ declare function validateRunArgs(args: Record<string, unknown>): ValidatedRunArgs;
73
+ interface ValidatedRunFullArgs {
74
+ models: string[];
75
+ prompts: "all" | string[];
76
+ samples: number;
77
+ parallel: number;
78
+ /**
79
+ * Hub used to expand short model ids — passed through to runOne's
80
+ * `resolveModelPath`. Falls back to `DEFAULT_HUB` when omitted. Models
81
+ * given as a full `/dev/ai/hubs/<hub>/models/<id>` path bypass this.
82
+ */
83
+ hub?: string;
84
+ judgeFor?: ReadonlyArray<(typeof ALLOWED_JUDGE_DIMENSIONS)[number]>;
85
+ /**
86
+ * Multi-judge ensemble (Phase 0 of Run 4). When present, takes precedence
87
+ * over `judgeModel` — each judge dispatches its own chat call per sample
88
+ * and the per-sample scores are aggregated by `aggregateJudgeScores`.
89
+ * Shares the same `judgeHub` for every judge (default `"vertex"`).
90
+ * Length 1 is allowed and reduces to single-judge passthrough.
91
+ */
92
+ judges?: string[];
93
+ /**
94
+ * When true, write a sidecar `<stamp>-raw.json` next to the main results
95
+ * file containing `trace[]` for every successful sample. Default false to
96
+ * keep the main results file small and avoid leaking trace details into
97
+ * the dir that maintainers commit.
98
+ */
99
+ includeRaw: boolean;
100
+ /**
101
+ * Per-dimension stddev cap for outlier flagging (Phase 3 of Run 4 /
102
+ * plan.md L1070-1072). When `undefined`, the runner uses
103
+ * `DEFAULT_OUTLIER_THRESHOLD` (0.15). Clamped to `[0.01, 1.0]` so a
104
+ * misconfig can't disable outlier detection (`0`) or flag every dim (`>1`).
105
+ */
106
+ outlierThreshold?: number;
107
+ /**
108
+ * When true, after the main matrix completes the runner schedules one
109
+ * extra batch of `min(N, 3)` samples for each (model, prompt) flagged by
110
+ * `findOutliers` and recomputes the aggregate + outliers from the merged
111
+ * samples. Bounded so total samples per (model, prompt) ≤ `2 × N` (no
112
+ * runaway budget).
113
+ */
114
+ outlierRerun: boolean;
115
+ }
116
+ declare function validateRunFullArgs(args: Record<string, unknown>): ValidatedRunFullArgs;
117
+ interface SampleError {
118
+ /** Coarse-grained error class for triage. */
119
+ kind: "rate_limit" | "auth" | "other";
120
+ /** Path that failed (almost always /dev/agent/.actions/run). */
121
+ path?: string;
122
+ message: string;
123
+ /** Number of attempts made before giving up (1 for non-retryable errors). */
124
+ attempts: number;
125
+ }
126
+ interface ModelAggregate {
127
+ n_samples: number;
128
+ scores: DimensionScores;
129
+ stddev: Record<string, number>;
130
+ /**
131
+ * Per-prompt mean scores: `{ <prompt_id>: { <dim>: mean across that prompt's
132
+ * samples } }`. Lets a maintainer audit which prompts dragged the model
133
+ * average down without re-running the matrix. Keys are sorted alphabetically
134
+ * for stable diffing across runs. Empty object when there are no samples.
135
+ */
136
+ per_prompt: Record<string, DimensionScores>;
137
+ /**
138
+ * Per-domain aggregate score (Phase 1 of Run 4 / plan.md L1054-1061).
139
+ * Single number per domain — the mean of every sample's per-dimension
140
+ * average for prompts that belong to that domain. Domain is read from the
141
+ * prompt's `frontmatter.domain` (default `"english"` per INTENT). Absent
142
+ * when the caller doesn't supply the prompt list, so unit tests that only
143
+ * pass `samples` keep their existing shape.
144
+ */
145
+ domains?: Record<string, number>;
146
+ /**
147
+ * Multi-judge audit trail (Phase 0 of Run 4). Per-judge mean across all the
148
+ * model's samples that received that judge's verdict; `null` when no sample
149
+ * succeeded for that judge. Absent when no multi-judge dispatch happened.
150
+ * Lets a maintainer detect a single rogue judge dragging the aggregate.
151
+ */
152
+ judges_raw?: Record<string, number | null>;
153
+ /** Per-sample failures; absent when all samples succeed. */
154
+ errors?: SampleError[];
155
+ }
156
+ declare function aggregateAcrossPrompts(samples: RunOneResult[], prompts?: Prompt[]): ModelAggregate;
157
+ interface RunMatrixInput {
158
+ deps: ExecLike;
159
+ prompts: Prompt[];
160
+ models: string[];
161
+ samples: number;
162
+ parallel: number;
163
+ resultsDir: string;
164
+ /** Hub for short-model-id expansion. See `RunOneInput.hub`. */
165
+ hub?: string;
166
+ }
167
+ interface ResultsFile {
168
+ version: string;
169
+ /**
170
+ * Judge model id(s) used to score `instruction_following`. Single-judge
171
+ * runs serialise as a string (back-compat with patcher.ts); multi-judge
172
+ * (Phase 0 of Run 4) serialises as an array. `null` when no judging happened.
173
+ */
174
+ judge_model?: string | string[] | null;
175
+ config: {
176
+ samples_per_pair: number;
177
+ models_tested: string[];
178
+ prompts_used: string[];
179
+ };
180
+ results: Record<string, ModelAggregate>;
181
+ /**
182
+ * Per-(model, prompt, dim) tuples whose stddev exceeded the configured
183
+ * threshold (Phase 3 of Run 4). Always present — empty array when nothing
184
+ * was flagged. Audit-only field; **not** propagated to the catalog by
185
+ * `patcher.ts`. See `outlier.ts` for the algorithm.
186
+ */
187
+ outliers?: OutlierEntry[];
188
+ }
189
+ interface RunMatrixResult {
190
+ results: Record<string, ModelAggregate>;
191
+ file: string;
192
+ ranBatch: {
193
+ models: string[];
194
+ prompts: string[];
195
+ samples: number;
196
+ };
197
+ }
198
+ declare function runMatrix(input: RunMatrixInput): Promise<RunMatrixResult>;
199
+ interface ProgressEvent {
200
+ model: string;
201
+ prompt: string;
202
+ sampleIndex: number;
203
+ totalSamples: number;
204
+ /** "ok" if scoring succeeded, "error" if all retries exhausted. */
205
+ status: "ok" | "error";
206
+ /** Five-dim summary on success; only `error` on failure. */
207
+ scores?: DimensionScores;
208
+ error?: SampleError;
209
+ }
210
+ interface RunFullInput {
211
+ deps: ExecLike;
212
+ prompts: Prompt[];
213
+ models: string[];
214
+ samples: number;
215
+ parallel: number;
216
+ resultsDir: string;
217
+ /** Hub for short-model-id expansion. See `RunOneInput.hub`. */
218
+ hub?: string;
219
+ /**
220
+ * Sleep hook for backoff; defaults to setTimeout. Tests inject a no-op so
221
+ * they don't actually wait 6+ seconds for backoff windows.
222
+ */
223
+ sleep?: (ms: number) => Promise<void>;
224
+ /** Per-sample progress callback (fires after each retry-resolved sample). */
225
+ onProgress?: (event: ProgressEvent) => void;
226
+ /** Fires after each (model, prompt) pair flushes to disk. */
227
+ onPairComplete?: (model: string, promptId: string, partialFile: string) => void | Promise<void>;
228
+ /** Fires after each model completes (after final pair flush). */
229
+ onModelComplete?: (model: string, partialFile: string) => void | Promise<void>;
230
+ /**
231
+ * Optional dimensions to evaluate via LLM-as-judge. When the array
232
+ * includes `"instruction_following"`, each successful sample is sent to
233
+ * `/dev/ai/.actions/chat` for scoring before progress is emitted.
234
+ */
235
+ judgeFor?: ReadonlyArray<(typeof ALLOWED_JUDGE_DIMENSIONS)[number]>;
236
+ /**
237
+ * Optional override for the judge model id. Validated against
238
+ * `[A-Za-z0-9._-]+` inside `judgeInstructionFollowing`. Defaults to
239
+ * `claude-opus-4-7` (routed through ai-device). Ignored when `judges`
240
+ * is set (multi-judge takes precedence; tasks.md L23).
241
+ */
242
+ judgeModel?: string;
243
+ /**
244
+ * Optional override for the hub the judge model lives on. Defaults to
245
+ * `aignehub`. Used together with `judgeModel` to drive ai-device's
246
+ * bypass-mode dispatch.
247
+ */
248
+ judgeHub?: string;
249
+ /**
250
+ * Multi-judge ensemble (Phase 0 of Run 4). When set with at least one
251
+ * judge id, this **overrides** `judgeModel` — every successful sample
252
+ * dispatches one chat call per judge id and `aggregateJudgeScores`
253
+ * collapses the N scores into a single `instruction_following`. All
254
+ * judges share the same `judgeHub`.
255
+ */
256
+ judges?: string[];
257
+ /**
258
+ * When true, write a sidecar `<stamp>-raw.json` next to the main results
259
+ * file containing the AgentRunResult (trace[] et al) for every successful
260
+ * sample. Off by default — raw traces can be large and may contain prompt
261
+ * fragments the maintainer doesn't want to commit.
262
+ */
263
+ includeRaw?: boolean;
264
+ /**
265
+ * Per-dimension stddev cap for outlier flagging (Phase 3 of Run 4).
266
+ * Defaults to `DEFAULT_OUTLIER_THRESHOLD` (0.15). Validated/clamped at
267
+ * the action boundary (`validateRunFullArgs`).
268
+ */
269
+ outlierThreshold?: number;
270
+ /**
271
+ * When true, after the main matrix the runner schedules one extra batch
272
+ * of `min(N, 3)` samples per (model, prompt) flagged by `findOutliers`,
273
+ * appends them to the existing samples, and recomputes the aggregate +
274
+ * outliers. Bounded so total samples per (model, prompt) ≤ `2 × N`.
275
+ */
276
+ outlierRerun?: boolean;
277
+ }
278
+ /**
279
+ * Per-sample raw payload kept around when `includeRaw: true`. Indexed
280
+ * `model → prompt → [{ sampleIndex, raw }]` so a maintainer can audit a
281
+ * specific cell of the matrix without scanning the whole sidecar.
282
+ */
283
+ interface RawResultsFile {
284
+ version: string;
285
+ config: {
286
+ samples_per_pair: number;
287
+ models_tested: string[];
288
+ prompts_used: string[];
289
+ };
290
+ raw: Record<string, Record<string, Array<{
291
+ sampleIndex: number;
292
+ raw: AgentRunResult;
293
+ }>>>;
294
+ }
295
+ interface RunFullResult {
296
+ results: Record<string, ModelAggregate>;
297
+ file: string;
298
+ /** Path to the sidecar raw-trace JSON when `includeRaw: true`; otherwise null. */
299
+ rawFile: string | null;
300
+ ranBatch: {
301
+ models: string[];
302
+ prompts: string[];
303
+ samples: number;
304
+ };
305
+ }
306
+ /**
307
+ * `runMatrixFull` is the headless full-matrix runner used by `/bench/.actions/runFull`.
308
+ *
309
+ * Differences vs `runMatrix`:
310
+ * - Allows up to 200 models / 200 prompts (vs 5/5 for the fast `run` action).
311
+ * - Flushes the results JSON to disk after every (model, prompt) pair so a
312
+ * SIGKILL mid-run preserves the entries already completed.
313
+ * - Retries rate-limit errors with exponential backoff (2s/4s/8s, max 3
314
+ * retries). Auth errors (`INVALID_API_KEY`, `UNAUTHENTICATED`, etc.) fail
315
+ * immediately without retry.
316
+ * - Records per-sample failures on the model aggregate's `errors[]` instead
317
+ * of throwing — one bad sample doesn't block the rest of the matrix.
318
+ * - Emits per-sample progress via `onProgress` so callers can stream live
319
+ * output (`▸ <model> × <prompt> sample N/M: ...`).
320
+ */
321
+ declare function runMatrixFull(input: RunFullInput): Promise<RunFullResult>;
322
+ /**
323
+ * Write `payload` to `<dir>/<ISO-date>.json` atomically (write to a randomised
324
+ * `.tmp-<id>.json` then rename). Best-effort redaction runs before
325
+ * serialisation: both sensitive labels (api_key / Authorization / …) and
326
+ * common credential VALUE shapes (Bearer tokens, `sk-`/`ya29.` keys, PEM
327
+ * blocks, AWS/Slack ids) are blanked so credentials that leak into agent-run
328
+ * traces are scrubbed from the on-disk record. This is a safety net, not a
329
+ * guarantee — the design keeps credentials out of traces. Aborts (without
330
+ * writing) when
331
+ * the serialised payload would exceed `MAX_RESULTS_SIZE_BYTES` — the failure
332
+ * mode is intentionally noisy so a bug that bloats the results dir never lands
333
+ * on disk silently.
334
+ */
335
+ declare function writeResultsAtomic(payload: ResultsFile, dir: string): Promise<string>;
336
+ /**
337
+ * Write the raw-trace sidecar to `<dir>/<ISO-date>-raw.json` atomically. Uses
338
+ * the same sensitive-string redaction as the main results file. Has no size
339
+ * cap — the maintainer opted in via `includeRaw: true` and a hard fail
340
+ * mid-run would discard the agent traces they explicitly asked to keep.
341
+ */
342
+ declare function writeRawResultsAtomic(payload: RawResultsFile, dir: string): Promise<string>;
343
+ //#endregion
344
+ export { ExecLike, ModelAggregate, ProgressEvent, RawResultsFile, ResultsFile, RunFullInput, RunFullResult, RunMatrixInput, RunMatrixResult, RunOneInput, RunOneResult, SampleError, ToolEntry, ValidatedRunArgs, ValidatedRunFullArgs, aggregateAcrossPrompts, defaultBenchSystem, defaultBenchTools, extractExpectedOutcomes, extractExpectedPaths, promptToBenchPrompt, runMatrix, runMatrixFull, runOne, validateRunArgs, validateRunFullArgs, writeRawResultsAtomic, writeResultsAtomic };
345
+ //# sourceMappingURL=runner.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.mts","names":[],"sources":["../src/runner.ts"],"mappings":"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"}