What changed in v0.4
Theqwen family preset (a configuration bundle that maps the Qwen model family to its default protocol, adapter, and tool delivery) now keeps three ideas together:
- tool schemas are delivered through
api_parameter - native tool calls are preferred when the endpoint returns
tool_calls - text protocols remain available as a stable fallback chain
json_decision_v1, but for Qwen it is now the text fallback, not the ideal path itself.
When the native lane is used
QitOS will prefer the native lane when all of these are true:- the model resolves to the
qwenfamily preset - the harness (the configured adapter + protocol + toolset combination) metadata says
native_tool_call_preferred = true - the OpenAI-compatible response actually contains
tool_calls
tool_calls, QitOS distinguishes two
outcomes. Ordinary natural-language conclusions become final answers. Text that
contains structured action fields but fails parsing stays on the parser recovery
path, so an intended tool action cannot be reported as successful completion.
The trace retains the raw response, parser diagnostics, and
decision_source: parser for that recovery step.
Why QitOS does not copy the Qwen-Agent sentinel prompt
The official Qwen-Agent project includes a Qwen-specific function-calling prompt format for chat interfaces that do not provide a native tool channel. QitOS does not copy that prompt format directly for the OpenAI-compatible Qwen path because:- OpenAI-compatible serving already gives us a structured
tool_callschannel - preserving that structure is cleaner than serializing it back into text
- it keeps the runtime generic enough for other families that also expose native tool calls
- Qwen-Agent solves the more general Qwen chat interface problem
- QitOS solves the OpenAI-compatible served Qwen inside one reusable harness layer problem
Recommended qwen-plus example
Use the flagship example with an OpenAI-compatible Qwen endpoint:
family_preset: qwentool_delivery: api_parameternative_tool_call_preferred: Truedecision_lane_preference: native_tool_calls
How to confirm it in qita
Inspect the run inqita and check:
family preset(configuration bundle for a model family)prompt protocol(output format definition)tool deliverydecision_source(how the Decision was produced)native_tool_call_used(whether the native tool-call path was taken)native_tool_call_fallback_reason
