lastlight-evals 0.3.0 → 0.5.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/README.md +117 -8
- package/dashboard/dist/assets/index-DbWEwzO3.css +1 -0
- package/dashboard/dist/assets/index-GvQi4Peq.js +264 -0
- package/dashboard/dist/index.html +2 -2
- package/datasets/pr-review/README.md +58 -0
- package/datasets/pr-review/martian-leaderboard.json +5785 -0
- package/datasets/pr-review/tier.json +5 -0
- package/dist/add-case.js +295 -31
- package/dist/add-case.js.map +1 -1
- package/dist/clean.js +127 -0
- package/dist/clean.js.map +1 -0
- package/dist/discovery.js +10 -4
- package/dist/discovery.js.map +1 -1
- package/dist/fake-github.js +187 -6
- package/dist/fake-github.js.map +1 -1
- package/dist/grade.js +266 -2
- package/dist/grade.js.map +1 -1
- package/dist/judge.js +145 -0
- package/dist/judge.js.map +1 -0
- package/dist/mechanism.test.js +350 -2
- package/dist/mechanism.test.js.map +1 -1
- package/dist/report.js +157 -10
- package/dist/report.js.map +1 -1
- package/dist/run-instance.js +192 -25
- package/dist/run-instance.js.map +1 -1
- package/dist/run.js +216 -38
- package/dist/run.js.map +1 -1
- package/dist/sandbox-preflight.js +107 -0
- package/dist/sandbox-preflight.js.map +1 -0
- package/dist/seed.js +195 -8
- package/dist/seed.js.map +1 -1
- package/dist/serve.js +2 -0
- package/dist/serve.js.map +1 -1
- package/models.json +1 -0
- package/package.json +2 -2
- package/dashboard/dist/assets/index-YwScAAxm.js +0 -238
- package/dashboard/dist/assets/index-uU9Sj3M4.css +0 -1
package/dist/grade.js
CHANGED
|
@@ -13,6 +13,7 @@ import { execFileSync } from "node:child_process";
|
|
|
13
13
|
import { cpSync, existsSync, writeFileSync } from "node:fs";
|
|
14
14
|
import { readdirSync } from "node:fs";
|
|
15
15
|
import { join } from "node:path";
|
|
16
|
+
import { judge, parseJudgeJson, defaultJudgeModel } from "./judge.js";
|
|
16
17
|
// ── Behavioral grade ────────────────────────────────────────────────────────
|
|
17
18
|
export function gradeBehavioral(expect, fake, ctx) {
|
|
18
19
|
const checks = [];
|
|
@@ -54,6 +55,20 @@ export function gradeBehavioral(expect, fake, ctx) {
|
|
|
54
55
|
}
|
|
55
56
|
checks.push({ name: "pr-opened", ok, detail });
|
|
56
57
|
}
|
|
58
|
+
if (expect.review_submitted) {
|
|
59
|
+
const reviews = fake.submittedReviews(ctx.issueNumber);
|
|
60
|
+
const r = reviews[0];
|
|
61
|
+
let ok = reviews.length > 0;
|
|
62
|
+
let detail = `${reviews.length} review(s)`;
|
|
63
|
+
if (r) {
|
|
64
|
+
if (expect.review_submitted.event)
|
|
65
|
+
ok = ok && r.event === expect.review_submitted.event;
|
|
66
|
+
if (expect.review_submitted.body_matches)
|
|
67
|
+
ok = ok && new RegExp(expect.review_submitted.body_matches, "i").test(r.body);
|
|
68
|
+
detail = `event=${r.event} bodyLen=${r.body.length}`;
|
|
69
|
+
}
|
|
70
|
+
checks.push({ name: "review-submitted", ok, detail });
|
|
71
|
+
}
|
|
57
72
|
return { ok: checks.every((c) => c.ok), checks };
|
|
58
73
|
}
|
|
59
74
|
// ── Triage gold grade (label-accuracy) ──────────────────────────────────────
|
|
@@ -69,6 +84,243 @@ export function gradeTriage(gold, fake, issueNumber) {
|
|
|
69
84
|
checks.push({ name: `state=${gold.state}`, ok: labels.includes(gold.state), detail: `labels=[${labels.join(", ")}]` });
|
|
70
85
|
return { ok: checks.every((c) => c.ok), checks };
|
|
71
86
|
}
|
|
87
|
+
/** Cap on trimmed text fields in a {@link ReviewTrace}, keeping the scorecard
|
|
88
|
+
* lean while preserving enough to eyeball the judge's reasoning. */
|
|
89
|
+
const TRACE_TEXT_CAP = 8_000;
|
|
90
|
+
function capTrace(s) {
|
|
91
|
+
return s.length > TRACE_TEXT_CAP ? s.slice(0, TRACE_TEXT_CAP) + "\n\n[…trimmed]" : s;
|
|
92
|
+
}
|
|
93
|
+
/** F-beta. β=1 (default) is F1 — precision and recall weighted equally, matching
|
|
94
|
+
* Martian's Code Review Bench leaderboard. β<1 weights precision higher (β=0.5 →
|
|
95
|
+
* 2×), β>1 weights recall higher. */
|
|
96
|
+
export function fBeta(precision, recall, beta = 1) {
|
|
97
|
+
const b2 = beta * beta;
|
|
98
|
+
const denom = b2 * precision + recall;
|
|
99
|
+
return denom > 0 ? ((1 + b2) * precision * recall) / denom : 0;
|
|
100
|
+
}
|
|
101
|
+
/** The F-beta β for the pr-review grade. Defaults to 1 (F1, Martian's leaderboard
|
|
102
|
+
* metric); `EVAL_F_BETA` overrides it (e.g. 0.5 to weight precision 2×, mirroring
|
|
103
|
+
* Martian's adjustable F-beta). Ignores a non-positive / unparseable value. */
|
|
104
|
+
export function defaultBeta() {
|
|
105
|
+
const raw = process.env.EVAL_F_BETA?.trim();
|
|
106
|
+
if (!raw)
|
|
107
|
+
return 1;
|
|
108
|
+
const n = Number(raw);
|
|
109
|
+
return Number.isFinite(n) && n > 0 ? n : 1;
|
|
110
|
+
}
|
|
111
|
+
/** Human label for a β: `F1`, `F0.5`, `F2`, … */
|
|
112
|
+
export function fLabel(beta) {
|
|
113
|
+
return `F${beta}`;
|
|
114
|
+
}
|
|
115
|
+
/** Flatten a submitted review (body + inline comments) into one text blob for
|
|
116
|
+
* the extractor. Inline comments carry their location so the judge can match on
|
|
117
|
+
* file/line. */
|
|
118
|
+
function reviewText(reviews) {
|
|
119
|
+
const parts = [];
|
|
120
|
+
for (const r of reviews) {
|
|
121
|
+
if (r.body?.trim())
|
|
122
|
+
parts.push(r.body.trim());
|
|
123
|
+
for (const c of r.comments) {
|
|
124
|
+
const loc = c.line ? `${c.path}:${c.line}` : c.path;
|
|
125
|
+
parts.push(`[inline ${loc}] ${c.body}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return parts.join("\n\n").slice(0, 24_000);
|
|
129
|
+
}
|
|
130
|
+
const EXTRACT_SYSTEM = "You extract the distinct, concrete code-review findings from a reviewer's writeup. " +
|
|
131
|
+
"A finding is a SPECIFIC problem the reviewer identified in the code — a bug, correctness issue, " +
|
|
132
|
+
"security flaw, missing test, performance problem, etc. — tied to a location. " +
|
|
133
|
+
"IGNORE: summaries of what the PR does, praise, approvals, meta commentary, and vague remarks with no concrete problem. " +
|
|
134
|
+
"Merge duplicates that describe the same issue. " +
|
|
135
|
+
"If a PR DIFF is provided, use it ONLY to understand terse or location-anchored comments (what the reviewer's `here`/`this` refers to) — " +
|
|
136
|
+
"NEVER invent a finding from the diff that the reviewer did not raise. " +
|
|
137
|
+
'Output ONLY JSON: {"findings":[{"description":"<the problem>","file":"<path or null>"}]}';
|
|
138
|
+
const MATCH_SYSTEM = "You judge whether a reviewer's findings match a gold set of KNOWN real issues in a pull request. " +
|
|
139
|
+
"Two items MATCH when they describe the SAME underlying issue — the same root cause or the same required fix — " +
|
|
140
|
+
"even if worded differently or the line is slightly off. Wording need not match; substance must. " +
|
|
141
|
+
"If a PR DIFF is provided, use it to resolve whether a finding and a gold issue point at the same code change. " +
|
|
142
|
+
"Each gold issue matches AT MOST ONE finding, and each finding matches at most one gold issue (choose the best pairing). " +
|
|
143
|
+
'Output ONLY JSON: {"matches":[{"finding":<finding index>,"gold":<gold index>}]}';
|
|
144
|
+
/** Cap on the PR diff fed to the judge (diff-aware mode). */
|
|
145
|
+
const DIFF_CAP = 20_000;
|
|
146
|
+
/** Prefix a judge user turn with the PR diff for context, when provided. */
|
|
147
|
+
function withDiffContext(diff, purpose, body) {
|
|
148
|
+
if (!diff?.trim())
|
|
149
|
+
return body;
|
|
150
|
+
return `PR DIFF (${purpose}):\n\`\`\`diff\n${diff.slice(0, DIFF_CAP)}\n\`\`\`\n\n${body}`;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Grade a posted PR review against the gold set via an LLM judge, mirroring
|
|
154
|
+
* Martian's Code Review Bench: extract the review's distinct findings, then match
|
|
155
|
+
* each to a golden comment ("same underlying issue?"). Precision = matched ÷
|
|
156
|
+
* posted, recall = matched ÷ gold, combined as F-beta — β=1 (F1) by default to
|
|
157
|
+
* match Martian's leaderboard, `EVAL_F_BETA` to reweight (e.g. 0.5 for precision
|
|
158
|
+
* 2×). A judge failure yields `error` (ungraded), never a silent zero.
|
|
159
|
+
*/
|
|
160
|
+
export async function gradeReview(opts) {
|
|
161
|
+
const gold = opts.gold;
|
|
162
|
+
const beta = opts.beta ?? defaultBeta();
|
|
163
|
+
const diff = opts.diff?.trim() ? opts.diff : undefined;
|
|
164
|
+
const empty = (partial) => ({
|
|
165
|
+
precision: 0,
|
|
166
|
+
recall: 0,
|
|
167
|
+
fbeta: 0,
|
|
168
|
+
beta,
|
|
169
|
+
posted: 0,
|
|
170
|
+
gold: gold.length,
|
|
171
|
+
matched: 0,
|
|
172
|
+
falsePositives: [],
|
|
173
|
+
falseNegatives: gold.map((g) => ({ description: g.description, file: g.file, severity: g.severity })),
|
|
174
|
+
...partial,
|
|
175
|
+
});
|
|
176
|
+
// A perfectly-clean case (nothing to catch, nothing flagged): precision/recall/F all 1.
|
|
177
|
+
const perfect = (trace) => ({
|
|
178
|
+
precision: 1,
|
|
179
|
+
recall: 1,
|
|
180
|
+
fbeta: 1,
|
|
181
|
+
beta,
|
|
182
|
+
posted: 0,
|
|
183
|
+
gold: 0,
|
|
184
|
+
matched: 0,
|
|
185
|
+
falsePositives: [],
|
|
186
|
+
falseNegatives: [],
|
|
187
|
+
trace,
|
|
188
|
+
});
|
|
189
|
+
// A minimal trace for the zero-findings outcomes, so the dashboard's judge modal
|
|
190
|
+
// explains the 0 instead of rendering nothing. Two cases both land here: no review
|
|
191
|
+
// was posted at all, OR the judge read a review but distilled no concrete findings
|
|
192
|
+
// from it (e.g. an APPROVE that only lists confirmations). Every finding/gold is
|
|
193
|
+
// unmatched by definition. Distinguishable in the modal by whether `reviewText` and
|
|
194
|
+
// the extracted `findings` are present.
|
|
195
|
+
const bareTrace = (t) => ({
|
|
196
|
+
judgeModel: t.judgeModel,
|
|
197
|
+
reviewText: capTrace(t.reviewText),
|
|
198
|
+
findings: (t.findings ?? []).map((f) => ({ description: f.description, file: f.file ?? undefined, matchedGold: null })),
|
|
199
|
+
gold: gold.map((g) => ({ description: g.description, severity: g.severity, matchedFinding: null })),
|
|
200
|
+
rawExtract: t.rawExtract ? capTrace(t.rawExtract) : undefined,
|
|
201
|
+
usedDiff: !!diff,
|
|
202
|
+
});
|
|
203
|
+
const text = reviewText(opts.reviews);
|
|
204
|
+
// Resolve the judge model up front. If it can't be resolved (missing key) AND a
|
|
205
|
+
// review WAS posted, the case is ungraded (errored) — never a silent zero. With
|
|
206
|
+
// nothing posted there's nothing to judge, so we still return a clean traced result.
|
|
207
|
+
let model;
|
|
208
|
+
try {
|
|
209
|
+
model = opts.judgeModel ?? defaultJudgeModel();
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
if (text.trim())
|
|
213
|
+
return empty({ error: err.message });
|
|
214
|
+
model = "";
|
|
215
|
+
}
|
|
216
|
+
// No review posted: nothing caught. Perfect only if there was nothing to catch.
|
|
217
|
+
if (!text.trim()) {
|
|
218
|
+
const trace = bareTrace({ judgeModel: model, reviewText: text });
|
|
219
|
+
return gold.length === 0 ? perfect(trace) : empty({ trace });
|
|
220
|
+
}
|
|
221
|
+
// Raw judge replies, kept for the inspectable trace built at the end.
|
|
222
|
+
let rawExtract = "";
|
|
223
|
+
let rawMatch = "";
|
|
224
|
+
// 1. Extract distinct findings from the review.
|
|
225
|
+
let findings;
|
|
226
|
+
try {
|
|
227
|
+
rawExtract = await judge(model, EXTRACT_SYSTEM, withDiffContext(diff, "context only — extract findings ONLY from the reviewer's writeup below", `REVIEWER'S WRITEUP:\n${text}`));
|
|
228
|
+
const parsed = parseJudgeJson(rawExtract);
|
|
229
|
+
if (!parsed?.findings)
|
|
230
|
+
return empty({ error: "judge: unparseable extraction reply" });
|
|
231
|
+
findings = parsed.findings.filter((f) => f && typeof f.description === "string" && f.description.trim());
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
return empty({ error: `judge extract: ${err.message}` });
|
|
235
|
+
}
|
|
236
|
+
const posted = findings.length;
|
|
237
|
+
if (posted === 0) {
|
|
238
|
+
// The judge read the review but extracted no concrete findings (e.g. an
|
|
239
|
+
// approval). Trace it so the 0 is inspectable, not a blank modal.
|
|
240
|
+
const trace = bareTrace({ judgeModel: model, reviewText: text, findings, rawExtract });
|
|
241
|
+
return gold.length === 0 ? perfect(trace) : empty({ trace });
|
|
242
|
+
}
|
|
243
|
+
if (gold.length === 0) {
|
|
244
|
+
// Findings on a PR with no gold issues are all noise.
|
|
245
|
+
return {
|
|
246
|
+
precision: 0,
|
|
247
|
+
recall: 1,
|
|
248
|
+
fbeta: 0,
|
|
249
|
+
beta,
|
|
250
|
+
posted,
|
|
251
|
+
gold: 0,
|
|
252
|
+
matched: 0,
|
|
253
|
+
falsePositives: findings.map((f) => ({ description: f.description, file: f.file ?? undefined })),
|
|
254
|
+
falseNegatives: [],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// 2. Match findings ↔ gold.
|
|
258
|
+
const matchUser = JSON.stringify({
|
|
259
|
+
findings: findings.map((f, i) => ({ index: i, description: f.description, file: f.file ?? null })),
|
|
260
|
+
gold: gold.map((g, i) => ({ index: i, file: g.file ?? null, line: g.line ?? null, severity: g.severity, description: g.description })),
|
|
261
|
+
});
|
|
262
|
+
let matches;
|
|
263
|
+
try {
|
|
264
|
+
rawMatch = await judge(model, MATCH_SYSTEM, withDiffContext(diff, "resolve whether a finding and a gold issue point at the same code", matchUser));
|
|
265
|
+
const parsed = parseJudgeJson(rawMatch);
|
|
266
|
+
if (!parsed?.matches)
|
|
267
|
+
return empty({ error: "judge: unparseable match reply", posted });
|
|
268
|
+
matches = parsed.matches;
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
return empty({ error: `judge match: ${err.message}`, posted });
|
|
272
|
+
}
|
|
273
|
+
// De-dup the matching: each finding + each gold used at most once (guard the
|
|
274
|
+
// judge over-pairing), and drop out-of-range indices. Keep the accepted pairing
|
|
275
|
+
// (finding→gold) for the trace.
|
|
276
|
+
const usedFinding = new Set();
|
|
277
|
+
const usedGold = new Set();
|
|
278
|
+
const findingToGold = new Map();
|
|
279
|
+
for (const m of matches) {
|
|
280
|
+
if (!Number.isInteger(m.finding) || !Number.isInteger(m.gold))
|
|
281
|
+
continue;
|
|
282
|
+
if (m.finding < 0 || m.finding >= posted || m.gold < 0 || m.gold >= gold.length)
|
|
283
|
+
continue;
|
|
284
|
+
if (usedFinding.has(m.finding) || usedGold.has(m.gold))
|
|
285
|
+
continue;
|
|
286
|
+
usedFinding.add(m.finding);
|
|
287
|
+
usedGold.add(m.gold);
|
|
288
|
+
findingToGold.set(m.finding, m.gold);
|
|
289
|
+
}
|
|
290
|
+
const matched = usedFinding.size;
|
|
291
|
+
const precision = matched / posted;
|
|
292
|
+
const recall = matched / gold.length;
|
|
293
|
+
const fbeta = fBeta(precision, recall, beta);
|
|
294
|
+
const falsePositives = findings
|
|
295
|
+
.map((f, i) => ({ f, i }))
|
|
296
|
+
.filter(({ i }) => !usedFinding.has(i))
|
|
297
|
+
.map(({ f }) => ({ description: f.description, file: f.file ?? undefined }));
|
|
298
|
+
const falseNegatives = gold
|
|
299
|
+
.map((g, i) => ({ g, i }))
|
|
300
|
+
.filter(({ i }) => !usedGold.has(i))
|
|
301
|
+
.map(({ g }) => ({ description: g.description, file: g.file, severity: g.severity }));
|
|
302
|
+
const goldToFinding = new Map();
|
|
303
|
+
for (const [f, g] of findingToGold)
|
|
304
|
+
goldToFinding.set(g, f);
|
|
305
|
+
const trace = {
|
|
306
|
+
judgeModel: model,
|
|
307
|
+
reviewText: capTrace(text),
|
|
308
|
+
findings: findings.map((f, i) => ({
|
|
309
|
+
description: f.description,
|
|
310
|
+
file: f.file ?? undefined,
|
|
311
|
+
matchedGold: findingToGold.has(i) ? findingToGold.get(i) : null,
|
|
312
|
+
})),
|
|
313
|
+
gold: gold.map((g, j) => ({
|
|
314
|
+
description: g.description,
|
|
315
|
+
severity: g.severity,
|
|
316
|
+
matchedFinding: goldToFinding.has(j) ? goldToFinding.get(j) : null,
|
|
317
|
+
})),
|
|
318
|
+
rawExtract: capTrace(rawExtract),
|
|
319
|
+
rawMatch: capTrace(rawMatch),
|
|
320
|
+
usedDiff: !!diff,
|
|
321
|
+
};
|
|
322
|
+
return { precision, recall, fbeta, beta, posted, gold: gold.length, matched, falsePositives, falseNegatives, trace };
|
|
323
|
+
}
|
|
72
324
|
// ── Execution grade (SWE-bench resolved) ────────────────────────────────────
|
|
73
325
|
const TAP_LINE = /^(ok|not ok)\s+\d+\s+-\s+(.+?)(?:\s+#.*)?$/;
|
|
74
326
|
export function gradeExecution(opts) {
|
|
@@ -128,12 +380,22 @@ export function gradeExecution(opts) {
|
|
|
128
380
|
// Named mode when at least one FAIL_TO_PASS id shows up in the TAP stream;
|
|
129
381
|
// otherwise suite mode — grade on the command's exit code.
|
|
130
382
|
const named = opts.failToPass.length > 0 && opts.failToPass.some((id) => passed.has(id));
|
|
383
|
+
// `PASS_TO_PASS: ["*"]` is a wildcard meaning "the ENTIRE suite must stay
|
|
384
|
+
// green" — far more robust than pinning every test by name (which breaks the
|
|
385
|
+
// moment a test is renamed or added). It resolves to the run being green: the
|
|
386
|
+
// command exited 0 and no TAP line reported `not ok`. Other PASS_TO_PASS names
|
|
387
|
+
// (if any) are still checked individually alongside it.
|
|
388
|
+
const passAll = opts.passToPass.includes("*");
|
|
389
|
+
const explicitPass = opts.passToPass.filter((id) => id !== "*");
|
|
390
|
+
const suiteGreen = exitOk && [...passed.values()].every(Boolean);
|
|
131
391
|
let fail;
|
|
132
392
|
let pass;
|
|
133
393
|
let resolved;
|
|
134
394
|
if (named) {
|
|
135
395
|
fail = opts.failToPass.map((id) => ({ id, pass: passed.get(id) === true }));
|
|
136
|
-
pass =
|
|
396
|
+
pass = explicitPass.map((id) => ({ id, pass: passed.get(id) === true }));
|
|
397
|
+
if (passAll)
|
|
398
|
+
pass.push({ id: "* (all tests)", pass: suiteGreen });
|
|
137
399
|
resolved = fail.every((t) => t.pass) && pass.every((t) => t.pass);
|
|
138
400
|
}
|
|
139
401
|
else {
|
|
@@ -141,7 +403,9 @@ export function gradeExecution(opts) {
|
|
|
141
403
|
// declared id against that single outcome; honor any PASS_TO_PASS names that
|
|
142
404
|
// did surface in TAP.
|
|
143
405
|
fail = opts.failToPass.map((id) => ({ id, pass: exitOk }));
|
|
144
|
-
pass =
|
|
406
|
+
pass = explicitPass.map((id) => ({ id, pass: passed.has(id) ? passed.get(id) === true : exitOk }));
|
|
407
|
+
if (passAll)
|
|
408
|
+
pass.push({ id: "* (all tests)", pass: suiteGreen });
|
|
145
409
|
resolved = exitOk && pass.every((t) => t.pass);
|
|
146
410
|
}
|
|
147
411
|
return { resolved, failToPass: fail, passToPass: pass, raw: setupLog ? `${setupLog}\n${raw}` : raw };
|
package/dist/grade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grade.js","sourceRoot":"","sources":["../src/grade.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grade.js","sourceRoot":"","sources":["../src/grade.ts"],"names":[],"mappings":"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"}
|
package/dist/judge.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot LLM client for the pr-review grader's judge.
|
|
3
|
+
*
|
|
4
|
+
* The rest of the harness grades deterministically; matching a posted review's
|
|
5
|
+
* findings to a semantic gold set (precision/recall) is the ONE place that needs
|
|
6
|
+
* a model. This is a thin, dependency-free client — a direct `fetch` to the
|
|
7
|
+
* provider's chat endpoint, chosen from the model id's `provider/` prefix — so it
|
|
8
|
+
* never pulls the OpenCode/pi runtime into the grade path. Temperature 0 (with a
|
|
9
|
+
* no-temperature retry for reasoning models that reject it) keeps the judge as
|
|
10
|
+
* repeatable as the provider allows.
|
|
11
|
+
*
|
|
12
|
+
* The judge model is scoped to grading only and is independent of the models
|
|
13
|
+
* under test: `EVAL_JUDGE_MODEL` overrides {@link defaultJudgeModel}, which
|
|
14
|
+
* prefers Anthropic > OpenAI > OpenRouter based on which key is present.
|
|
15
|
+
*/
|
|
16
|
+
/** Strip the `provider/` prefix, leaving the wire model id (keeps any further
|
|
17
|
+
* `/` for openrouter's `vendor/model`). */
|
|
18
|
+
function wireModel(id) {
|
|
19
|
+
const i = id.indexOf("/");
|
|
20
|
+
return i >= 0 ? id.slice(i + 1) : id;
|
|
21
|
+
}
|
|
22
|
+
function openAiCompatible(url, apiKey) {
|
|
23
|
+
return {
|
|
24
|
+
url,
|
|
25
|
+
headers: { authorization: `Bearer ${apiKey}`, "content-type": "application/json" },
|
|
26
|
+
body: (model, system, user, temperature) => ({
|
|
27
|
+
model,
|
|
28
|
+
messages: [
|
|
29
|
+
{ role: "system", content: system },
|
|
30
|
+
{ role: "user", content: user },
|
|
31
|
+
],
|
|
32
|
+
...(temperature !== undefined ? { temperature } : {}),
|
|
33
|
+
}),
|
|
34
|
+
extract: (json) => {
|
|
35
|
+
const j = json;
|
|
36
|
+
return j.choices?.[0]?.message?.content ?? "";
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function providerFor(modelId) {
|
|
41
|
+
const family = modelId.split("/")[0]?.toLowerCase() ?? "";
|
|
42
|
+
const model = wireModel(modelId);
|
|
43
|
+
if (family === "anthropic") {
|
|
44
|
+
const key = process.env.ANTHROPIC_API_KEY;
|
|
45
|
+
if (!key)
|
|
46
|
+
throw new Error("judge: ANTHROPIC_API_KEY not set for an anthropic judge model");
|
|
47
|
+
return {
|
|
48
|
+
url: "https://api.anthropic.com/v1/messages",
|
|
49
|
+
headers: { "x-api-key": key, "anthropic-version": "2023-06-01", "content-type": "application/json" },
|
|
50
|
+
body: (m, system, user, temperature) => ({
|
|
51
|
+
model,
|
|
52
|
+
max_tokens: 2048,
|
|
53
|
+
system,
|
|
54
|
+
messages: [{ role: "user", content: user }],
|
|
55
|
+
...(temperature !== undefined ? { temperature } : {}),
|
|
56
|
+
}),
|
|
57
|
+
extract: (json) => {
|
|
58
|
+
const j = json;
|
|
59
|
+
return (j.content ?? []).filter((b) => b.type === "text").map((b) => b.text ?? "").join("");
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (family === "openrouter") {
|
|
64
|
+
const key = process.env.OPENROUTER_API_KEY;
|
|
65
|
+
if (!key)
|
|
66
|
+
throw new Error("judge: OPENROUTER_API_KEY not set for an openrouter judge model");
|
|
67
|
+
// openrouter keeps the vendor prefix (e.g. `anthropic/claude-...`).
|
|
68
|
+
const or = openAiCompatible("https://openrouter.ai/api/v1/chat/completions", key);
|
|
69
|
+
return { ...or, body: (_m, s, u, t) => or.body(model, s, u, t) };
|
|
70
|
+
}
|
|
71
|
+
if (family === "deepseek") {
|
|
72
|
+
const key = process.env.DEEPSEEK_API_KEY;
|
|
73
|
+
if (!key)
|
|
74
|
+
throw new Error("judge: DEEPSEEK_API_KEY not set for a deepseek judge model");
|
|
75
|
+
return openAiCompatible("https://api.deepseek.com/chat/completions", key);
|
|
76
|
+
}
|
|
77
|
+
// Default: OpenAI (and openai-compatible ids).
|
|
78
|
+
const key = process.env.OPENAI_API_KEY;
|
|
79
|
+
if (!key)
|
|
80
|
+
throw new Error(`judge: OPENAI_API_KEY not set for judge model "${modelId}"`);
|
|
81
|
+
return openAiCompatible("https://api.openai.com/v1/chat/completions", key);
|
|
82
|
+
}
|
|
83
|
+
/** Pick a judge model from whichever provider key is present (Anthropic first —
|
|
84
|
+
* Martian's offline judges include Claude). Overridable with EVAL_JUDGE_MODEL. */
|
|
85
|
+
export function defaultJudgeModel() {
|
|
86
|
+
const override = process.env.EVAL_JUDGE_MODEL?.trim();
|
|
87
|
+
if (override)
|
|
88
|
+
return override;
|
|
89
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
90
|
+
return "anthropic/claude-sonnet-4-6";
|
|
91
|
+
if (process.env.OPENAI_API_KEY)
|
|
92
|
+
return "openai/gpt-5.5";
|
|
93
|
+
if (process.env.OPENROUTER_API_KEY)
|
|
94
|
+
return "openrouter/anthropic/claude-sonnet-4.6";
|
|
95
|
+
throw new Error("judge: no provider key set (ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY)");
|
|
96
|
+
}
|
|
97
|
+
async function post(provider, model, system, user, temperature) {
|
|
98
|
+
const res = await fetch(provider.url, {
|
|
99
|
+
method: "POST",
|
|
100
|
+
headers: provider.headers,
|
|
101
|
+
body: JSON.stringify(provider.body(model, system, user, temperature)),
|
|
102
|
+
});
|
|
103
|
+
if (!res.ok) {
|
|
104
|
+
const text = await res.text().catch(() => "");
|
|
105
|
+
const err = new Error(`judge HTTP ${res.status}: ${text.slice(0, 300)}`);
|
|
106
|
+
err.status = res.status;
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
return provider.extract(await res.json());
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* One judge turn (system + user) returning the assistant text. Temperature 0,
|
|
113
|
+
* with a single no-temperature retry for reasoning models that 400 on it.
|
|
114
|
+
*/
|
|
115
|
+
export async function judge(model, system, user) {
|
|
116
|
+
const provider = providerFor(model);
|
|
117
|
+
const wm = wireModel(model);
|
|
118
|
+
try {
|
|
119
|
+
return await post(provider, wm, system, user, 0);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (err.status === 400) {
|
|
123
|
+
return post(provider, wm, system, user, undefined);
|
|
124
|
+
}
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Parse a JSON object out of a judge reply, tolerating ```json fences and
|
|
129
|
+
* leading/trailing prose. Returns null if nothing parseable is found. */
|
|
130
|
+
export function parseJudgeJson(text) {
|
|
131
|
+
const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
132
|
+
const candidate = fenced ? fenced[1] : text;
|
|
133
|
+
// Grab the outermost {...} span.
|
|
134
|
+
const start = candidate.indexOf("{");
|
|
135
|
+
const end = candidate.lastIndexOf("}");
|
|
136
|
+
if (start < 0 || end <= start)
|
|
137
|
+
return null;
|
|
138
|
+
try {
|
|
139
|
+
return JSON.parse(candidate.slice(start, end + 1));
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"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"}
|