@tangle-network/agent-eval 0.126.7 → 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.
- package/CHANGELOG.md +44 -0
- package/README.md +2 -2
- package/dist/analyst/index.d.ts +51 -39
- package/dist/analyst/index.js +4 -4
- package/dist/belief-state/index.d.ts +34 -36
- package/dist/belief-state/index.js +2 -2
- package/dist/benchmarks/index.d.ts +30 -12
- package/dist/benchmarks/index.js +12 -10
- package/dist/builder-eval/index.js +1 -1
- package/dist/campaign/index.d.ts +432 -146
- package/dist/campaign/index.js +11 -9
- package/dist/{chunk-ARU2PZFM.js → chunk-424XHVKV.js} +43 -23
- package/dist/chunk-424XHVKV.js.map +1 -0
- package/dist/{chunk-NUKSVU3W.js → chunk-5DTSBUL2.js} +2 -2
- package/dist/{chunk-BTACVO2W.js → chunk-65QETEKG.js} +542 -258
- package/dist/chunk-65QETEKG.js.map +1 -0
- package/dist/{chunk-CGG5SLH3.js → chunk-ARCFIY7U.js} +2 -2
- package/dist/{chunk-P22LJ3Y2.js → chunk-CLELFRQG.js} +6 -4
- package/dist/chunk-CLELFRQG.js.map +1 -0
- package/dist/{chunk-LUNF2SEL.js → chunk-DJKY2TSY.js} +3 -3
- package/dist/chunk-DPUHNQLN.js +232 -0
- package/dist/chunk-DPUHNQLN.js.map +1 -0
- package/dist/{chunk-IPYXE555.js → chunk-EJGRPCO3.js} +36 -13
- package/dist/chunk-EJGRPCO3.js.map +1 -0
- package/dist/{chunk-K6IAZZ6L.js → chunk-FA3MFYNA.js} +132 -110
- package/dist/chunk-FA3MFYNA.js.map +1 -0
- package/dist/chunk-IG35YDN3.js +614 -0
- package/dist/chunk-IG35YDN3.js.map +1 -0
- package/dist/{chunk-DPZAEKA6.js → chunk-IMGJZBFG.js} +84 -56
- package/dist/chunk-IMGJZBFG.js.map +1 -0
- package/dist/{chunk-H5UD2323.js → chunk-IN455XKS.js} +53 -1
- package/dist/chunk-IN455XKS.js.map +1 -0
- package/dist/{chunk-PJQFMIOX.js → chunk-MHELPNRP.js} +31 -1
- package/dist/chunk-MHELPNRP.js.map +1 -0
- package/dist/{chunk-IILEIWGW.js → chunk-NL33OXEP.js} +41 -36
- package/dist/chunk-NL33OXEP.js.map +1 -0
- package/dist/{chunk-474LBSOX.js → chunk-OD5NQ2CS.js} +41 -16
- package/dist/chunk-OD5NQ2CS.js.map +1 -0
- package/dist/{chunk-QOTFXW5L.js → chunk-P5W7RQKK.js} +2 -2
- package/dist/{chunk-IR3KBHOY.js → chunk-P6FYH6K4.js} +39 -3
- package/dist/chunk-P6FYH6K4.js.map +1 -0
- package/dist/{chunk-J5SQWP6Y.js → chunk-PBE2LOSS.js} +18 -2
- package/dist/chunk-PBE2LOSS.js.map +1 -0
- package/dist/{chunk-E3IADPLG.js → chunk-PRB53E3J.js} +50 -224
- package/dist/chunk-PRB53E3J.js.map +1 -0
- package/dist/{chunk-X4UCIOTZ.js → chunk-S5YLIBFX.js} +2 -2
- package/dist/{chunk-7VYEGHWF.js → chunk-SZLVEKMJ.js} +41 -20
- package/dist/chunk-SZLVEKMJ.js.map +1 -0
- package/dist/{chunk-LKKT3IVV.js → chunk-TSN7JT6D.js} +6 -4
- package/dist/{chunk-LKKT3IVV.js.map → chunk-TSN7JT6D.js.map} +1 -1
- package/dist/{chunk-M7AH34KV.js → chunk-UTA2TGC4.js} +32 -16
- package/dist/chunk-UTA2TGC4.js.map +1 -0
- package/dist/{chunk-MAX3TN3C.js → chunk-UWZZKKU7.js} +7 -19
- package/dist/chunk-UWZZKKU7.js.map +1 -0
- package/dist/{chunk-ZVCHKKOP.js → chunk-WED5KLZQ.js} +39 -15
- package/dist/chunk-WED5KLZQ.js.map +1 -0
- package/dist/{chunk-OCFJACJU.js → chunk-X6VOPMLD.js} +74 -14
- package/dist/chunk-X6VOPMLD.js.map +1 -0
- package/dist/{chunk-MOXWMGPC.js → chunk-Y5CYOL42.js} +159 -70
- package/dist/chunk-Y5CYOL42.js.map +1 -0
- package/dist/{chunk-FO7HEH76.js → chunk-YJBNWCAA.js} +2 -2
- package/dist/chunk-ZPUEEM5U.js +179 -0
- package/dist/chunk-ZPUEEM5U.js.map +1 -0
- package/dist/{chunk-KE2VWPZX.js → chunk-ZUUWPZCV.js} +3 -3
- package/dist/cli.js +4 -4
- package/dist/contract/index.d.ts +421 -124
- package/dist/contract/index.js +242 -115
- package/dist/contract/index.js.map +1 -1
- package/dist/control.d.ts +34 -32
- package/dist/control.js +2 -2
- package/dist/hosted/index.d.ts +142 -41
- package/dist/hosted/index.js +23 -1
- package/dist/index.d.ts +364 -255
- package/dist/index.js +315 -226
- package/dist/index.js.map +1 -1
- package/dist/meta-eval/index.d.ts +32 -32
- package/dist/meta-eval/index.js +2 -2
- package/dist/multishot/index.d.ts +1 -0
- package/dist/openapi.json +1 -1
- package/dist/pipelines/index.js +2 -2
- package/dist/reporting.d.ts +97 -74
- package/dist/reporting.js +5 -4
- package/dist/rl.d.ts +177 -131
- package/dist/rl.js +232 -126
- package/dist/rl.js.map +1 -1
- package/dist/rollout/index.d.ts +53 -63
- package/dist/rollout/index.js +7 -5
- package/dist/{run-campaign-FFRM3RH5.js → run-campaign-3A2EBYBE.js} +4 -3
- package/dist/supervisor-run/index.d.ts +7 -15
- package/dist/supervisor-run/index.js +2 -2
- package/dist/traces.d.ts +66 -41
- package/dist/traces.js +9 -5
- package/dist/wire/index.d.ts +1 -0
- package/dist/wire/index.js +2 -2
- package/docs/concepts.md +18 -1
- package/docs/hosted-ingest-spec.md +37 -40
- package/docs/insight-report.md +57 -7
- package/docs/research-report-methodology.md +20 -21
- package/docs/rollout.md +13 -8
- package/package.json +4 -3
- package/dist/chunk-474LBSOX.js.map +0 -1
- package/dist/chunk-7VYEGHWF.js.map +0 -1
- package/dist/chunk-ARU2PZFM.js.map +0 -1
- package/dist/chunk-BTACVO2W.js.map +0 -1
- package/dist/chunk-DPZAEKA6.js.map +0 -1
- package/dist/chunk-E3IADPLG.js.map +0 -1
- package/dist/chunk-H5UD2323.js.map +0 -1
- package/dist/chunk-IILEIWGW.js.map +0 -1
- package/dist/chunk-IPYXE555.js.map +0 -1
- package/dist/chunk-IR3KBHOY.js.map +0 -1
- package/dist/chunk-J5SQWP6Y.js.map +0 -1
- package/dist/chunk-K6IAZZ6L.js.map +0 -1
- package/dist/chunk-M7AH34KV.js.map +0 -1
- package/dist/chunk-MAX3TN3C.js.map +0 -1
- package/dist/chunk-MOXWMGPC.js.map +0 -1
- package/dist/chunk-OCFJACJU.js.map +0 -1
- package/dist/chunk-P22LJ3Y2.js.map +0 -1
- package/dist/chunk-PJQFMIOX.js.map +0 -1
- package/dist/chunk-ZVCHKKOP.js.map +0 -1
- package/dist/chunk-ZZUXHH3R.js +0 -99
- package/dist/chunk-ZZUXHH3R.js.map +0 -1
- /package/dist/{chunk-NUKSVU3W.js.map → chunk-5DTSBUL2.js.map} +0 -0
- /package/dist/{chunk-CGG5SLH3.js.map → chunk-ARCFIY7U.js.map} +0 -0
- /package/dist/{chunk-LUNF2SEL.js.map → chunk-DJKY2TSY.js.map} +0 -0
- /package/dist/{chunk-QOTFXW5L.js.map → chunk-P5W7RQKK.js.map} +0 -0
- /package/dist/{chunk-X4UCIOTZ.js.map → chunk-S5YLIBFX.js.map} +0 -0
- /package/dist/{chunk-FO7HEH76.js.map → chunk-YJBNWCAA.js.map} +0 -0
- /package/dist/{chunk-KE2VWPZX.js.map → chunk-ZUUWPZCV.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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-
|
|
8
|
+
} from "./chunk-YJBNWCAA.js";
|
|
9
9
|
import {
|
|
10
10
|
runRolloutReleaseCli
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
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";
|