@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
@@ -0,0 +1,179 @@
1
+ // src/campaign/run-record.ts
2
+ function campaignCellToRunRecord(cell, options) {
3
+ const quality = projectCampaignCellQuality(cell);
4
+ const execution = campaignCellExecutionEvidence(cell);
5
+ const judgeErrorCount = Math.max(
6
+ quality.raw.judge_error_count ?? 0,
7
+ execution.judgeErrorCount ?? 0
8
+ );
9
+ const cellCostCaptured = Number.isFinite(cell.costUsd) && cell.costUsd >= 0;
10
+ const costUsd = cellCostCaptured ? cell.costUsd : options.defaultCostUsd ?? null;
11
+ const costProvenance = costUsd === null ? { kind: "uncaptured", usd: null } : cellCostCaptured && !cell.costEstimated ? { kind: "observed", usd: costUsd } : { kind: "estimated", usd: costUsd };
12
+ const raw = {
13
+ ...finiteMetrics(options.raw),
14
+ ...quality.raw,
15
+ rep: cell.rep,
16
+ duration_ms: cell.durationMs,
17
+ ...costUsd === null ? {} : { cost_usd: costUsd },
18
+ cost_estimated: cell.costEstimated ? 1 : 0,
19
+ tokens_input: cell.tokenUsage.input,
20
+ tokens_output: cell.tokenUsage.output,
21
+ latency_ms: cell.durationMs,
22
+ ...execution.executionErrorCount === void 0 ? {} : { execution_error_count: execution.executionErrorCount },
23
+ ...judgeErrorCount > 0 ? { judge_error_count: judgeErrorCount } : {},
24
+ ...execution.unclassifiedErrorCount === void 0 ? {} : { unclassified_error_count: execution.unclassifiedErrorCount }
25
+ };
26
+ if (typeof cell.generation === "number") raw.generation = cell.generation;
27
+ if (cell.tokenUsage.reasoning !== void 0) {
28
+ raw.tokens_reasoning = cell.tokenUsage.reasoning;
29
+ }
30
+ if (cell.tokenUsage.cached !== void 0) raw.tokens_cached = cell.tokenUsage.cached;
31
+ if (cell.tokenUsage.cacheWrite !== void 0) {
32
+ raw.tokens_cache_write = cell.tokenUsage.cacheWrite;
33
+ }
34
+ if (costUsd !== null && costUsd > 0) {
35
+ raw.tokens_per_dollar = (cell.tokenUsage.input + cell.tokenUsage.output) / costUsd;
36
+ }
37
+ if (costUsd !== null && quality.score !== void 0 && quality.score > 0.01) {
38
+ raw.cost_per_quality = costUsd / quality.score;
39
+ }
40
+ const outcome = {
41
+ raw,
42
+ ...quality.judgeScores ? { judgeScores: quality.judgeScores } : {}
43
+ };
44
+ if (quality.score !== void 0) {
45
+ if (options.splitTag === "holdout") outcome.holdoutScore = quality.score;
46
+ else outcome.searchScore = quality.score;
47
+ }
48
+ return {
49
+ runId: options.runId,
50
+ experimentId: options.experimentId,
51
+ candidateId: options.candidateId,
52
+ seed: options.seed ?? cell.seed,
53
+ model: options.model,
54
+ promptHash: options.promptHash,
55
+ configHash: options.configHash,
56
+ commitSha: options.commitSha,
57
+ wallMs: cell.durationMs,
58
+ costUsd,
59
+ costProvenance,
60
+ tokenUsage: { ...cell.tokenUsage },
61
+ terminalOutcome: execution.terminalOutcome,
62
+ ...execution.terminalFailureReason ? { terminalFailureReason: execution.terminalFailureReason } : {},
63
+ outcome,
64
+ splitTag: options.splitTag,
65
+ scenarioId: options.scenarioId ?? cell.scenarioId,
66
+ ...options.agentProfile ? { agentProfile: options.agentProfile } : {}
67
+ };
68
+ }
69
+ function campaignCellExecutionEvidence(cell) {
70
+ if (cell.errorStage === "dispatch") {
71
+ return {
72
+ terminalOutcome: "failed",
73
+ executionErrorCount: 1,
74
+ ...cell.error ? { terminalFailureReason: cell.error } : {}
75
+ };
76
+ }
77
+ if (cell.errorStage === "judge") {
78
+ return {
79
+ terminalOutcome: "succeeded",
80
+ executionErrorCount: 0,
81
+ judgeErrorCount: 1
82
+ };
83
+ }
84
+ if (!cell.error) {
85
+ return { terminalOutcome: "succeeded", executionErrorCount: 0 };
86
+ }
87
+ return {
88
+ terminalOutcome: "unknown",
89
+ unclassifiedErrorCount: 1
90
+ };
91
+ }
92
+ function projectCampaignCellQuality(cell) {
93
+ if (cell.errorStage === "dispatch") {
94
+ return { successfulJudgeScores: {}, failedJudges: [], raw: {} };
95
+ }
96
+ const perJudge = {};
97
+ const successfulJudgeScores = {};
98
+ const dimensionValues = /* @__PURE__ */ new Map();
99
+ const composites = [];
100
+ const notes = [];
101
+ const failedJudges = new Set(
102
+ cell.errorStage === "judge" ? [cell.errorJudge ?? "unknown-judge"] : []
103
+ );
104
+ const raw = {};
105
+ for (const [judgeName, score] of Object.entries(cell.judgeScores)) {
106
+ const finiteDimensions = Object.values(score.dimensions).every(Number.isFinite);
107
+ if (score.failed || !Number.isFinite(score.composite) || !finiteDimensions) {
108
+ failedJudges.add(judgeName);
109
+ continue;
110
+ }
111
+ composites.push(score.composite);
112
+ successfulJudgeScores[judgeName] = score;
113
+ const dimensions = { ...score.dimensions };
114
+ perJudge[judgeName] = dimensions;
115
+ for (const [dimension, value] of Object.entries(dimensions)) {
116
+ raw[`${judgeName}.${dimension}`] = value;
117
+ const values = dimensionValues.get(dimension) ?? [];
118
+ values.push(value);
119
+ dimensionValues.set(dimension, values);
120
+ }
121
+ if (score.notes) notes.push(`${judgeName}: ${score.notes}`);
122
+ for (const failedJudge of score.failedJudges ?? []) {
123
+ failedJudges.add(`${judgeName}/${failedJudge}`);
124
+ }
125
+ }
126
+ if (failedJudges.size > 0) raw.judge_error_count = failedJudges.size;
127
+ const sortedFailedJudges = [...failedJudges].sort();
128
+ if (composites.length === 0) {
129
+ return {
130
+ successfulJudgeScores,
131
+ failedJudges: sortedFailedJudges,
132
+ raw
133
+ };
134
+ }
135
+ const composite = mean(composites);
136
+ const perDimMean = Object.fromEntries(
137
+ [...dimensionValues.entries()].map(([dimension, values]) => [dimension, mean(values)])
138
+ );
139
+ const complete = cell.error === void 0 && cell.errorStage === void 0 && failedJudges.size === 0;
140
+ if (complete) raw.composite = composite;
141
+ return {
142
+ ...complete ? { score: composite } : {},
143
+ raw,
144
+ successfulJudgeScores,
145
+ failedJudges: sortedFailedJudges,
146
+ judgeScores: {
147
+ perJudge,
148
+ perDimMean,
149
+ composite,
150
+ ...sortedFailedJudges.length > 0 ? { failedJudges: sortedFailedJudges } : {},
151
+ ...notes.length > 0 ? { notes: notes.join(" | ") } : {}
152
+ }
153
+ };
154
+ }
155
+ function campaignCellTaskScore(cell) {
156
+ return projectCampaignCellQuality(cell).score;
157
+ }
158
+ function campaignCellJudgeDimensions(cell) {
159
+ return projectCampaignCellQuality(cell).judgeScores?.perJudge ?? {};
160
+ }
161
+ function finiteMetrics(metrics) {
162
+ const finite = {};
163
+ for (const [key, value] of Object.entries(metrics ?? {})) {
164
+ if (Number.isFinite(value)) finite[key] = value;
165
+ }
166
+ return finite;
167
+ }
168
+ function mean(values) {
169
+ return values.reduce((sum, value) => sum + value, 0) / values.length;
170
+ }
171
+
172
+ export {
173
+ campaignCellToRunRecord,
174
+ campaignCellExecutionEvidence,
175
+ projectCampaignCellQuality,
176
+ campaignCellTaskScore,
177
+ campaignCellJudgeDimensions
178
+ };
179
+ //# sourceMappingURL=chunk-ZPUEEM5U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/campaign/run-record.ts"],"sourcesContent":["import type { AgentProfileCell } from '../agent-profile-cell'\nimport type {\n JudgeScoresRecord,\n RunOutcome,\n RunRecord,\n RunSplitTag,\n RunTerminalOutcome,\n} from '../run-record'\nimport type { CampaignCellResult, JudgeScore } from './types'\n\nexport interface CampaignCellRunRecordOptions {\n runId: string\n experimentId: string\n candidateId: string\n model: string\n promptHash: string\n configHash: string\n commitSha: string\n splitTag: RunSplitTag\n seed?: number\n scenarioId?: string\n defaultCostUsd?: number\n agentProfile?: AgentProfileCell\n raw?: Record<string, number>\n}\n\nexport interface CampaignCellQualityProjection {\n score?: number\n judgeScores?: JudgeScoresRecord\n successfulJudgeScores: Record<string, JudgeScore>\n failedJudges: string[]\n raw: Record<string, number>\n}\n\nexport interface CampaignCellExecutionEvidence {\n terminalOutcome: RunTerminalOutcome\n executionErrorCount?: number\n judgeErrorCount?: number\n unclassifiedErrorCount?: number\n terminalFailureReason?: string\n}\n\n/**\n * Project one campaign cell into the canonical run format.\n *\n * A dispatch error establishes terminal execution failure. A judge error only\n * establishes that quality measurement failed after dispatch completed.\n * Failures without a stage remain unknown. No failure becomes a zero-quality\n * label.\n */\nexport function campaignCellToRunRecord<TArtifact>(\n cell: CampaignCellResult<TArtifact>,\n options: CampaignCellRunRecordOptions,\n): RunRecord {\n const quality = projectCampaignCellQuality(cell)\n const execution = campaignCellExecutionEvidence(cell)\n const judgeErrorCount = Math.max(\n quality.raw.judge_error_count ?? 0,\n execution.judgeErrorCount ?? 0,\n )\n const cellCostCaptured = Number.isFinite(cell.costUsd) && cell.costUsd >= 0\n const costUsd = cellCostCaptured ? cell.costUsd : (options.defaultCostUsd ?? null)\n const costProvenance =\n costUsd === null\n ? ({ kind: 'uncaptured', usd: null } as const)\n : cellCostCaptured && !cell.costEstimated\n ? ({ kind: 'observed', usd: costUsd } as const)\n : ({ kind: 'estimated', usd: costUsd } as const)\n const raw: Record<string, number> = {\n ...finiteMetrics(options.raw),\n ...quality.raw,\n rep: cell.rep,\n duration_ms: cell.durationMs,\n ...(costUsd === null ? {} : { cost_usd: costUsd }),\n cost_estimated: cell.costEstimated ? 1 : 0,\n tokens_input: cell.tokenUsage.input,\n tokens_output: cell.tokenUsage.output,\n latency_ms: cell.durationMs,\n ...(execution.executionErrorCount === undefined\n ? {}\n : { execution_error_count: execution.executionErrorCount }),\n ...(judgeErrorCount > 0 ? { judge_error_count: judgeErrorCount } : {}),\n ...(execution.unclassifiedErrorCount === undefined\n ? {}\n : { unclassified_error_count: execution.unclassifiedErrorCount }),\n }\n if (typeof cell.generation === 'number') raw.generation = cell.generation\n if (cell.tokenUsage.reasoning !== undefined) {\n raw.tokens_reasoning = cell.tokenUsage.reasoning\n }\n if (cell.tokenUsage.cached !== undefined) raw.tokens_cached = cell.tokenUsage.cached\n if (cell.tokenUsage.cacheWrite !== undefined) {\n raw.tokens_cache_write = cell.tokenUsage.cacheWrite\n }\n if (costUsd !== null && costUsd > 0) {\n raw.tokens_per_dollar = (cell.tokenUsage.input + cell.tokenUsage.output) / costUsd\n }\n if (costUsd !== null && quality.score !== undefined && quality.score > 0.01) {\n raw.cost_per_quality = costUsd / quality.score\n }\n\n const outcome: RunOutcome = {\n raw,\n ...(quality.judgeScores ? { judgeScores: quality.judgeScores } : {}),\n }\n if (quality.score !== undefined) {\n if (options.splitTag === 'holdout') outcome.holdoutScore = quality.score\n else outcome.searchScore = quality.score\n }\n\n return {\n runId: options.runId,\n experimentId: options.experimentId,\n candidateId: options.candidateId,\n seed: options.seed ?? cell.seed,\n model: options.model,\n promptHash: options.promptHash,\n configHash: options.configHash,\n commitSha: options.commitSha,\n wallMs: cell.durationMs,\n costUsd,\n costProvenance,\n tokenUsage: { ...cell.tokenUsage },\n terminalOutcome: execution.terminalOutcome,\n ...(execution.terminalFailureReason\n ? { terminalFailureReason: execution.terminalFailureReason }\n : {}),\n outcome,\n splitTag: options.splitTag,\n scenarioId: options.scenarioId ?? cell.scenarioId,\n ...(options.agentProfile ? { agentProfile: options.agentProfile } : {}),\n }\n}\n\nexport function campaignCellExecutionEvidence<TArtifact>(\n cell: CampaignCellResult<TArtifact>,\n): CampaignCellExecutionEvidence {\n if (cell.errorStage === 'dispatch') {\n return {\n terminalOutcome: 'failed',\n executionErrorCount: 1,\n ...(cell.error ? { terminalFailureReason: cell.error } : {}),\n }\n }\n if (cell.errorStage === 'judge') {\n return {\n terminalOutcome: 'succeeded',\n executionErrorCount: 0,\n judgeErrorCount: 1,\n }\n }\n if (!cell.error) {\n return { terminalOutcome: 'succeeded', executionErrorCount: 0 }\n }\n return {\n terminalOutcome: 'unknown',\n unclassifiedErrorCount: 1,\n }\n}\n\n/**\n * Produce the only task-quality view used by campaign aggregates and exports.\n *\n * Successful judge results remain available for diagnosis after another judge\n * fails, but a task score exists only for an error-free cell whose reported\n * judge values are all finite.\n */\nexport function projectCampaignCellQuality<TArtifact>(\n cell: CampaignCellResult<TArtifact>,\n): CampaignCellQualityProjection {\n if (cell.errorStage === 'dispatch') {\n return { successfulJudgeScores: {}, failedJudges: [], raw: {} }\n }\n\n const perJudge: Record<string, Record<string, number>> = {}\n const successfulJudgeScores: Record<string, JudgeScore> = {}\n const dimensionValues = new Map<string, number[]>()\n const composites: number[] = []\n const notes: string[] = []\n const failedJudges = new Set<string>(\n cell.errorStage === 'judge' ? [cell.errorJudge ?? 'unknown-judge'] : [],\n )\n const raw: Record<string, number> = {}\n\n for (const [judgeName, score] of Object.entries(cell.judgeScores)) {\n const finiteDimensions = Object.values(score.dimensions).every(Number.isFinite)\n if (score.failed || !Number.isFinite(score.composite) || !finiteDimensions) {\n failedJudges.add(judgeName)\n continue\n }\n\n composites.push(score.composite)\n successfulJudgeScores[judgeName] = score\n const dimensions = { ...score.dimensions }\n perJudge[judgeName] = dimensions\n for (const [dimension, value] of Object.entries(dimensions)) {\n raw[`${judgeName}.${dimension}`] = value\n const values = dimensionValues.get(dimension) ?? []\n values.push(value)\n dimensionValues.set(dimension, values)\n }\n if (score.notes) notes.push(`${judgeName}: ${score.notes}`)\n for (const failedJudge of score.failedJudges ?? []) {\n failedJudges.add(`${judgeName}/${failedJudge}`)\n }\n }\n\n if (failedJudges.size > 0) raw.judge_error_count = failedJudges.size\n const sortedFailedJudges = [...failedJudges].sort()\n if (composites.length === 0) {\n return {\n successfulJudgeScores,\n failedJudges: sortedFailedJudges,\n raw,\n }\n }\n\n const composite = mean(composites)\n const perDimMean = Object.fromEntries(\n [...dimensionValues.entries()].map(([dimension, values]) => [dimension, mean(values)]),\n )\n const complete =\n cell.error === undefined && cell.errorStage === undefined && failedJudges.size === 0\n if (complete) raw.composite = composite\n\n return {\n ...(complete ? { score: composite } : {}),\n raw,\n successfulJudgeScores,\n failedJudges: sortedFailedJudges,\n judgeScores: {\n perJudge,\n perDimMean,\n composite,\n ...(sortedFailedJudges.length > 0 ? { failedJudges: sortedFailedJudges } : {}),\n ...(notes.length > 0 ? { notes: notes.join(' | ') } : {}),\n },\n }\n}\n\n/** Read the canonical task score without recomputing cell quality. */\nexport function campaignCellTaskScore<TArtifact>(\n cell: CampaignCellResult<TArtifact>,\n): number | undefined {\n return projectCampaignCellQuality(cell).score\n}\n\n/** Read canonical successful judge dimensions without recomputing cell quality. */\nexport function campaignCellJudgeDimensions<TArtifact>(\n cell: CampaignCellResult<TArtifact>,\n): Record<string, Record<string, number>> {\n return projectCampaignCellQuality(cell).judgeScores?.perJudge ?? {}\n}\n\nfunction finiteMetrics(metrics: Record<string, number> | undefined): Record<string, number> {\n const finite: Record<string, number> = {}\n for (const [key, value] of Object.entries(metrics ?? {})) {\n if (Number.isFinite(value)) finite[key] = value\n }\n return finite\n}\n\nfunction mean(values: number[]): number {\n return values.reduce((sum, value) => sum + value, 0) / values.length\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  computeFindingId
3
- } from "./chunk-LUNF2SEL.js";
3
+ } from "./chunk-DJKY2TSY.js";
4
4
  import {
5
5
  Mutex,
6
6
  aggregateRunScore,
@@ -11,7 +11,7 @@ import {
11
11
  costReceiptFromLlm,
12
12
  costReceiptFromLlmError,
13
13
  maximumChargeForLlmRequest
14
- } from "./chunk-J5SQWP6Y.js";
14
+ } from "./chunk-PBE2LOSS.js";
15
15
  import {
16
16
  CostLedger
17
17
  } from "./chunk-WS3NZZQQ.js";
@@ -749,4 +749,4 @@ export {
749
749
  runSemanticConceptJudge,
750
750
  createSemanticConceptJudge
751
751
  };
752
- //# sourceMappingURL=chunk-KE2VWPZX.js.map
752
+ //# sourceMappingURL=chunk-ZUUWPZCV.js.map
package/dist/cli.js CHANGED
@@ -5,12 +5,12 @@ import {
5
5
  runRpcBatch,
6
6
  runRpcOnce,
7
7
  startServerAsync
8
- } from "./chunk-FO7HEH76.js";
8
+ } from "./chunk-YJBNWCAA.js";
9
9
  import {
10
10
  runRolloutReleaseCli
11
- } from "./chunk-IPYXE555.js";
12
- import "./chunk-MAX3TN3C.js";
13
- import "./chunk-J5SQWP6Y.js";
11
+ } from "./chunk-EJGRPCO3.js";
12
+ import "./chunk-UWZZKKU7.js";
13
+ import "./chunk-PBE2LOSS.js";
14
14
  import "./chunk-WS3NZZQQ.js";
15
15
  import "./chunk-VI2UW6B6.js";
16
16
  import "./chunk-PC4UYEBM.js";