Commit graph

18 commits

Author SHA1 Message Date
Bryan Helmkamp
c665204be9
Persist fabro_run_dir in scoreboard instances.jsonl
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 16:43:25 -04:00
Bryan Helmkamp
3e34ad5d78
Record GPT-5.4 20min timeout: 65.7% on SWE-Bench-Lite ($718.62)
Best resolve rate at 197/300 but 3.3x more expensive than Opus.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 20:55:59 -04:00
Bryan Helmkamp
f13310dfc4
Reduce default patch generation concurrency to 75
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 16:05:24 -04:00
Bryan Helmkamp
b18521058a
Record Opus 4.6 20min timeout: 58.0% on SWE-Bench-Lite ($218.65)
100% patch rate, 0 timeouts. Only +1 instance over Sonnet at 4x the cost.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 14:43:20 -04:00
Bryan Helmkamp
7799d59514
Record Sonnet 4.6 20min timeout: 57.7% on SWE-Bench-Lite ($55.22)
20min timeout vs 10min: 173 vs 167 resolved (+6), patch rate 99% vs 94%.
Also fixes: revert to v4 snapshots, concurrency default to 100, preflight
uses actual 4 CPU per sandbox.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 13:36:26 -04:00
Bryan Helmkamp
4cd9e301ea
Fix snapshot CPU mismatch: use v4 snapshots (4 CPU), reduce concurrency to 100
Daytona bakes CPU/memory at snapshot creation time. v4 snapshots have
4 CPU / 8 GB. Preflight now checks against 4 CPU per sandbox.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 12:44:14 -04:00
Bryan Helmkamp
33a2d32fae
Reduce default concurrency to 150, increase default timeout to 20min
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 12:32:18 -04:00
Bryan Helmkamp
8101f948fc
Add Daytona CPU preflight check before starting eval runs
Checks running sandboxes against the 500 CPU org limit with 20% buffer.
Exits with a suggested --max-workers value if capacity is insufficient.
Default concurrency set to 200 (safe with 2 CPU per sandbox).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 12:20:36 -04:00
Bryan Helmkamp
b45483ae4a
Record timeout and sandbox resources in scoreboard metadata
Adds --timeout, --sandbox-cpu, --sandbox-memory flags to record_results.py.
Re-recorded both existing runs with the new fields.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:24:56 -04:00
Bryan Helmkamp
002468316d
Record Sonnet 4.6 baseline: 55.7% on SWE-Bench-Lite ($39.78)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:23:23 -04:00
Bryan Helmkamp
4245ab86a4
Add status.py for quick progress checks on generation and eval runs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:59:49 -04:00
Bryan Helmkamp
dfddba87f6
Add best-effort Daytona sandbox cleanup on timeout and disable PR creation
On timeout, finds the orphaned sandbox via fabro ps --label and deletes
it. Non-fatal if cleanup fails. Also adds [pull_request] enabled=false
to generated workflow.toml configs to prevent eval runs from opening PRs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:42:47 -04:00
Bryan Helmkamp
e152bbfd37
Make SWE-bench patch generation and evaluation resumable
On restart, reads existing output JSONL files to find completed instance
IDs, skips them, and appends new results. Final summary recomputes from
the full results file so it reflects all runs combined.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:33:06 -04:00
Bryan Helmkamp
e3790ecff3
Add SWE-bench eval README with setup, usage, and monitoring instructions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:59:03 -04:00
Bryan Helmkamp
c248aaf92e
Add scoreboard system and record Haiku 4.5 baseline: 54.0% on SWE-Bench-Lite
record_results.py combines generation + eval results into a git-tracked
scoreboard. Per run: README, meta.json, instances.jsonl. Auto-generates
leaderboard.json ranked by resolve rate.

Haiku 4.5 baseline: 162/300 (54.0%), $26.13 total ($0.087/instance).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:56:43 -04:00
Bryan Helmkamp
5c503565aa
Add Daytona-based SWE-bench evaluator and bump default concurrency to 100
evaluate_daytona.py runs the swebench test harness on Daytona sandboxes
instead of local Docker. Reuses the same snapshots from the generation
phase. Applies model patch + test patch, runs tests, grades with
swebench's log parsers. No local Docker needed.

Also bumps default --max-workers from 20 to 100 in run_eval.py.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:13:09 -04:00
Bryan Helmkamp
fdf7b3eb23
Fix run_eval.py: resolve output-dir to absolute path
When --output-dir is relative and fabro runs from /tmp, generated
workflow.toml paths were unresolvable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:39:24 -04:00
Bryan Helmkamp
b4ae9d8566
Add SWE-bench evaluation harness
Python scripts for running SWE-bench Lite evals against Fabro agent
in Daytona sandboxes: instance orchestration, Dockerfile generation,
and result evaluation via the official swebench harness.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:37:24 -04:00