| --- |
| title: DOTA2Tuned |
| sdk: gradio |
| app_file: app.py |
| python_version: "3.12" |
| tags: |
| - track:backyard |
| - track:wood |
| - sponsor:openbmb |
| - sponsor:openai |
| - sponsor:modal |
| - achievement:welltuned |
| - achievement:offbrand |
| - achievement:sharing |
| models: |
| - build-small-hackathon/dota2tuned-qwen3-4b-2507-lora |
| - build-small-hackathon/dota2tuned-minicpm4-1-8b-lora |
| - build-small-hackathon/dota2tuned-qwen3-30b-a3b-2507-lora |
| datasets: |
| - build-small-hackathon/dota2tuned-data |
| --- |
| |
| # DOTA2Tuned |
|
|
| DOTA2Tuned is a Hugging Face Build Small Hackathon project for Dota 2 drafting, meta analysis, build suggestions, and match prediction. |
|
|
| The implementation is designed around a simple rule: stats and predictors choose the recommendations, while a small fine-tuned model explains them with patch-aware evidence. |
|
|
| - Hugging Face Space: https://build-small-hackathon-dota2tuned.hf.space |
| - Modal alternate UI: https://dracufeuer--dota2tuned-ui.modal.run |
| - Tiny fine-tuned adapter: https://huggingface.co/build-small-hackathon/dota2tuned-qwen3-4b-2507-lora |
| - Balanced fine-tuned adapter: https://huggingface.co/build-small-hackathon/dota2tuned-minicpm4-1-8b-lora |
| - Quality fine-tuned adapter: https://huggingface.co/build-small-hackathon/dota2tuned-qwen3-30b-a3b-2507-lora |
| - Dataset artifacts: https://huggingface.co/datasets/build-small-hackathon/dota2tuned-data |
| - Demo video: TODO add final demo video URL before validation. |
| - Social post: TODO add final social post URL before validation. |
|
|
| ## Hackathon Validation |
|
|
| The Build Small validator checks this Space README. Entry requirements are: sub-32B models, Gradio Space in the Build Small org, demo video, social-media post linked from this README, and GPU-limit compliance. |
|
|
| Validator: https://build-small-hackathon-field-guide.hf.space/submit |
|
|
| Selected tracks, prizes, and badges: |
|
|
| - Tracks: Backyard AI, Thousand Token Wood. |
| - Sponsor prizes: OpenBMB Best MiniCPM Build, OpenAI Best Use of Codex, Modal Best Use of Modal. |
| - Bonus badges: Well-Tuned, Off-Brand, Sharing is Caring. |
| - Not claimed: Nemotron Hardware Prize, Off the Grid, Llama Champion. |
| - GPU note: this Space does not use Zero GPU allocation; training and tuned-model serving use Modal. |
|
|
| Social post draft: |
|
|
| > Built DOTA2Tuned for the Hugging Face Build Small Hackathon: a Gradio Dota 2 draft coach that combines STRATZ/OpenDota match evidence, deterministic draft stats, and fine-tuned sub-32B adapters for grounded explanations. |
| > |
| > It suggests heroes, counters, synergies, builds, match predictions, and caveats weak data instead of inventing unsupported meta claims. |
| > |
| > Space: https://build-small-hackathon-dota2tuned.hf.space |
| > Tiny: https://huggingface.co/build-small-hackathon/dota2tuned-qwen3-4b-2507-lora |
| > Balanced: https://huggingface.co/build-small-hackathon/dota2tuned-minicpm4-1-8b-lora |
| > Quality: https://huggingface.co/build-small-hackathon/dota2tuned-qwen3-30b-a3b-2507-lora |
| > Repo: https://github.com/1ncompleteness/DOTA2Tuned |
|
|
| ## Quick Start |
|
|
| ```bash |
| uv sync |
| cp .env.example .env |
| uv run dota2tuned health |
| uv run dota2tuned smoke --live |
| uv run dota2tuned ingest --pro-matches 100 --public-matches 100 --enrich-limit 20 |
| uv run dota2tuned normalize |
| uv run dota2tuned features |
| uv run dota2tuned build-rag |
| uv run dota2tuned serve |
| ``` |
|
|
| Update `.env` with your Hugging Face, STRATZ, OpenDota, and Steam tokens before running large ingestion or Hub operations. |
| Fine-tuning now runs on Modal by default for this project. Set `MODAL_ENABLED=1`, `MODAL_TOKEN_ID`, and `MODAL_TOKEN_SECRET`, then use `uv sync --extra modal` before deploying Modal functions. `HF_TOKEN` must still include `repo.write` so the training run can push adapters to the configured Hub model repos. Use `MODEL_PROFILE` or `--profile` to select Tiny, Balanced, or Quality. |
|
|
| The submitted Space includes compact serving artifacts under `data/parquet`, `data/rag`, and `data/models`. Raw API responses remain local-only and ignored by git. |
|
|
| ## Main Commands |
|
|
| - `dota2tuned ingest` fetches raw reference data, pro matches, public matches, patch notes, and optional match enrichment. |
| - `dota2tuned smoke --live` validates configured tokens with tiny live API checks. |
| - `dota2tuned normalize` converts raw JSONL into Parquet tables and refreshes DuckDB views. |
| - `dota2tuned features` refreshes DuckDB views and reports feature table row counts. |
| - `dota2tuned train-predictor` trains the draft win predictor from normalized matches. |
| - `dota2tuned build-rag` creates patch/stat cards and a local retrieval index. |
| - `dota2tuned make-sft` creates JSONL examples for SFT. |
| - `dota2tuned modal-deploy` deploys the Modal Gradio app and GPU training function. |
| - `dota2tuned modal-smoke` validates the deployed Modal app can load artifacts. |
| - `dota2tuned modal-train --profile qwen3_4b_2507` submits the Tiny Modal GPU QLoRA run. Other profiles include `minicpm4_1_8b` and `qwen3_30b_a3b_2507`; Quality routes to the H200-backed `train_sft_quality` function. |
| - `uv run python scripts/watch_modal_training.py --call tiny=fc-... --interval 300` polls detached Modal training calls without blocking local development. |
| - `dota2tuned modal-ask` calls the fine-tuned adapter through Modal GPU inference. |
| - `dota2tuned finetune --launch-job` remains available for Hugging Face Jobs if a token has `job.write`. |
| - `dota2tuned serve` launches the Gradio app. |
|
|
| The Gradio app includes searchable hero, item, role, scope, and ability dropdowns, alias-aware hero lookup (`PA`, `CM`, `AM`, `QOP`, `KOTL`, and curated initials), selected icon previews, and six sidebar modules: Ask, Draft, Meta, Builds, Predictor, and Data. Ask calls the Modal `generate_answer` function when Modal credentials are configured in the runtime environment; otherwise it degrades with a clear unavailable message. |
|
|
| See [PLAN.md](PLAN.md) for the full architecture and delivery plan. |
| See [MODEL_SELECTION.md](MODEL_SELECTION.md) for the current LLM decision and eval protocol. |
| See [MODEL_CARD.md](MODEL_CARD.md) for the model card mirrored to the Hub adapter repo. |
| See [DATASET_CARD.md](DATASET_CARD.md) for the dataset card mirrored to the Hub dataset. |
| See [SUBMISSION.md](SUBMISSION.md) for the final hackathon handoff, demo script, social post draft, and verification checklist. |
|
|