Model card
Browse files
README.md
CHANGED
|
@@ -1,3 +1,80 @@
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
+
tags:
|
| 4 |
+
- magic-the-gathering
|
| 5 |
+
- draft
|
| 6 |
+
- game-ai
|
| 7 |
+
- zero-shot
|
| 8 |
+
- model-evaluation
|
| 9 |
+
- reproducibility
|
| 10 |
---
|
| 11 |
+
|
| 12 |
+
# DraftFM: zero-shot drafting of unseen Magic: The Gathering sets
|
| 13 |
+
|
| 14 |
+
DraftFM is a pick model for *Magic: The Gathering* drafting that represents
|
| 15 |
+
every card as a frozen vector of public information (structured Scryfall
|
| 16 |
+
features plus a sentence embedding of the rules text), with no card- or
|
| 17 |
+
set-specific parameters. It can therefore score a set the moment its card
|
| 18 |
+
list goes public, before any human has drafted it.
|
| 19 |
+
|
| 20 |
+
- **Paper:** [DraftFM: Zero-Shot Drafting of Unseen *Magic: The Gathering*
|
| 21 |
+
Sets from Public Card Features](https://github.com/brianward92/mtga/blob/main/paper/draftfm.pdf)
|
| 22 |
+
(Brian Ward, 2026; arXiv submission in progress)
|
| 23 |
+
- **Code:** https://github.com/brianward92/mtga
|
| 24 |
+
- **Per-pick prediction archive:** [brianward92/draftfm-frozen-eval](https://huggingface.co/datasets/brianward92/draftfm-frozen-eval)
|
| 25 |
+
|
| 26 |
+
## Headline results
|
| 27 |
+
|
| 28 |
+
Trained on 149.4M picks from 28 [17Lands](https://www.17lands.com) sets:
|
| 29 |
+
|
| 30 |
+
| Evaluation | Result |
|
| 31 |
+
|---|---|
|
| 32 |
+
| Three held-out dev sets, top-1 agreement with high-win-rate players | 54.3% |
|
| 33 |
+
| Same, as a fraction of a model trained directly on each set (pre-registered normalized score) | 78.6% |
|
| 34 |
+
| **MSH frozen evaluation** (licensed-IP set, untouched by training or tuning; single pre-registered pass over its first public snapshot) | **57.0% top-1**, 87.7% top-3, log-loss 1.132, ECE 0.005 |
|
| 35 |
+
|
| 36 |
+
The deployed recipe, F-full, has 1.6M parameters.
|
| 37 |
+
|
| 38 |
+
## What is in this repository
|
| 39 |
+
|
| 40 |
+
| Path | Contents |
|
| 41 |
+
|---|---|
|
| 42 |
+
| `runs/<run_id>/best.pt` | The 14 pinned PyTorch checkpoints evaluated in the paper: F-dev, F-full, scaling rungs s1–s16, and ablations (no-text, no-context, proportional, top-filter, no-UB) |
|
| 43 |
+
| `onnx/` | ONNX exports of the deployed model (fdev-20260704, f-full-20260705) |
|
| 44 |
+
| `run_manifest.json` | Role → run_id → checkpoint sha256. The authoritative pins: `make_paper_tables.py` refuses mismatched or missing runs |
|
| 45 |
+
| `frozen_battery.json` | The pre-registered evaluation battery (protocol v1.1), frozen before the MSH snapshot download |
|
| 46 |
+
| `ledger.jsonl` | Append-only experiment ledger |
|
| 47 |
+
| `paper-data/runs/` | Run-level JSONs (configs, per-epoch metrics, eval summaries) consumed by `scripts/make_paper_tables.py` |
|
| 48 |
+
|
| 49 |
+
Every checkpoint's sha256 is recorded in `run_manifest.json`; verify after
|
| 50 |
+
download. The frozen protocol, including the pre-registration chronology and
|
| 51 |
+
the post-day-one MSH ceiling, is documented in
|
| 52 |
+
[`docs/eval_protocol.md`](https://github.com/brianward92/mtga/blob/main/docs/eval_protocol.md).
|
| 53 |
+
|
| 54 |
+
## Reproducing the paper tables
|
| 55 |
+
|
| 56 |
+
```bash
|
| 57 |
+
git clone https://github.com/brianward92/mtga
|
| 58 |
+
cd mtga
|
| 59 |
+
python -m venv .venv && .venv/bin/pip install -r requirements-foundation.txt
|
| 60 |
+
# place this repo's paper-data/runs/ at paper/data/runs/
|
| 61 |
+
.venv/bin/python scripts/make_paper_tables.py
|
| 62 |
+
```
|
| 63 |
+
|
| 64 |
+
To re-score picks or run the battery, set `MTGA_DATA_ROOT` to a directory
|
| 65 |
+
with this repository's `runs/` under `foundation/` and see
|
| 66 |
+
`scripts/run_frozen_eval.py`.
|
| 67 |
+
|
| 68 |
+
## Data and licensing
|
| 69 |
+
|
| 70 |
+
The code is Apache-2.0 (see the GitHub repository's LICENSE and NOTICE).
|
| 71 |
+
Training and evaluation data derive from 17Lands public datasets
|
| 72 |
+
(CC BY 4.0; "Data from 17Lands.com") and Scryfall bulk data. No raw
|
| 73 |
+
third-party data is redistributed here: the checkpoints, exports, and
|
| 74 |
+
manifests are self-generated artifacts. Unofficial Fan Content per the
|
| 75 |
+
Wizards of the Coast Fan Content Policy; not approved or endorsed by
|
| 76 |
+
Wizards. *Magic: The Gathering* is a trademark of Wizards of the Coast LLC.
|
| 77 |
+
|
| 78 |
+
## Contact
|
| 79 |
+
|
| 80 |
+
Brian Ward — brian.ward.92@gmail.com
|