mirror of
https://github.com/ollama/ollama.git
synced 2025-11-11 16:27:02 +01:00
tools: handle the case where a tool call sends "arguments" or "parameters" as a serialized json string (#12413)
This commit is contained in:
@@ -273,9 +273,21 @@ func findArguments(buffer []byte) (map[string]any, int) {
|
|||||||
if args, ok := obj["arguments"].(map[string]any); ok {
|
if args, ok := obj["arguments"].(map[string]any); ok {
|
||||||
return args, true
|
return args, true
|
||||||
}
|
}
|
||||||
|
if argsStr, ok := obj["arguments"].(string); ok {
|
||||||
|
var argsData map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(argsStr), &argsData); err == nil {
|
||||||
|
return argsData, ok
|
||||||
|
}
|
||||||
|
}
|
||||||
if args, ok := obj["parameters"].(map[string]any); ok {
|
if args, ok := obj["parameters"].(map[string]any); ok {
|
||||||
return args, true
|
return args, true
|
||||||
}
|
}
|
||||||
|
if argsStr, ok := obj["parameters"].(string); ok {
|
||||||
|
var argsData map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(argsStr), &argsData); err == nil {
|
||||||
|
return argsData, ok
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, true
|
return nil, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1274,6 +1274,22 @@ func TestFindArguments(t *testing.T) {
|
|||||||
"items": []any{"{", "}", map[string]any{"key": "value"}},
|
"items": []any{"{", "}", map[string]any{"key": "value"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "stringified arguments",
|
||||||
|
buffer: []byte(`{"name": "get_temperature", "arguments": "{\"format\": \"fahrenheit\", \"location\": \"San Francisco, CA\"}"}`),
|
||||||
|
want: map[string]any{
|
||||||
|
"format": "fahrenheit",
|
||||||
|
"location": "San Francisco, CA",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "stringified parameters",
|
||||||
|
buffer: []byte(`{"name": "get_temperature", "parameters": "{\"format\": \"fahrenheit\", \"location\": \"San Francisco, CA\"}"}`),
|
||||||
|
want: map[string]any{
|
||||||
|
"format": "fahrenheit",
|
||||||
|
"location": "San Francisco, CA",
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
|
|||||||
Reference in New Issue
Block a user