---
title: EgoMemReason Leaderboard
emoji: 🧠
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 5.15.0
python_version: "3.12"
app_file: app.py
pinned: false
license: cc-by-nc-4.0
hf_oauth: true
---
# EgoMemReason — Leaderboard Space
Live leaderboard for the **EgoMemReason** benchmark: 500 multiple-choice questions over week-long egocentric video, evaluating entity / event / behavior memory.
- 🌐 Project page:
- 📄 Paper:
- 💻 Reference eval scripts:
- 📦 Public questions:
- 🎬 Source frames:
## Operator notes
This Space lives at `Ted412/EgoMemReason` and writes one JSON record per submission to the public dataset `Ted412/EgoMemReason-Leaderboard`. The held-out answer key lives in a separate **private** dataset `Ted412/EgoMemReason-Private` and is pulled at boot via `snapshot_download(token=HF_TOKEN)`.
### Required Space secret
| Name | Value | Scope |
|---|---|---|
| `HF_TOKEN` | Fine-grained HF token | Write on `Ted412/EgoMemReason-Leaderboard` + Read on `Ted412/EgoMemReason-Private` |
Create at → fine-grained → grant only those two repos.
### Local development
```bash
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Copy the private answer key into cwd (skips the snapshot_download path).
cp ../EgoMemReason-EvalAI.archived/annotations/annotations_private.json .
# Run, optionally faking a user.
DEBUG_USER=alice python app.py
# → http://127.0.0.1:7860
```
Tests:
```bash
python -m pytest tests/ -q
```
### Architecture
```
EgoMemReason-Space (this Space, public)
├── app.py Gradio UI (Leaderboard / Submit / Manage / About)
├── evaluator.py pure scoring — port of the old EvalAI main.py
├── ledger.py HF I/O: pulls private annotations at boot; writes
│ one JSON record per submission to the public dataset
├── auth.py resolves the HF username from gr.OAuthProfile
└── annotations_private.json pulled at boot from the private dataset
Ted412/EgoMemReason-Private (HF dataset, private)
└── annotations_private.json 500 Qs WITH correct_answer
Ted412/EgoMemReason-Leaderboard (HF dataset, public)
└── submissions/
└── .json one immutable record per submission
(only is_selected flips on a re-write)
```