ginigen-ai commited on
Commit
d46242a
·
verified ·
1 Parent(s): 71b31a2

FastAPI + submit + private dataset (Docker SDK)

Browse files
Files changed (5) hide show
  1. Dockerfile +7 -0
  2. README.md +11 -16
  3. app.py +50 -71
  4. index.html +113 -0
  5. requirements.txt +4 -2
Dockerfile ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ FROM python:3.12-slim
2
+ WORKDIR /code
3
+ COPY requirements.txt /code/requirements.txt
4
+ RUN pip install --no-cache-dir -r /code/requirements.txt
5
+ COPY . /code
6
+ EXPOSE 7860
7
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -3,10 +3,8 @@ title: RoboCasa Kitchen Leaderboard
3
  emoji: 🍳
4
  colorFrom: blue
5
  colorTo: green
6
- sdk: gradio
7
- sdk_version: 4.44.1
8
- python_version: "3.12"
9
- app_file: app.py
10
  pinned: true
11
  license: mit
12
  short_description: Neutral aggregation of VLA success rates on RoboCasa Kitchen
@@ -14,23 +12,20 @@ short_description: Neutral aggregation of VLA success rates on RoboCasa Kitchen
14
 
15
  # 🍳 RoboCasa Kitchen Leaderboard
16
 
17
- A **neutral, community aggregation** of Vision-Language-Action (VLA) policy success rates on the
18
- **RoboCasa Kitchen** benchmark (single-arm Franka Panda, 24 atomic manipulation tasks), maintained by
19
- [GINIGEN-AI](https://huggingface.co/ginigen-ai).
20
-
21
- ## Why this exists
22
- RoboCasa has **no official leaderboard** and several **incompatible variants** (single-arm Kitchen,
23
- GR1-Tabletop humanoid, RoboCasa365, demo-conditioned). Published numbers are scattered across papers
24
- under different protocols. This board aggregates them **with citations** and **separates protocols**.
25
 
26
  ## Tables
27
- 1. **Kitchen 24-task (matched protocol)** — head-to-head from the **RLDX-1 Technical Report** (arXiv:2605.03269).
28
- Current SOTA: **RLDX-1 70.6%** (RLWRLD / KAIST, Jinwoo Shin).
29
- 2. **Other protocols** — self-reported under different setups (e.g. Cosmos-Policy, 50 demos); not directly comparable.
30
  3. **GR1-Tabletop variant** — a *different* RoboCasa task suite.
31
 
 
 
 
 
32
  ## Honesty policy
33
  Every number is cited to its paper / model card. Protocol differences are surfaced, not hidden.
34
- Corrections welcome via the Community tab.
35
 
36
  *Maintained by GINIGEN-AI. Not affiliated with the RoboCasa authors.*
 
3
  emoji: 🍳
4
  colorFrom: blue
5
  colorTo: green
6
+ sdk: docker
7
+ app_port: 7860
 
 
8
  pinned: true
9
  license: mit
10
  short_description: Neutral aggregation of VLA success rates on RoboCasa Kitchen
 
12
 
13
  # 🍳 RoboCasa Kitchen Leaderboard
14
 
15
+ **FastAPI + static HTML.** A neutral community aggregation of Vision-Language-Action (VLA)
16
+ policy success rates on **RoboCasa Kitchen** (single-arm Franka Panda, 24 atomic tasks),
17
+ maintained by [GINIGEN-AI](https://huggingface.co/ginigen-ai).
 
 
 
 
 
18
 
19
  ## Tables
20
+ 1. **Kitchen 24-task (matched protocol)** — head-to-head from the RLDX-1 Technical Report (arXiv:2605.03269). SOTA: **RLDX-1 70.6%**.
21
+ 2. **Other protocols** self-reported under different setups (not directly comparable).
 
22
  3. **GR1-Tabletop variant** — a *different* RoboCasa task suite.
23
 
24
+ ## Submit
25
+ Use the form on the page. Each submission is stored privately (one JSON per entry, `status: pending`)
26
+ and reviewed before appearing on the board.
27
+
28
  ## Honesty policy
29
  Every number is cited to its paper / model card. Protocol differences are surfaced, not hidden.
 
30
 
31
  *Maintained by GINIGEN-AI. Not affiliated with the RoboCasa authors.*
app.py CHANGED
@@ -1,72 +1,51 @@
1
  # -*- coding: utf-8 -*-
2
- """RoboCasa Kitchen Leaderboard — neutral aggregation by GINIGEN-AI.
3
- Scores are collected from published papers (matched-protocol where available).
4
- Not an official RoboCasa leaderboard; a community aggregation."""
5
- import gradio as gr
6
- import pandas as pd
7
-
8
- # ── RoboCasa Kitchen (single-arm, 24 atomic tasks, Franka Panda) ──
9
- # Source of truth: RLDX-1 Technical Report (arXiv 2605.03269) matched-protocol table.
10
- KITCHEN = [
11
- [1, "RLDX-1", 70.6, "RLWRLD / KAIST (Jinwoo Shin)", "MSAT", "arXiv:2605.03269", "2026-05", "matched (RLDX-1 report)"],
12
- [2, "GR00T N1.6", 66.2, "NVIDIA", "GR00T", "arXiv:2503.14734", "2026", "reproduced in RLDX-1"],
13
- [3, "GR00T N1.5", 65.7, "NVIDIA", "GR00T", "arXiv:2503.14734", "2025", "reproduced in RLDX-1"],
14
- [4, "π0-FAST", 63.6, "Physical Intelligence", "π0 (FAST tok.)", "—", "2025", "reproduced in RLDX-1"],
15
- [5, "π0", 62.5, "Physical Intelligence", "π0 (flow)", "arXiv:2410.24164", "2024", "reproduced in RLDX-1"],
16
- [6, "π0.5", 62.1, "Physical Intelligence", "π0.5", "arXiv:2504.16054", "2025", "reproduced in RLDX-1"],
17
- ]
18
- KITCHEN_COLS = ["#", "Model", "Kitchen 24-task SR (%)", "Org", "Backbone/Arch", "Paper", "Date", "Protocol note"]
19
-
20
- # Different-protocol entries (NOT directly comparable — fewer demos / own eval)
21
- OTHER = [
22
- ["Cosmos-Policy (Predict2-2B)", 67.1, "NVIDIA", "2B (video-FM finetune)", "hf.co/nvidia/Cosmos-Policy-RoboCasa-Predict2-2B", "2026", "50 demos, NVIDIA-own protocol"],
23
- ]
24
- OTHER_COLS = ["Model", "Reported SR (%)", "Org", "Backbone", "Source", "Date", "Why separate"]
25
-
26
- # GR1-Tabletop variant (humanoid GR1 — DO NOT mix with single-arm Kitchen)
27
- GR1 = [
28
- ["GR00T (h=16)", 59.7, "NVIDIA", "arXiv:2604.05014 (StarVLA)"],
29
- ["TwinBrainVLA", 54.6, "—", "arXiv:2601.14133"],
30
- ["VP-VLA", 53.8, "", "arXiv:2603.22003"],
31
- ["StarVLA-OFT", 48.8, "—", "arXiv:2604.05014"],
32
- ["GR00T-N1.6", 24.2, "NVIDIA", "RoboCasa-GR1 (no-collision 7.0%)"],
33
- ]
34
- GR1_COLS = ["Model", "GR1-Tabletop 24-task SR (%)", "Org", "Source"]
35
-
36
- def df(rows, cols): return pd.DataFrame(rows, columns=cols)
37
-
38
- INTRO = """
39
- # 🍳 RoboCasa Kitchen Leaderboard
40
- **Neutral community aggregation by [GINIGEN-AI](https://huggingface.co/ginigen-ai).**
41
- Vision-Language-Action (VLA) policies on **RoboCasa Kitchen** (single-arm Franka Panda, 24 atomic manipulation tasks).
42
-
43
- > ⚠️ RoboCasa has **no official leaderboard** and **multiple variants**. This board aggregates **published** numbers.
44
- > The main table uses the **matched protocol** reported in the RLDX-1 Technical Report (arXiv:2605.03269), the most recent head-to-head comparison.
45
- > Entries under other protocols (different #demos / eval) are listed **separately** and are **not directly comparable**.
46
- """
47
-
48
- NOTES = """
49
- ### Methodology / Honesty
50
- - **Main table** = RoboCasa Kitchen, single-arm, 24 atomic tasks, averaged success rate, **same protocol** (RLDX-1 report, head-to-head).
51
- - **Different-protocol** = self-reported under a different setup (e.g. Cosmos-Policy uses 50 demos) → shown apart to avoid apples-vs-oranges.
52
- - **GR1-Tabletop** = a *different* RoboCasa variant (humanoid GR1). Never compare its numbers with single-arm Kitchen.
53
- - Corrections / additions welcome via the Community tab. We cite the paper for every number.
54
-
55
- ### Sources
56
- - RLDX-1 Technical Report — arXiv:2605.03269 (RLWRLD / KAIST, Jinwoo Shin)
57
- - RoboCasa — arXiv:2406.02523 ; RoboCasa365 — arXiv:2603.04356
58
- - GR00T N1 — arXiv:2503.14734 ; Cosmos-Policy — hf.co/nvidia/Cosmos-Policy-RoboCasa-Predict2-2B
59
- """
60
-
61
- with gr.Blocks(title="RoboCasa Kitchen Leaderboard — GINIGEN-AI", theme=gr.themes.Soft()) as demo:
62
- gr.Markdown(INTRO)
63
- with gr.Tab("🏆 Kitchen 24-task (matched protocol)"):
64
- gr.Dataframe(value=df(KITCHEN, KITCHEN_COLS), interactive=False, wrap=True)
65
- with gr.Tab("➕ Other protocols (not comparable)"):
66
- gr.Dataframe(value=df(OTHER, OTHER_COLS), interactive=False, wrap=True)
67
- with gr.Tab("🤖 GR1-Tabletop variant (separate)"):
68
- gr.Dataframe(value=df(GR1, GR1_COLS), interactive=False, wrap=True)
69
- gr.Markdown(NOTES)
70
-
71
- if __name__ == "__main__":
72
- demo.launch()
 
1
  # -*- coding: utf-8 -*-
2
+ """RoboCasa Kitchen Leaderboard — FastAPI.
3
+ Serves static index.html and accepts /submit, writing one JSON file per
4
+ submission to a PRIVATE HF dataset (ginigen-ai/robocasa-submissions)."""
5
+ import os, io, json, datetime, re
6
+ from fastapi import FastAPI, Form
7
+ from fastapi.responses import FileResponse, JSONResponse
8
+ from huggingface_hub import HfApi
9
+
10
+ HERE = os.path.dirname(os.path.abspath(__file__))
11
+ DS_REPO = "ginigen-ai/robocasa-submissions"
12
+ TOKEN = os.environ.get("HF_TOKEN")
13
+ app = FastAPI(title="RoboCasa Kitchen Leaderboard", docs_url=None, redoc_url=None)
14
+
15
+
16
+ @app.get("/")
17
+ def index():
18
+ return FileResponse(os.path.join(HERE, "index.html"))
19
+
20
+
21
+ @app.get("/health")
22
+ def health():
23
+ return JSONResponse({"status": "ok", "token_configured": bool(TOKEN)})
24
+
25
+
26
+ @app.post("/submit")
27
+ async def submit(model: str = Form(...), sr: float = Form(...), protocol: str = Form(...),
28
+ paper: str = Form(""), submitter: str = Form(...)):
29
+ if not TOKEN:
30
+ return JSONResponse({"ok": False, "error": "server token not configured"}, status_code=500)
31
+ try:
32
+ srv = float(sr)
33
+ except Exception:
34
+ return JSONResponse({"ok": False, "error": "SR must be a number"}, status_code=400)
35
+ if not (0.0 <= srv <= 100.0):
36
+ return JSONResponse({"ok": False, "error": "SR must be 0-100"}, status_code=400)
37
+ rec = {"model": model.strip()[:120], "sr": round(srv, 2), "protocol": protocol.strip()[:60],
38
+ "paper": paper.strip()[:300], "submitter": submitter.strip()[:120],
39
+ "ts": datetime.datetime.utcnow().isoformat() + "Z", "status": "pending"}
40
+ if not rec["model"] or not rec["submitter"]:
41
+ return JSONResponse({"ok": False, "error": "model and submitter required"}, status_code=400)
42
+ safe = re.sub(r"[^A-Za-z0-9_-]", "", model)[:30] or "model"
43
+ fname = "submissions/%s_%s.json" % (rec["ts"].replace(":", "").replace(".", ""), safe)
44
+ try:
45
+ HfApi(token=TOKEN).upload_file(
46
+ path_or_fileobj=io.BytesIO(json.dumps(rec, ensure_ascii=False, indent=2).encode("utf-8")),
47
+ path_in_repo=fname, repo_id=DS_REPO, repo_type="dataset",
48
+ commit_message="submit: %s by %s" % (rec["model"], rec["submitter"]))
49
+ return JSONResponse({"ok": True})
50
+ except Exception as e:
51
+ return JSONResponse({"ok": False, "error": str(e)[:200]}, status_code=500)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
index.html ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>RoboCasa Kitchen Leaderboard — GINIGEN-AI</title>
7
+ <style>
8
+ :root{--bg:#0b1020;--card:#141b2e;--bd:#26304a;--fg:#e6ebf5;--mut:#9aa6c0;--acc:#4f7cff;--gold:#ffd24a;--grn:#7fffd4;}
9
+ *{box-sizing:border-box;}
10
+ body{margin:0;padding:32px 16px;background:linear-gradient(160deg,#0b1020,#111a33);color:var(--fg);
11
+ font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;line-height:1.5;}
12
+ .wrap{max-width:1000px;margin:0 auto;}
13
+ h1{font-size:30px;margin:0 0 6px;}
14
+ .sub{color:var(--mut);margin:0 0 20px;}
15
+ .warn{background:rgba(79,124,255,.12);border:1px solid var(--bd);border-radius:10px;padding:12px 16px;
16
+ margin:14px 0 26px;color:var(--mut);font-size:14px;}
17
+ h2{font-size:20px;margin:28px 0 10px;}
18
+ table{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--bd);
19
+ border-radius:12px;overflow:hidden;font-size:14px;}
20
+ th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--bd);}
21
+ th{background:#1b2440;color:var(--mut);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.4px;}
22
+ tr:last-child td{border-bottom:none;}
23
+ tr.top td{background:rgba(255,210,74,.08);}
24
+ .rank{font-weight:700;color:var(--gold);}
25
+ .sr{font-weight:700;color:var(--grn);}
26
+ a{color:var(--acc);text-decoration:none;}
27
+ .foot{color:var(--mut);font-size:13px;margin-top:28px;border-top:1px solid var(--bd);padding-top:16px;}
28
+ form{background:var(--card);border:1px solid var(--bd);border-radius:12px;padding:18px 18px 8px;margin-top:8px;}
29
+ .row{display:flex;gap:14px;flex-wrap:wrap;}
30
+ .fld{flex:1;min-width:180px;margin-bottom:14px;}
31
+ label{display:block;font-size:12px;color:var(--mut);margin-bottom:5px;text-transform:uppercase;letter-spacing:.3px;}
32
+ input,select{width:100%;padding:9px 11px;background:#0e1526;border:1px solid var(--bd);border-radius:8px;
33
+ color:var(--fg);font-size:14px;}
34
+ button{background:var(--acc);color:#fff;border:none;border-radius:8px;padding:10px 22px;font-size:14px;
35
+ font-weight:600;cursor:pointer;margin-bottom:12px;}
36
+ button:hover{background:#3a67e6;}
37
+ #msg{font-size:14px;margin:6px 0 12px;min-height:20px;}
38
+ </style>
39
+ </head>
40
+ <body>
41
+ <div class="wrap">
42
+ <h1>🍳 RoboCasa Kitchen Leaderboard</h1>
43
+ <p class="sub">Neutral community aggregation by <a href="https://huggingface.co/ginigen-ai">GINIGEN-AI</a> · Vision-Language-Action (VLA) policies on <b>RoboCasa Kitchen</b> (single-arm Franka Panda, 24 atomic manipulation tasks).</p>
44
+ <div class="warn">⚠️ RoboCasa has <b>no official leaderboard</b> and <b>multiple incompatible variants</b>. The main table uses the <b>matched protocol</b> from the RLDX-1 Technical Report (arXiv:2605.03269), the most recent head-to-head comparison. Other-protocol entries are listed separately and are <b>not directly comparable</b>. Every number is cited.</div>
45
+
46
+ <h2>🏆 Kitchen 24-task (matched protocol)</h2>
47
+ <table>
48
+ <thead><tr><th>#</th><th>Model</th><th>SR&nbsp;(%)</th><th>Org</th><th>Backbone/Arch</th><th>Paper</th><th>Date</th><th>Protocol</th></tr></thead>
49
+ <tbody>
50
+ <tr class="top"><td class="rank">1</td><td><b>RLDX-1</b></td><td class="sr">70.6</td><td>RLWRLD / KAIST (Jinwoo Shin)</td><td>MSAT</td><td>arXiv:2605.03269</td><td>2026-05</td><td>matched (RLDX-1 report)</td></tr>
51
+ <tr><td>2</td><td>GR00T N1.6</td><td class="sr">66.2</td><td>NVIDIA</td><td>GR00T</td><td>arXiv:2503.14734</td><td>2026</td><td>reproduced in RLDX-1</td></tr>
52
+ <tr><td>3</td><td>GR00T N1.5</td><td class="sr">65.7</td><td>NVIDIA</td><td>GR00T</td><td>arXiv:2503.14734</td><td>2025</td><td>reproduced in RLDX-1</td></tr>
53
+ <tr><td>4</td><td>&pi;0-FAST</td><td class="sr">63.6</td><td>Physical Intelligence</td><td>&pi;0 (FAST tok.)</td><td>&mdash;</td><td>2025</td><td>reproduced in RLDX-1</td></tr>
54
+ <tr><td>5</td><td>&pi;0</td><td class="sr">62.5</td><td>Physical Intelligence</td><td>&pi;0 (flow)</td><td>arXiv:2410.24164</td><td>2024</td><td>reproduced in RLDX-1</td></tr>
55
+ <tr><td>6</td><td>&pi;0.5</td><td class="sr">62.1</td><td>Physical Intelligence</td><td>&pi;0.5</td><td>arXiv:2504.16054</td><td>2025</td><td>reproduced in RLDX-1</td></tr>
56
+ </tbody></table>
57
+
58
+ <h2>➕ Other protocols (not directly comparable)</h2>
59
+ <table>
60
+ <thead><tr><th>Model</th><th>Reported&nbsp;SR&nbsp;(%)</th><th>Org</th><th>Backbone</th><th>Source</th><th>Why separate</th></tr></thead>
61
+ <tbody>
62
+ <tr><td>Cosmos-Policy (Predict2-2B)</td><td class="sr">67.1</td><td>NVIDIA</td><td>2B (video-FM finetune)</td><td><a href="https://huggingface.co/nvidia/Cosmos-Policy-RoboCasa-Predict2-2B">model card</a></td><td>50 demos, NVIDIA-own protocol</td></tr>
63
+ </tbody></table>
64
+
65
+ <h2>🤖 GR1-Tabletop variant (separate suite)</h2>
66
+ <table>
67
+ <thead><tr><th>Model</th><th>GR1-Tabletop&nbsp;24-task&nbsp;SR&nbsp;(%)</th><th>Org</th><th>Source</th></tr></thead>
68
+ <tbody>
69
+ <tr><td>GR00T (h=16)</td><td class="sr">59.7</td><td>NVIDIA</td><td>arXiv:2604.05014 (StarVLA)</td></tr>
70
+ <tr><td>TwinBrainVLA</td><td class="sr">54.6</td><td>&mdash;</td><td>arXiv:2601.14133</td></tr>
71
+ <tr><td>VP-VLA</td><td class="sr">53.8</td><td>&mdash;</td><td>arXiv:2603.22003</td></tr>
72
+ <tr><td>StarVLA-OFT</td><td class="sr">48.8</td><td>&mdash;</td><td>arXiv:2604.05014</td></tr>
73
+ <tr><td>GR00T-N1.6</td><td class="sr">24.2</td><td>NVIDIA</td><td>RoboCasa-GR1 (no-collision 7.0%)</td></tr>
74
+ </tbody></table>
75
+
76
+ <h2>📝 Submit your result</h2>
77
+ <p class="sub" style="margin:0 0 8px">Submissions are stored privately and reviewed before appearing on the board.</p>
78
+ <form id="sf">
79
+ <div class="row">
80
+ <div class="fld"><label>Model name *</label><input name="model" required placeholder="e.g. MyVLA-7B"></div>
81
+ <div class="fld"><label>Success rate % *</label><input name="sr" type="number" step="0.1" min="0" max="100" required placeholder="e.g. 64.3"></div>
82
+ </div>
83
+ <div class="row">
84
+ <div class="fld"><label>Protocol *</label><select name="protocol">
85
+ <option>Kitchen 24-task (matched)</option>
86
+ <option>Other protocol</option>
87
+ <option>GR1-Tabletop</option></select></div>
88
+ <div class="fld"><label>Paper / URL</label><input name="paper" placeholder="arXiv or HF link"></div>
89
+ <div class="fld"><label>Your name / org *</label><input name="submitter" required placeholder="e.g. GINIGEN-AI"></div>
90
+ </div>
91
+ <button type="submit">Submit</button>
92
+ <div id="msg"></div>
93
+ </form>
94
+
95
+ <div class="foot">Sources: RLDX-1 (arXiv:2605.03269) · RoboCasa (arXiv:2406.02523) · RoboCasa365 (arXiv:2603.04356) · GR00T N1 (arXiv:2503.14734) · Cosmos-Policy (hf.co/nvidia/Cosmos-Policy-RoboCasa-Predict2-2B).<br>
96
+ Maintained by GINIGEN-AI. Not affiliated with the RoboCasa authors. Corrections welcome via the Community tab.</div>
97
+ </div>
98
+
99
+ <script>
100
+ const sf = document.getElementById('sf'), msg = document.getElementById('msg');
101
+ sf.addEventListener('submit', async (e) => {
102
+ e.preventDefault();
103
+ msg.style.color = '#9aa6c0'; msg.textContent = 'Submitting…';
104
+ try {
105
+ const r = await fetch('/submit', { method: 'POST', body: new FormData(sf) });
106
+ const j = await r.json();
107
+ if (j.ok) { msg.style.color = '#7fffd4'; msg.textContent = '✅ Submitted — pending review. Thank you!'; sf.reset(); }
108
+ else { msg.style.color = '#ff8080'; msg.textContent = '❌ ' + (j.error || 'failed'); }
109
+ } catch (err) { msg.style.color = '#ff8080'; msg.textContent = '❌ network error'; }
110
+ });
111
+ </script>
112
+ </body>
113
+ </html>
requirements.txt CHANGED
@@ -1,2 +1,4 @@
1
- pandas>=2.0.0
2
- audioop-lts
 
 
 
1
+ fastapi>=0.110
2
+ uvicorn[standard]>=0.27
3
+ huggingface_hub>=0.25
4
+ python-multipart>=0.0.9