From 172f2b31b9981b85fbc2691b665cf7120bfc1223 Mon Sep 17 00:00:00 2001 From: Maxen Wong Date: Tue, 19 May 2026 21:44:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(memory-tree):=20rename=20window=5Fdays=20?= =?UTF-8?q?=E2=86=92=20time=5Fwindow=5Fdays=20for=20query=5Fglobal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit query_global RPC and tool used as the field name, but DeepSeek (and some other providers) pass the parameter exactly as named in the JSON schema — which was . This mismatch caused parse errors on tool calls. - Rename QueryGlobalRequest::window_days → time_window_days - Update tool schema, description, and execute() to match - Update RPC test to use the new field name --- src/openhuman/memory/tree/retrieval/rpc.rs | 6 +++--- src/openhuman/tools/impl/memory/tree/query_global.rs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/openhuman/memory/tree/retrieval/rpc.rs b/src/openhuman/memory/tree/retrieval/rpc.rs index 31b4dd587..83a508483 100644 --- a/src/openhuman/memory/tree/retrieval/rpc.rs +++ b/src/openhuman/memory/tree/retrieval/rpc.rs @@ -84,7 +84,7 @@ pub async fn query_source_rpc( /// Request body for `memory_tree_query_global`. #[derive(Clone, Debug, Serialize, Deserialize)] pub struct QueryGlobalRequest { - pub window_days: u32, + pub time_window_days: u32, } /// JSON-RPC handler body for `memory_tree_query_global`. @@ -92,7 +92,7 @@ pub async fn query_global_rpc( config: &Config, req: QueryGlobalRequest, ) -> Result, String> { - let resp = query_global(config, req.window_days) + let resp = query_global(config, req.time_window_days) .await .map_err(|e| format!("query_global: {e}"))?; let n = resp.hits.len(); @@ -410,7 +410,7 @@ mod tests { #[tokio::test] async fn query_global_rpc_returns_response_for_valid_window() { let (_tmp, cfg) = test_config(); - let req = QueryGlobalRequest { window_days: 7 }; + let req = QueryGlobalRequest { time_window_days: 7 }; let outcome = query_global_rpc(&cfg, req).await.unwrap(); assert!(outcome.value.hits.is_empty()); assert_eq!(outcome.logs.len(), 1); diff --git a/src/openhuman/tools/impl/memory/tree/query_global.rs b/src/openhuman/tools/impl/memory/tree/query_global.rs index cc19efa4c..5f8b322c9 100644 --- a/src/openhuman/tools/impl/memory/tree/query_global.rs +++ b/src/openhuman/tools/impl/memory/tree/query_global.rs @@ -14,7 +14,7 @@ impl Tool for MemoryTreeQueryGlobalTool { } fn description(&self) -> &str { - "Return the cross-source global digest for the last `window_days`. \ + "Return the cross-source global digest for the last `time_window_days`. \ The 7-day digest is also pre-loaded into the session context at \ start, so only call this for a different window (e.g. 30 days, \ 1 day) or to refresh after new ingest." @@ -24,13 +24,13 @@ impl Tool for MemoryTreeQueryGlobalTool { json!({ "type": "object", "properties": { - "window_days": { + "time_window_days": { "type": "integer", "minimum": 1, "description": "Lookback window in days (e.g. 7 for weekly recap)." } }, - "required": ["window_days"] + "required": ["time_window_days"] }) } @@ -41,7 +41,7 @@ impl Tool for MemoryTreeQueryGlobalTool { let cfg = config_rpc::load_config_with_timeout() .await .map_err(|e| anyhow::anyhow!("memory_tree_query_global: load config failed: {e}"))?; - let resp = retrieval::query_global(&cfg, req.window_days).await?; + let resp = retrieval::query_global(&cfg, req.time_window_days).await?; log::debug!( "[tool][memory_tree] query_global returning hits={} total={}", resp.hits.len(),