GitHub Repository -- full source code, training scripts, adapter implementations, and documentation.
PAWN is trained on uniformly random chess games, so top-1 accuracy has a hard theoretical ceiling. Ratios above 100% on the unconditioned ceiling indicate the model exploits the outcome token to make non-uniform predictions. The MC conditioned ceiling is an estimate reported as a bracket [corrected, naive]; see
Accuracy Ceiling Analysis for methodology.
Linear probes trained on frozen hidden states measure how well the model's internal representations encode board-level features.
Edge-case diagnostics measure the model's legal move rate in specific tactical situations.
1import torch
2from safetensors.torch import load_file
3from pawn.config import CLMConfig
4from pawn.model import PAWNCLM
5
6cfg = CLMConfig.large()
7model = PAWNCLM(cfg).cuda().eval()
8weights = load_file("model.safetensors", device="cuda")
9model.load_state_dict(weights)
1from pawn.checkpoint import load_backbone_weights
2from pawn.config import CLMConfig
3from pawn.model import PAWNCLM
4
5weights, config = load_backbone_weights("thomas-schweich/pawn-large")
6cfg = CLMConfig.large()
7model = PAWNCLM(cfg).eval()
8model.load_state_dict(weights)
1uv run python scripts/train_bottleneck.py \
2 --checkpoint thomas-schweich/pawn-large \
3 --pgn thomas-schweich/pawn-lichess-full \
4 --bottleneck-dim 32 --lr 1e-4 --local-checkpoints
1@software{schweich2026pawn,
2 author = {Schweich, Thomas},
3 title = {{PAWN}: Playstyle-Agnostic World-model Network for Chess},
4 year = {2026},
5 url = {https://github.com/thomas-schweich/PAWN},
6 license = {Apache-2.0}
7}