| """Download PRM800K step-label files (OpenAI, MIT) into data/raw/prm800k/. |
| |
| python scripts/download_prm800k.py # phase2_train (what we use) |
| python scripts/download_prm800k.py --all # all four phase files |
| |
| The GitHub raw URLs serve the real JSONL (schema: question/label/steps/...), |
| which is exactly what mathcompose.datagen.prm800k_loader expects. |
| """ |
| import argparse |
| import sys |
| import urllib.request |
| from pathlib import Path |
|
|
| BASE = "https://github.com/openai/prm800k/raw/main/prm800k/data" |
| FILES = ["phase2_train.jsonl", "phase1_train.jsonl", "phase2_test.jsonl", "phase1_test.jsonl"] |
|
|
|
|
| def download(name: str, out_dir: Path) -> None: |
| url = f"{BASE}/{name}" |
| dest = out_dir / name |
| dest.parent.mkdir(parents=True, exist_ok=True) |
| print(f"downloading {name} -> {dest}") |
|
|
| def _hook(block, bsize, total): |
| if total > 0: |
| pct = min(100, block * bsize * 100 // total) |
| sys.stdout.write(f"\r {pct:3d}% ({block * bsize / 1e6:.0f} MB)") |
| sys.stdout.flush() |
|
|
| urllib.request.urlretrieve(url, dest, reporthook=_hook) |
| print(f"\r done: {dest.stat().st_size / 1e6:.1f} MB{' ' * 10}") |
|
|
|
|
| def main() -> int: |
| ap = argparse.ArgumentParser() |
| ap.add_argument("--out-dir", default="data/raw/prm800k") |
| ap.add_argument("--all", action="store_true", help="download all four phase files") |
| args = ap.parse_args() |
| names = FILES if args.all else ["phase2_train.jsonl"] |
| for n in names: |
| download(n, Path(args.out_dir)) |
| print("\nNext: python -m mathcompose.data.build_verifier_dataset " |
| f"--prm800k {args.out_dir}/phase2_train.jsonl --teacher promptlens --limit 15000") |
| return 0 |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|