Commit 08fbb60b authored by Devon Rifkin's avatar Devon Rifkin
Browse files

qwen3-coder: support anyOf when parsing tool calls

parent 850da848
...@@ -276,7 +276,14 @@ func parseToolCall(raw qwenEventRawToolCall, tools []api.Tool) (api.ToolCall, er ...@@ -276,7 +276,14 @@ func parseToolCall(raw qwenEventRawToolCall, tools []api.Tool) (api.ToolCall, er
var paramType api.PropertyType var paramType api.PropertyType
if matchedTool != nil && matchedTool.Function.Parameters.Properties != nil { if matchedTool != nil && matchedTool.Function.Parameters.Properties != nil {
if prop, ok := matchedTool.Function.Parameters.Properties[parameter.Name]; ok { if prop, ok := matchedTool.Function.Parameters.Properties[parameter.Name]; ok {
paramType = prop.Type // Handle anyOf by collecting all types from the union
if len(prop.AnyOf) > 0 {
for _, anyOfProp := range prop.AnyOf {
paramType = append(paramType, anyOfProp.Type...)
}
} else {
paramType = prop.Type
}
} }
} }
......
...@@ -977,6 +977,21 @@ func TestQwenToolCallValueParsing(t *testing.T) { ...@@ -977,6 +977,21 @@ func TestQwenToolCallValueParsing(t *testing.T) {
raw: "123", raw: "123",
want: 123, // Integer has higher precedence than string want: 123, // Integer has higher precedence than string
}, },
{
desc: "anyOf array or string - with array of objects",
paramType: api.PropertyType{"array", "string"},
raw: `[{"content": "task 1", "status": "pending", "priority": "high", "id": "1"}, {"content": "task 2", "status": "completed", "priority": "low", "id": "2"}]`,
want: []any{
map[string]any{"content": "task 1", "status": "pending", "priority": "high", "id": "1"},
map[string]any{"content": "task 2", "status": "completed", "priority": "low", "id": "2"},
},
},
{
desc: "anyOf array or string - with plain string",
paramType: api.PropertyType{"array", "string"},
raw: "Error: could not load data",
want: "Error: could not load data",
},
} }
for _, tc := range cases { for _, tc := range cases {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment