Get from a clone to a running fine-tune in a few minutes.
git clone https://github.com/SahilKumar75/TuneOS
cd TuneOS
cp .env.example .env
# Add HF_TOKEN — required for gated models (Llama 3, Mistral-instruct)docker-compose up -dThis brings up the Reflex UI, the FastAPI service, Redis, and a Celery worker.
Open http://localhost:3000.
# terminal 1 — Redis
redis-server
# terminal 2 — Celery worker (this is what runs training)
celery -A workers.celery_app worker --loglevel=info
# terminal 3 — Reflex app
reflex runThe desktop launcher does this for you: when Docker is unavailable it starts Redis and the Celery worker as local subprocesses.
- Paste a model ID —
EleutherAI/pythia-410mis small (~2 GB VRAM) and good for a first run. - Walk the 7-step wizard: Model → Intent → Data → Configure → Train → Results → Deploy.
- Upload a small instruction CSV (or generate a synthetic one in step 3), keep the defaults, and submit.
Before a job is queued the UI checks GET /api/health/workers. If no worker is
alive, the job is rejected with a clear message instead of sitting in the queue
indefinitely.
The wizard supports three training modes selected in step 1:
| Mode | Dataset shape | Endpoint |
|---|---|---|
| SFT (default) | instruction, output columns |
POST /api/jobs |
| DPO | prompt, chosen, rejected columns |
POST /api/jobs/dpo |
| Knowledge Distillation | instruction, output + teacher model |
POST /api/jobs/distill |
No local GPU? In Step 4 → Compute backend, pick Modal to train on a free T4. You
need MODAL_TOKEN_ID and MODAL_TOKEN_SECRET in .env — see
docs/deploy.md for setup.
Models like Llama 3 and Mistral-instruct require accepting the license on the
Hugging Face Hub and a valid HF_TOKEN in .env. A missing token fails the job
immediately with a clear message rather than a silent download hang.