Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
53a969d5
Unverified
Commit
53a969d5
authored
Oct 14, 2025
by
Devon Rifkin
Committed by
GitHub
Oct 14, 2025
Browse files
Merge pull request #12621 from ollama/drifkin/any-of
qwen3-coder: support anyOf when parsing tool calls
parents
850da848
08fbb60b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
1 deletion
+23
-1
model/parsers/qwen3coder.go
model/parsers/qwen3coder.go
+8
-1
model/parsers/qwen3coder_test.go
model/parsers/qwen3coder_test.go
+15
-0
No files found.
model/parsers/qwen3coder.go
View file @
53a969d5
...
@@ -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
}
}
}
}
}
...
...
model/parsers/qwen3coder_test.go
View file @
53a969d5
...
@@ -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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment