What changed in v0.4
Theqwen family preset 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 metadata says
native_tool_call_preferred = true - the OpenAI-compatible response actually contains
tool_calls
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 presetprompt protocoltool deliverydecision_sourcenative_tool_call_usednative_tool_call_fallback_reason
