Qwen3-0.6B Task Planner

A small, on-device assistant for task planning and schedule adjustment, fine-tuned from Qwen3-0.6B via QLoRA and distilled from a Qwen3-8B teacher.

Built for the Koorm project — a productivity app for people who struggle with perfectionism and overwhelm. Given a natural-language task, it produces a structured, "good enough" plan; given a day's schedule and a new task, it fits the task in while respecting the day's constraints. Both tasks return structured JSON.

Repo contents

File Description
adapter_model.safetensors, adapter_config.json LoRA adapter (~40 MB) for unsloth/Qwen3-0.6B
tokenizer.json, tokenizer_config.json, chat_template.jinja tokenizer + chat template
gguf/qwen3-0.6b.Q4_K_M.gguf merged + quantized GGUF (~378 MB) for llama.cpp / MLC / Ollama
gguf/Modelfile Ollama modelfile (chat template + sampling params)

Intended use

  • Task planning — decompose a task into a plan: title, priority, category, estimated duration, due date, a "good enough" completion criterion, and 2–6 subtasks.
  • Schedule adjustment — insert a new task into an existing daily schedule, honoring immovable meetings, a fixed lunch block, buffers, and no work past 17:00; defer lower-priority items if needed.

Out of scope: general chat, factual QA, code, or anything outside these two structured tasks. At 0.6B and English-only, it is a narrow tool, not a general assistant.

How to use

Ollama (GGUF)

hf download sumitsrv/qwen3-0.6b-task-planner gguf/qwen3-0.6b.Q4_K_M.gguf gguf/Modelfile --local-dir model/
cd model/gguf
ollama create koorm-planner -f Modelfile
ollama run koorm-planner

Transformers + PEFT (adapter)

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained("unsloth/Qwen3-0.6B", device_map="auto")
model = PeftModel.from_pretrained(base, "sumitsrv/qwen3-0.6b-task-planner")
tok = AutoTokenizer.from_pretrained("sumitsrv/qwen3-0.6b-task-planner")

messages = [
    {"role": "system", "content": SYSTEM_PLAN},          # see "Prompt format" below
    {"role": "user", "content": "Plan this task: Write a quarterly sales report for the board meeting next Monday"},
]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=512, temperature=0.6, top_p=0.95, top_k=20)
print(tok.decode(out[0][inputs.shape[-1]:], skip_special_tokens=True))

Recommended sampling: temperature=0.6, top_p=0.95, top_k=20 (as set in the Modelfile).

Prompt format

The model is trained with a task-specific system prompt that defines the exact JSON schema, plus a user turn. The system prompt instructs the model to output JSON only (no markdown fences); the JSON shapes mirror the Koorm app's task/schedule data models.

Planning — user: Plan this task: <description> → assistant:

{
  "task": {
    "title": "Write quarterly sales report",
    "description": "Prepare the Q2 sales report for Monday's board meeting",
    "priority": "HIGH",
    "category": "WORK",
    "estimated_duration": 150,
    "due_date": "2026-07-06",
    "good_enough_criteria": "Covers key metrics and trends; presentable, not perfect",
    "subtasks": [
      {"title": "Pull Q2 figures from the dashboard", "order": 1, "estimated_minutes": 30},
      {"title": "Draft summary and key trends", "order": 2, "estimated_minutes": 60},
      {"title": "Build charts and format slides", "order": 3, "estimated_minutes": 45},
      {"title": "Review and tidy for presentation", "order": 4, "estimated_minutes": 15}
    ]
  }
}

Schedule adjustment — user provides the current schedule JSON, existing tasks, and a new task → assistant returns { "schedule": {...}, "deferred_tasks": [...], "notes": "..." }.

Training

  • Method: QLoRA (4-bit) with Unsloth; LoRA r=16, alpha=16, dropout 0, targeting all attention + MLP projections.
  • Teacher / distillation: training targets generated by a local Qwen3-8B (via Ollama), then validated against the Pydantic schemas before use.
  • Data: ~470 distilled examples (task plans + schedule adjustments), English.
  • Regime: 3 epochs, lr 2e-4, effective batch 8 (batch 2 × grad-accum 4), max seq length 2048.
  • Result: train loss 2.13 → 0.25 over 177 steps.
  • Hardware: single NVIDIA RTX 4060 Laptop (8 GB), ~2–3 GB VRAM in use.

Note: this checkpoint was trained before the data pipeline added semantic quality filtering, JSON-only targets, and a held-out eval split. A refreshed checkpoint trained on the filtered data is planned.

Limitations

  • Tiny + narrow: 0.6B params, English-only, trained only for the two structured tasks above.
  • Not a validator: outputs should be parsed and schema-checked by the calling app; the model can still emit occasional malformed or constraint-violating JSON.
  • Synthetic data: distilled from a teacher model, so it inherits the teacher's biases and any systematic errors in the generated examples.

License

Apache-2.0, inherited from the Qwen3-0.6B base model.

Downloads last month
67
GGUF
Model size
0.6B params
Architecture
qwen3
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for sumitsrv/qwen3-0.6b-task-planner

Finetuned
Qwen/Qwen3-0.6B
Adapter
(29)
this model