@tangle-network/agent-eval 0.126.6 → 0.127.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 (129) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +2 -2
  3. package/dist/analyst/index.d.ts +52 -40
  4. package/dist/analyst/index.js +4 -4
  5. package/dist/belief-state/index.d.ts +34 -36
  6. package/dist/belief-state/index.js +2 -2
  7. package/dist/benchmarks/index.d.ts +30 -12
  8. package/dist/benchmarks/index.js +12 -10
  9. package/dist/builder-eval/index.js +1 -1
  10. package/dist/campaign/index.d.ts +432 -146
  11. package/dist/campaign/index.js +11 -9
  12. package/dist/{chunk-ARU2PZFM.js → chunk-424XHVKV.js} +43 -23
  13. package/dist/chunk-424XHVKV.js.map +1 -0
  14. package/dist/{chunk-NUKSVU3W.js → chunk-5DTSBUL2.js} +2 -2
  15. package/dist/{chunk-BTACVO2W.js → chunk-65QETEKG.js} +542 -258
  16. package/dist/chunk-65QETEKG.js.map +1 -0
  17. package/dist/{chunk-CGG5SLH3.js → chunk-ARCFIY7U.js} +2 -2
  18. package/dist/{chunk-P22LJ3Y2.js → chunk-CLELFRQG.js} +6 -4
  19. package/dist/chunk-CLELFRQG.js.map +1 -0
  20. package/dist/{chunk-LUNF2SEL.js → chunk-DJKY2TSY.js} +3 -3
  21. package/dist/chunk-DPUHNQLN.js +232 -0
  22. package/dist/chunk-DPUHNQLN.js.map +1 -0
  23. package/dist/{chunk-IPYXE555.js → chunk-EJGRPCO3.js} +36 -13
  24. package/dist/chunk-EJGRPCO3.js.map +1 -0
  25. package/dist/{chunk-K6IAZZ6L.js → chunk-FA3MFYNA.js} +132 -110
  26. package/dist/chunk-FA3MFYNA.js.map +1 -0
  27. package/dist/chunk-IG35YDN3.js +614 -0
  28. package/dist/chunk-IG35YDN3.js.map +1 -0
  29. package/dist/{chunk-DPZAEKA6.js → chunk-IMGJZBFG.js} +84 -56
  30. package/dist/chunk-IMGJZBFG.js.map +1 -0
  31. package/dist/{chunk-H5UD2323.js → chunk-IN455XKS.js} +53 -1
  32. package/dist/chunk-IN455XKS.js.map +1 -0
  33. package/dist/{chunk-PJQFMIOX.js → chunk-MHELPNRP.js} +31 -1
  34. package/dist/chunk-MHELPNRP.js.map +1 -0
  35. package/dist/{chunk-IILEIWGW.js → chunk-NL33OXEP.js} +41 -36
  36. package/dist/chunk-NL33OXEP.js.map +1 -0
  37. package/dist/{chunk-474LBSOX.js → chunk-OD5NQ2CS.js} +41 -16
  38. package/dist/chunk-OD5NQ2CS.js.map +1 -0
  39. package/dist/{chunk-QOTFXW5L.js → chunk-P5W7RQKK.js} +2 -2
  40. package/dist/{chunk-IR3KBHOY.js → chunk-P6FYH6K4.js} +39 -3
  41. package/dist/chunk-P6FYH6K4.js.map +1 -0
  42. package/dist/{chunk-J5SQWP6Y.js → chunk-PBE2LOSS.js} +18 -2
  43. package/dist/chunk-PBE2LOSS.js.map +1 -0
  44. package/dist/{chunk-E3IADPLG.js → chunk-PRB53E3J.js} +50 -224
  45. package/dist/chunk-PRB53E3J.js.map +1 -0
  46. package/dist/{chunk-X4UCIOTZ.js → chunk-S5YLIBFX.js} +2 -2
  47. package/dist/{chunk-7VYEGHWF.js → chunk-SZLVEKMJ.js} +41 -20
  48. package/dist/chunk-SZLVEKMJ.js.map +1 -0
  49. package/dist/{chunk-LKKT3IVV.js → chunk-TSN7JT6D.js} +6 -4
  50. package/dist/{chunk-LKKT3IVV.js.map → chunk-TSN7JT6D.js.map} +1 -1
  51. package/dist/{chunk-M7AH34KV.js → chunk-UTA2TGC4.js} +32 -16
  52. package/dist/chunk-UTA2TGC4.js.map +1 -0
  53. package/dist/{chunk-MAX3TN3C.js → chunk-UWZZKKU7.js} +7 -19
  54. package/dist/chunk-UWZZKKU7.js.map +1 -0
  55. package/dist/{chunk-ZVCHKKOP.js → chunk-WED5KLZQ.js} +39 -15
  56. package/dist/chunk-WED5KLZQ.js.map +1 -0
  57. package/dist/{chunk-OCFJACJU.js → chunk-X6VOPMLD.js} +74 -14
  58. package/dist/chunk-X6VOPMLD.js.map +1 -0
  59. package/dist/{chunk-MOXWMGPC.js → chunk-Y5CYOL42.js} +159 -70
  60. package/dist/chunk-Y5CYOL42.js.map +1 -0
  61. package/dist/{chunk-FO7HEH76.js → chunk-YJBNWCAA.js} +2 -2
  62. package/dist/chunk-ZPUEEM5U.js +179 -0
  63. package/dist/chunk-ZPUEEM5U.js.map +1 -0
  64. package/dist/{chunk-KE2VWPZX.js → chunk-ZUUWPZCV.js} +3 -3
  65. package/dist/cli.js +4 -4
  66. package/dist/contract/index.d.ts +464 -126
  67. package/dist/contract/index.js +425 -211
  68. package/dist/contract/index.js.map +1 -1
  69. package/dist/control.d.ts +34 -32
  70. package/dist/control.js +2 -2
  71. package/dist/hosted/index.d.ts +142 -41
  72. package/dist/hosted/index.js +23 -1
  73. package/dist/index.d.ts +365 -256
  74. package/dist/index.js +315 -226
  75. package/dist/index.js.map +1 -1
  76. package/dist/meta-eval/index.d.ts +32 -32
  77. package/dist/meta-eval/index.js +2 -2
  78. package/dist/multishot/index.d.ts +1 -0
  79. package/dist/openapi.json +1 -1
  80. package/dist/pipelines/index.js +2 -2
  81. package/dist/reporting.d.ts +97 -74
  82. package/dist/reporting.js +5 -4
  83. package/dist/rl.d.ts +177 -131
  84. package/dist/rl.js +232 -126
  85. package/dist/rl.js.map +1 -1
  86. package/dist/rollout/index.d.ts +53 -63
  87. package/dist/rollout/index.js +7 -5
  88. package/dist/{run-campaign-FFRM3RH5.js → run-campaign-3A2EBYBE.js} +4 -3
  89. package/dist/supervisor-run/index.d.ts +7 -15
  90. package/dist/supervisor-run/index.js +2 -2
  91. package/dist/traces.d.ts +66 -41
  92. package/dist/traces.js +9 -5
  93. package/dist/wire/index.d.ts +1 -0
  94. package/dist/wire/index.js +2 -2
  95. package/docs/concepts.md +18 -1
  96. package/docs/hosted-ingest-spec.md +37 -40
  97. package/docs/insight-report.md +57 -7
  98. package/docs/research-report-methodology.md +20 -21
  99. package/docs/rollout.md +13 -8
  100. package/package.json +21 -14
  101. package/dist/chunk-474LBSOX.js.map +0 -1
  102. package/dist/chunk-7VYEGHWF.js.map +0 -1
  103. package/dist/chunk-ARU2PZFM.js.map +0 -1
  104. package/dist/chunk-BTACVO2W.js.map +0 -1
  105. package/dist/chunk-DPZAEKA6.js.map +0 -1
  106. package/dist/chunk-E3IADPLG.js.map +0 -1
  107. package/dist/chunk-H5UD2323.js.map +0 -1
  108. package/dist/chunk-IILEIWGW.js.map +0 -1
  109. package/dist/chunk-IPYXE555.js.map +0 -1
  110. package/dist/chunk-IR3KBHOY.js.map +0 -1
  111. package/dist/chunk-J5SQWP6Y.js.map +0 -1
  112. package/dist/chunk-K6IAZZ6L.js.map +0 -1
  113. package/dist/chunk-M7AH34KV.js.map +0 -1
  114. package/dist/chunk-MAX3TN3C.js.map +0 -1
  115. package/dist/chunk-MOXWMGPC.js.map +0 -1
  116. package/dist/chunk-OCFJACJU.js.map +0 -1
  117. package/dist/chunk-P22LJ3Y2.js.map +0 -1
  118. package/dist/chunk-PJQFMIOX.js.map +0 -1
  119. package/dist/chunk-ZVCHKKOP.js.map +0 -1
  120. package/dist/chunk-ZZUXHH3R.js +0 -99
  121. package/dist/chunk-ZZUXHH3R.js.map +0 -1
  122. /package/dist/{chunk-NUKSVU3W.js.map → chunk-5DTSBUL2.js.map} +0 -0
  123. /package/dist/{chunk-CGG5SLH3.js.map → chunk-ARCFIY7U.js.map} +0 -0
  124. /package/dist/{chunk-LUNF2SEL.js.map → chunk-DJKY2TSY.js.map} +0 -0
  125. /package/dist/{chunk-QOTFXW5L.js.map → chunk-P5W7RQKK.js.map} +0 -0
  126. /package/dist/{chunk-X4UCIOTZ.js.map → chunk-S5YLIBFX.js.map} +0 -0
  127. /package/dist/{chunk-FO7HEH76.js.map → chunk-YJBNWCAA.js.map} +0 -0
  128. /package/dist/{chunk-KE2VWPZX.js.map → chunk-ZUUWPZCV.js.map} +0 -0
  129. /package/dist/{run-campaign-FFRM3RH5.js.map → run-campaign-3A2EBYBE.js.map} +0 -0
package/dist/rl.d.ts CHANGED
@@ -233,7 +233,8 @@ type FailureClass = 'success' | 'reasoning_error' | 'tool_selection_error' | 'to
233
233
  * researcher loop SHOULD be recorded as a `RunRecord`. The mandatory
234
234
  * fields are exactly those the paper "Two Loops, Three Roles" requires
235
235
  * for reproducibility: who/what/when/cost/seed/hash, plus the search vs
236
- * holdout split tag and either a `searchScore` or a `holdoutScore`.
236
+ * holdout split tag. A task score is optional because execution-only records
237
+ * must preserve missing labels instead of converting errors into zero quality.
237
238
  *
238
239
  * This is intentionally NOT a replacement for the rich `Run` /
239
240
  * `ProposeReviewReport` / `ScenarioResult` types already in the
@@ -254,6 +255,13 @@ type FailureClass = 'success' | 'reasoning_error' | 'tool_selection_error' | 'to
254
255
  /** Search/dev/holdout split tag. 'search' is the paper-grade alias for the
255
256
  * combined train+test pool that the optimizer is allowed to read. */
256
257
  type RunSplitTag = 'search' | 'dev' | 'holdout';
258
+ /**
259
+ * Explicit execution-lifecycle result for a run.
260
+ *
261
+ * This is separate from task quality (`outcome`) and failure classification.
262
+ * Producers set it only from root-run or process evidence.
263
+ */
264
+ type RunTerminalOutcome = 'succeeded' | 'failed' | 'cancelled' | 'incomplete' | 'unknown';
257
265
  interface RunTokenUsage {
258
266
  input: number;
259
267
  /** All generated tokens charged as output, including reasoning tokens. */
@@ -267,11 +275,6 @@ interface RunTokenUsage {
267
275
  }
268
276
  /**
269
277
  * How a run's USD amount was obtained.
270
- *
271
- * `costUsd` remains mandatory for wire compatibility. New producers should
272
- * always populate this discriminated union so a missing bill is never
273
- * mistaken for an observed zero-dollar run. For `uncaptured`, `costUsd` uses
274
- * the legacy `0` sentinel while this field carries the truthful null.
275
278
  */
276
279
  type RunCostProvenance = {
277
280
  kind: 'observed';
@@ -317,8 +320,8 @@ interface JudgeScoresRecord {
317
320
  perJudge: Record<string, Record<string, number>>;
318
321
  /** Per-dim mean across judges. Convenience — derivable from `perJudge`. */
319
322
  perDimMean: Record<string, number>;
320
- /** Composite mean across all dims and judges. Mirrors the score
321
- * the gate sees on `outcome.searchScore` / `holdoutScore`. */
323
+ /** Composite mean across successful judges. Mirrors the task score only
324
+ * when `failedJudges` is empty. */
322
325
  composite: number;
323
326
  /** Judges that errored or returned an unparseable verdict. Recorded
324
327
  * by id (e.g. `['glm-5.1']`) so a partial-failure case is explicit,
@@ -329,11 +332,11 @@ interface JudgeScoresRecord {
329
332
  notes?: string;
330
333
  }
331
334
  interface RunOutcome {
332
- /** Score on the search/optimization split. Optional because a
333
- * holdout-only evaluation only fills `holdoutScore`. */
335
+ /** Score on the search/optimization split. Optional for holdout-only and
336
+ * execution-only records. */
334
337
  searchScore?: number;
335
- /** Score on the held-out split. Optional because a search-only run
336
- * only fills `searchScore`. At least one must be present. */
338
+ /** Score on the held-out split. Optional for search-only and execution-only
339
+ * records. When both scores are absent, the run is explicitly unlabeled. */
337
340
  holdoutScore?: number;
338
341
  /** Bag of any other metric the run produced — judge dimensions,
339
342
  * pass/fail counters, latency stats, etc. Numeric only — keeps
@@ -397,42 +400,39 @@ interface RunRecord {
397
400
  wallMs: number;
398
401
  /** Time spent queued before execution started, if known. */
399
402
  queueMs?: number;
400
- /** Total USD cost. Mandatory runs without a cost number are
401
- * unbounded by definition and must not be admitted into the gate.
402
- * `0` is retained as the compatibility sentinel for an uncaptured amount;
403
- * inspect `costProvenance` before treating it as observed. */
404
- costUsd: number;
405
- /** Observed, model-priced estimate, or genuinely uncaptured USD amount.
406
- * Optional only so existing serialized RunRecords remain valid. */
407
- costProvenance?: RunCostProvenance;
403
+ /** Total USD cost, or null when the producer could not capture one. */
404
+ costUsd: number | null;
405
+ /** Whether `costUsd` came from billing data, a price calculation, or is unavailable. */
406
+ costProvenance: RunCostProvenance;
408
407
  /** Token usage breakdown. */
409
408
  tokenUsage: RunTokenUsage;
409
+ /** Root-run or process terminal result. Never inferred from a child span. */
410
+ terminalOutcome: RunTerminalOutcome;
411
+ /** Root-run or process failure reason. Valid only for a failed, cancelled,
412
+ * or incomplete terminal result; never populated from a child span. */
413
+ terminalFailureReason?: string;
410
414
  /** Judge-side metadata, if a judge was used. */
411
415
  judgeMetadata?: RunJudgeMetadata;
412
416
  /** Per-split scores + raw bag. */
413
417
  outcome: RunOutcome;
414
- /** Canonical, cross-agent failure class drawn from the shared
418
+ /** Canonical task-failure class drawn from the shared
415
419
  * `FAILURE_CLASSES` taxonomy. This is the aggregation key that makes
416
420
  * "which failure dominates across the whole fleet" answerable in ONE
417
421
  * vocabulary — every agent classifies against the same enum. Producers
418
- * set it via the substrate classifier; leave unset only when the failure
419
- * genuinely can't be classified. */
422
+ * set it only from task-result evidence. Execution errors belong in
423
+ * `outcome.raw.execution_error_count`, even when the run later fails. */
420
424
  failureClass?: FailureClass;
421
- /** Free-form domain-specific failure detail, scoped UNDER `failureClass`
425
+ /** Free-form task-failure detail, scoped UNDER `failureClass`
422
426
  * (e.g. failureClass='tool_recovery_failure', failureMode='forge_build_unsatisfied').
423
- * The within-agent drill-down; `failureClass` is the cross-agent key. */
427
+ * Do not populate this from a child execution error alone. */
424
428
  failureMode?: string;
425
429
  /** Which split this run was drawn from. */
426
430
  splitTag: RunSplitTag;
427
431
  /**
428
- * Stable scenario identifier the run was scored against. Optional for
429
- * backwards compatibility, but **strongly recommended**: every primitive
430
- * that pairs runs by scenario (preferences, paired stats, BT tournament)
431
- * keys on this. The campaign artifact populates it canonically; legacy
432
- * runs without it fall back to inference from `outcome.raw.scenario_id`
433
- * or `experimentId`.
432
+ * Stable scenario identifier the run observed or was scored against.
433
+ * Comparison primitives match this identity rather than input order.
434
434
  */
435
- scenarioId?: string;
435
+ scenarioId: string;
436
436
  /**
437
437
  * Canonical identity for the agent profile cell that produced this row:
438
438
  * profile artifact hash plus optional harness/model/prompt/reporting
@@ -959,9 +959,7 @@ declare function injectIrrelevantClause<S extends {
959
959
  * per scenario but biggest score gap per pair. Useful for early
960
960
  * bootstrapping when you have few variants.
961
961
  *
962
- * The output `PreferenceTriple` is *agent-eval-canonical* but trivially
963
- * mappable to TRL's `DPODataset` shape (`prompt`, `chosen`, `rejected`)
964
- * via the `toTRLFormat` helper.
962
+ * Resolve `PreferenceTriple` text with `toDpoRows` from `./exporters`.
965
963
  */
966
964
 
967
965
  type PreferenceStrategy = 'paired-by-scenario-and-seed' | 'paired-by-scenario' | 'top-vs-bottom';
@@ -1000,7 +998,7 @@ interface PreferenceTriple {
1000
998
  rejectedModel: string;
1001
999
  };
1002
1000
  }
1003
- interface ExtractPreferencesOptions {
1001
+ interface ExtractPreferencesOptions extends TrainingRunSelectionOptions {
1004
1002
  strategy?: PreferenceStrategy;
1005
1003
  /**
1006
1004
  * Minimum score gap required to admit a pair. Pairs below this are
@@ -1008,8 +1006,8 @@ interface ExtractPreferencesOptions {
1008
1006
  */
1009
1007
  minMargin?: number;
1010
1008
  /**
1011
- * Optional split tag filter restrict to runs from one split. Default
1012
- * `'holdout'` (the canonical "real" signal).
1009
+ * Optional split tag filter. Without one, only search is included.
1010
+ * Holdout requires `allowHeldOutTrainingData: true`; dev is evaluation-only.
1013
1011
  */
1014
1012
  splitTag?: RunRecord['splitTag'];
1015
1013
  /**
@@ -1040,19 +1038,9 @@ interface PreferenceExtractionReport {
1040
1038
  * 1. Run a campaign producing 5–10 variants × 50–200 scenarios × 3 seeds
1041
1039
  * 2. Call this with `strategy: 'paired-by-scenario-and-seed'` and a
1042
1040
  * verifiable-reward extractor as `rewardOf`
1043
- * 3. Pass `report.pairs` to `toTRLFormat` and pipe to your DPO trainer
1041
+ * 3. Pass `report.pairs` to `toDpoRows` with prompt/completion resolvers
1044
1042
  */
1045
1043
  declare function extractPreferences(runs: RunRecord[], opts?: ExtractPreferencesOptions): PreferenceExtractionReport;
1046
- /**
1047
- * TRL-compatible export. TRL's `DPODataset` is `{ prompt, chosen, rejected }`
1048
- * but the prompt isn't stored on the RunRecord — only its hash. The caller
1049
- * passes a `promptOf(promptHash)` lookup that the TRL trainer can use.
1050
- */
1051
- declare function toTRLFormat(triples: PreferenceTriple[], promptOf: (hash: string) => string): Array<{
1052
- prompt: string;
1053
- chosen: string;
1054
- rejected: string;
1055
- }>;
1056
1044
  /**
1057
1045
  * Anthropic finetuning JSONL export — `{ system, user, assistant_chosen, assistant_rejected }`
1058
1046
  * shape. Same caveat as TRL: prompt + outputs are content the caller has
@@ -1290,7 +1278,13 @@ interface DpoExportRow {
1290
1278
  declare function toDpoRows(triples: PreferenceTriple[], lookups: DpoLookups): Promise<DpoExportRow[]>;
1291
1279
  /** Serialize DPO rows as JSONL. One line per row. */
1292
1280
  declare function toDpoJsonl(rows: DpoExportRow[]): string;
1293
- interface GrpoLookups {
1281
+ interface TrainingRunSelectionOptions {
1282
+ /** Include held-out evaluation data in training output. Default false. */
1283
+ allowHeldOutTrainingData?: boolean;
1284
+ /** Require quality to be strictly greater than this value. Default 0. */
1285
+ minimumQualityExclusive?: number;
1286
+ }
1287
+ interface GrpoLookups extends TrainingRunSelectionOptions {
1294
1288
  promptOf: (runId: string) => string | Promise<string>;
1295
1289
  completionOf: (runId: string) => string | Promise<string>;
1296
1290
  /** Optional: derive a custom reward from the run. Defaults to score. */
@@ -1305,16 +1299,17 @@ interface GrpoExportRow {
1305
1299
  meta?: Record<string, unknown>;
1306
1300
  }
1307
1301
  /**
1308
- * Convert RunRecord[] grouped by `(scenarioId)` into GRPO offline rows —
1309
- * one row per scenario, with one completion per run on that scenario.
1302
+ * Convert RunRecord[] grouped by canonical `(scenarioId, promptHash)` identity
1303
+ * into GRPO offline rows.
1310
1304
  *
1311
1305
  * GRPO (Shao et al. 2024 / DeepSeek-R1) trains on relative advantages
1312
1306
  * within a group of completions for the same prompt; this is the
1313
- * canonical input format.
1307
+ * canonical input format. A scenario containing multiple prompt hashes, or a
1308
+ * prompt hash that resolves to different text, is rejected rather than mixed.
1314
1309
  */
1315
1310
  declare function toGrpoRows(runs: RunRecord[], lookups: GrpoLookups): Promise<GrpoExportRow[]>;
1316
1311
  declare function toGrpoJsonl(rows: GrpoExportRow[]): string;
1317
- interface SftLookups {
1312
+ interface SftLookups extends TrainingRunSelectionOptions {
1318
1313
  promptOf: (runId: string) => string | Promise<string>;
1319
1314
  completionOf: (runId: string) => string | Promise<string>;
1320
1315
  /** Optional system message. Default omits. */
@@ -1331,9 +1326,8 @@ interface SftExportRow {
1331
1326
  }
1332
1327
  /**
1333
1328
  * Convert RunRecord[] into Hugging Face / OpenAI / Anthropic-style
1334
- * conversational SFT rows. By default every record becomes one row;
1335
- * pass `include` to filter (e.g., keep only `score >= 0.8` for
1336
- * rejection-sampling SFT).
1329
+ * conversational SFT rows. By default, only completed, positive-quality
1330
+ * search runs are eligible. Pass `include` for additional filtering.
1337
1331
  */
1338
1332
  declare function toSftRows(runs: RunRecord[], lookups: SftLookups): Promise<SftExportRow[]>;
1339
1333
  declare function toSftJsonl(rows: SftExportRow[]): string;
@@ -1372,6 +1366,7 @@ interface StepRewardJsonlRow {
1372
1366
  weight: number;
1373
1367
  }
1374
1368
  declare function stepRewardsToJsonl(stepRewards: StepReward[]): string;
1369
+ declare function isTrainingRunEligible(run: RunRecord, quality: number | null | undefined, options?: TrainingRunSelectionOptions): quality is number;
1375
1370
 
1376
1371
  /**
1377
1372
  * RL dataset packaging + datasheet — the publishable, sellable bundle.
@@ -1393,7 +1388,9 @@ declare function stepRewardsToJsonl(stepRewards: StepReward[]): string;
1393
1388
  */
1394
1389
 
1395
1390
  type RewardKind = 'deterministic' | 'probabilistic' | 'mixed';
1396
- type DatasetFormat = 'grpo' | 'sft' | 'dpo';
1391
+ declare const DATASET_FORMATS: readonly ["grpo", "sft", "dpo"];
1392
+ type DatasetFormat = (typeof DATASET_FORMATS)[number];
1393
+ declare function validateDatasetFormats(value: unknown): DatasetFormat[];
1397
1394
  /** Caller-declared context — the qualitative half of the datasheet that can't
1398
1395
  * be computed from records. */
1399
1396
  interface RlDatasetConfig {
@@ -1416,7 +1413,7 @@ interface RlDatasetConfig {
1416
1413
  limitations: string;
1417
1414
  /** ISO timestamp — passed in (the substrate forbids Date.now()). */
1418
1415
  createdAtIso: string;
1419
- /** Default: ['grpo', 'sft']. */
1416
+ /** Default: ['sft']. GRPO must be requested for multi-completion groups. */
1420
1417
  formats?: DatasetFormat[];
1421
1418
  /** Quality gates already run, recorded on the card for the buyer. */
1422
1419
  qualityGates?: {
@@ -1427,14 +1424,16 @@ interface RlDatasetConfig {
1427
1424
  }
1428
1425
  interface RewardStats {
1429
1426
  n: number;
1430
- mean: number;
1431
- median: number;
1432
- min: number;
1433
- max: number;
1434
- std: number;
1427
+ mean: number | null;
1428
+ median: number | null;
1429
+ min: number | null;
1430
+ max: number | null;
1431
+ std: number | null;
1435
1432
  }
1436
1433
  interface RlDatasetStats {
1437
1434
  records: number;
1435
+ /** Records carrying an explicit task-quality score. */
1436
+ scoredRecords: number;
1438
1437
  /** Record count per split — a publishable dataset must declare its holdout. */
1439
1438
  splits: Record<RunSplitTag, number>;
1440
1439
  reward: RewardStats;
@@ -1470,7 +1469,7 @@ declare function buildRlDataset(records: RunRecord[], lookups: GrpoLookups & Sft
1470
1469
  triples: PreferenceTriple[];
1471
1470
  lookups: DpoLookups;
1472
1471
  }): Promise<RlDatasetBundle>;
1473
- /** Render the "Datasheet for Datasets" card the artifact a buyer reads. */
1472
+ /** Render the "Datasheet for Datasets" card that a buyer reads. */
1474
1473
  declare function datasheetToMarkdown(m: RlDatasetManifest): string;
1475
1474
 
1476
1475
  /**
@@ -1515,8 +1514,10 @@ declare function readCorpus(corpusPath: string): CorpusRecord[];
1515
1514
  interface HarvestOptions {
1516
1515
  /** Keep only records scoring >= this (rejection-sampling for SFT). */
1517
1516
  minScore?: number;
1518
- /** Keep only these splits (e.g. ['holdout'] for an eval-only dataset). */
1517
+ /** Keep only these source splits. Held-out rows still require the explicit override below. */
1519
1518
  splits?: RunRecord['splitTag'][];
1519
+ /** Permit held-out rows in training files. Default false. */
1520
+ allowHeldOutTrainingData?: boolean;
1520
1521
  }
1521
1522
  /**
1522
1523
  * Harvest the accumulated corpus into a publishable RL dataset bundle. Reads
@@ -1851,35 +1852,39 @@ interface RubricPredictiveValidityReport {
1851
1852
  * specific promotion path (still useful for replay-style evals).
1852
1853
  */
1853
1854
 
1854
- type HeldOutGateRejectionCode = 'few_runs' | 'negative_delta' | 'overfit_gap' | 'cost_ceiling';
1855
+ type HeldOutGateRejectionCode = 'few_runs' | 'missing_split_scores' | 'missing_cost' | 'negative_delta' | 'overfit_gap' | 'cost_ceiling';
1855
1856
  interface GateEvidence {
1856
1857
  /** Number of paired (candidate, baseline) holdout observations used. */
1857
1858
  productiveRuns: number;
1858
- /** Median of (candidate baseline) paired holdout deltas. */
1859
- medianPairedDelta: number;
1860
- /** Bootstrap CI on the median paired holdout delta. */
1859
+ /** Candidate holdout rows with no baseline row at the same work identity. */
1860
+ unpairedCandidateRuns: number;
1861
+ /** Baseline holdout rows with no candidate row at the same work identity. */
1862
+ unpairedBaselineRuns: number;
1863
+ /** Median of paired holdout deltas, or null when there are no pairs. */
1864
+ medianPairedDelta: number | null;
1865
+ /** Bootstrap CI on the median paired holdout delta, if computed. */
1861
1866
  pairedCI: {
1862
1867
  low: number;
1863
1868
  high: number;
1864
- };
1865
- /** Wilcoxon signed-rank p-value on the paired holdout deltas. */
1866
- pairedPValue: number;
1867
- /** Mean candidate score on the search split (NaN if none). */
1868
- searchScore: number;
1869
- /** Mean candidate score on the holdout split (NaN if none). */
1870
- holdoutScore: number;
1871
- /** Candidate (search − holdout) gap. */
1872
- overfitGap: number;
1873
- /** Baseline (search − holdout) gap. */
1874
- baselineOverfitGap: number;
1869
+ } | null;
1870
+ /** Wilcoxon signed-rank p-value, if computed. */
1871
+ pairedPValue: number | null;
1872
+ /** Mean candidate score on the search split, or null when absent. */
1873
+ searchScore: number | null;
1874
+ /** Mean candidate score on the holdout split, or null when absent. */
1875
+ holdoutScore: number | null;
1876
+ /** Candidate (search − holdout) gap, or null when either side is absent. */
1877
+ overfitGap: number | null;
1878
+ /** Baseline (search − holdout) gap, or null when either side is absent. */
1879
+ baselineOverfitGap: number | null;
1875
1880
  /** Median per-task USD cost across the candidate's runs. Recorded
1876
1881
  * even when no `costPerTaskCeiling` is configured so downstream
1877
1882
  * dashboards (intelligence.tangle.tools) can render \$/task per
1878
1883
  * generation regardless of gating policy. */
1879
- medianCandidateCost: number;
1884
+ medianCandidateCost: number | null;
1880
1885
  /** Median per-task USD cost across the baseline runs, for
1881
1886
  * symmetric reporting. */
1882
- medianBaselineCost: number;
1887
+ medianBaselineCost: number | null;
1883
1888
  }
1884
1889
  interface GateDecision$1 {
1885
1890
  /** Final promote/no-promote verdict. */
@@ -2142,6 +2147,8 @@ interface Finding {
2142
2147
  interface LayerResult {
2143
2148
  layer: string;
2144
2149
  status: LayerStatus;
2150
+ /** Origin of an `error` or `timeout`. Defaults to `execution`. */
2151
+ errorSource?: 'execution' | 'judge';
2145
2152
  /** 0..1 score, optional — layers that don't produce a numeric score omit. */
2146
2153
  score?: number;
2147
2154
  durationMs: number;
@@ -2160,22 +2167,29 @@ interface LayerResult {
2160
2167
  /** Any rich per-layer detail — rendered as-is by consumers that know the layer. */
2161
2168
  detail?: Record<string, unknown>;
2162
2169
  }
2163
- /** Extends the substrate verdict spine: `valid` = `allPass` and `score` =
2164
- * `blendedScore` derived where the report is aggregated, so spine
2165
- * consumers (drivers, gates) read this report without an adapter. */
2170
+ /** Extends the substrate verdict spine: `valid` = `allPass`; `score` is the
2171
+ * complete task score or 0 when the configured scoring panel was incomplete. */
2166
2172
  interface VerificationReport extends DefaultVerdict {
2167
2173
  layers: LayerResult[];
2168
2174
  passCount: number;
2169
2175
  failCount: number;
2170
2176
  skippedCount: number;
2171
2177
  errorCount: number;
2172
- /** True iff at least one scored layer ran AND every scored layer passed. */
2178
+ /** True iff the configured scoring panel completed and every layer passed. */
2173
2179
  allPass: boolean;
2174
2180
  /**
2175
- * Weighted mean of `score` across contributing layers. 0 when no layers
2176
- * contributed. See {@link Layer.failContributesToScore} for fail semantics.
2181
+ * Diagnostic weighted mean across contributing layers. This may represent a
2182
+ * partial panel. It is 0 when no layer contributed.
2177
2183
  */
2178
2184
  blendedScore: number;
2185
+ /**
2186
+ * Complete task-quality measurement.
2187
+ * Present when at least one layer produced a valid score, every other layer
2188
+ * completed successfully or contributed an explicit scored failure, and no
2189
+ * result is missing because of a failure, skip, error, or timeout.
2190
+ * Use this field, not `blendedScore`, when creating task labels.
2191
+ */
2192
+ taskScore?: number;
2179
2193
  durationMs: number;
2180
2194
  startedAt: string;
2181
2195
  finishedAt: string;
@@ -2354,14 +2368,17 @@ interface RewardHackingFinding {
2354
2368
  }
2355
2369
  interface RewardHackingReport {
2356
2370
  findings: RewardHackingFinding[];
2371
+ /** Signals with enough usable observations to produce a finding. */
2372
+ evaluatedSignals: RewardHackingSignal[];
2357
2373
  /**
2358
- * Composite verdict. `'clean'` if every signal severity < 0.3;
2359
- * `'suspect'` if at least one 0.3 but none ≥ 0.6; `'gaming'` if any ≥ 0.6.
2374
+ * Composite verdict. `'insufficient_evidence'` when fewer than four scored
2375
+ * runs exist; otherwise `'clean'` if every signal severity < 0.3,
2376
+ * `'suspect'` if at least one ≥ 0.3 but none ≥ 0.6, and `'gaming'` if any ≥ 0.6.
2360
2377
  */
2361
- verdict: 'clean' | 'suspect' | 'gaming';
2378
+ verdict: 'insufficient_evidence' | 'clean' | 'suspect' | 'gaming';
2362
2379
  /** Rationale for the verdict, ready to paste into an audit log. */
2363
2380
  rationale: string[];
2364
- /** Number of paired (proxy, truth) data points the report saw. */
2381
+ /** Number of runs with a usable proxy reward. */
2365
2382
  n: number;
2366
2383
  }
2367
2384
  interface DetectRewardHackingInput {
@@ -2531,6 +2548,7 @@ type ProviderRedactor = (event: RawProviderEvent) => RawProviderEvent;
2531
2548
  * OpenAI-compatible `/v1/chat/completions` client with:
2532
2549
  * - Exponential-backoff retry on 429 + 5xx gateway errors (502/503/504).
2533
2550
  * - Retry on transient network errors (fetch failed, AbortError, ECONNRESET).
2551
+ * - One retry at temperature 1 when a model explicitly requires it.
2534
2552
  * - Graceful json_schema → json_object degrade on 400 with schema-reject body.
2535
2553
  * - Fenced-JSON stripping (```json ... ```) for models that wrap structured output.
2536
2554
  * - Configurable base URL + api key / bearer, works with LiteLLM proxies, OpenAI
@@ -2751,10 +2769,16 @@ interface SummaryTableRow {
2751
2769
  mean: number;
2752
2770
  ciLow: number;
2753
2771
  ciHigh: number;
2754
- /** BH-adjusted q-value vs comparator. NaN if no comparator. */
2755
- qValue: number;
2756
- /** Cohen's d vs comparator. NaN if no comparator. */
2757
- cohensD: number;
2772
+ /** BH-adjusted q-value vs comparator, or null when unavailable. */
2773
+ qValue: number | null;
2774
+ /** Paired Cohen's dz vs comparator, or null when the paired variance is zero. */
2775
+ cohensD: number | null;
2776
+ /** Matched observations used for paired comparison, or null on the comparator row. */
2777
+ pairedN: number | null;
2778
+ /** Candidate observations without a comparator match. */
2779
+ unpairedCandidateN: number | null;
2780
+ /** Comparator observations without a candidate match. */
2781
+ unpairedComparatorN: number | null;
2758
2782
  }
2759
2783
  interface SummaryTable {
2760
2784
  rows: SummaryTableRow[];
@@ -2776,7 +2800,7 @@ interface ParetoPoint {
2776
2800
  onFrontier: boolean;
2777
2801
  /** Optional gate verdict for this candidate, if a `GateDecision`
2778
2802
  * for it was passed in. */
2779
- gate?: 'promote' | 'reject_few_runs' | 'reject_negative_delta' | 'reject_overfit_gap' | null;
2803
+ gate?: 'promote' | 'reject';
2780
2804
  }
2781
2805
  interface ParetoFigureSpec {
2782
2806
  kind: 'pareto-cost-quality';
@@ -2802,12 +2826,16 @@ interface GainDistributionFigureSpec {
2802
2826
  split: 'search' | 'holdout';
2803
2827
  /** Number of pairs used. */
2804
2828
  n: number;
2829
+ /** Candidate rows without a comparator match. */
2830
+ unpairedCandidateN: number;
2831
+ /** Comparator rows without a candidate match. */
2832
+ unpairedComparatorN: number;
2805
2833
  bins: GainDistributionBin[];
2806
- median: number;
2834
+ median: number | null;
2807
2835
  ci: {
2808
2836
  low: number;
2809
2837
  high: number;
2810
- };
2838
+ } | null;
2811
2839
  }
2812
2840
  type ResearchReportDecision = 'promote' | 'hold' | 'reject' | 'equivalent' | 'needs_more_data';
2813
2841
  interface ResearchReportOptions {
@@ -2880,8 +2908,8 @@ interface ResearchReportCandidate {
2880
2908
  mean: number;
2881
2909
  ciLow: number;
2882
2910
  ciHigh: number;
2883
- qValue: number;
2884
- cohensD: number;
2911
+ qValue: number | null;
2912
+ cohensD: number | null;
2885
2913
  meanDeltaVsComparator: number | null;
2886
2914
  pairedN: number;
2887
2915
  medianGain: number | null;
@@ -2891,10 +2919,9 @@ interface ResearchReportCandidate {
2891
2919
  high: number;
2892
2920
  } | null;
2893
2921
  /**
2894
- * Bayesian-bootstrap-style posterior summaries on the paired delta. Computed
2895
- * from the same resamples that produce the gain CI; interpretable as
2896
- * "fraction of resamples in which the candidate beats the comparator on
2897
- * matched pairs."
2922
+ * Bayesian-bootstrap posterior summaries on the paired mean delta.
2923
+ * Dirichlet(1, ..., 1) weights represent uncertainty over the empirical
2924
+ * distribution of matched deltas.
2898
2925
  */
2899
2926
  prGreaterThanZero: number | null;
2900
2927
  prInRope: number | null;
@@ -3209,8 +3236,10 @@ interface CampaignRunOutcome {
3209
3236
  pass: boolean;
3210
3237
  /** Score for the run on its split. Maps to `searchScore` or `holdoutScore`. */
3211
3238
  score: number;
3212
- /** Mandatory cost in USD. Use 0 + raw.cost_unknown=1 only if truly unknown. */
3213
- costUsd: number;
3239
+ /** Cost in USD, or null when the runner could not capture it. */
3240
+ costUsd: number | null;
3241
+ /** Source of the cost amount. */
3242
+ costProvenance: RunCostProvenance;
3214
3243
  tokenUsage: RunTokenUsage;
3215
3244
  /** Snapshot model id (e.g. `claude-sonnet-4-6@2025-04-15`). */
3216
3245
  model: string;
@@ -3569,14 +3598,17 @@ interface JudgeScore {
3569
3598
  }
3570
3599
  /** Five-valued verdict taxonomy (MOSS-paper alignment). */
3571
3600
  type GateDecision = 'ship' | 'hold' | 'need_more_work' | 'model_ceiling' | 'arch_ceiling';
3601
+ /** Outcome of one check that contributed to a release decision. */
3602
+ type GateCheckStatus = 'pass' | 'fail' | 'not_evaluated';
3603
+ interface GateContribution {
3604
+ name: string;
3605
+ status: GateCheckStatus;
3606
+ detail: unknown;
3607
+ }
3572
3608
  interface GateResult {
3573
3609
  decision: GateDecision;
3574
3610
  reasons: string[];
3575
- contributingGates: Array<{
3576
- name: string;
3577
- passed: boolean;
3578
- detail: unknown;
3579
- }>;
3611
+ contributingGates: GateContribution[];
3580
3612
  delta?: number;
3581
3613
  }
3582
3614
  /** Token usage accumulated for a cell. Aliased to the canonical `RunTokenUsage`
@@ -3609,6 +3641,10 @@ interface CampaignCellResult<TArtifact> {
3609
3641
  durationMs: number;
3610
3642
  seed: number;
3611
3643
  cached: boolean;
3644
+ /** Stage that produced `error`. Missing on successful cells. */
3645
+ errorStage?: 'dispatch' | 'judge';
3646
+ /** Judge that threw when `errorStage` is `judge`. */
3647
+ errorJudge?: string;
3612
3648
  error?: string;
3613
3649
  }
3614
3650
  interface JudgeAggregate {
@@ -3633,8 +3669,10 @@ interface GenerationRecord {
3633
3669
  * handled — the evidence a blind `Mutator` cannot see. */
3634
3670
  interface GenerationCandidate {
3635
3671
  surfaceHash: string;
3636
- composite: number;
3637
- ci95: [number, number];
3672
+ /** Mean over complete task-quality scores, or null when none were produced. */
3673
+ composite: number | null;
3674
+ /** Descriptive interval for `composite`, or null when no score exists. */
3675
+ ci95: [number, number] | null;
3638
3676
  /** Exact surface this candidate mutated. */
3639
3677
  parentSurfaceHash?: string;
3640
3678
  /** Measured search-split composite of the exact parent surface. */
@@ -3644,13 +3682,12 @@ interface GenerationCandidate {
3644
3682
  observedDeltaFromParent?: number;
3645
3683
  /** Whether this candidate had a scorable result for every designed campaign
3646
3684
  * cell and was therefore eligible for ranking, promotion, and Pareto
3647
- * selection. Older externally-authored records may omit this field; loop
3648
- * records always populate it. */
3649
- eligibleForPromotion?: boolean;
3685
+ * selection. */
3686
+ eligibleForPromotion: boolean;
3650
3687
  /** Exact denominator receipt for selection eligibility. Scores stay
3651
3688
  * descriptive: an incomplete candidate is retained with its observed score
3652
3689
  * and errors instead of receiving an invented penalty. */
3653
- coverage?: {
3690
+ coverage: {
3654
3691
  expectedCells: number;
3655
3692
  scorableCells: number;
3656
3693
  unscorableCells: Array<{
@@ -3691,10 +3728,18 @@ interface CampaignAggregates {
3691
3728
  cost: CostLedgerSummary;
3692
3729
  /** Compatibility alias of `cost.totalCostUsd`. */
3693
3730
  totalCostUsd: number;
3731
+ /** Cells whose dispatch completed, including cells whose later judge failed. */
3694
3732
  cellsExecuted: number;
3695
3733
  cellsSkipped: number;
3696
3734
  cellsCached: number;
3735
+ /** All non-skipped dispatch, judge, and unclassified cell failures. */
3697
3736
  cellsFailed: number;
3737
+ /** Present on results that record failure stages. */
3738
+ cellsDispatchFailed?: number;
3739
+ /** Present on results that record failure stages. */
3740
+ cellsJudgeFailed?: number;
3741
+ /** Legacy failures whose stage was not recorded. */
3742
+ cellsUnclassifiedFailed?: number;
3698
3743
  }
3699
3744
  interface CampaignResult<TArtifact = unknown, TScenario extends Scenario = Scenario> {
3700
3745
  /** sha256(scenarios, judges, dispatch source ref, optimizer config, seed). Stable identity for reruns. */
@@ -3749,29 +3794,30 @@ interface AdapterContext {
3749
3794
  configHash: string;
3750
3795
  /** Default split tag. Default `'search'`. */
3751
3796
  splitTag?: RunSplitTag;
3752
- /** Default cost in USD when the source doesn't record one. Default `0`. */
3797
+ /** Estimated cost in USD when the source doesn't record one. */
3753
3798
  defaultCostUsd?: number;
3754
3799
  }
3755
3800
  /**
3756
- * Convert a `CampaignResult` into canonical `RunRecord[]` one record per
3757
- * scored cell. The cell's mean judge composite becomes the split score; every
3758
- * judge dimension is carried through to `outcome.raw`. A cell that errored
3759
- * becomes a record with `failureMode: 'cell_error'` (kept, not dropped — an
3760
- * unscored cell is signal). `candidateId` identifies the measured surface
3761
- * (defaults to the campaign manifest hash).
3801
+ * Convert a `CampaignResult` into canonical `RunRecord[]`, one per cell.
3802
+ * Successful judged cells carry their mean judge composite and dimensions.
3803
+ * Errored or unjudged cells remain unlabeled while retaining explicit terminal
3804
+ * outcome, execution-error count, token usage, cost, and failure detail.
3805
+ * `candidateId` identifies the measured surface and defaults to the campaign
3806
+ * manifest hash.
3762
3807
  */
3763
3808
  declare function campaignToRunRecords(campaign: CampaignResult, ctx: AdapterContext & {
3764
3809
  candidateId?: string;
3765
3810
  }): RunRecord[];
3766
3811
  /**
3767
3812
  * Convert a `MultiLayerVerifier` `VerificationReport` into a `RunRecord`.
3768
- * `outcome.searchScore` (or `holdoutScore`) is `report.blendedScore`;
3769
- * `outcome.raw` carries every layer's score + a pass indicator; `failureMode`
3770
- * is the first failing layer's reason.
3813
+ * A split score is emitted only when `report.taskScore` proves the configured
3814
+ * scoring panel completed. Partial scores remain in `outcome.raw` for
3815
+ * diagnosis. Layer errors and timeouts become judge or execution telemetry;
3816
+ * only a scored `fail` layer may produce task-failure detail.
3771
3817
  */
3772
3818
  declare function verificationReportToRunRecord(report: VerificationReport, ctx: AdapterContext & {
3773
3819
  candidateId: string;
3774
- scenarioId?: string;
3820
+ scenarioId: string;
3775
3821
  }, opts?: {
3776
3822
  runId?: string;
3777
3823
  }): RunRecord;
@@ -4057,4 +4103,4 @@ interface BuildPairwiseFromCampaignInput {
4057
4103
  }
4058
4104
  declare function buildPairwiseFromCampaign(input: BuildPairwiseFromCampaignInput): PairwiseOutcome[];
4059
4105
 
4060
- export { ABSENT_CATEGORY, type AdaptationCurve, type AdaptationPoint, type AdaptationRunner, type AdapterContext, type AdversarialMutation, type BehaviorFeatures, type BradleyTerryFit, type BradleyTerryRating, type BuildPairwiseFromCampaignInput, type CellObservation, type CompareCurvesResult, type ComputeBestOfNOptions, type ComputeBestOfNResult, type ComputeCurve, type ComputeCurveBudget, type ComputeCurvePoint, type ContaminationProbeInput, type ContaminationProbeOptions, type ContaminationProbeReport, type CorpusAppendResult, type CorpusRecord, type CurriculumAllocation, DEFAULT_MIN_N_PER_FEATURE, DEFAULT_QUANTILE_BUCKETS, type DatasetFormat, type DeploymentOutcome, type DetectRewardHackingInput, type DpoExportRow, type DpoLookups, type EasyModeOptions, type EasyModeReport, type EloOptions, type ExtractPreferencesOptions, type ExtractStepRewardsOptions, type FeatureDivergence, type FeatureShift, type FidelityReport, type FidelityVerdict, FileSystemOutcomeStore, type FileSystemOutcomeStoreOptions, type GrpoExportRow, type GrpoLookups, type HarvestOptions, InMemoryOutcomeStore, type OffPolicyContributionCounts, type OffPolicyEstimate, type OffPolicyOptions, type OffPolicyTrajectory, type OutcomeStore, type PairwiseOutcome, type ParetoPointInput, PredictiveValidityResearcher, type PredictiveValidityResearcherOptions, type PreferenceExtractionReport, type PreferenceStrategy, type PreferenceTriple, type PrmExportRow, type PrmLookups, type PrmTrainingTriple, REPRESENTATIVE_MIN_FIDELITY, type RLCampaignResult, type RewardHackingFinding, type RewardHackingReport, type RewardHackingSignal, type RewardKind, type RewardStats, type RlDatasetBundle, type RlDatasetConfig, type RlDatasetManifest, type RlDatasetStats, type RunAdaptationCurveOptions, type RunComputeCurveOptions, type RunRLCampaignOptions, type RunwiseStepSummary, type ScenarioPerturbation, type ScenarioPerturbationKind, type SelfConsistencyOptions, type SelfConsistencyResult, type SftExportRow, type SftLookups, type SimFidelityOptions, type StepReward, type StepRewardJsonlRow, type StepScorer, type ThompsonCurriculumOptions, type VarianceCurriculumOptions, type VerifiableReward, type VerifiableRewardExtractionOptions, type VerifiableRewardSource, appendToCorpus, applyEloUpdate, bestOfN, bucketLabel, buildDatasetFromCorpus, buildPairwiseFromCampaign, buildRlDataset, campaignToRunRecords, compareAdaptationCurves, datasheetToMarkdown, defaultBehaviorFeatures, detectRewardHacking, doublyRobust, easyModeCheck, extractPreferences, extractStepRewards, extractVerifiableReward, extractVerifiableRewardsFromRecords, filterDeterministicallyRewarded, firstPassK, fitBradleyTerry, injectIrrelevantClause, inverseProbabilityWeighting, jsDivergence, observationsFromRunRecords, offPolicyEstimateAll, paretoFrontier, prmTrainingPairs, quantileEdges, readCorpus, renameVariables, runAdaptationCurve, runComputeCurve, runContaminationProbe, runEvalCampaign, runRLCampaign, runwiseStepRewardSummary, selfConsistency, selfNormalizedImportanceWeighting, shuffleOrder, simFidelityReport, stepRewardsToJsonl, thompsonCurriculum, toAnthropicFormat, toDpoJsonl, toDpoRows, toGrpoJsonl, toGrpoRows, toPrmJsonl, toPrmRows, toSftJsonl, toSftRows, toTRLFormat, varianceBasedCurriculum, verificationReportToRunRecord };
4106
+ export { ABSENT_CATEGORY, type AdaptationCurve, type AdaptationPoint, type AdaptationRunner, type AdapterContext, type AdversarialMutation, type BehaviorFeatures, type BradleyTerryFit, type BradleyTerryRating, type BuildPairwiseFromCampaignInput, type CellObservation, type CompareCurvesResult, type ComputeBestOfNOptions, type ComputeBestOfNResult, type ComputeCurve, type ComputeCurveBudget, type ComputeCurvePoint, type ContaminationProbeInput, type ContaminationProbeOptions, type ContaminationProbeReport, type CorpusAppendResult, type CorpusRecord, type CurriculumAllocation, DEFAULT_MIN_N_PER_FEATURE, DEFAULT_QUANTILE_BUCKETS, type DatasetFormat, type DeploymentOutcome, type DetectRewardHackingInput, type DpoExportRow, type DpoLookups, type EasyModeOptions, type EasyModeReport, type EloOptions, type ExtractPreferencesOptions, type ExtractStepRewardsOptions, type FeatureDivergence, type FeatureShift, type FidelityReport, type FidelityVerdict, FileSystemOutcomeStore, type FileSystemOutcomeStoreOptions, type GrpoExportRow, type GrpoLookups, type HarvestOptions, InMemoryOutcomeStore, type OffPolicyContributionCounts, type OffPolicyEstimate, type OffPolicyOptions, type OffPolicyTrajectory, type OutcomeStore, type PairwiseOutcome, type ParetoPointInput, PredictiveValidityResearcher, type PredictiveValidityResearcherOptions, type PreferenceExtractionReport, type PreferenceStrategy, type PreferenceTriple, type PrmExportRow, type PrmLookups, type PrmTrainingTriple, REPRESENTATIVE_MIN_FIDELITY, type RLCampaignResult, type RewardHackingFinding, type RewardHackingReport, type RewardHackingSignal, type RewardKind, type RewardStats, type RlDatasetBundle, type RlDatasetConfig, type RlDatasetManifest, type RlDatasetStats, type RunAdaptationCurveOptions, type RunComputeCurveOptions, type RunRLCampaignOptions, type RunwiseStepSummary, type ScenarioPerturbation, type ScenarioPerturbationKind, type SelfConsistencyOptions, type SelfConsistencyResult, type SftExportRow, type SftLookups, type SimFidelityOptions, type StepReward, type StepRewardJsonlRow, type StepScorer, type ThompsonCurriculumOptions, type TrainingRunSelectionOptions, type VarianceCurriculumOptions, type VerifiableReward, type VerifiableRewardExtractionOptions, type VerifiableRewardSource, appendToCorpus, applyEloUpdate, bestOfN, bucketLabel, buildDatasetFromCorpus, buildPairwiseFromCampaign, buildRlDataset, campaignToRunRecords, compareAdaptationCurves, datasheetToMarkdown, defaultBehaviorFeatures, detectRewardHacking, doublyRobust, easyModeCheck, extractPreferences, extractStepRewards, extractVerifiableReward, extractVerifiableRewardsFromRecords, filterDeterministicallyRewarded, firstPassK, fitBradleyTerry, injectIrrelevantClause, inverseProbabilityWeighting, isTrainingRunEligible, jsDivergence, observationsFromRunRecords, offPolicyEstimateAll, paretoFrontier, prmTrainingPairs, quantileEdges, readCorpus, renameVariables, runAdaptationCurve, runComputeCurve, runContaminationProbe, runEvalCampaign, runRLCampaign, runwiseStepRewardSummary, selfConsistency, selfNormalizedImportanceWeighting, shuffleOrder, simFidelityReport, stepRewardsToJsonl, thompsonCurriculum, toAnthropicFormat, toDpoJsonl, toDpoRows, toGrpoJsonl, toGrpoRows, toPrmJsonl, toPrmRows, toSftJsonl, toSftRows, validateDatasetFormats, varianceBasedCurriculum, verificationReportToRunRecord };