Unverified Commit 2fba04b5 authored by Gabe Goodhart's avatar Gabe Goodhart Committed by GitHub
Browse files

tools: handle the case where a tool call sends "arguments" or "parameters" as...

tools: handle the case where a tool call sends "arguments" or "parameters" as a serialized json string (#12413)
parent fbd82ba5
...@@ -273,9 +273,21 @@ func findArguments(buffer []byte) (map[string]any, int) { ...@@ -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) { ...@@ -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 {
......
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