Projects

tinyvoice — Fine-Tune a Model in Your Own Voice in an Afternoon

Active
MLXQwen2.5-0.5B (4-bit LoRA)PythonFastAPIServer-Sent Events
Product demo

Problem

Training your own language model sounds like a PhD job that needs a GPU cluster, so most developers never try. The tooling looks intimidating from the outside.

Business Impact

Fine-tuning is treated as inaccessible, so teams default to prompt-stuffing forever. tinyvoice is a working proof that small-model LoRA on-device is minutes and a laptop — a replicable recipe for anyone who wants a model in their own style.

System Approach

  • Dataset script pairs each published post's one-line brief with its final copy (26 train / 2 valid)
  • MLX LoRA on Qwen2.5-0.5B-Instruct-4bit, 400 steps, ~3 minutes on Apple silicon
  • FastAPI streams stock and tuned models side by side over Server-Sent Events
  • Single-HTML compare UI — same topic in, two voices out
  • Fixed an MLX streaming bug: inference state is thread-local, so all MLX work runs on one thread

Key Decisions & Trade-offs

  • 0.5B 4-bit over a large model — the whole point is that it runs on a laptop
  • LoRA over full fine-tune — minutes, not hours, and a tiny adapter to ship
  • On-device MLX over cloud training — no keys, no bill, no data leaving the Mac
  • Side-by-side UI over a metrics table — the difference should be visible, not described

Current Status

Public and open source (MIT) at github.com/rohitguta2432/tinyvoice. The trained adapter is committed so the repo runs as-is; the stock-vs-tuned duel is verified live in the browser in the demo.

Roadmap

  • Swap in a larger base model to test whether knowledge (not just style) transfers
  • Feed the full post corpus as it grows
  • One-command train-and-serve script

What I'd Improve Next

  • Dataset de-duplication and augmentation for a cleaner signal
  • A quantitative voice-match score to measure the tuning objectively

Explore More