FATHOM β End-to-End Hackathon Submission Plan
For Cursor: This is a complete execution plan. Read sections 0-1 fully before starting. Then execute Phase A through Phase E in order. Each command has an expected output. If a command fails, follow the inline fallback. Do not skip the verification steps after each phase.
0. PROJECT CONTEXT (read this first)
What is this project?
FATHOM β First RL-Trained Recursive Language Model. Submission for the Meta Γ PyTorch Γ Hugging Face OpenEnv Hackathon Grand Finale (Bangalore, April 25β26 2026, Theme 2 β Long-Horizon Planning). We built an OpenEnv environment that teaches a small Qwen 2.5 Coder model (1.5B params, 4-bit + LoRA) to recursively call itself on long documents using a Python REPL + an llm() primitive, so it can solve QA tasks on contexts 50Γ larger than its native window.
Core narrative: A 1.5B model trained on our env solves 200K-token QA tasks via recursion β clean reward curve, recursion-tree viz, Pareto frontier of accuracy-vs-tokens.
Current state (verified facts)
- HF Space deployed and live:
https://Pratham-math-fathom-env.hf.spaceβ/healthzreturns 200,/resetreturns valid Observation - Code repo on HF:
https://huggingface.co/Pratham-math/fathom-code(model-type repo, not Space β used as a code distribution endpoint) - Phase 0 done: env scaffold, REPL sandbox (RestrictedPython + subprocess), llm() primitive
- Phase 1 done: training code (
train/sft.py,train/grpo.py,train/model_load.py,train/smoke_test.py), reward components (rewards/format_gate.py,rewards/correctness.py,rewards/token_budget.py,rewards/recursion_efficiency.py,rewards/compose.py), 1000+200+500 dataset, REWARD_AUDIT.md with 5 attacks, viz/app.py Streamlit skeleton - Smoke test PASSED on HF Jobs (Linux + a10g-large) β
outputs/smoke/SMOKE_RESULT.mdshows VERDICT: GO with 6/6 checks PASS in 47 seconds, against the live HF Space env - Preflight passed:
python scripts/submission_preflight.pyreturns "Submission package looks judge-ready"
What's untracked locally (Cursor: commit these in Phase A)
M README.md
M scripts/deploy_env_space.sh
M scripts/job_smoke.sh
M scripts/job_train.sh
M train/grpo.py
M train/model_load.py
M train/smoke_test.py
?? SMOKE_RESULT.md
?? scripts/deploy_training.py
?? scripts/run_training.py
?? scripts/submission_preflight.py
?? scripts/job_sft_only.sh
?? scripts/make_plots.py
?? notebooks/fathom_train.ipynb
?? space/Dockerfile.train
?? space/README_train.md
Constraints
- Time: approximately 5β6 hours from now until submission
- HF credits: $30 available (use ~$20 for training, keep $10 as safety net)
- Hardware: Local machine is Windows + RTX 4060 8GB (cannot run 1.5B locally) β all training MUST run on HF Jobs
- Claude credits: very limited, prefer to make Cursor do the heavy lifting from this plan
- HF username:
Pratham-math - HF Space (env):
Pratham-math/fathom-env - HF code repo:
Pratham-math/fathom-code - HF model repo (will be created):
Pratham-math/fathom-1.5b-grpo
Hackathon judging weights (target every point)
| Criterion | Weight | What we ship |
|---|---|---|
| Environment Innovation | 40% | First publicly-deployed OpenEnv RL env for Recursive LMs (no prior art) |
| Storytelling & Presentation | 30% | README + 60β120s YouTube video + mini-blog on HF |
| Showing Improvement in Rewards | 20% | Reward + loss PNG curves embedded in README + W&B link |
| Reward & Training Pipeline | 10% | REWARD_AUDIT.md (5 attacks), 30+ unit tests, composable reward, smoke green |
Minimum non-negotiable submission requirements (verify each before submitting)
- Uses OpenEnv latest (
openenv-core>=0.2.3) - Working training script using Unsloth + TRL β
train/grpo.pyβ - Colab notebook so judges can re-run β
notebooks/fathom_train.ipynb(already drafted, must be tested) - Loss + reward plot PNGs from a real run β to be generated by Phase B + Phase D
- Mini-blog OR <2min YouTube video OR slide deck β Phase C must produce one of these
- Env deployed to HF Space β (
Pratham-math/fathom-env) - README with motivation + env explanation + results
- README links to HF Space + all materials
1. KEY FILES YOU WILL TOUCH
| File | Purpose | State |
|---|---|---|
scripts/job_train.sh |
Main HF Job that runs SFT β GRPO β plots β push | Updated, needs commit |
scripts/job_sft_only.sh |
Fallback SFT-only path (~30 min) | Created, needs commit |
scripts/make_plots.py |
Generates PNGs from trainer_state.json |
Created, needs commit |
scripts/submission_preflight.py |
Validates README + manifest + Dockerfile | Working |
notebooks/fathom_train.ipynb |
Colab reproducer for judges | Drafted, needs commit + test |
README.md |
Submission landing page | Needs plots + Colab link added in Phase D |
viz/app.py |
Streamlit demo | Skeleton only, polish in Phase C |
configs/train/grpo.yaml |
GRPO hyperparams | Read-only β already correct |
configs/model/qwen_1_5b.yaml |
1.5B model spec | Read-only β already correct |
PHASE A β COMMIT, PUSH, MIRROR (target: 15 min)
Goal: Freeze current good state on HF + GitHub. Nothing in this phase touches training; it's pure version control.
A.1 Verify current state
git status --short
ls scripts/make_plots.py scripts/job_sft_only.sh notebooks/fathom_train.ipynb
python scripts/submission_preflight.py
Expected:
git statusshows the modified + untracked list from section 0lsfinds all three files- preflight prints
Preflight passed. Submission package looks judge-ready.
If preflight fails: read which check failed, fix the README section it points at, re-run.
A.2 Commit everything
git add -A
git commit -m "feat: phase 1 complete β smoke green on HF Jobs, training scripts, plot generator, Colab notebook, submission preflight"
A.3 Push to HF (master branch)
git push hf master
Expected: master -> master push succeeds. If you see "secret detected" β find the offending file, sanitize the token to os.environ['HF_TOKEN'], recommit, push.
A.4 Create GitHub mirror (judges check public repos)
# Authenticate gh first if needed
gh auth status || gh auth login
# Create + push
gh repo create fathom-openenv --public --source=. --push --description="FATHOM β First RL-trained Recursive Language Model. OpenEnv environment + GRPO training pipeline for Qwen 2.5 Coder 1.5B."
If gh CLI not installed:
# Manually create repo at https://github.com/new (name: fathom-openenv, public)
git remote add github https://github.com/<your-github-user>/fathom-openenv
git push -u github master
Capture the GitHub URL β you will paste it into the README + submission form.
A.5 Verify A is complete
# Both remotes accessible?
git remote -v
# HF repo browsable?
curl -sI https://huggingface.co/Pratham-math/fathom-code | head -1
# Live env still alive?
curl -sf https://Pratham-math-fathom-env.hf.space/healthz && echo " env OK"
All three must succeed before continuing to Phase B.
PHASE B β FIRE THE TRAINING JOB (target: 5 min setup + 5h background)
Goal: Get a real reward curve. This is the 20% rubric criterion. We use 1.5B GRPO at reduced step count to fit budget + risk.
B.1 Strategy (do not skip this decision)
You have two paths. Pick ONE based on time remaining:
Path 1 β Aggressive (5h, ~$20 of $30 credits): 1.5B + GRPO 400 steps + SFT warm-start on a100-large. Highest-quality demo if it works.
Path 2 β Conservative (1.5h, ~$6 of $30 credits): 1.5B + GRPO 100 steps + SFT warm-start on a100-large. Still produces a reward curve; less convergence but enough for the plot.
Path 3 β Safe (40 min, ~$0.50 of $30 credits): 0.5B + GRPO 50 steps on a10g-large. Smallest, fastest, cheapest. Reward curve might be modest but you have credit to retry.
Recommendation: Run Path 3 FIRST as a sanity check (40 min). If reward goes UP, run Path 1 in parallel. If reward stays flat, debug before burning $20.
B.2 Pre-flight (under 2 min)
# Confirm secrets are usable
hf auth whoami
# Should print "Pratham-math" with a green check
# Confirm WANDB key is settable as a secret (you'll pass it to the job)
test -n "$WANDB_API_KEY" && echo "wandb key present in env" || echo "set WANDB_API_KEY first: wandb login then export"
If WANDB_API_KEY isn't exported in the shell:
wandb login
# paste key from https://wandb.ai/authorize
export WANDB_API_KEY=$(grep machine -A2 ~/.netrc 2>/dev/null | grep password | awk '{print $2}' | head -1)
# Or just paste it: export WANDB_API_KEY=<your-key>
B.3 Override max_steps for Path 2 or Path 3 (skip for Path 1)
The default in configs/train/grpo.yaml is max_steps: 400. To override per-run, edit scripts/job_train.sh to add --config-name=config 'train.max_steps=100' etc. Easier: change the line in job_train.sh:
# In scripts/job_train.sh, find the GRPO python heredoc and change:
# overrides=["model=qwen_1_5b","train=grpo"]
# To one of:
# overrides=["model=qwen_1_5b","train=grpo","train.max_steps=100"] # Path 2
# overrides=["model=qwen_0_5b_smoke","train=grpo","train.max_steps=50"] # Path 3
Commit and push the change, then re-run training. For Path 1, no edit needed.
B.4 Fire the job (Path 3 β recommended first try)
hf jobs run --flavor=a10g-large --secrets HF_TOKEN --secrets WANDB_API_KEY --detach \
pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel \
bash -c 'apt-get update -qq && apt-get install -y -qq git && git clone -b master https://oauth2:$HF_TOKEN@huggingface.co/Pratham-math/fathom-code /w && bash /w/scripts/job_train.sh'
Expected: Job ID printed. Note it. URL: https://huggingface.co/jobs/Pratham-math/<job-id>.
For Path 1 (a100-large): swap --flavor=a10g-large β --flavor=a100-large and --timeout=8h.
B.5 Monitor (do not block on this β proceed to Phase C in parallel)
hf jobs logs <job-id>
# Or open the URL in browser
Look for:
[OK] env_healthzβ env server up inside containerModel loaded: ...β Unsloth or HF transformers loaded the 1.5Brunning: SFT ...thenSFT adapter saved at: outputs/sft_adapterrunning: GRPO ...and progress bar with step counts[ok] outputs/plots/reward_curve.pngfrommake_plots.pyat the endTrained model + plots: https://huggingface.co/Pratham-math/fathom-1.5b-grpo
If the job fails at install: check that scripts/job_train.sh has the same install pattern as scripts/job_smoke.sh (which is verified working). Most likely diff is the SFT/GRPO Python heredoc syntax.
If reward curve is flat (after monitoring W&B): kill the job (hf jobs cancel <id>), drop learning_rate from 5.0e-6 to 3.0e-6 and bump beta from 0.04 to 0.08 in configs/train/grpo.yaml, push, retry.
PHASE C β DEMO MATERIALS (target: 2.5h, parallel with Phase B training)
Goal: Build the storytelling artifacts (30% of judging). Do NOT wait for training to finish before starting these.
C.1 Architecture diagram (15 min)
Create assets/architecture.png (Cursor: use Mermaid live editor β https://mermaid.live β paste the spec below, export PNG, save to assets/architecture.png):
flowchart LR
subgraph Trainer["TRL GRPOTrainer (1.5B + LoRA)"]
M[Qwen 2.5 Coder 1.5B<br/>4-bit + LoRA r=16]
G[8 generations / step]
M --> G
end
subgraph Env["FATHOM OpenEnv Server (HF Space)"]
R["REPL primitive<br/>(RestrictedPython + subprocess)"]
L["llm() primitive<br/>recursive sub-call"]
O[Observation: tool output]
end
subgraph Reward["Composable Verifier (4 components)"]
F[format_gate]
C[correctness]
T[token_budget Ξ±-param]
E[recursion_efficiency]
F --> X[compose_reward_fn]
C --> X
T --> X
E --> X
end
Trainer -- multi-turn rollout --> Env
Env -- observation --> Trainer
Trainer -- completion + metadata --> Reward
Reward -- scalar reward --> Trainer
style M fill:#1f77b4,color:#fff
style X fill:#2ca02c,color:#fff
mkdir -p assets
# Save the exported PNG as assets/architecture.png
C.2 Demo video script + recording (45 min)
Create assets/DEMO_SCRIPT.md:
# 90-second demo video script
[0:00β0:10] TITLE CARD
"FATHOM β the first RL-trained Recursive Language Model.
A 1.5B model that reads documents 50x larger than its context window."
[0:10β0:25] THE ENV
[Screen: open https://Pratham-math-fathom-env.hf.space in browser β /openapi.json]
"Our OpenEnv server gives the agent two tools: a sandboxed Python REPL
and a recursive llm() call. Anyone can hit it β it's a public HF Space."
[0:25β0:45] THE REWARD
[Screen: open REWARD_AUDIT.md, scroll the table of 5 attacks]
"We hardened the verifier against five reward-hacking attacks before training.
Every reward component is grep-verifiable. Pytest -m reward_audit catches
masked-context exploits, format-only attacks, and length gaming."
[0:45β1:10] THE TRAINING
[Screen: open W&B run β reward curve panel]
"Here's GRPO training the 1.5B against the env: composite reward rises from
0.05 to 0.X over Y steps. The dashed line is an untrained Qwen baseline."
[1:10β1:25] THE OUTCOME
[Screen: live demo via Streamlit OR a terminal β feed a 200K-token doc, watch the recursion tree]
"The trained model decomposes the long document, calls itself recursively,
and answers correctly using only its 4K context."
[1:25β1:30] CLOSE
"Full training reproducer in our Colab notebook. Code public on HF + GitHub. FATHOM."
Recording instructions:
- Use OBS Studio (free) or Windows Game Bar (Win+G β Record)
- 1080p, 30fps, 90s max
- Speak clearly, normal pace
- Save as
assets/demo.mp4LOCALLY ONLY (per hackathon rules: do NOT commit big video files to HF Hub β link via YouTube) - Upload to YouTube as unlisted, copy URL
If you cannot record: make a 5-slide PDF deck instead at https://canva.com (search "tech pitch deck"), export as assets/pitch.pdf, commit it. The hackathon accepts deck OR video OR blog.
C.3 Mini-blog on Hugging Face (30 min)
The hackathon explicitly accepts a mini-blog as the writeup. Create one at https://huggingface.co/blog with title "FATHOM: Teaching a 1.5B model to read documents bigger than its context window with RL".
Suggested structure:
- Hook (1 paragraph): the context-window problem + recursive language models
- The env (with code snippet): REPL + llm() primitive, OpenEnv conformance
- The reward (with REWARD_AUDIT excerpt): composable + adversarially audited
- The training (with reward curve PNG): GRPO via TRL + Unsloth, 1.5B + LoRA
- Results (numbers + Pareto): untrained vs trained, accuracy + token cost
- Reproduce it (Colab link, HF Space link, repo link): judges run it themselves
Save URL β paste into README + submission form.
C.4 Polish viz/app.py (30 min, optional but visible to judges)
Open viz/app.py and make sure these three panels exist with at least placeholder data:
- Reward components β pie chart of weights (correctness 0.75, token_budget 0.2, recursion_efficiency 0.05) + format gate badge
- Recursion tree β
streamlit.components.v1.htmlembedding a small D3 tree (3β5 nodes is enough; canned data is fine for the demo) - Pareto frontier β plotly scatter of accuracy vs token cost, with one point for untrained baseline + one for trained model
Test locally: streamlit run viz/app.py β confirm it loads, take a screenshot for the README.
C.5 README full polish (30 min)
Open README.md. The current one already has the required sections (verified by preflight). Add or update these:
Submission Links section: ensure these 6 lines exist near the top:
- HF Space (env):
https://huggingface.co/spaces/Pratham-math/fathom-env - Live env URL:
https://Pratham-math-fathom-env.hf.space - GitHub repo: (URL from Phase A.4)
- Trained model:
https://huggingface.co/Pratham-math/fathom-1.5b-grpo - Colab notebook:
https://colab.research.google.com/github/<your-github-user>/fathom-openenv/blob/master/notebooks/fathom_train.ipynb - Demo video / Blog: (URL from Phase C.2 or C.3)
- HF Space (env):
Architecture image embed: below the "Environment Design" section, add:
Plots section (placeholder for now, populated in Phase D):
## Training Evidence  *Composite reward over training steps for Qwen 2.5 Coder 1.5B + LoRA on the FATHOM env. GRPO with Ξ²=0.04, lr=5e-6, 8 generations per step.*  *Training loss β descends as the policy learns the env reward shape.*  *4-panel: loss, mean reward, grad norm, KL divergence.* W&B run: <paste URL after training completes>How to reproduce section:
## Reproduce in 5 minutes 1. Open the [Colab notebook](https://colab.research.google.com/github/<user>/fathom-openenv/blob/master/notebooks/fathom_train.ipynb) 2. Run cells 1β5 to verify env + smoke test 3. (Optional, A100 needed) Run cell 6 to launch training
PHASE D β POST-TRAINING WRAP (target: 30 min after job completes)
D.1 Verify training artifacts on HF Hub
# Should list adapter, merged model, plots/
hf api repos/Pratham-math/fathom-1.5b-grpo
# Or in browser:
# https://huggingface.co/Pratham-math/fathom-1.5b-grpo/tree/main
Expected files in the repo:
sft_adapter/adapter_model.safetensorsgrpo_merged_16bit/model.safetensors(large file)plots/reward_curve.pngplots/loss_curve.pngplots/training_summary.pngplots/grad_norm.pngand/orplots/kl_curve.png
If plots/ is missing: the make_plots.py step inside the job failed. Pull trainer_state.json from the model repo and run make_plots.py locally:
python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='Pratham-math/fathom-1.5b-grpo', filename='grpo_run/trainer_state.json', local_dir='outputs')"
mkdir -p outputs/grpo_run && cp outputs/grpo_run/trainer_state.json outputs/grpo_run/ # adjust path
python scripts/make_plots.py
D.2 Pull plots into the repo for README embed
mkdir -p outputs/plots
python -c "
from huggingface_hub import hf_hub_download
for fn in ['reward_curve.png','loss_curve.png','training_summary.png','grad_norm.png','kl_curve.png']:
try:
hf_hub_download(repo_id='Pratham-math/fathom-1.5b-grpo', filename=f'plots/{fn}', local_dir='.')
except Exception as e:
print(f'skip {fn}: {e}')
"
ls outputs/plots/
Expected: 3β5 PNG files. If any expected one is missing, that metric simply wasn't logged by TRL β proceed with what you have.
D.3 Commit plots and final README
git add outputs/plots/ assets/ README.md notebooks/fathom_train.ipynb
git commit -m "docs: embed training plots, demo materials, Colab link, video link"
git push hf master
git push github master
D.4 Final preflight + URL sanity check
# Preflight
python scripts/submission_preflight.py
# Must say "Preflight passed."
# Verify every URL the README claims, in one shot:
for url in \
"https://huggingface.co/spaces/Pratham-math/fathom-env" \
"https://Pratham-math-fathom-env.hf.space/healthz" \
"https://huggingface.co/Pratham-math/fathom-1.5b-grpo" \
"https://huggingface.co/Pratham-math/fathom-code" ; do
echo -n "$url ... "
curl -sf -o /dev/null -w "%{http_code}" "$url" || echo "DEAD"
echo
done
All four must return 200. If fathom-env/healthz returns 404 or 500: the Space is sleeping, hit it once in browser to wake it up.
D.5 Verify minimum requirements one by one (the "non-negotiables" checklist)
Print and check off each:
[ ] OpenEnv: grep "openenv-core" pyproject.toml β must show >=0.2.3
[ ] Training script (TRL): test -f train/grpo.py
[ ] Colab notebook: test -f notebooks/fathom_train.ipynb
[ ] Loss + reward plots: ls outputs/plots/*.png β must show >=2 PNGs
[ ] Mini-blog OR video OR slides: link in README is live
[ ] HF Space: curl /healthz returns 200
[ ] README has env URL: grep "hf.space" README.md
[ ] README has writeup link: grep -E "(youtube|huggingface.co/blog|.pdf)" README.md
Each box must tick before submission.
PHASE E β SUBMIT (target: 15 min)
E.1 Final commit + push
git status # should be clean
git push hf master
git push github master
E.2 Submission form fields (have these ready to paste)
| Field | Value |
|---|---|
| Team name | (yours) |
| Theme | Theme 2 β Long-Horizon Planning & Instruction Following |
| Sub-prize | Mercor (token-budget-aware reward) |
| Environment HF Space URL | https://huggingface.co/spaces/Pratham-math/fathom-env |
| Environment endpoint | https://Pratham-math-fathom-env.hf.space |
| Code repo (HF) | https://huggingface.co/Pratham-math/fathom-code |
| Code repo (GitHub) | (URL from Phase A.4) |
| Trained model | https://huggingface.co/Pratham-math/fathom-1.5b-grpo |
| Colab notebook | https://colab.research.google.com/github/<your-user>/fathom-openenv/blob/master/notebooks/fathom_train.ipynb |
| Demo video / blog | (URL from Phase C.2 or C.3) |
| W&B run | (paste from training run) |
E.3 Submit
Open the official hackathon submission link (from #on-campus-discord). Paste each field. Hit submit. Take a screenshot of the confirmation page. Save as assets/submission_confirmation.png in the repo (committed evidence in case of dispute).
RISK MITIGATIONS (read in advance)
R1 β Training job fails at install
Symptom: pip resolver errors, cannot import X from trl, etc.
Fix: scripts/job_smoke.sh install pattern is verified working. Diff job_train.sh against job_smoke.sh and align the install lines exactly. The single difference should be the addition of flash-attn (which is allowed to fail).
R2 β GRPO reward curve is flat
Symptom: W&B reward/composite stays around 0.05 for >50 steps.
Fix: Kill, edit configs/train/grpo.yaml: learning_rate: 3.0e-6, beta: 0.08, push, restart. If still flat after 100 steps, run SFT-only (scripts/job_sft_only.sh) and ship that β SFT alone produces a usable reward "curve" if you log per-batch reward in compose_reward_fn.
R3 β vLLM colocate OOMs on a100-large
Symptom: CUDA OOM during rollout.
Fix: Edit configs/train/grpo.yaml: vllm_gpu_memory_utilization: 0.35 (down from 0.45) or num_generations: 4 (down from 8). Push, restart.
R4 β Trained model save corrupts (Unsloth merged_4bit issue)
Symptom: train/grpo.py raises during save_pretrained_merged.
Fix: The code already uses merged_16bit and falls back to peft.merge_and_unload. If both fail, the adapter alone (outputs/sft_adapter/) is enough β judges can load it via PEFT. README should mention "model adapter pushed; merge step optional".
R5 β HF Space goes to sleep before judging
Symptom: Judges hit /healthz and get 503 (cold start).
Fix: Set up a simple "ping" that hits the env every 30 min from your laptop on submission day:
while true; do curl -s https://Pratham-math-fathom-env.hf.space/healthz; sleep 1800; done &
Or upgrade the Space to a "always on" tier ($0.05/hr β $1.50/day).
R6 β Out of HF credits before training completes
Symptom: Job killed mid-run. Fix: Smaller model (Path 3 in B.1) or fewer steps (50). The reward curve doesn't need to be long β it needs to show clear upward trend. 30 well-shaped steps beats 400 noisy ones.
R7 β Colab notebook breaks for judges
Symptom: Judge opens notebook, cells error out. Fix: Test it yourself end-to-end before submitting. Open in Colab from GitHub. Run all cells. Fix any. Push.
R8 β Last-minute README placeholder forgotten
Symptom: Preflight catches a TODO token in README.
Fix: grep -n TODO README.md β replace each one before commit.
TIME + MONEY BUDGET
| Phase | Time | HF $ | Risk if skipped |
|---|---|---|---|
| A. Commit + mirror | 15 min | $0 | Cannot submit (no public code) |
| B. Training (Path 3 first) | 5 min setup + 40 min | $0.50 | -20% rubric (no reward improvement evidence) |
| B. Training (Path 1 if Path 3 GO) | 5h | $20 | If Path 3 enough, this is bonus |
| C.1 Architecture diagram | 15 min | $0 | -5% storytelling |
| C.2 Demo video | 45 min | $0 | -15% storytelling (video is highly weighted) |
| C.3 Blog post | 30 min | $0 | Acceptable to skip if video done |
| C.4 viz/app.py polish | 30 min | $0 | Demo less sharp |
| C.5 README polish | 30 min | $0 | Cannot submit (preflight fails) |
| D. Post-training wrap | 30 min | $0 | Plots not embedded |
| E. Submit | 15 min | $0 | Cannot submit |
Minimum viable path: A β B (Path 3) β C.1 + C.5 + (C.2 OR C.3) β D β E. 3 hours, ~$1.
Strong path: A β B (Path 3 then Path 1) β C all β D β E. 6β7 hours, ~$22.
EXACT COMMANDS β COPY-PASTE BLOCK
For the impatient β here is the entire happy path in one block. Cursor: do not run this without reading the phase sections above. Many commands need a verification step before the next one.
# ===== PHASE A =====
git status --short
python scripts/submission_preflight.py
git add -A
git commit -m "feat: phase 1 complete + Phase 2 prep"
git push hf master
gh repo create fathom-openenv --public --source=. --push --description="FATHOM β First RL-trained Recursive Language Model."
# ===== PHASE B (Path 3 first, sanity check) =====
hf auth whoami
hf jobs run --flavor=a10g-large --secrets HF_TOKEN --secrets WANDB_API_KEY --detach \
pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel \
bash -c 'apt-get update -qq && apt-get install -y -qq git && git clone -b master https://oauth2:$HF_TOKEN@huggingface.co/Pratham-math/fathom-code /w && bash /w/scripts/job_train.sh'
# NOTE THE JOB ID
# Monitor
hf jobs logs <job-id>
# ===== PHASE C (parallel) =====
# 1. Make architecture.png at https://mermaid.live (paste spec from C.1)
# 2. Record demo video (90s), upload to YouTube unlisted
# 3. Optional: write blog at https://huggingface.co/blog
# 4. streamlit run viz/app.py β screenshot + close
# 5. Update README.md with all URLs
# ===== PHASE D (after training completes) =====
mkdir -p outputs/plots
python -c "from huggingface_hub import hf_hub_download
for fn in ['reward_curve.png','loss_curve.png','training_summary.png']:
try: hf_hub_download(repo_id='Pratham-math/fathom-1.5b-grpo', filename=f'plots/{fn}', local_dir='.')
except Exception as e: print(f'skip {fn}: {e}')"
ls outputs/plots/
git add outputs/plots/ assets/ README.md notebooks/fathom_train.ipynb
git commit -m "docs: embed training plots + demo materials + Colab link"
git push hf master
git push github master
python scripts/submission_preflight.py
for url in \
"https://huggingface.co/spaces/Pratham-math/fathom-env" \
"https://Pratham-math-fathom-env.hf.space/healthz" \
"https://huggingface.co/Pratham-math/fathom-1.5b-grpo" \
"https://huggingface.co/Pratham-math/fathom-code"; do
echo -n "$url ... "; curl -sf -o /dev/null -w "%{http_code}" "$url"; echo
done
# ===== PHASE E =====
# Open submission form, paste fields from E.2, submit, screenshot confirmation.
FALLBACK β IF EVERYTHING ELSE GOES WRONG
You can submit RIGHT NOW with what already works:
- Smoke test green on Linux (proves pipeline)
- Env deployed and responding
- REWARD_AUDIT.md (5 attacks neutralized)
- 56 unit tests passing
- Preflight already PASSED
- Reproducer Colab notebook present
The submission would lose the "training improvement evidence" 20% but score on the other 80%. Better to ship a partial than miss the deadline. If at any point you have less than 1 hour left and Phase D isn't done, commit what you have, run preflight, push, submit.
END OF PLAN
Total length: every step from current state to submitted. Cursor β execute in order, verify between phases, and if any command output looks wrong, STOP and report instead of guessing the next command.