Qwen3-32B-Qwople

Qwen3-32B fine-tuned for autonomous agentic tool use with inline reasoning. Trained via two-stage QLoRA on 44,672 multi-turn tool-call conversations with <think> reasoning traces.

Architecture

Qwen3-32B (base) → [+Fable distill LoRA, merged] → [+Action chain SFT LoRA] = Qwople

Stage 1 — Qwable (Fable Distill): Qwen3-32B base + LoRA trained on 1,502 high-quality reasoning examples (Fable-style inline reasoning before every action). Adapter merged into base.

Stage 2 — Qwople (Action Chain SFT): Merged Qwable + new LoRA trained on 44,672 real agentic trajectories with tool calls, error recovery, and <think> reasoning.

Training Details

Parameter Value
Base model Qwen/Qwen3-32B (4-bit QLoRA via Unsloth)
Fable adapter Ebumping/Qwen3-32B-Fable-Distill (merged before Stage 2)
LoRA rank (r) 64
LoRA alpha (α) 128
LoRA dropout 0.05
Target modules q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
Optimizer adamw_8bit
Learning rate 2e-5 (cosine schedule, 50 warmup steps)
Batch size 1 × 16 grad accum (effective 16)
Precision bf16
Max seq length 4096
Epochs planned 3
Checkpoint Step 3400 / Epoch 1.22 (early stop)
Hardware NVIDIA A100 80GB (Vast.ai)

Loss Curve

Step Epoch Loss
10 0.004 1.314
100 0.036 0.892
500 0.179 0.521
1000 0.358 0.412
2000 0.717 0.338
3000 1.075 0.298
3400 1.218 0.290

Training was stopped at step 3400 (epoch 1.22 of 3 planned). Loss had plateaued around 0.29.

Training Data

Final SFT dataset: qwople_v3_sft.jsonl — 44,672 examples

Source Count % Description
interstellarninja/hermes_reasoning_tool_use 35,524 79.5% Hermes-format multi-turn with mandatory <think> + <tool_call>
lambda/hermes-agent-reasoning-traces 7,646 17.1% Kimi-config deep Hermes Agent traces
Fable reasoning (preserved) 1,502 3.4% Original Qwable reasoning examples (anti-forgetting)

96.6% of examples contain <think> reasoning traces before tool calls.

Data pipeline

  1. Download (qwople_download.py): 5 source datasets pulled — terminalbench-trajectories, APIGen-MT-5k, code-act, smolagents traces, hermes-function-calling-v1
  2. Convert (qwople_convert.py): Unified to Hermes/OpenAI multi-turn format with <tool_call> XML + <tool_response> tags
  3. V3 refinement (qwople_v3_data.py): Replaced synthetic reasoning injection with REAL <think> traces from dedicated reasoning datasets. Conversations >50 messages truncated to first 5 + last 20 turns.

Earlier v1 dataset (not used for final model)

24,063 examples from terminalbench (8K), APIGen (5K), code-act (5K), smolagents (1.7K), hermes-fc (1.9K). Used template-based reasoning injection (qwople_inject_reasoning.py) — replaced by v3's real traces.

Known Quirks

⚠️ Read these before deploying. Qwople has several format inconsistencies that affect inference.

1. Inconsistent tool-call token emission

The model sometimes emits <tool_call> as a special token (correctly parsed by vLLM's --tool-call-parser hermes) and sometimes as raw text tokens in the content field. This means:

  • vLLM with --tool-call-parser hermes: Works for ~60% of tool calls. The rest appear as raw <tool_call>...</tool_call> text in content.
  • Recommendation: Use a fallback regex parser on content to catch the raw-token emissions. The enhanced chat UI (qwople_backup.tar.gz) includes this fallback.

2. --reasoning-parser breaks --tool-call-parser

Do NOT use --reasoning-parser deepseek_r1 together with --tool-call-parser hermes in vLLM. The reasoning parser consumes <think> tokens and adjacent tokens, which prevents the hermes tool parser from seeing the <tool_call> block. Tool calling silently fails (returns empty tool_calls: []).

Fix: Use --tool-call-parser hermes alone (no reasoning parser). The <think> blocks appear inline in content and can be parsed client-side.

3. Malformed JSON in tool calls

~5% of tool call emissions have malformed JSON — typically extra trailing } characters or unbalanced braces. The fallback parser needs progressive brace-trimming to handle this.

4. System prompt dependency

Without a system prompt that explicitly describes available tools, the model often answers directly without calling tools. A system prompt like "You have access to tools. Use them when appropriate." is required for reliable tool use.

5. Over-eager reasoning

The model produces verbose <think> blocks (often 200-500 tokens) before even simple actions. This is a feature of the Fable reasoning style, not a bug — but it adds latency.

6. Conversation truncation artifacts

Training conversations were truncated to first 5 + last 20 messages for long trajectories. The model may lose context in the middle of very long multi-turn conversations.

vLLM Server Configuration

/root/vllm-env/bin/python -m vllm.entrypoints.openai.api_server \
  --model /path/to/qwople_merged \
  --served-model-name qwople-v2 \
  --port 10100 \
  --host 0.0.0.0 \
  --trust-remote-code \
  --enable-auto-tool-choice \
  --tool-call-parser hermes \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.90

venv dependencies (vLLM 0.10.2 on CUDA 12.8)

vllm==0.10.2
prometheus-fastapi-instrumentator<8.0.0
fastapi<0.137
starlette<1.0
transformers>=4.56,<5.0
huggingface-hub>=0.34,<1.0
torch==2.8.0+cu128

GGUF Quants

File Size BPW
Qwen3-32B-Qwople-Q4_K_M 19 GB 4.82
Qwen3-32B-Qwople-Q8_0 33 GB 8.50

Available at Ebumping/Qwen3-32B-Qwople-GGUF.

Chat Template

Uses the standard Qwen3 chat template with Hermes tool-call format:

<tool_call>
{"name": "<function-name>", "arguments": <args-json-object>}
</tool_call>

Tool responses use <tool_response> tags wrapped in user role turns.

Full chat_template.jinja is included in the repo.

Related Repos

Repo Description
Ebumping/Qwen3-32B-Qwople Full merged model (FP16, ~66GB)
Ebumping/Qwen3-32B-Qwople-LoRA This repo — LoRA adapter + checkpoint-3400
Ebumping/Qwen3-32B-Qwople-GGUF GGUF quants (Q4_K_M + Q8_0) + backup scripts

Training Scripts

All training/data scripts are preserved in qwople_backup.tar.gz on the GGUF repo:

  • qwople_download.py — Downloads 5 source datasets
  • qwople_convert.py — Converts to unified Hermes format
  • qwople_v3_data.py — Builds final v3 dataset with real reasoning traces
  • qwople_inject_reasoning.py — v1 reasoning injection (deprecated, kept for reference)
  • qwople_train.py / qwople_train_v2.py — Unsloth QLoRA training scripts
  • qwople_generate_opus.py — Claude Opus trajectory generator (for future data)
  • qwople_chat_enhanced.py — Enhanced chat UI with tool-call fallback parser
  • start_vllm.sh — vLLM startup script

Framework Versions

  • PEFT 0.19.1
  • Unsloth (latest as of June 2026)
  • TRL (SFTTrainer)
  • Transformers ≥4.56, <5.0

Training Data Sources & Citations

Final v3 training set (44,672 examples)

These datasets were directly used in the final fine-tuning:

  1. interstellarninja/hermes_reasoning_tool_use — 35,524 examples (79.5%) Multi-turn conversations with mandatory <think> reasoning traces before every <tool_call>. Hermes format. https://huggingface.co/datasets/interstellarninja/hermes_reasoning_tool_use

  2. lambda/hermes-agent-reasoning-traces — 7,646 examples (17.1%) Deep Hermes Agent traces generated with Kimi config. Multi-step tool use with real reasoning. https://huggingface.co/datasets/lambda/hermes-agent-reasoning-traces

  3. Fable reasoning examples — 1,502 examples (3.4%) Original Qwable/Fable distillation data, preserved in the mix to prevent catastrophic forgetting of reasoning style. Derived from Ebumping/Qwen3-32B-Fable-Distill

Earlier pipeline sources (downloaded, used for v1 data, superseded by v3)

These datasets were part of the data pipeline exploration. They informed the final dataset design but were not in the final v3 training set:

  1. yoonholee/terminalbench-trajectories — 8,000 trajectories extracted Real Claude Opus / GPT agent traces with tool calls, errors, and recovery on terminal tasks. https://huggingface.co/datasets/yoonholee/terminalbench-trajectories

  2. Salesforce/APIGen-MT-5k — 5,000 examples Verified multi-turn tool dialogues. https://huggingface.co/datasets/Salesforce/APIGen-MT-5k

  3. xingyaoww/code-act-78k — 5,000 examples extracted Code-action agent traces (78K total dataset, filtered subset used). https://huggingface.co/datasets/xingyaoww/code-act-78k

  4. smolagents/training-traces — 1,657 examples HF code-agent traces with tool execution. https://huggingface.co/datasets/smolagents/training-traces

  5. NousResearch/hermes-function-calling-v1 — 1,893 examples Hermes function-calling format reference data. https://huggingface.co/datasets/NousResearch/hermes-function-calling-v1

  6. r0b0tlab/deepseek-hermes-reasoning-traces — evaluated, not in final mix DeepSeek V4 Pro reasoning traces (considered but v3 used interstellarninja instead for format consistency). https://huggingface.co/datasets/r0b0tlab/deepseek-hermes-reasoning-traces

BibTeX

@dataset{interstellarninja_hermes_reasoning,
  title  = {Hermes Reasoning Tool Use},
  author = {interstellarninja},
  url    = {https://huggingface.co/datasets/interstellarninja/hermes_reasoning_tool_use}
}

@dataset{lambda_hermes_agent_traces,
  title  = {Hermes Agent Reasoning Traces},
  author = {lambda},
  url    = {https://huggingface.co/datasets/lambda/hermes-agent-reasoning-traces}
}

@dataset{yoonholee_terminalbench,
  title  = {TerminalBench Trajectories},
  author = {Yoonho Lee},
  url    = {https://huggingface.co/datasets/yoonholee/terminalbench-trajectories}
}

@dataset{salesforce_apigen,
  title  = {APIGen-MT-5k: Verified Multi-Turn Tool Dialogues},
  author = {Salesforce},
  url    = {https://huggingface.co/datasets/Salesforce/APIGen-MT-5k}
}

@dataset{xingyaoww_codeact,
  title  = {CodeAct: Code Action Agent Traces},
  author = {Xingyao Wang},
  url    = {https://huggingface.co/datasets/xingyaoww/code-act-78k}
}

@dataset{nousresearch_hermes_fc,
  title  = {Hermes Function Calling v1},
  author = {Nous Research},
  url    = {https://huggingface.co/datasets/NousResearch/hermes-function-calling-v1}
}

Author

Ebumping (Dylan Jeffery)

Downloads last month
-
Safetensors
Model size
33B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Ebumping/Qwen3-32B-Qwople

Base model

Qwen/Qwen3-32B
Adapter
(360)
this model