File size: 1,437 Bytes
249c849
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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);