Downloads · 30 days
11
17% of all-time downloads
jspaulsen/halluci-mate-v2a
halluci-mate-v2a 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 trained from scratch on the Lichess dataset using the Qwen3-0.6B architecture and a custom UCI move tokenizer. Successor to jspaulsen/halluci-mate-v1a, retrained on a larger Rapid + Classica…
Downloads · 30 days
11
17% of all-time downloads
All-time downloads
63
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 trained from scratch on the Lichess dataset using the Qwen3-0.6B architecture and a custom UCI move tokenizer. Successor to jspaulsen/halluci-mate-v1a, retrained on a larger Rapid + Classical–only sample for higher-quality move signal. Expect rough edges — move quality, strategy, and robustness are still unvalidated beyond basic smoke tests.
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 movesruns-v1/stylish-bug-611/checkpoint-9687The 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-v2a",
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.
Normal termination, SAN parsed to UCI with python-chessAutoModelForCausalLM.from_configscripts/train.py in the source repoCompared to v1a, v2a uses the Rapid + Classical filter (longer time controls yield higher move quality at a given Elo) over a larger game count. Headline play strength against Stockfish-skill-5 is roughly unchanged from v1a; legality (especially in endgames) is moderately improved. See the source repo for the full eval breakdown.
Game constructsMIT. See the source repo for details.