Downloads · 30 days
12
16% of all-time downloads
jspaulsen/halluci-mate-v2b
halluci-mate-v2b is a text generation model from jspaulsen. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as mit.
Alpha release. A chess LLM fine-tuned from jspaulsen/halluci-mate-v2a on a higher-quality slice of the Lichess dataset. Uses the Qwen3-0.6B architecture and a custom UCI move tokenizer. First model in the series to sc…
Downloads · 30 days
12
16% of all-time downloads
All-time downloads
74
Public
Parameters
442M
885 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors885 MB · 100%
From the Hugging Face model README
Alpha release. A chess LLM fine-tuned from jspaulsen/halluci-mate-v2a on a higher-quality slice of the Lichess dataset. Uses the Qwen3-0.6B architecture and a custom UCI move tokenizer. First model in the series to score wins against Stockfish skill-5 in 100-game matches.
Source: https://github.com/jspaulsen/halluci-mate
Qwen3ForCausalLM), ~0.6B parameters
bfloat16, tied word embeddings, RoPE θ = 1,000,000<PAD>, <UNK>, <EOS>, <WHITE>, <BLACK>, <DRAW>) + ~1,792 geometric UCI moves + 176 promotion movesjspaulsen/halluci-mate-v2aruns-v2a-ft/languid-sloth-169/checkpoint-4056The tokenizer is custom and is not loadable via AutoTokenizer.from_pretrained. It is defined in src/halluci_mate/chess_tokenizer.py in the source repo. Install the package and use ChessTokenizer() directly.
Inputs are conditioned on the side-to-move winning: each game is prefixed with <WHITE> or <BLACK> (or <DRAW>), followed by the sequence of UCI moves.
import chess
import torch
from transformers import AutoModelForCausalLM
from halluci_mate.chess_tokenizer import ChessTokenizer
from halluci_mate.game.game import Game
from halluci_mate.inference import ChessInferenceEngine
engine = ChessInferenceEngine.from_checkpoint(
"jspaulsen/halluci-mate-v2b",
constrained=True, # mask logits to legal moves
temperature=0.0, # greedy
)
game = Game(board=chess.Board(), condition="<WHITE>")
move = engine.predict(game)
print(move.uci())
Constrained decoding masks the logits to the set of legal UCI moves in the current position, which eliminates illegal-move hallucinations at the cost of potentially hiding model weaknesses. Unconstrained sampling (constrained=False) will occasionally produce illegal tokens — this is expected for an alpha.
jspaulsen/halluci-mate-v2a weightsscripts/train.py in the source repoSame eval configs across all three: vs-stockfish at skill-5 with --sf-analyze, legal-rate over 5,000 sampled positions (seed 0), high-elo perplexity over 10,768 sequences.
| Metric | v1b | v2a | v2b |
|---|---|---|---|
| vs-stockfish score-rate, skill-5 | 0.104 (500g) | 0.065 (100g) | 0.135 (100g) |
| vs-stockfish W / L / D | 7 / 403 / 90 | 0 / 87 / 13 | 3 / 76 / 21 |
| Legal-rate (5,000 sampled positions) | 99.06% | 99.00% | 99.02% |
| High-elo perplexity (10,768 seqs) | 4.92 | 5.47 | 5.15 |
| Tactical-oversight, middle phase | 21.0% | 23.4% | 20.3% |
| Tactical-oversight, endgame | 12.4% | 12.2% | 11.9% |
| Blunder-rate (in-game) | 6.5% | 6.5% | 6.5% |
v2b is the first model in the series to win games against Stockfish skill-5 (3W / 21D over 100 games). Middlegame and endgame tactical oversight are both best-in-class. Perplexity recovers most of the gap v2a opened up vs v1b on the high-elo test set.
Game constructsMIT. See the source repo for details.