// El proyecto
Rukh, en una página.
Rukh es un modelo de lenguaje de ajedrez entrenado desde cero, alineado con aprendizaje por refuerzo de recompensas verificables, desplegado en WebGPU y convertido en un agente con herramientas. Este sitio es el curso que documenta cada paso.
Un modelo, todas las etapas del ciclo de vida.
Un decoder propio (decenas de millones de parámetros) entrenado con partidas de Lichess, un encoder para entender posiciones, fine-tuning con instrucciones de Elo, reward model, DPO y GRPO con Stockfish como juez, exportación a ONNX para jugar en el navegador y, en la segunda fase, RAG y agentes que comentan partidas.
- M1Datos y tokenizaciónRecorte de Lichess, vocabulario UCI, BPE, dataloaders
- M2DecoderMoveDecoder tipo GPT entrenado desde cero, ONNX, demo en WebGPU
- M3EncoderMasked move modeling, cabezas de valor y de error
- M4Fine-tuningSFT de maestros, condicionamiento por Elo, LoRA, QLoRA frente a Qwen3
- M5AlineamientoReward model, DPO, GRPO con Stockfish como juez
- M6EvaluaciónTabla única de resultados, model cards, demo final
- A1-A6Entrenador agénticoRAG sobre posiciones y libros, agente LangGraph, servidor MCP
Tres repositorios, sin paquetes compartidos.
Todo lo que comparten las dos webs (tokens CSS, el tokenizador en TypeScript, JSON precalculado) se copia con un script y lo vigila un test de hash. Los pesos y los datasets viven en Hugging Face, nunca en git.
- borja-glez/rukh
Modelo, datos, entrenamiento, evaluación y agentes. Python 3.12, PyTorch, MLflow.
- borja-glez/rukh-lab
Este sitio: el curso, en español. Astro estático con islas Preact.
- borja-glez/rukh-web
La demo: juega contra el modelo en el navegador con onnxruntime-web.
Medido siempre igual.
Una tabla para todas las etapas, medida siempre igual. Se llena a medida que avanza el curso; cada fila enlaza a su model card.
| Etapa | Parámetros | Legalidad sin máscara (%) | Top-1 (%) | Top-3 (%) | Puzles 1000-1500 (%) | Puzles 1500-2000 (%) | Puzles 2000+ (%) | Elo vs Stockfish (IC 95 %) | Δ medio (cp) | Hugging Face |
|---|---|---|---|---|---|---|---|---|---|---|
| karvonen-8l | 25,7 M | 99,6 | 50,7 | — | 47,5 | 26,0 | 10,8 | 1328 (1250 … 1391) | — | — |
| lora-d4 | 115,1 M | 99,8 | 55,1 | 83,0 | 57,4 | 37,5 | 16,9 | 1535 (1481 … 1582) | — | — |
| lora-e4 | 115,1 M | 99,8 | 54,7 | 83,3 | 58,1 | 38,2 | 17,2 | 1538 (1488 … 1604) | — | — |
| medium-elo | 115,1 M | 99,7 | 54,9 | 82,5 | 59,8 | 37,1 | 16,6 | 1592 (1532 … 1650) | — | — |
| medium-masters | 115,1 M | 99,7 | 54,9 | 82,3 | 58,1 | 38,7 | 17,1 | 1563 (1502 … 1630) | — | — |
| medium-v4-dpo-greedy | 115,1 M | 99,8 | 53,4 | 80,5 | 58,3 | 39,9 | 18,1 | 1586 (1530 … 1651) | — | — |
| medium-v4-dpo-onpolicy-greedy | 115,1 M | 99,2 | 52,3 | 79,9 | 59,0 | 40,3 | 17,8 | 1632 (1567 … 1706) | — | — |
| medium-v4-greedy | 115,1 M | 99,8 | 54,4 | 82,2 | 57,9 | 38,0 | 16,6 | 1535 (1476 … 1599) | — | — |
| medium-v4-grpo-greedy | 115,1 M | 99,3 | 53,3 | 80,3 | 58,9 | 39,1 | 17,8 | 1577 (1526 … 1632) | — | — |
| qwen3-pgn-qlora | 596,0 M | 62,5 | 12,5 | — | 1,8 | 0,7 | 0,4 | 320 | — | — |
| small-greedy | 39,0 M | 99,4 | 51,1 | 79,4 | 34,7 | 21,1 | 10,3 | 1355 (1297 … 1420) | — | — |
| small-v3-greedy | 39,0 M | 99,1 | 52,4 | 80,5 | 41,0 | 27,0 | 12,2 | 1425 (1367 … 1484) | — | — |
| tiny-greedy | 5,3 M | 94,5 | 40,3 | 67,1 | 14,1 | 8,6 | 3,9 | 778 (479 … 904) | — | — |
| Etapa | Parámetros | F1 de error, umbral ajustado (%) | Umbral (elegido en «tune») | F1 de error, umbral 0,5 (%) | F1 de la heurística (%) | Margen (puntos de F1) | ROC AUC | Precisión media | Tasa base de error (%) | Valor: Spearman | Valor: Pearson | Resultado (%) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| encoder | 15,1 M | 18,0 | 0,0663 | 0,0 | 8,9 | +9,2 | 0,740 | 0,112 | 3,7 | 0,520 | 0,648 | 50,0 |
| encoder-rank | 15,1 M | 17,7 | 0,106 | 0,0 | 8,9 | +8,9 | 0,750 | 0,115 | 3,7 | 0,640 | 0,662 | 49,6 |
| encoder-squares | 14,3 M | 14,6 | 0,0446 | 0,0 | 8,9 | +5,7 | 0,696 | 0,091 | 3,7 | 0,422 | 0,688 | 50,2 |
| encoder-v4 | 39,0 M | 18,6 | 0,0962 | 0,0 | 8,9 | +9,7 | 0,761 | 0,117 | 3,7 | 0,666 | 0,726 | 50,8 |