Training data
Table with columns: Component, Rows| Component | Rows |
|---|
| AgenticData true-multiturn SFT (extreme-context filtered) | 4,292 |
CodeDance SFT (multi-turn <code> tool use) | 13,828 |
| Total | 18,120 |
No assistant message contains a <think> block; the empty non-thinking prefix is inserted by the template and excluded from the loss.
Training configuration
- Base model:
Qwen/Qwen3.5-9B; full-parameter SFT, vision tower and aligner frozen
- Recipe: non-thinking (
add_non_thinking_prefix=true, loss_scale=default+ignore_empty_think, truncation_strategy=delete)
- Learning rate 1e-5, min 1e-6, cosine decay, warmup fraction 0.05, weight decay 0.1, clip grad 1.0
- Maximum length 32,768; global batch 64; micro batch 1; TP=2, PP=1, sequence parallel; bf16; flash attention
- One epoch = 283/283 optimizer steps, elapsed 8h 10m 55s, final training loss 0.17167911
- Full arguments:
training/args.json; per-step log: training/logging.jsonl
Evaluation
Not yet evaluated at publication time. Results on TIR-Bench and the huawei_benchmark suite (FVQA, SimpleVQA, MMBrowseComp, GAIA) will be added alongside the legacy checkpoint for comparison.
Inference
vllm serve HEART77/TIR-Qwen3.5-9B-NonThinking-v2 --port 8000 --max-model-len 32768 --reasoning-parser qwen3
Disable thinking at request time with chat_template_kwargs={"enable_thinking": false}. The model uses the TIR agent format: Python in <code> blocks, tool results as a user turn beginning with Code execution result:, final answer in <answer>...</answer>.