@tangle-network/agent-eval 0.118.3 → 0.119.1

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 (65) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +26 -0
  3. package/dist/analyst/index.d.ts +172 -59
  4. package/dist/analyst/index.js +50 -12
  5. package/dist/analyst/index.js.map +1 -1
  6. package/dist/benchmarks/index.d.ts +50 -40
  7. package/dist/benchmarks/index.js +8 -8
  8. package/dist/campaign/index.d.ts +258 -184
  9. package/dist/campaign/index.js +7 -7
  10. package/dist/{chunk-JTMFT5QZ.js → chunk-4I2E3LLO.js} +2 -2
  11. package/dist/{chunk-KK2O4VWA.js → chunk-D7AEXSM5.js} +2 -2
  12. package/dist/{chunk-MLHRFWQK.js → chunk-JHOJHHU7.js} +85 -16
  13. package/dist/chunk-JHOJHHU7.js.map +1 -0
  14. package/dist/{chunk-F5A4GDQW.js → chunk-JM2SKQMS.js} +3 -15
  15. package/dist/chunk-JM2SKQMS.js.map +1 -0
  16. package/dist/{chunk-EGNRE7VA.js → chunk-PAHNGS65.js} +2 -2
  17. package/dist/{chunk-QWRLW4CT.js → chunk-PSXJ32SR.js} +160 -6
  18. package/dist/chunk-PSXJ32SR.js.map +1 -0
  19. package/dist/{chunk-6QIM2EAP.js → chunk-PXD6ZFNY.js} +99 -1
  20. package/dist/chunk-PXD6ZFNY.js.map +1 -0
  21. package/dist/{chunk-267UCQWI.js → chunk-QWMPPZ3X.js} +3 -3
  22. package/dist/{chunk-267UCQWI.js.map → chunk-QWMPPZ3X.js.map} +1 -1
  23. package/dist/{chunk-VNLWDTDA.js → chunk-S5TT5R3L.js} +1010 -285
  24. package/dist/chunk-S5TT5R3L.js.map +1 -0
  25. package/dist/{chunk-ZYHJNKI3.js → chunk-ULOKLHIQ.js} +42 -5
  26. package/dist/chunk-ULOKLHIQ.js.map +1 -0
  27. package/dist/{chunk-FIUFRXP3.js → chunk-WW2A73HW.js} +49 -91
  28. package/dist/chunk-WW2A73HW.js.map +1 -0
  29. package/dist/{chunk-7V3QDWNL.js → chunk-XJ7JVCHB.js} +2 -2
  30. package/dist/{chunk-EKHHBKS6.js → chunk-XMBOU5W7.js} +48 -190
  31. package/dist/chunk-XMBOU5W7.js.map +1 -0
  32. package/dist/cli.js +2 -2
  33. package/dist/contract/index.d.ts +281 -175
  34. package/dist/contract/index.js +284 -8
  35. package/dist/contract/index.js.map +1 -1
  36. package/dist/fuzz.d.ts +19 -1
  37. package/dist/fuzz.js +1 -1
  38. package/dist/index.d.ts +223 -114
  39. package/dist/index.js +38 -37
  40. package/dist/index.js.map +1 -1
  41. package/dist/openapi.json +1 -1
  42. package/dist/primeintellect/index.d.ts +311 -0
  43. package/dist/primeintellect/index.js +348 -0
  44. package/dist/primeintellect/index.js.map +1 -0
  45. package/dist/rl.d.ts +4 -0
  46. package/dist/{run-campaign-DWC67KJP.js → run-campaign-OBXSN5WK.js} +3 -3
  47. package/dist/traces.d.ts +39 -25
  48. package/dist/traces.js +3 -5
  49. package/dist/wire/index.d.ts +19 -1
  50. package/dist/wire/index.js +2 -2
  51. package/docs/trace-analysis.md +6 -2
  52. package/package.json +7 -2
  53. package/dist/chunk-6QIM2EAP.js.map +0 -1
  54. package/dist/chunk-EKHHBKS6.js.map +0 -1
  55. package/dist/chunk-F5A4GDQW.js.map +0 -1
  56. package/dist/chunk-FIUFRXP3.js.map +0 -1
  57. package/dist/chunk-MLHRFWQK.js.map +0 -1
  58. package/dist/chunk-QWRLW4CT.js.map +0 -1
  59. package/dist/chunk-VNLWDTDA.js.map +0 -1
  60. package/dist/chunk-ZYHJNKI3.js.map +0 -1
  61. /package/dist/{chunk-JTMFT5QZ.js.map → chunk-4I2E3LLO.js.map} +0 -0
  62. /package/dist/{chunk-KK2O4VWA.js.map → chunk-D7AEXSM5.js.map} +0 -0
  63. /package/dist/{chunk-EGNRE7VA.js.map → chunk-PAHNGS65.js.map} +0 -0
  64. /package/dist/{chunk-7V3QDWNL.js.map → chunk-XJ7JVCHB.js.map} +0 -0
  65. /package/dist/{run-campaign-DWC67KJP.js.map → run-campaign-OBXSN5WK.js.map} +0 -0
@@ -5,11 +5,11 @@ import {
5
5
  resolveRunDir,
6
6
  runCampaign,
7
7
  summarizeBackendIntegrity
8
- } from "./chunk-EGNRE7VA.js";
8
+ } from "./chunk-PAHNGS65.js";
9
9
  import {
10
10
  clamp01,
11
11
  validatePolicyEditCandidateRecord
12
- } from "./chunk-VNLWDTDA.js";
12
+ } from "./chunk-S5TT5R3L.js";
13
13
  import {
14
14
  detectRewardHacking
15
15
  } from "./chunk-ARU2PZFM.js";
@@ -21,12 +21,15 @@ import {
21
21
  stripFencedJson
22
22
  } from "./chunk-NJC7U437.js";
23
23
  import {
24
+ mcnemar,
24
25
  pairedBootstrap,
25
- weightedComposite
26
+ pairedRiskDifference,
27
+ weightedComposite,
28
+ wilcoxonSignedRank
26
29
  } from "./chunk-PJQFMIOX.js";
27
30
  import {
28
31
  CostLedger
29
- } from "./chunk-MLHRFWQK.js";
32
+ } from "./chunk-JHOJHHU7.js";
30
33
  import {
31
34
  DEFAULT_REDACTION_RULES
32
35
  } from "./chunk-GGE4NNQT.js";
@@ -292,6 +295,155 @@ async function runJudgeChat(tc, input, judgeName, request) {
292
295
  return paid.value;
293
296
  }
294
297
 
298
+ // src/paired-arms.ts
299
+ function pairArms(rows, opts) {
300
+ const { baselineArm, treatmentArm } = opts;
301
+ if (baselineArm === treatmentArm) {
302
+ throw new ValidationError(
303
+ `pairArms: baselineArm and treatmentArm are both '${baselineArm}' \u2014 an arm cannot be compared to itself`
304
+ );
305
+ }
306
+ const byArm = /* @__PURE__ */ new Map();
307
+ const armsSeen = /* @__PURE__ */ new Set();
308
+ for (const row of rows) {
309
+ armsSeen.add(row.arm);
310
+ if (row.arm !== baselineArm && row.arm !== treatmentArm) continue;
311
+ const byKey = byArm.get(row.arm) ?? /* @__PURE__ */ new Map();
312
+ const group = byKey.get(row.pairKey) ?? [];
313
+ group.push(row);
314
+ byKey.set(row.pairKey, group);
315
+ byArm.set(row.arm, byKey);
316
+ }
317
+ for (const arm of [baselineArm, treatmentArm]) {
318
+ if (!byArm.has(arm)) {
319
+ const seen = [...armsSeen].sort().join(", ") || "<none>";
320
+ throw new ValidationError(`pairArms: no rows for arm '${arm}' (arms present: ${seen})`);
321
+ }
322
+ }
323
+ const baselineByKey = byArm.get(baselineArm);
324
+ const treatmentByKey = byArm.get(treatmentArm);
325
+ const allKeys = [.../* @__PURE__ */ new Set([...baselineByKey.keys(), ...treatmentByKey.keys()])].sort();
326
+ const pairs = [];
327
+ const unpairedBaseline = [];
328
+ const unpairedTreatment = [];
329
+ for (const pairKey of allKeys) {
330
+ const b = baselineByKey.get(pairKey) ?? [];
331
+ const t = treatmentByKey.get(pairKey) ?? [];
332
+ if (b.length <= 1 && t.length <= 1) {
333
+ if (b.length === 1 && t.length === 1) {
334
+ pairs.push({ pairKey, repIndex: 0, baseline: b[0], treatment: t[0] });
335
+ } else {
336
+ unpairedBaseline.push(...b);
337
+ unpairedTreatment.push(...t);
338
+ }
339
+ continue;
340
+ }
341
+ const bByRep = indexByRepKey(b, pairKey, baselineArm);
342
+ const tByRep = indexByRepKey(t, pairKey, treatmentArm);
343
+ const repKeys = [.../* @__PURE__ */ new Set([...bByRep.keys(), ...tByRep.keys()])].sort();
344
+ let repIndex = 0;
345
+ for (const repKey of repKeys) {
346
+ const baseline = bByRep.get(repKey);
347
+ const treatment = tByRep.get(repKey);
348
+ if (baseline !== void 0 && treatment !== void 0) {
349
+ pairs.push({ pairKey, repIndex: repIndex++, baseline, treatment });
350
+ } else if (baseline !== void 0) {
351
+ unpairedBaseline.push(baseline);
352
+ } else if (treatment !== void 0) {
353
+ unpairedTreatment.push(treatment);
354
+ }
355
+ }
356
+ }
357
+ return { pairs, unpairedBaseline, unpairedTreatment };
358
+ }
359
+ function indexByRepKey(group, pairKey, arm) {
360
+ const byRep = /* @__PURE__ */ new Map();
361
+ for (const row of group) {
362
+ if (row.repKey === void 0) {
363
+ throw new ValidationError(
364
+ `pairArms: pairKey '${pairKey}' has multiple reps in an arm, but a row in arm '${arm}' is missing repKey \u2014 multi-rep items require an explicit repKey on every row so reps pair by identity (pairing reps by outcome or by index would bias the paired statistics)`
365
+ );
366
+ }
367
+ if (byRep.has(row.repKey)) {
368
+ throw new ValidationError(
369
+ `pairArms: duplicate repKey '${row.repKey}' for pairKey '${pairKey}' in arm '${arm}' \u2014 (pairKey, repKey) must uniquely identify a rep within an arm`
370
+ );
371
+ }
372
+ byRep.set(row.repKey, row);
373
+ }
374
+ return byRep;
375
+ }
376
+ function comparePairedArms(rows, opts) {
377
+ const { pairs, unpairedBaseline, unpairedTreatment } = pairArms(rows, opts);
378
+ let correctness = null;
379
+ const baselinePass = [];
380
+ const treatmentPass = [];
381
+ for (const pair of pairs) {
382
+ if (pair.baseline.pass === void 0 || pair.treatment.pass === void 0) continue;
383
+ baselinePass.push(pair.baseline.pass ? 1 : 0);
384
+ treatmentPass.push(pair.treatment.pass ? 1 : 0);
385
+ }
386
+ if (baselinePass.length > 0) {
387
+ const mc = mcnemar(baselinePass, treatmentPass);
388
+ correctness = {
389
+ b10: mc.b,
390
+ b01: mc.c,
391
+ mcnemar: mc,
392
+ riskDifference: pairedRiskDifference(baselinePass, treatmentPass)
393
+ };
394
+ }
395
+ const metricNames = opts.metricNames ?? [
396
+ ...new Set(
397
+ pairs.flatMap((p) => [
398
+ ...Object.keys(p.baseline.metrics ?? {}),
399
+ ...Object.keys(p.treatment.metrics ?? {})
400
+ ])
401
+ )
402
+ ].sort();
403
+ const metricDeltas = metricNames.map((name) => {
404
+ const before = [];
405
+ const after = [];
406
+ let nMissing = 0;
407
+ for (const pair of pairs) {
408
+ const b = metricValue(pair.baseline, name);
409
+ const t = metricValue(pair.treatment, name);
410
+ if (b === void 0 || t === void 0) {
411
+ nMissing++;
412
+ continue;
413
+ }
414
+ before.push(b);
415
+ after.push(t);
416
+ }
417
+ const bootstrapCi = before.length === 0 ? null : pairedBootstrap(before, after, opts.bootstrap);
418
+ return {
419
+ name,
420
+ n: before.length,
421
+ nMissing,
422
+ medianDelta: bootstrapCi === null ? Number.NaN : bootstrapCi.median,
423
+ meanDelta: bootstrapCi === null ? Number.NaN : bootstrapCi.mean,
424
+ bootstrapCi,
425
+ wilcoxon: before.length === 0 ? null : wilcoxonSignedRank(before, after)
426
+ };
427
+ });
428
+ return {
429
+ nPairs: pairs.length,
430
+ nUnpairedBaseline: unpairedBaseline.length,
431
+ nUnpairedTreatment: unpairedTreatment.length,
432
+ correctness,
433
+ metricDeltas
434
+ };
435
+ }
436
+ function metricValue(row, name) {
437
+ const v = row.metrics?.[name];
438
+ if (v === void 0) return void 0;
439
+ if (!Number.isFinite(v)) {
440
+ throw new ValidationError(
441
+ `comparePairedArms: non-finite value for metric '${name}' on pairKey '${row.pairKey}' (arm '${row.arm}'): ${v}`
442
+ );
443
+ }
444
+ return v;
445
+ }
446
+
295
447
  // src/pareto.ts
296
448
  function dominates(a, b, objectives) {
297
449
  let strictlyBetter = false;
@@ -2970,7 +3122,7 @@ async function runImprovementLoop(opts) {
2970
3122
  const dispatchTimeoutMs = opts.dispatchTimeoutMs ?? DEFAULT_DISPATCH_TIMEOUT_MS;
2971
3123
  const optimization = await runOptimization({ ...opts, dispatchTimeoutMs, costLedger });
2972
3124
  const winnerIsBaseline = optimization.winnerSurfaceHash === surfaceHash(opts.baselineSurface);
2973
- const { runCampaign: runCampaign2 } = await import("./run-campaign-DWC67KJP.js");
3125
+ const { runCampaign: runCampaign2 } = await import("./run-campaign-OBXSN5WK.js");
2974
3126
  const baselineOnHoldout = await runCampaign2({
2975
3127
  ...opts,
2976
3128
  costLedger,
@@ -3552,6 +3704,8 @@ export {
3552
3704
  adversarialJudge,
3553
3705
  createCustomJudge,
3554
3706
  defaultJudges,
3707
+ pairArms,
3708
+ comparePairedArms,
3555
3709
  recoverTruncatedJson,
3556
3710
  dominates,
3557
3711
  paretoFrontier,
@@ -3610,4 +3764,4 @@ export {
3610
3764
  provenanceSpansPath,
3611
3765
  emitLoopProvenance
3612
3766
  };
3613
- //# sourceMappingURL=chunk-QWRLW4CT.js.map
3767
+ //# sourceMappingURL=chunk-PSXJ32SR.js.map