{"record":{"id":"a528372a8c1f2ac8","repo":"tinyhumansai/openhuman","slug":"memory-hybrid-search-query-cannot-be-empty","errorCode":null,"errorMessage":"memory_hybrid_search: query cannot be empty","messagePattern":"memory_hybrid_search: query cannot be empty","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/search/hybrid_search.rs","lineNumber":101,"sourceCode":"                    \"type\": \"integer\",\n                    \"minimum\": 1,\n                    \"maximum\": 50,\n                    \"description\": \"Max results (default 10).\"\n                },\n                \"include_breakdown\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Show per-signal score breakdown for each result (default false).\"\n                }\n            }\n        })\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        let parsed: Args = serde_json::from_value(args)\n            .map_err(|e| anyhow::anyhow!(\"invalid arguments for memory_hybrid_search: {e}\"))?;\n\n        if parsed.query.trim().is_empty() {\n            return Err(anyhow::anyhow!(\n                \"memory_hybrid_search: query cannot be empty\"\n            ));\n        }\n        if parsed.namespace.trim().is_empty() {\n            return Err(anyhow::anyhow!(\n                \"memory_hybrid_search: namespace cannot be empty\"\n            ));\n        }\n\n        let profile = WeightProfile::by_name(&parsed.mode).ok_or_else(|| {\n            log::warn!(\n                \"[tool][memory_hybrid_search] rejected unknown mode={}\",\n                parsed.mode\n            );\n            anyhow::anyhow!(\n                \"memory_hybrid_search: unknown mode '{}'; expected balanced, semantic, lexical, or graph_first\",\n                parsed.mode\n            )","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/search/hybrid_search.rs#L83-L119","documentation":"Empty-value guard in the memory_hybrid_search tool's execute: the deserialized `query` was blank/empty. The hybrid search fuses vector, lexical and graph signals, none of which are meaningful for an empty query, so it is refused before any retrieval; supply a non-empty query string.","triggerScenarios":"Thrown at src/openhuman/memory/tools/search/hybrid_search.rs:101 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a non-blank search query","Avoid templated prompts that can emit empty queries"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}