Working:
- Full Python CLI with
run,compare,submit,infocommands - 7 suites shipped: speed, toolcall, dataextract, instructfollow, reasonmath, loop_code_fix, loop_schema (93 tasks total)
- Ollama + OpenAI-compatible providers
- Hardware detection (CPU, GPU, VRAM, RAM, OS)
- Run bundle persistence to
~/.bench-loop/runs/ - Normalized scoring (0–100) with quality/speed/reliability/value aggregates
- Phase 1+2 revision plan executed: all packs rewritten with original prompts,
L*-NNIDs - Phase 2 packs (loop_code_fix, loop_schema) built with artifact verification
Stubbed / Incomplete:
- Harness layer: only
rawworks. OCPlatform, Hermes, Aider adapters are stubs - Phase 3 scoring polish (variance reporting, partial credit unification) — TODO
- Phase 4 FrankenGPU CLI design — in progress
- Phase 5 harness matrix — queued
- No
bench-loop submitbackend endpoint (CLI can't upload yet)
API (FastAPI):
- Health, hardware, model listing (auto-detects Ollama/LM Studio/oMLX/Jan/vLLM)
- Ollama version compatibility checks + preflight diagnostics
- HuggingFace model search + GGUF file size detection
- Model pull with SSE streaming progress
- Benchmark run trigger with SSE streaming
- Run listing from
~/.bench-loop/runs/on disk - Run detail endpoint
- No submission/upload endpoint — CLI
submithas nowhere to POST - No leaderboard data endpoint for community results
- No schemas.py — no Pydantic models for submissions
UI (React + Vite + React Router):
- 4 tabs: Models, Chat, Benchmark, Leaderboard
- Models tab: auto-discovers local providers, shows installed models, HF search, pull UI
- Benchmark tab: run trigger with SSE progress streaming
- Leaderboard tab: exists but only reads from
/api/benchmark/runs(local runs)- Groups best score per model, sorts by overall_score
- Shows Overall / Quality / Speed / Reliability via ScoreBadge
- No stack-level comparison, no speed data (tps), no community data
- Chat tab: exists (unclear completeness)
- No Tailwind — using raw CSS (App.css) with CSS variables
- No third-party leaderboard data source wired
- 3 JSONL files from today's Qwen3.6-27B speed benchmarking:
phase1-draft-params.jsonl— 5 config tags, draft param tuning (dmax/p_min variations)phase2-draft-size.jsonl— 5 config tags, draft model size (0.6B vs 1.7B, dmax/p combos)phase3-long-context.jsonl— 6 config tags, context scaling 192k→768k with rope/YaRN
- Format:
{"kind":"run",...}per task +{"kind":"summary",...}per config tag - Summary includes: tag, gen_tps_{peak,mean,median,stdev}, n_runs, repeats, max_tokens
- Not in submission schema format — needs ingestion
| Gap | Impact | Effort |
|---|---|---|
| No submission schema | Can't accept community results | 1h |
No /api/submit endpoint |
CLI submit is dead-end | 2h |
| Leaderboard shows local runs only, no stack data | Main product value missing | 2-3h |
| No leaderboard.json or equivalent data file | Nothing to show on launch | 1h (ingest script) |
| Phase 3 scoring polish incomplete | Credibility risk | 3-4h |
| No CI/CD or deploy pipeline for web app | Can't ship publicly | 2h |
| No auth or API keys for submissions | Spam/junk risk | 2-3h |
- Write submission JSON schema + Pydantic models — defines the contract for everything downstream
- Ingest existing phase results into leaderboard-v1.json — get real data visible immediately
- Wire LeaderboardTab to also read from leaderboard-v1.json — add stack speed columns (peak/mean/median tps)
- Add
/api/leaderboardendpoint that serves leaderboard-v1.json (static file or DB later) - Add stdev column to leaderboard — shows run consistency, key differentiator
/api/submitendpoint — validate against schema, dedup, store canonical row (2h)- Schema migration plan — how to evolve submission-v1 without breaking old data (1-2h)
- Auth / API key for submissions — even basic bearer token prevents spam (2h)
- Deploy pipeline — Vercel/Fly/Railway for the web app (2h)
- Phase 3 scoring polish — variance reporting, partial credit unification (3-4h)
- Stack comparison view — side-by-side diff of two stacks (3h)
- Hardware filter on leaderboard — GPU/VRAM bucket dropdown (2h)
- FrankenGPU design pass — CLI + web green palette refresh (4h+)
- ✅ Submission schema (JSON + Pydantic) — done today
- ✅ Ingest phase results → leaderboard-v1.json — done today
- Wire leaderboard UI to show stack speed data (peak/mean/stdev tps)
- Add
/api/leaderboardGET endpoint serving leaderboard data - Add
/api/submitPOST endpoint with schema validation
- Basic auth/API key for submit endpoint
- Deploy web app to public URL
- README update with "submit your results" instructions
- Phase 3 scoring polish (variance reporting)
- Landing page / hero section explaining what BenchLoop measures
- Hardware filter dropdown on leaderboard
- Stack comparison modal / page
- FrankenGPU CLI design pass
- Export leaderboard as CSV/markdown
- Social sharing for individual stack results
The biggest gap is the data pipeline: schema → ingest → API → UI. The CLI and benchmark engine are solid (93 tasks, 7 suites). The web app has good bones (model discovery, benchmark streaming, run management). The missing piece is the community leaderboard flow — which is the entire product differentiator. Fix the pipeline this week, ship everything else incrementally.