From 7e1770f38439ed58dc9315e2b8ad5b59ae461e47 Mon Sep 17 00:00:00 2001 From: mruwnik Date: Sun, 21 Dec 2025 16:29:28 +0000 Subject: [PATCH] Enable query analysis by default (runs in parallel with HyDE) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Query analysis and HyDE are both LLM-based operations that run in parallel via asyncio.gather, so enabling query analysis adds no extra latency when HyDE is also enabled. Query analysis provides: - Modality detection from query content - Query cleaning and reformulation - Query variants for better recall 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- frontend/src/components/search/SearchForm.tsx | 4 ++-- src/memory/api/search/search.py | 4 +++- src/memory/common/settings.py | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/search/SearchForm.tsx b/frontend/src/components/search/SearchForm.tsx index 4eeae93..2711e67 100644 --- a/frontend/src/components/search/SearchForm.tsx +++ b/frontend/src/components/search/SearchForm.tsx @@ -57,11 +57,11 @@ export const SearchForm = ({ isLoading, onSearch }: SearchFormProps) => { const [dynamicFilters, setDynamicFilters] = useState>({}) const [limit, setLimit] = useState(10) // Search enhancement options - initialize to match server defaults - // Server defaults: BM25=true, HyDE=true, Reranking=true, QueryAnalysis=false + // All enabled by default (query analysis runs in parallel with HyDE, no extra latency) const [useBm25, setUseBm25] = useState(true) const [useHyde, setUseHyde] = useState(true) const [useReranking, setUseReranking] = useState(true) - const [useQueryAnalysis, setUseQueryAnalysis] = useState(false) + const [useQueryAnalysis, setUseQueryAnalysis] = useState(true) const { getMetadataSchemas, getTags } = useMCP() useEffect(() => { diff --git a/src/memory/api/search/search.py b/src/memory/api/search/search.py index ff9a3e0..06c931c 100644 --- a/src/memory/api/search/search.py +++ b/src/memory/api/search/search.py @@ -470,7 +470,9 @@ async def search_chunks( else settings.ENABLE_RERANKING ) use_query_analysis = ( - config.useQueryAnalysis if config.useQueryAnalysis is not None else False + config.useQueryAnalysis + if config.useQueryAnalysis is not None + else settings.ENABLE_QUERY_ANALYSIS ) internal_limit = limit * CANDIDATE_MULTIPLIER diff --git a/src/memory/common/settings.py b/src/memory/common/settings.py index 6eda554..53d5acf 100644 --- a/src/memory/common/settings.py +++ b/src/memory/common/settings.py @@ -178,6 +178,7 @@ ENABLE_BM25_SEARCH = boolean_env("ENABLE_BM25_SEARCH", True) ENABLE_SEARCH_SCORING = boolean_env("ENABLE_SEARCH_SCORING", True) ENABLE_HYDE_EXPANSION = boolean_env("ENABLE_HYDE_EXPANSION", True) HYDE_TIMEOUT = float(os.getenv("HYDE_TIMEOUT", "3.0")) +ENABLE_QUERY_ANALYSIS = boolean_env("ENABLE_QUERY_ANALYSIS", True) # Runs in parallel with HyDE ENABLE_RERANKING = boolean_env("ENABLE_RERANKING", True) RERANK_MODEL = os.getenv("RERANK_MODEL", "rerank-2-lite") MAX_PREVIEW_LENGTH = int(os.getenv("MAX_PREVIEW_LENGTH", DEFAULT_CHUNK_TOKENS * 16))