jevon / scripts /build_dataset.py
lewislululu's picture
Jevon: a 20M-parameter decision model for Maze and Snake
97f78c9
Raw History Blame Contribute Delete
1.83 kB
#!/usr/bin/env python3
"""Freeze evaluation splits so every run is scored on identical states."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
from jevon.data import SamplerConfig, freeze_split
def main() -> None:
p = argparse.ArgumentParser(description=__doc__)
p.add_argument("--out-dir", default="data/frozen")
p.add_argument("--val-states", type=int, default=180)
p.add_argument("--test-states", type=int, default=240)
p.add_argument("--ood-states", type=int, default=160)
p.add_argument("--seed", type=int, default=20260919)
args = p.parse_args()
out = Path(args.out_dir)
out.mkdir(parents=True, exist_ok=True)
base = SamplerConfig(augment=False)
# Sizes never sampled in training; this is the size-generalisation probe.
ood = SamplerConfig(maze_sizes=(41, 51), snake_sizes=(20, 24), augment=False)
manifest = {}
manifest["val"] = freeze_split(out / "val.jsonl", base, "val", args.val_states,
args.seed)
manifest["test"] = freeze_split(out / "test.jsonl", base, "test",
args.test_states, args.seed + 1)
manifest["ood"] = freeze_split(out / "ood.jsonl", ood, "test", args.ood_states,
args.seed + 2)
manifest["config"] = {"train_maze_sizes": list(base.maze_sizes),
"train_snake_sizes": list(base.snake_sizes),
"ood_maze_sizes": list(ood.maze_sizes),
"ood_snake_sizes": list(ood.snake_sizes)}
(out / "manifest.json").write_text(json.dumps(manifest, indent=2))
print(json.dumps(manifest, indent=2))
if __name__ == "__main__":
main()