Qwen3.5-4B-Router-1M

A 4B open decider for one job: what should this agent do next, and which tool should it call? It returns a calibrated probability for each option, not free text.

Qwen3.5-4B + an Unsloth decision head (LoRA r=16), trained on 17,600 rows with source labels only. No Jev answers were used in training.

Results

Scored on the held-out test split, 480 rows from 4 task families. Jev 1.13's answers (TypeSafe) are the ones stored with those rows. None of these rows shares a group or a state with the 976,219 train and validation rows of the merged 1M set.

Task Rows This model Jev 1.13 Always the most common answer
Next action, agent 120 85.0% 74.2% 50.0%
Next action, customer service 120 83.3% 75.8% 50.0%
Tool choice, agent 120 90.8% 82.5% 14.2%
Tool choice, customer service 120 86.7% 90.0% 23.3%
All 4 480 86.5% 80.6%

Difference: +5.8 points, 95% interval +1.7 to +10.1 (bootstrap over 364 groups). This model alone was right on 58 rows, Jev alone on 30.

Limits

  • Not a clinical model. Training and test rows are customer-service and software-agent traces. It has not been tested on clinical agents and must not decide anything about a patient.
  • Home advantage. The labels are what the source trace did next or a tool-call parse, not a human verdict. This model learned from those same labels and Jev did not, so read the table as agreement with the source.
  • Not a trace judge. On trace_disposition it gave one answer on all 120 rows, 34.2% against a majority class of 43.3%. trace_outcome is 47.5% against 41.7%. Don't use it for those.
  • Long rows untested. The test covers states up to 13,000 characters, about 70% of these families' test rows, and the model reads at most 4,096 tokens. Jev scores a little higher on the longer rows.
  • Five more trained families had a single class in this test, so their 100% says nothing and is left out.
  • Training stopped on a time budget at 0.67 of an epoch, on one A100 in 1.9 hours.

Use

from unsloth import FastDecisionModel

model, tokenizer = FastDecisionModel.from_pretrained("MaziyarPanahi/Qwen3.5-4B-Router-1M", max_seq_length=4096, load_in_4bit=False)
FastDecisionModel.for_inference(model)
question = {"decision": {"type": "choice",
    "instructions": "Which available tool should be called next?",
    "criteria": {"get_order_status": "Call `get_order_status`.",
                 "transfer_to_human_agent": "Call `transfer_to_human_agent`."}}}
state = '{"available_tools": [{"name": "get_order_status"}, {"name": "transfer_to_human_agent"}], '\
        '"conversation": [{"role": "user", "content": "I would like to speak to a person please."}]}'
print(FastDecisionModel.predict(model, tokenizer, state, question))

Data

Trained on the source labels of four public Jev datasets. Jev's answers in those datasets were not used in training.

Credit

  • Base model: Qwen3.5-4B by the Qwen team, Apache-2.0. Recipe: Unsloth FastDecisionModel.
  • The rows behind those datasets come from NVIDIA's Nemotron-SFT-Agentic-v2 and Open-SWE-Traces, both CC BY 4.0. They were turned into decision questions with one label each. See those datasets for their terms.
Downloads last month
44
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for MaziyarPanahi/Qwen3.5-4B-Router-1M

Finetuned
Qwen/Qwen3.5-4B
Adapter
(237)
this model

Datasets used to train MaziyarPanahi/Qwen3.5-4B-Router-1M

Collection including MaziyarPanahi/Qwen3.5-4B-Router-1M