lastlight-evals 0.16.0 → 0.18.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.
@@ -0,0 +1,199 @@
1
+ const REAL_SHA = /^[0-9a-f]{40}$/i;
2
+ /**
3
+ * A case's review rounds, validated — or `null` for a case that runs once
4
+ * (no `rounds`, or a single round, which IS the single-round case and must
5
+ * run byte-identically to it). Throws on a malformed declaration: a chained
6
+ * case that silently ran one round would report a re-review it never did.
7
+ */
8
+ export function planRounds(inst) {
9
+ const rounds = inst.rounds;
10
+ if (!rounds || rounds.length <= 1) {
11
+ if (rounds?.length === 1 && inst.pr && rounds[0].head_commit !== inst.pr.head_commit) {
12
+ throw new Error(`${inst.instance_id}: rounds[0].head_commit must equal pr.head_commit (the last round is the scored head)`);
13
+ }
14
+ return null;
15
+ }
16
+ if (!inst.pr)
17
+ throw new Error(`${inst.instance_id}: \`rounds\` is a pr-review field and needs \`pr\``);
18
+ rounds.forEach((r, i) => {
19
+ if (!REAL_SHA.test(r.head_commit ?? "")) {
20
+ throw new Error(`${inst.instance_id}: rounds[${i}].head_commit must be a full 40-hex SHA (got ${JSON.stringify(r.head_commit)})`);
21
+ }
22
+ });
23
+ const last = rounds[rounds.length - 1];
24
+ if (last.head_commit !== inst.pr.head_commit) {
25
+ throw new Error(`${inst.instance_id}: the last round's head_commit (${last.head_commit.slice(0, 12)}) must equal pr.head_commit (${inst.pr.head_commit.slice(0, 12)}) — the last round is the scored head`);
26
+ }
27
+ // A seeded item held for a round the chain never reaches would silently
28
+ // vanish from the scored round's discussion.
29
+ for (const field of ["reviews", "review_comments", "issue_comments"]) {
30
+ (inst.pr[field] ?? []).forEach((item, i) => {
31
+ const r = item.from_round;
32
+ if (r !== undefined && !(Number.isInteger(r) && r >= 1 && r <= rounds.length)) {
33
+ throw new Error(`${inst.instance_id}: pr.${field}[${i}].from_round must be an integer in 1..${rounds.length} (got ${JSON.stringify(r)})`);
34
+ }
35
+ });
36
+ }
37
+ return rounds;
38
+ }
39
+ /** Tier counts and the three #429 reasons, off one round's `disposition.json`. */
40
+ export function dispositionCounts(rows) {
41
+ const tiers = {};
42
+ let converged = 0;
43
+ let alreadyRaised = 0;
44
+ let lateLabelled = 0;
45
+ for (const r of rows) {
46
+ if (r.tier === "inline" || r.tier === "body" || r.tier === "internal")
47
+ tiers[r.tier] = (tiers[r.tier] ?? 0) + 1;
48
+ if (r.reason === "converged")
49
+ converged++;
50
+ if (r.reason === "already-raised")
51
+ alreadyRaised++;
52
+ if (r.finding?.lateDiscovery === true && (r.tier === "inline" || r.tier === "body"))
53
+ lateLabelled++;
54
+ }
55
+ return { tiers, converged, alreadyRaised, lateLabelled };
56
+ }
57
+ /** Units by `delta` — absent when no unit carries one (a first review). */
58
+ export function deltaCounts(units) {
59
+ const out = {};
60
+ let any = false;
61
+ for (const u of units) {
62
+ if (u.delta === "new" || u.delta === "changed" || u.delta === "affected" || u.delta === "unchanged") {
63
+ out[u.delta] = (out[u.delta] ?? 0) + 1;
64
+ any = true;
65
+ }
66
+ }
67
+ return any ? out : undefined;
68
+ }
69
+ /** The ledger's findings by status. */
70
+ export function ledgerCounts(ledger) {
71
+ if (!ledger?.findings)
72
+ return undefined;
73
+ const out = {};
74
+ for (const f of ledger.findings) {
75
+ if (f.status === "open" || f.status === "withheld" || f.status === "addressed" || f.status === "resolved")
76
+ out[f.status] = (out[f.status] ?? 0) + 1;
77
+ }
78
+ return out;
79
+ }
80
+ /**
81
+ * `review-coverage.json` (or post-review's compacted scratch copy of it),
82
+ * compacted again to what a round row shows. `null` for anything that is not
83
+ * a version-1 coverage record.
84
+ */
85
+ export function coverageSummary(raw) {
86
+ if (!raw || typeof raw !== "object")
87
+ return undefined;
88
+ const c = raw;
89
+ if (c.version !== 1)
90
+ return undefined;
91
+ const inScope = (c.inScope ?? {});
92
+ const carried = (c.carried ?? {});
93
+ const num = (v) => (typeof v === "number" ? v : 0);
94
+ const pct = (v) => (typeof v === "number" ? v : null);
95
+ return {
96
+ rereview: c.rereview === true,
97
+ units: num(inScope.units),
98
+ surveyedWeighted: pct(inScope.surveyedWeighted),
99
+ investigatedWeighted: pct(inScope.investigatedWeighted),
100
+ carriedUnits: num(carried.units),
101
+ notInvestigated: Array.isArray(c.notInvestigated) ? c.notInvestigated.length : 0,
102
+ };
103
+ }
104
+ /** The gold indices a grade's trace credits — `null` when the round was not graded. */
105
+ export function goldMatchedOf(trace) {
106
+ if (!trace?.gold)
107
+ return null;
108
+ return trace.gold.flatMap((g, i) => (g.matchedFinding !== null && g.matchedFinding !== undefined ? [i] : []));
109
+ }
110
+ /**
111
+ * Roll a case's rounds up. Late discoveries, convergence and posting are
112
+ * summed over rounds ≥ 2 only — round 1 is a first review and has nothing to
113
+ * be late against. Cumulative recall is the union of every graded round's
114
+ * matched gold, over the case's gold; absent when no round was graded.
115
+ */
116
+ export function rollupRereview(rounds, goldCount) {
117
+ const later = rounds.filter((r) => r.round >= 2);
118
+ const sumOpt = (xs) => xs.some((x) => x !== undefined) ? xs.reduce((a, b) => a + (b ?? 0), 0) : undefined;
119
+ const graded = rounds.filter((r) => r.goldMatched !== undefined);
120
+ const union = new Set(graded.flatMap((r) => r.goldMatched));
121
+ const out = {
122
+ rounds,
123
+ laterInlinePosted: later.reduce((n, r) => n + r.inlinePosted, 0),
124
+ costUsd: rounds.reduce((n, r) => n + r.costUsd, 0),
125
+ };
126
+ const late = sumOpt(later.map((r) => r.lateDiscovery));
127
+ if (late !== undefined) {
128
+ out.lateDiscovery = late;
129
+ out.lateDiscoveryOf = later.reduce((n, r) => n + (r.lateDiscovery !== undefined ? (r.lateDiscoveryOf ?? 0) : 0), 0);
130
+ }
131
+ const conv = sumOpt(later.map((r) => r.converged));
132
+ if (conv !== undefined)
133
+ out.converged = conv;
134
+ const raised = sumOpt(later.map((r) => r.alreadyRaised));
135
+ if (raised !== undefined)
136
+ out.alreadyRaised = raised;
137
+ if (graded.length && goldCount !== undefined) {
138
+ out.cumulativeMatched = union.size;
139
+ out.gold = goldCount;
140
+ out.cumulativeRecall = goldCount > 0 ? union.size / goldCount : 1;
141
+ }
142
+ return out;
143
+ }
144
+ /** Group a tier's results by arm and total their `rereview` blocks; arms with no multi-round case are omitted. */
145
+ export function summarizeRereview(results) {
146
+ const byArm = new Map();
147
+ for (const r of results) {
148
+ const rr = r.rereview;
149
+ if (!rr)
150
+ continue;
151
+ const s = byArm.get(r.model) ??
152
+ byArm
153
+ .set(r.model, {
154
+ model: r.model,
155
+ cases: 0,
156
+ rounds: 0,
157
+ lateDiscovery: null,
158
+ lateDiscoveryOf: 0,
159
+ laterInlinePosted: 0,
160
+ converged: null,
161
+ alreadyRaised: null,
162
+ cumulativeMatched: null,
163
+ gold: 0,
164
+ costUsd: 0,
165
+ })
166
+ .get(r.model);
167
+ s.cases++;
168
+ s.rounds += rr.rounds.length;
169
+ s.laterInlinePosted += rr.laterInlinePosted;
170
+ s.costUsd += rr.costUsd;
171
+ if (rr.lateDiscovery !== undefined) {
172
+ s.lateDiscovery = (s.lateDiscovery ?? 0) + rr.lateDiscovery;
173
+ s.lateDiscoveryOf += rr.lateDiscoveryOf ?? 0;
174
+ }
175
+ if (rr.converged !== undefined)
176
+ s.converged = (s.converged ?? 0) + rr.converged;
177
+ if (rr.alreadyRaised !== undefined)
178
+ s.alreadyRaised = (s.alreadyRaised ?? 0) + rr.alreadyRaised;
179
+ if (rr.cumulativeMatched !== undefined) {
180
+ s.cumulativeMatched = (s.cumulativeMatched ?? 0) + rr.cumulativeMatched;
181
+ s.gold += rr.gold ?? 0;
182
+ }
183
+ }
184
+ return [...byArm.values()];
185
+ }
186
+ /** GitHub's review `state` for a submitted review's `event` — what `lastBotReview.state` carries. */
187
+ export function reviewStateOf(event) {
188
+ switch (event) {
189
+ case "APPROVE":
190
+ return "APPROVED";
191
+ case "REQUEST_CHANGES":
192
+ return "CHANGES_REQUESTED";
193
+ case "COMMENT":
194
+ return "COMMENTED";
195
+ default:
196
+ return "PENDING";
197
+ }
198
+ }
199
+ //# sourceMappingURL=rereview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rereview.js","sourceRoot":"","sources":["../src/rereview.ts"],"names":[],"mappings":"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"}