imecai/chess-apo-bench

Dataset

Chess APO Bench: Chess Puzzles for Automatic Prompt Optimization

8

3 commits

1 linked in READMEs

updated Oct 5, 2026

See the code

README

Chess APO Bench: Chess Puzzles for Automatic Prompt Optimization

The exact chess puzzle train/test splits used in the paper Benchmarking Prompt Optimization of Large Language Models With Chess (Lesort et al., 2026). The puzzles come from the Lichess puzzle database (CC0 1.0).

Quick start

from datasets import load_dataset

ds = load_dataset("imecai/chess-apo-bench")
print(ds)               # train: 559 rows, test: 559 rows
print(ds["test"][0]["FEN"], ds["test"][0]["Moves"])

test = load_dataset("imecai/chess-apo-bench", split="test")  # a single split

Splits

SplitFilePuzzlesIndependent positions
traindata/puzzle_train.csv5591,439
testdata/puzzle_test.csv5591,439

These files are the frozen splits used in the paper, published byte-for-byte:

FileSHA-256
data/puzzle_train.csvcddc48ba72b255b4bf7f607bf4c9a914f37ad927ae72198f66bd1f1ac547c87c
data/puzzle_test.csv91f832bc242a4829da7aa8f75d131967faa500a0a18c94a515e5cc5f329e7c55

The splits share no puzzle IDs, starting positions, or (FEN, Moves) lines. In the paper, optimizers see only train. In each run, train is divided into 419 training and 140 validation puzzles, keeping all positions of a puzzle together. test is held out for the final evaluation.

Composition

Both splits have the same stratified composition:

  • Rating: 20 puzzles per 100-point Lichess rating bin from 500 to 2000 (19 in the 400–500 bin) and 30 per bin from 2000 to 2800.
  • Mate: 280 of 559 puzzles have the mate theme.
  • Solver moves (NumMoves): 1 β†’ 159, 2 β†’ 160, 3 β†’ 80, 4 β†’ 80, 5 β†’ 80.

Task

Each puzzle is expanded into independent positions, one per solver turn. The reference line is replayed, and the model sees the position (FEN, side to move and the sorted legal moves) and must return the reference move. Unparseable or illegal answers count as wrong. The paper's main metric is puzzle-level accuracy: a puzzle counts as solved only if every one of its positions is answered correctly.

Columns

The first ten columns are the original Lichess puzzle fields. The last five record how the paper's splits were built.

ColumnTypeDescription
PuzzleIdstringLichess puzzle ID (https://lichess.org/training/<PuzzleId>).
FENstringPosition before the opponent's move that sets up the puzzle.
MovesstringSpace-separated UCI moves. The first is the opponent's setup move. After that, solver and opponent moves alternate, so solver moves are the 2nd, 4th, ….
RatingintLichess puzzle rating (Glicko-2).
RatingDeviationintRating deviation.
PopularityintLichess popularity score (βˆ’100 to 100).
NbPlaysintNumber of times the puzzle was played on Lichess.
ThemesstringSpace-separated Lichess themes (e.g. mate mateIn1 endgame).
GameUrlstringSource game and ply on Lichess.
OpeningTagsstring, nullableSpace-separated opening tags. Empty for most puzzles.
NumMovesintNumber of solver moves, i.e. independent positions (1–5).
RatingBinstring100-point rating bin used for stratification, e.g. (1800, 1900].
MateboolTrue if Themes contains mate.
GameIdstringLichess game ID, taken from GameUrl.
GameSANstringSAN moves of the source game, leading to FEN.

Limitations

  • These are fixed samples of a Lichess snapshot. The Lichess database changes over time: puzzle ratings and play counts reflect the snapshot, not current values.
  • Each puzzle has a single reference line. Another winning move counts as wrong, as on Lichess.
  • 559 puzzles per split is a small sample, so differences between methods should be judged over multiple seeds (the paper uses three seeds).
  • The dataset contains only the puzzles. The paper's compiled prompts, model outputs and other experimental results are not included and are not covered by this card's license.

License and attribution

The puzzle records come from the Lichess puzzle database, released under CC0 1.0. This dataset is released under CC0 1.0 as well. Thanks to Lichess and its community for making the puzzle database freely available.

Citation

@article{lesort2026chessapo,
  title   = {Benchmarking Prompt Optimization of Large Language Models With Chess},
  author  = {Lesort, Timoth{\'e}e and L{\'o}pez de Aberasturi G{\'o}mez, Alejandra and Karch, Tristan and Veniat, Tom and Modard, Philippe and Tuyls, Karl and Denoyer, Ludovic},
  journal = {arXiv preprint arXiv:2610.00416},
  year    = {2026}
}
benchmark
chess
dspy
lichess
prompt-optimization
puzzles

imecai/chess-apo-bench

Dataset

Chess APO Bench: Chess Puzzles for Automatic Prompt Optimization

8

3 commits

1 linked in READMEs

updated Oct 5, 2026

See the code

README

Chess APO Bench: Chess Puzzles for Automatic Prompt Optimization

The exact chess puzzle train/test splits used in the paper Benchmarking Prompt Optimization of Large Language Models With Chess (Lesort et al., 2026). The puzzles come from the Lichess puzzle database (CC0 1.0).

Quick start

from datasets import load_dataset

ds = load_dataset("imecai/chess-apo-bench")
print(ds)               # train: 559 rows, test: 559 rows
print(ds["test"][0]["FEN"], ds["test"][0]["Moves"])

test = load_dataset("imecai/chess-apo-bench", split="test")  # a single split

Splits

SplitFilePuzzlesIndependent positions
traindata/puzzle_train.csv5591,439
testdata/puzzle_test.csv5591,439

These files are the frozen splits used in the paper, published byte-for-byte:

FileSHA-256
data/puzzle_train.csvcddc48ba72b255b4bf7f607bf4c9a914f37ad927ae72198f66bd1f1ac547c87c
data/puzzle_test.csv91f832bc242a4829da7aa8f75d131967faa500a0a18c94a515e5cc5f329e7c55

The splits share no puzzle IDs, starting positions, or (FEN, Moves) lines. In the paper, optimizers see only train. In each run, train is divided into 419 training and 140 validation puzzles, keeping all positions of a puzzle together. test is held out for the final evaluation.

Composition

Both splits have the same stratified composition:

  • Rating: 20 puzzles per 100-point Lichess rating bin from 500 to 2000 (19 in the 400–500 bin) and 30 per bin from 2000 to 2800.
  • Mate: 280 of 559 puzzles have the mate theme.
  • Solver moves (NumMoves): 1 β†’ 159, 2 β†’ 160, 3 β†’ 80, 4 β†’ 80, 5 β†’ 80.

Task

Each puzzle is expanded into independent positions, one per solver turn. The reference line is replayed, and the model sees the position (FEN, side to move and the sorted legal moves) and must return the reference move. Unparseable or illegal answers count as wrong. The paper's main metric is puzzle-level accuracy: a puzzle counts as solved only if every one of its positions is answered correctly.

Columns

The first ten columns are the original Lichess puzzle fields. The last five record how the paper's splits were built.

ColumnTypeDescription
PuzzleIdstringLichess puzzle ID (https://lichess.org/training/<PuzzleId>).
FENstringPosition before the opponent's move that sets up the puzzle.
MovesstringSpace-separated UCI moves. The first is the opponent's setup move. After that, solver and opponent moves alternate, so solver moves are the 2nd, 4th, ….
RatingintLichess puzzle rating (Glicko-2).
RatingDeviationintRating deviation.
PopularityintLichess popularity score (βˆ’100 to 100).
NbPlaysintNumber of times the puzzle was played on Lichess.
ThemesstringSpace-separated Lichess themes (e.g. mate mateIn1 endgame).
GameUrlstringSource game and ply on Lichess.
OpeningTagsstring, nullableSpace-separated opening tags. Empty for most puzzles.
NumMovesintNumber of solver moves, i.e. independent positions (1–5).
RatingBinstring100-point rating bin used for stratification, e.g. (1800, 1900].
MateboolTrue if Themes contains mate.
GameIdstringLichess game ID, taken from GameUrl.
GameSANstringSAN moves of the source game, leading to FEN.

Limitations

  • These are fixed samples of a Lichess snapshot. The Lichess database changes over time: puzzle ratings and play counts reflect the snapshot, not current values.
  • Each puzzle has a single reference line. Another winning move counts as wrong, as on Lichess.
  • 559 puzzles per split is a small sample, so differences between methods should be judged over multiple seeds (the paper uses three seeds).
  • The dataset contains only the puzzles. The paper's compiled prompts, model outputs and other experimental results are not included and are not covered by this card's license.

License and attribution

The puzzle records come from the Lichess puzzle database, released under CC0 1.0. This dataset is released under CC0 1.0 as well. Thanks to Lichess and its community for making the puzzle database freely available.

Citation

@article{lesort2026chessapo,
  title   = {Benchmarking Prompt Optimization of Large Language Models With Chess},
  author  = {Lesort, Timoth{\'e}e and L{\'o}pez de Aberasturi G{\'o}mez, Alejandra and Karch, Tristan and Veniat, Tom and Modard, Philippe and Tuyls, Karl and Denoyer, Ludovic},
  journal = {arXiv preprint arXiv:2610.00416},
  year    = {2026}
}
benchmark
chess
dspy
lichess
prompt-optimization
puzzles