OMLCheT

Open Machine Learning Chess Tournament

A community championship showcasing open-source ingenuity, strategic code, and resource-efficient architectures. Run for fun and absolute bragging rights.

Language Models

Autoregressive generators, sequence architectures, and causal networks predicting structural moves as natural language strings.

Max 1.5B Parameters

Reinforcement Learning

Deep policy architectures, Q-learning pipelines, and custom state evaluation models navigating deep decision spaces.

Max 100M Parameters

Constraints

LM Bracket RL Bracket
Max Size 1.5B parameters 100M parameters
Input SAN SAN, FEN, or Bitboards
Architectures Transformers, Mamba, RWKV, LSTM, Hybrids DQN, Actor-Critic, Policy Gradients
Precision Any (FP32, FP16, INT8, INT4, Trinary…) Any
Weights Format *.safetensors *.safetensors

Submission Requirements

Host your model on Hugging Face and submit the repository link. Every repo must contain these four components.

01

README.md

A model card covering architecture overview, parameter count, training data & methodology, known failure modes, inference speed, license, and optional performance metrics.

02

model.safetensors

Serialized model weights. Standard pickled files (.pth, .bin) are explicitly not allowed for security and rule enforcement.

03

config.json

Architecture configuration used to verify parameter counts and model settings against bracket constraints.

04

chess_agent.py

Your inference logic implementing the standard ChessAgent class template so the evaluation engine can drive games automatically.

Inference Template

Your chess_agent.py must implement exactly this class structure.

import chess

class ChessAgent:
    def __init__(self, model_dir="./"):
        """
        Initialize your model, tokenizer, or custom
        neural network here. model_dir points to the
        root of your Hugging Face repo download.
        """
        pass

    def select_move(
        self,
        board_history_san: str,
        legal_moves_san: list[str]
    ) -> str:
        """
        Inputs:
          board_history_san — space-separated game so
            far, e.g. "e4 e5 Nf3 Nc6"
          legal_moves_san   — list of legal SAN moves,
            e.g. ["d4", "Bc4", "Nxe5"]
        Output:
          One string from legal_moves_san.
        """
        chosen_move = legal_moves_san[0]
        return chosen_move

Tournament Rules

Arena

Games run asynchronously on Kaggle / Colab via the python-chess framework, keeping hardware access open and reproducible.

Illegal Move Fallback

If your agent returns an unparseable or illegal move, the engine substitutes a random legal move so play continues. Repeated reliance on the fallback will hurt strategic performance.

Format

Swiss-system group stage leading into a single-elimination knockout. The LM bracket champion faces the RL bracket champion in the Grand Finale.

Results

Full PGN match histories and bracket summaries will be published once the tournament simulation concludes.

Ready to compete?

Join the Discord to stay updated, share your submission, and discuss architectures with other participants.