Fix XML tool call parsing: try JSON parse for parameter values
Parameter values like ["key1", "key2"] were being wrapped as strings instead of parsed as JSON arrays. Tools expecting array arguments (like memory_search) got a string containing the array literal. Now tries serde_json::from_str first, falls back to String. Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
785dea9b9b
commit
d451b69196
1 changed files with 3 additions and 1 deletions
|
|
@ -449,7 +449,9 @@ fn parse_xml_tool_call(body: &str) -> Option<(String, String)> {
|
||||||
let mut args = serde_json::Map::new();
|
let mut args = serde_json::Map::new();
|
||||||
let mut rest = func_body;
|
let mut rest = func_body;
|
||||||
while let Some((key, val, remainder)) = parse_qwen_tag(rest, "parameter") {
|
while let Some((key, val, remainder)) = parse_qwen_tag(rest, "parameter") {
|
||||||
args.insert(key.to_string(), serde_json::Value::String(val.to_string()));
|
let value = serde_json::from_str(val)
|
||||||
|
.unwrap_or(serde_json::Value::String(val.to_string()));
|
||||||
|
args.insert(key.to_string(), value);
|
||||||
rest = remainder;
|
rest = remainder;
|
||||||
}
|
}
|
||||||
Some((func_name.to_string(), serde_json::to_string(&args).unwrap_or_default()))
|
Some((func_name.to_string(), serde_json::to_string(&args).unwrap_or_default()))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue