tokencostguard / scripts /bench-openhands-gate.ts
lixiaowww
CSP: allow huggingface.co frame-ancestors
249c849
Raw
History Blame Contribute Delete
1.44 kB
import fs from "fs";
import path from "path";
type OpenHandsReport = {
summary?: {
p95_latency_ms?: number;
optimize_success_rate?: number;
pattern_hit_rate?: number;
trace_files?: number;
};
};
const reportFile = path.resolve(process.env.BENCH_REPORT_FILE ?? "artifacts/openhands-bench-report.json");
const maxP95 = Number(process.env.BENCH_GATE_MAX_P95_MS ?? "2000");
const minSuccessRate = Number(process.env.BENCH_GATE_MIN_SUCCESS_RATE ?? "0.99");
const minPatternHitRate = Number(process.env.BENCH_GATE_MIN_PATTERN_HIT_RATE ?? "0");
if (!fs.existsSync(reportFile)) {
console.error(`OpenHands bench report not found: ${reportFile}`);
process.exit(1);
}
const parsed = JSON.parse(fs.readFileSync(reportFile, "utf-8")) as OpenHandsReport;
const summary = parsed.summary;
if (!summary) {
console.error("Invalid report: missing summary");
process.exit(1);
}
const passed =
(summary.p95_latency_ms ?? Infinity) <= maxP95 &&
(summary.optimize_success_rate ?? 0) >= minSuccessRate &&
(summary.pattern_hit_rate ?? 0) >= minPatternHitRate;
console.log(
JSON.stringify(
{
gate: {
maxP95,
minSuccessRate,
minPatternHitRate,
actualP95: summary.p95_latency_ms,
actualSuccessRate: summary.optimize_success_rate,
actualPatternHitRate: summary.pattern_hit_rate,
passed,
},
},
null,
2
)
);
if (!passed) process.exit(1);