bug: Qwen2.5 tool calling broken in oa-compat provider — tools not properly formatted in toOaCompatibleRequest #11171
Description
Description
Description
Qwen2.5 models fail to perform tool calls when using the oa-compat provider format. The same model works correctly in Open WebUI.
Root Cause
In packages/console/app/src/routes/zen/util/provider/openai-compatible.ts, the toOaCompatibleRequest function has two issues:
-
Assumes flat tool format only — The tools mapping does
tool.name,tool.description,tool.parametersdirectly, butCommonToolobjects arriving from other format converters may already be in the nested OpenAI format{ type: "function", function: { name, description, parameters } }. When tools arrive nested,tool.nameisundefinedand the tool definition sent to the model is empty. -
Missing
strictfield — TheCommonToolinterface inprovider.tsdefinesstrict?: boolean, buttoOaCompatibleRequestdrops it during tool mapping. Some models (including Qwen2.5) rely on this field.
Current code (line 189)
const tools = Array.isArray(body.tools)
? body.tools.map((tool: any) => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: tool.parameters,
},
}))
: undefined
### Plugins
_No response_
### OpenCode version
_No response_
### Steps to reproduce
_No response_
### Screenshot and/or share link
_No response_
### Operating System
_No response_
### Terminal
_No response_
Activity
github-actions commentedon Jan 29, 2026
This issue might be a duplicate of existing issues. Please check:
These issues all relate to tool calling failures with Qwen and OpenAI-compatible providers. Your detailed analysis of the root cause (nested tool format handling and missing strict field) might help resolve these related issues as well.
Feel free to ignore if none of these address your specific case.
Almoosawi commentedon Jan 29, 2026
can you check this fix and implement if it's correct please:
const tools = Array.isArray(body.tools)
? body.tools.map((tool: any) => {
const t = tool.function ? tool.function : tool // <-- KEY FIX #1
return {
type: "function",
function: {
name: t.name,
description: t.description,
parameters: t.parameters,
strict: t.strict, // <-- KEY FIX #2
},
}
})
: undefined
fix(cli): support nested tools and strict flag for openai-compatible …
github-actions commentedon Apr 1, 2026
To stay organized issues are automatically closed after 90 days of no activity. If the issue is still relevant please open a new one.