From 1a98d8f9af2c8ed0f0d93a02f12c60ef9849ee1f Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Fri, 15 May 2026 09:45:49 +0200 Subject: [PATCH] fix(sift): disable vector retriever + ML reranking to prevent hang The sentence-transformers/all-MiniLM-L6-v2 embedding model inference hangs indefinitely during sift search, causing: - Warmup to never complete (TTL expired 62+ min ago) - All page-index-hybrid searches to timeout - The search cache to become stale Fix: Restrict warmup and search to bm25+phrase retrievers with no ML reranking. This gives fast lexical results while avoiding the hanging embedding inference path. Also expose --retrievers and --reranking params in sift_search tool so callers can override per-query if needed. Closes #vector-hang-fix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/resources/extensions/sf/code-intelligence.js | 9 +++++++++ src/resources/extensions/sf/tools/sift-search-tool.js | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/resources/extensions/sf/code-intelligence.js b/src/resources/extensions/sf/code-intelligence.js index 7f25911b7..4ac1e3587 100644 --- a/src/resources/extensions/sf/code-intelligence.js +++ b/src/resources/extensions/sf/code-intelligence.js @@ -554,6 +554,11 @@ export function ensureSiftIndexWarmup(projectRoot, prefs, options = {}) { }; } const scope = resolveSiftSearchScope(projectRoot, options.scope ?? "."); + // ── Vector retriever hang workaround ───────────────────────────────────── + // When the embedding model (sentence-transformers/all-MiniLM-L6-v2) hangs + // during inference, page-index-hybrid with vector retriever stalls forever. + // Restrict retrievers to bm25+phrase and disable ML reranking so warmup + // completes without the vector path (#vector-hang-fix). const siftArgs = [ "search", "--json", @@ -565,6 +570,10 @@ export function ensureSiftIndexWarmup(projectRoot, prefs, options = {}) { String( options.retrieverTimeoutMs ?? DEFAULT_SIFT_WARMUP_RETRIEVER_TIMEOUT_MS, ), + "--retrievers", + "bm25,phrase", + "--reranking", + "none", scope, options.query ?? DEFAULT_SIFT_WARMUP_QUERY, ]; diff --git a/src/resources/extensions/sf/tools/sift-search-tool.js b/src/resources/extensions/sf/tools/sift-search-tool.js index f4f541620..86851d5e5 100644 --- a/src/resources/extensions/sf/tools/sift-search-tool.js +++ b/src/resources/extensions/sf/tools/sift-search-tool.js @@ -54,6 +54,15 @@ function buildSiftArgs(params, projectRoot = process.cwd()) { String(params.retrieverTimeoutMs ?? DEFAULT_RETRIEVER_TIMEOUT_MS), ]; + // Allow callers to restrict retrievers (e.g. bm25,phrase) when the + // vector retriever or ML reranking is hanging (#vector-hang-fix). + if (params.retrievers) { + args.push("--retrievers", String(params.retrievers)); + } + if (params.reranking) { + args.push("--reranking", String(params.reranking)); + } + if (params.agent === true) { args.push("--agent"); if (params.agentMode) {