Fine-tuned Qwen3-0.6B model outperforms 120B teacher on structured function calling

What this is
Distil Labs released a complete pipeline that fine-tunes a small 0.6B parameter Qwen3 model to outperform a 120B parameter teacher model on structured function calling tasks. The pipeline extracts production traces, generates synthetic training data, and trains a specialist model that's 200x smaller than the teacher.
Performance results
- Teacher (GPT-OSS-120B): 50.0% tool call equivalence
- Base Qwen3-0.6B (no fine-tuning): 10.3% tool call equivalence
- Fine-tuned Qwen3-0.6B: 79.5% tool call equivalence
The task is IoT smart home function calling: routing natural language commands like "turn on the kitchen lights" or "make me a coffee at 7am" to the correct function with the right parameters. Scoring is based on exact structured match, not fuzzy scoring.
Why the small model wins
The 120B teacher is a general-purpose model that has never seen these specific function schemas or user phrasing patterns. It often produces verbose or slightly off-format responses. The 0.6B student is a specialist trained exclusively on this task, so it nails the exact output format consistently.
Pipeline architecture
The three-stage pipeline:
- Data extraction: dlt extracts production traces from databases, APIs, cloud storage, or log aggregators and writes them to Hugging Face as clean Parquet datasets
- Automatic curation: An LLM judge scores and filters traces to select high-quality seed examples (no manual annotation required)
- Synthetic data generation and training: Distil Labs uses the traces as domain context, generates ~10,000 synthetic training examples with a large teacher, validates and filters them, then fine-tunes the student model
The key insight: instead of training on raw traces directly, they're used as context so the synthetic data generator produces examples matching real vocabulary, function schemas, and phrasing patterns from actual users.
Dataset and practical details
- Used Amazon MASSIVE dataset (16k+ utterances, 60 intents) as stand-in for production traffic
- Filtered to IoT scenario with 9 smart home functions
- ~75 labeled seed examples were enough (automatic curation, zero manual annotation)
- Training completed in under 12 hours
- Model inference: under 50ms locally vs. 400-700ms for cloud API calls
- Model available in safetensors and GGUF formats on Hugging Face
Production considerations
The model scores 79.5% exact match, meaning roughly 1 in 5 queries may need a fallback. For production use, you'd want a confidence threshold routing low-confidence predictions to a larger model.
📖 Read the full source: r/LocalLLaMA
👀 See Also

Indie Developer Unveils 'Ideanator' CLI Tool for Structuring Vague Ideas with Local LLMs
Ideanator is a CLI tool designed by a self-taught 19-year-old developer using local LLMs like Ollama/MLX. It structures vague ideas into well-defined concepts, completely offline.

ToolLoop: Open-Source Framework for Claude-Style Tools with Any LLM
ToolLoop is an open-source Python framework with 11 tools for file operations, code search, shell access, and sub-agents that works with any LLM through LiteLLM. The 2,700-line framework allows switching models mid-conversation while maintaining shared context.

Claude Code user builds nvm plugin to capture problem-solving context
A developer created a Claude plugin called nvm (non-volatile memory) that converts Claude session history into markdown cards documenting problem-solving decisions and reusable insights. The tool addresses the issue of losing track of how problems were solved when using AI coding assistants.

Parallel Sub-Agents in Claude Code: When They Save vs. Burn Tokens
Anthropic reports multi-agent systems use ~15× more tokens than a single chat, but prompt caching offers 90% discount on tokens. Whether sub-agents save or burn money depends on cache hit rates.