From d451b69196cb89d67a79b4a35e4342a2d65ffa7a Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 8 Apr 2026 18:52:10 -0400 Subject: [PATCH] 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 --- src/agent/context.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/agent/context.rs b/src/agent/context.rs index 68ebc63..17ebba0 100644 --- a/src/agent/context.rs +++ b/src/agent/context.rs @@ -449,7 +449,9 @@ fn parse_xml_tool_call(body: &str) -> Option<(String, String)> { let mut args = serde_json::Map::new(); let mut rest = func_body; 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; } Some((func_name.to_string(), serde_json::to_string(&args).unwrap_or_default()))