mirror of
https://github.com/dogkeeper886/ollama37.git
synced 2025-12-11 16:26:59 +00:00
tools: relax JSON parse constraints for tool calling (#10872)
This commit is contained in:
@@ -536,11 +536,18 @@ func TestParseToolCalls(t *testing.T) {
|
||||
expectedTokens: "",
|
||||
},
|
||||
{
|
||||
name: "model without prefix in template, prefix in output",
|
||||
name: "model without prefix in template, prefix in output, multiple tool calls in list",
|
||||
model: "llama3.2",
|
||||
output: `<tool_call> [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call>`,
|
||||
expectedToolCall: []api.ToolCall{},
|
||||
expectedTokens: `<tool_call> [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call>`,
|
||||
expectedToolCall: []api.ToolCall{t1, t2},
|
||||
expectedTokens: `<tool_call>`,
|
||||
},
|
||||
{
|
||||
name: "model without prefix in template, prefix in output, individual tool calls",
|
||||
model: "llama3.2",
|
||||
output: `<tool_call> {"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}`,
|
||||
expectedToolCall: []api.ToolCall{t1, t2},
|
||||
expectedTokens: `<tool_call>`,
|
||||
},
|
||||
{
|
||||
name: "model with prefix in template, no prefix in output, tokens before",
|
||||
@@ -567,15 +574,37 @@ func TestParseToolCalls(t *testing.T) {
|
||||
name: "model without prefix in template, no prefix in output, tokens before",
|
||||
model: "llama3.2",
|
||||
output: `some tokens before [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]`,
|
||||
expectedToolCall: []api.ToolCall{},
|
||||
expectedTokens: `some tokens before [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]`,
|
||||
expectedToolCall: []api.ToolCall{t1, t2},
|
||||
expectedTokens: `some tokens before`,
|
||||
},
|
||||
{
|
||||
name: "model without prefix in template, prefix in output, tokens after",
|
||||
name: "model without prefix in template, prefix in output, tokens after",
|
||||
model: "llama3.2",
|
||||
output: `<tool_call>
|
||||
[{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call> some tokens after`,
|
||||
expectedToolCall: []api.ToolCall{t1, t2},
|
||||
expectedTokens: `<tool_call>`,
|
||||
},
|
||||
{
|
||||
name: "model without without prefix, match all jsons",
|
||||
model: "llama3.2",
|
||||
output: `<tool_call> [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call> some tokens after`,
|
||||
output: `model outputs some text [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call> some tokens after`,
|
||||
expectedToolCall: []api.ToolCall{t1, t2},
|
||||
expectedTokens: "model outputs some text",
|
||||
},
|
||||
{
|
||||
name: "model flushes tokens if tool call doesn't match",
|
||||
model: "llama3.2",
|
||||
output: `{ "user": {"id": 12345, "name": "Alice", "preferences": {"theme": "dark", "notifications": true}, "stats": {"points": 987, "level": 42}}}`,
|
||||
expectedToolCall: []api.ToolCall{},
|
||||
expectedTokens: `<tool_call> [{"name": "get_current_weather", "parameters": {"format":"fahrenheit","location":"San Francisco, CA"}} {"name": "get_current_weather", "parameters": {"format":"celsius","location":"Toronto, Canada"}}]</tool_call> some tokens after`,
|
||||
expectedTokens: `{ "user": {"id": 12345, "name": "Alice", "preferences": {"theme": "dark", "notifications": true}, "stats": {"points": 987, "level": 42}}}`,
|
||||
},
|
||||
{
|
||||
name: "model flushes tokens if tool call doesn't match array",
|
||||
model: "llama3.2",
|
||||
output: `[ { "user": {"id": 12345, "name": "Alice", "preferences": {"theme": "dark", "notifications": true}, "stats": {"points": 987, "level": 42}}}]`,
|
||||
expectedToolCall: []api.ToolCall{},
|
||||
expectedTokens: `[ { "user": {"id": 12345, "name": "Alice", "preferences": {"theme": "dark", "notifications": true}, "stats": {"points": 987, "level": 42}}}]`,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user