CHSM8-SFT: chess moves conditioned on a natural-language style description
chsm8-pt fine-tuned to play one side of a game in the style a text describes
(e.g. "trade everything and grind the endgame") or like a named top player ("play like Carlsen").
This is the final SFT model of the CHSM8 technical report; the DPO model built on it is
chsm8. The first full SFT run, with pooled text conditioning, is kept in
v1/.
Highlights
Conditioning works: the right description makes the described side's moves more predictable. Test set, cross-entropy on the described side's moves:
| right description | wrong description (another game's) | no description |
|---|---|---|
| 2.811 | 3.115 | 2.946 |
The right–wrong gap is −0.303, six times the −0.049 of the first full run (v1/).
Player prompts work, modestly. On held-out games of all 99 top players (30 each, 124k moves), the model's top move matches the player's move 56.2% of the time with "play like {player}", 55.0% with another player's name and 54.7% with no prompt. The right name beats the wrong one in cross-entropy for 94 of 99 players.
Prompts change how it plays (model's own moves vs Stockfish 2000, no prompt in brackets):
- "castle queenside and storm the enemy king with your pawns": 98% of castling is queenside [13%]
- "leave your king in the center and go for an open fight": castles in 0% of games [94%]
- "trade queens as early as possible": queens off by ply 40 in 55% of games [21%]
- "bring your queen out early and push random pawns for no reason": queen moved in the first 5 moves in 83% of games [5%]
- "push your pawns aggressively up the board and grab space": pawn moves 0.289 per move [0.252]
- every prompt plays more varied openings than no prompt (0.84–0.97 distinct lines per game [0.73])
Asking for strong or weak play does not change its strength. No prompt: 1794 Elo (1773–1815, 1,000 games). Strong prompts ("a 2800-rated super grandmaster...") give 1790–1849 and weak ones ("play like an 800 rated player", "play badly on purpose") 1790–1844, all within the confidence intervals: every training game came from a ≥ 2200 player, so no description was ever paired with weak play. Only prompts that name concrete bad moves lower it: "move instantly without thinking and ignore every threat" 1605, "bring your queen out early and push random pawns" 1637.
Per-prompt numbers (Elo, game length, captures, checks, castling, queen trades, opening variety, centipawn loss) are in
eval/report.md; the prompts are in eval/prompts.json.
Data
- chsm8-post-training: 27.08M train game sides (described player rated ≥ 2200), each with the five LLM style descriptions (Gemma-4-31B plus distilled labels, all Apertus sets relabelled); no metadata labels. One pass, uniformly shuffled across years, 10% of descriptions dropped.
- chsm8-top-players: 542,109 train games of 99 FIDE top-100 players with a "play like {player}" prompt (49 templates × name aliases), at a flat 6% of batches over the whole run. That is three passes over the player games, with fresh wording each pass.
Conditioning
- The description is encoded by a frozen
google/embeddinggemma-300m(up to 128 tokens). All its token states, projected to the decoder width of 960, are the keys and values of a cross-attention in the top 6 of 12 decoder layers. - Each cross-attention output is added as
x + tanh(gate) · attention, gates initialised at 0 (training starts exactly at the pretrained model). A pinned no-text term keeps the empty-prompt output fixed. - Loss: next-move cross-entropy on the described side's moves only; the opponent's moves are context.
Training
- All 12 decoder layers trained. Learning rates: decoder 5e-7, text projection and cross-attention 8e-4; 5% warmup, cosine to 0.
- Length-bucketed batches of 128 games per GPU. 28,239 steps on 8 GH200 (2 nodes, DDP), about 2,400 games/s, 3.1 h.
Limitations
Research checkpoint, no search. With no prompt it plays about 45 Elo below chsm8-pt (1792 vs 1837 over 2,000 games): part of the capacity moves from predicting the best move to following the description. The model imitates how ≥ 2200 Lichess players and top players played; prompts describing much weaker play are outside the training data.

