Downloads · 30 days
15
31% of all-time downloads
Minbyul/TT-OPD-Qwen3.5-9B
TT-OPD-Qwen3.5-9B is a image-text-to-text model from Minbyul. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
TT-OPD-Qwen3.5-9B is a Qwen3.5-9B checkpoint post-trained with multi-turn agentic reinforcement learning on medical tasks, using turn-level on-policy self-distillation (TT-OPD) on top of GRPO.
Downloads · 30 days
15
31% of all-time downloads
All-time downloads
48
Public
Parameters
9.4B
18.8 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors18.8 GB · 100%
How the weights are stored.
BF169.4B · 100%
From the Hugging Face model README
TT-OPD-Qwen3.5-9B is a Qwen3.5-9B checkpoint post-trained with multi-turn agentic reinforcement learning on medical tasks, using turn-level on-policy self-distillation (TT-OPD) on top of GRPO.
This card documents only what we changed — the training direction, the objective, and the behaviour we measured. Everything about the underlying architecture, tokenizer, multilingual coverage and general capability comes unchanged from Qwen/Qwen3.5-9B; read that card for the base model's properties and benchmarks.
The model is trained as a medical agent, not as a question answerer:
submit_answer call.The single clearest behavioural change is answer commitment. On the same harness, the rate of episodes that end without ever producing an answer drops sharply:
| no-answer rate ↓ | base | this model |
|---|---|---|
| MedQA | 9.30% | 1.15% |
| MMLU-Med | 6.73% | 0.73% |
TT-OPD = turn-level on-policy distillation, added to GRPO. As configured in this run:
Released weights are step 660, the end of the run.
Agentic multi-turn evaluation on our own harness (5-turn budget, tools + knowledge base), 3 independent runs per cell, mean ± sd. The base row is the same Qwen3.5-9B run through the identical harness, so this is a controlled comparison, not a comparison against published single-turn numbers.
| Benchmark | n | base | GRPO | TT-OPD (this model) |
|---|---|---|---|---|
| MedQA (USMLE) | 1273 | 80.96 ± 0.39 | 83.69 ± 0.24 | 83.97 ± 0.14 |
| MMLU-Med (6 subtypes) | 1089 | 85.89 ± 0.47 | 85.83 ± 0.75 | 86.69 ± 0.24 |
Read this honestly:
Measured over 1,273 episodes / 6,334 generated turns, against the base model on the same harness:
| base | this model | |
|---|---|---|
| episodes with a repeated identical turn | 2.7% | 1.3% |
| distinct turns per episode (of 5) | 4.93 | 4.96 |
| output length p50 / p95 / max (chars) | 206 / 1796 / 6587 | 187 / 1282 / 5966 |
| answer-option distribution (MedQA A/B/C/D) | 25.9/25.7/27.4/21.0 | 25.2/25.6/28.2/21.0 |
No repetition collapse, no length runaway, no answer-option collapse, and no tool-call format degradation (99.5% of turns emit a well-formed tool call).
submit_answer call. We have not measured it as a plain single-turn
chat model without tools, and we would not expect the numbers above to carry over to that
setting. Serve it with its tool loop.from transformers import AutoModelForCausalLM, AutoProcessor
model = AutoModelForCausalLM.from_pretrained(
"Minbyul/TT-OPD-Qwen3.5-9B",
torch_dtype="bfloat16", device_map="auto", trust_remote_code=True,
)
processor = AutoProcessor.from_pretrained(
"Minbyul/TT-OPD-Qwen3.5-9B", trust_remote_code=True,
)
Serving (SGLang, matching how it was evaluated):
python3 -m sglang.launch_server \
--model-path Minbyul/TT-OPD-Qwen3.5-9B \
--served-model-name ttopd-9b \
--host 0.0.0.0 --port 30000 --tp-size 1 \
--context-length 131072 --mem-fraction-static 0.85 \
--reasoning-parser qwen3 --tool-call-parser qwen3_coder \
--trust-remote-code
The checkpoint keeps the base model's vision tower (model.visual.*, 333 tensors), so the
composite Qwen3_5ForConditionalGeneration config loads as-is. RL training was text-only; the
vision path is inherited from the base and was not trained here.
@misc{ttopd_qwen35_9b,
title = {TT-OPD-Qwen3.5-9B: turn-level on-policy distillation for multi-turn medical agents},
author = {Jeong, Minbyul},
year = {2026},
howpublished = {\url{https://huggingface.co/Minbyul/TT-OPD-Qwen3.5-9B}}
}
Apache-2.0, inherited from the base model (see LICENSE).