Spaces:
Sleeping
Sleeping
| # Deploy Maia3 Chess API to Hugging Face Spaces | |
| ## Prerequisites | |
| - [Hugging Face account](https://huggingface.co/join) | |
| - [Git](https://git-scm.com/) | |
| - Python 3.10+ | |
| ## 1. Login to Hugging Face | |
| ```bash | |
| pip install huggingface-hub | |
| huggingface-cli login | |
| # Paste your HF token from https://huggingface.co/settings/tokens | |
| ``` | |
| ## 2. Build seed database (optional but recommended) | |
| Fetches 500 real game positions from Lichess for better puzzle quality: | |
| ```bash | |
| pip install requests python-chess | |
| python build_seeds.py | |
| # Generates puzzle_seeds.json | |
| ``` | |
| ## 3. Create the Space | |
| ```bash | |
| python -c " | |
| from huggingface_hub import HfApi | |
| api = HfApi() | |
| api.create_repo( | |
| repo_id='YOUR_USERNAME/maia3-chess-api', | |
| repo_type='space', | |
| space_sdk='docker', | |
| exist_ok=True | |
| ) | |
| print('Space created') | |
| " | |
| ``` | |
| ## 4. Push code | |
| ```bash | |
| git init | |
| git add -A | |
| git commit -m "Initial deploy" | |
| git branch -M main | |
| git remote add space https://huggingface.co/spaces/YOUR_USERNAME/maia3-chess-api | |
| git push space main --force | |
| ``` | |
| ## 5. Wait for build | |
| The Docker build takes ~5 minutes (installs PyTorch CPU, downloads 316MB maia3-79m model on first startup). Check status: | |
| ```bash | |
| python -c " | |
| from huggingface_hub import HfApi | |
| api = HfApi() | |
| r = api.get_space_runtime('YOUR_USERNAME/maia3-chess-api') | |
| print('Stage:', r.stage) | |
| " | |
| ``` | |
| When stage is `RUNNING`, the API is live. | |
| ## 6. Test | |
| ```bash | |
| # Health | |
| curl https://YOUR_USERNAME-maia3-chess-api.hf.space/api/health | |
| # Analyze a move | |
| curl -X POST https://YOUR_USERNAME-maia3-chess-api.hf.space/api/analyze-move \ | |
| -H "Content-Type: application/json" \ | |
| -H "x-api-key: sk-maia3-2026" \ | |
| -d '{"fen":"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1","player_elo":1450,"played_move":"e2e4"}' | |
| # Generate a puzzle | |
| curl -X POST https://YOUR_USERNAME-maia3-chess-api.hf.space/api/generate-puzzle \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"category":"fork","difficulty":"medium"}' | |
| # List categories | |
| curl https://YOUR_USERNAME-maia3-chess-api.hf.space/api/categories | |
| ``` | |
| ## Environment variables | |
| Set in HF Space Settings, no rebuild needed: | |
| | Variable | Default | Description | | |
| |----------|---------|-------------| | |
| | `MAIA3_MODEL` | `79m` | Model size: `5m`, `23m`, or `79m` | | |
| | `MAIA3_API_KEY` | `sk-maia3-2026` | API key for auth | | |
| ## Project structure | |
| ``` | |
| maia3-api/ | |
| ├── app.py # FastAPI server (all endpoints) | |
| ├── puzzles.py # Puzzle generation + category detection | |
| ├── build_seeds.py # Lichess position fetcher | |
| ├── puzzle_seeds.json # 500 real game positions (generated) | |
| ├── Dockerfile # Python 3.11 + PyTorch CPU + uvicorn | |
| ├── requirements.txt # Python dependencies | |
| ├── README.md # Hugging Face Space card | |
| └── maia3/ # Maia3 model source (forked from CSSLab/maia3) | |
| ├── models.py | |
| ├── utils.py | |
| ├── dataset.py | |
| └── model_registry.py | |
| ``` | |
| ## API Endpoints | |
| | Method | Path | Auth | Description | | |
| |--------|------|------|-------------| | |
| | `GET` | `/api/health` | No | Status, model info, uptime | | |
| | `POST` | `/api/bestmove` | Yes | Predict next move (top N) | | |
| | `POST` | `/api/analyze-move` | Yes | Classify + autopsy a played move | | |
| | `POST` | `/api/generate-puzzle` | No | Generate puzzle by category | | |
| | `GET` | `/api/categories` | No | List all 14 puzzle categories | | |
| ## Updating | |
| ```bash | |
| git add -A && git commit -m "your changes" && git push space main | |
| ``` | |
| ## Switching models | |
| For faster inference on CPU, use the 5M model: | |
| ```bash | |
| # Set in Space settings, then restart | |
| MAIA3_MODEL=5m | |
| ``` | |
| | Model | Size | Accuracy | CPU inference | | |
| |-------|------|----------|---------------| | |
| | `5m` | 20MB | 55.4% | ~300ms | | |
| | `23m` | 92MB | 56.6% | ~800ms | | |
| | `79m` | 316MB | 57.1% | ~150ms* | | |
| *After warm-up, the 79M model is cached in RAM. | |
| ## Troubleshooting | |
| | Symptom | Fix | | |
| |---------|-----| | |
| | `RUNTIME_ERROR` stage | Check Space logs on HF dashboard | | |
| | Model download timeout | Set `MAIA3_MODEL=5m` for faster startup | | |
| | `No puzzle found` | Run `python build_seeds.py` to refresh seed DB | | |
| | All puzzles return same | Cache is stale — restart Space | | |