codertrish's picture
Update README.md
7fc5cd3 verified
metadata
language: en
license: gemma
tags:
  - lora
  - peft
  - adapters
  - unsloth
  - gemma-3
  - chess
  - instruction-tuning
  - sft
  - trl
  - 270m
base_model: unsloth/gemma-3-270m-it
library_name: transformers
pipeline_tag: text-generation
datasets:
  - Thytu/ChessInstruct
model-index:
  - name: gemma3-270m-chess-lora
    results: []

Gemma-3 270M — Chess Coach (LoRA Adapters)

Author: @codertrish
Base model: unsloth/gemma-3-270m-it
Type: LoRA adapters (attach to base at load-time)
Task: Conversational chess tutoring (rules, openings, beginner tactics)

This repo contains only the LoRA adapter weights (ΔW). You must also load the base model and then attach these adapters to reproduce the fine-tuned behavior.


✨ Intended Use

  • Direct use: Teach or explain beginner chess concepts, opening principles, and simple tactics in plain English.
  • Downstream use: As a lightweight add-on for apps where distributing full weights isn’t desired or allowed.

Out-of-scope: Engine-grade move calculation or authoritative evaluations of complex positions. For strong analysis, pair with a chess engine (e.g., Stockfish).


🔧 How to Use (attach adapters)

Option A — Unsloth (simplest)

# pip install "unsloth[torch]" transformers peft accelerate bitsandbytes sentencepiece

from unsloth import FastModel
from unsloth.chat_templates import get_chat_template

BASE   = "unsloth/gemma-3-270m-it"                 # base checkpoint
ADAPTER= "codertrish/gemma3-270m-chess-lora"       # this repo

model, tok = FastModel.from_pretrained(
    BASE, max_seq_length=2048, load_in_4bit=True, full_finetuning=False
)
tok = get_chat_template(tok, "gemma3")             # Gemma-3 chat formatting
model.load_adapter(ADAPTER)                        # <-- attach LoRA

messages = [
  {"role":"system","content":"You are a helpful chess coach. Answer in plain text."},
  {"role":"user","content":"List 3 opening principles for beginners."},
]
prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
out = model.generate(**tok([prompt], return_tensors="pt").to(model.device),
                     max_new_tokens=200, do_sample=False)
print(tok.decode(out[0], skip_special_tokens=True))