File size: 2,464 Bytes
231c410
 
 
 
 
 
 
575cb24
231c410
 
e2db022
 
 
 
231c410
 
 
 
e2db022
231c410
e2db022
 
 
 
 
debc6fe
 
e2db022
 
231c410
 
 
 
e2db022
 
 
 
 
 
 
f97faa2
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
title: Dota Draft
emoji: ⚔️
colorFrom: red
colorTo: gray
sdk: gradio
sdk_version: 6.18.0
python_version: '3.13'
app_file: app.py
pinned: false
tags:
  - track:wood
  - sponsor:openai
  - achievement:agent
---

# Dota Draft

Dota Draft is an AI-assisted drafting workbench for Dota 2 Captains Mode. It lets a player walk through the full pick/ban sequence, record both teams' drafts, and generate draft recommendations from a small-model chat-completions agent backed by OpenDota MCP context.

## Build Small submission

- Track: Thousand Token Wood (`track:wood`)
- Sponsor prize: Best Use of Codex (`sponsor:openai`)
- Bonus badge: Best Agent (`achievement:agent`)
- Demo video: https://www.youtube.com/shorts/VIB_FRXADg8?feature=share
- Social post: https://x.com/asusevski/status/2066671518193532979

## What it does

- Initialize the draft with side selection and first drafting team.
- Step through the full 20-action Captains Mode pick/ban order.
- Record picks and bans for both teams.
- Generate a structured backend payload containing the current picks, bans, sides, player IDs, and unavailable heroes after each draft event.
- When it is your turn, call an OpenAI-compatible small model through the Hugging Face Router and combine that with OpenDota MCP data to recommend a pick or ban.

## Tech

The app is a Gradio Space. The draft UI is implemented in `app.py`, the recommendation agent lives in `agent.py`, and the OpenDota MCP connection is defined in `mcp.py`.

The default model is `Qwen/Qwen3.6-27B:featherless-ai`, which is under the Build Small 32B parameter cap. A small language model is a good fit for this draft assistant because the task is narrow and highly structured: the model does not need broad open-ended world knowledge, it needs to rank a constrained hero pool against a compact draft state and the latest OpenDota context. Keeping the model small reduces latency, cost, and infrastructure requirements, which makes the app easier to run on a public CPU Space while still leaving the strategic reasoning in an inspectable prompt-and-tool loop.

Runtime configuration is provided through Space Secrets and environment variables:

- `OPENAI_API_KEY`: Hugging Face token used by the OpenAI-compatible Hugging Face Router.
- `HF_TOKEN`: Hugging Face token available to Hub-aware libraries if needed.
- `OPENAI_MODEL`: optional model override.
- `OPENDOTA_API_KEY`: optional OpenDota API key for higher-rate OpenDota requests.