82.2 MB
7 files
Updated about 1 month ago
Name
Size
data
figures
.gitattributes2.5 kB
xet
README.md7.35 kB
xet
README.md

Qwen 3.6 Plus: ToolScale Agent SFT Dataset

Multi-turn tool-calling trajectories generated by Qwen 3.6 Plus via OpenRouter on ToolScale. Both passing and near-passing rollouts are included, allowing users to choose their own quality threshold using reward and score.

Each row is a flattened conversation prefix ending at one assistant turn, ready for next-token SFT. Assistant turns include a reasoning_content field containing the model’s reasoning.

What's inside

Metric Value
Training rows, split by assistant turn 3,950
Unique conversations 582
Hard-pass rows, reward == 1.0 1,913, 48.4%
Reasoning coverage 100%
Multi-step conversations, ≥2 tool-call turns 96.2%
Tool-call style Sequential, one call per turn

Domain coverage

Dataset coverage by domain

The dataset covers three domains in depth, with multiple flattened rows per conversation rather than broad but shallow task coverage.

Domain Rows, flattened Conversations Avg. turns
bank 2,227 312 8.1
ecommerce 1,119 174 7.4
basketball 604 96 7.3

Conversation depth

Conversation depth distribution

Most conversations contain 5–10 assistant turns. The median is 7 turns and the 90th percentile is 11, with a small tail reaching about 24 turns. Overall, the dataset is dominated by realistic short-to-medium customer-service flows rather than long-horizon agent runs.

Score and reward

Action-match score vs. composite reward

Each row includes two evaluation signals:

  • reward: binary, either 0 or 1. This is a composite trajectory-level signal indicating whether all required actions were completed. 48.4% of rows pass.
  • score: continuous in [0, 1]. This measures per-step action matching against the reference trajectory. The mean score is 0.568.

score and reward capture different notions of quality. A trajectory may have score = 0.7, meaning most actions were correct and in the right order, but still have reward = 0 if a required action was missed.

This gives users flexibility when filtering for SFT:

# Strict: only fully passing trajectories
ds.filter(lambda r: r["reward"] == 1.0)         # 1,913 rows

# Softer: high-quality trajectories with mostly correct actions
ds.filter(lambda r: r["score"] >= 0.7)          # 1,272 rows

Schema

Field Type Description
id string Sample ID. <base>_t<N> indicates the Nth assistant-turn prefix of conversation <base>.
domain string One of bank, ecommerce, or basketball.
score float Continuous action-match score against the reference trajectory, from 0 to 1.
reward float Binary composite reward, either 0 or 1.
num_turns int Total number of assistant turns in the full conversation.
tools string JSON-encoded tool schemas available to the agent.
messages list[dict] OpenAI-style messages. Assistant turns include reasoning_content.

Quickstart

import json
from datasets import load_dataset

ds = load_dataset("zake7749/Qwen-3.6-plus-agent-tool-calling-trajectory")

sample = ds["train"][0]
messages = sample["messages"]
tools = json.loads(sample["tools"])

for msg in messages:
    if msg["role"] == "assistant":
        print("Reasoning :", msg["reasoning_content"][:200])
        print("Content   :", msg["content"][:200])
        print("Tool calls:", msg.get("tool_calls"))
        break

Trajectory shape

[system]    Domain policy + instructions
[user]      "Hi, I need to check on my recent order for zip-top bags..."

[assistant] reasoning  : "User is asking about an order. I need to find their account first."
            tool_calls : [find_account_key_by_email(email="jamie.lee@example.com")]
[tool]      "BERuCRx"

[assistant] reasoning  : "Got the account key. Now retrieve the orders."
            tool_calls : [get_account_details(account_key="BERuCRx")]
[tool]      {"orders": [...], ...}

[assistant] content    : "Hi Jamie! Your zip-top bags order was charged to..."

The agent reasons explicitly between tool calls and issues one tool call per turn. The dataset does not contain parallel tool-call examples.

Notes & limitations

  • Mixed-quality on purpose. The dataset retains rollouts with reward == 0 so you can compose your own quality bar. Filter by reward == 1.0 for a strict 1,913-row subset, or by score for a softer cut.
  • Sequential agent only. Qwen 3.6 Plus never issues parallel tool calls on this dataset, so models trained on this dataset alone won't learn batch-call patterns.
  • Single generator. All trajectories come from one model; reasoning style and prose patterns will reflect Qwen 3.6 Plus.
  • Three domains. Coverage is deep but narrow (bank / ecommerce / basketball); cross-domain generalisation is not exercised.

Citation

Built on ToolScale from the ToolOrchestra project:

@article{toolorchestra2025,
  title   = {ToolOrchestra: Elevating Intelligence via Efficient Model and Tool Orchestration},
  author  = {NVIDIA and The University of Hong Kong},
  journal = {arXiv preprint arXiv:2511.21689},
  year    = {2025}
}
Total size
82.2 MB
Files
7
Last updated
Jul 12
Pre-warmed CDN
US EU US EU

Contributors