From 0d034f4299ee439c512636f0b14dc830db5f873b Mon Sep 17 00:00:00 2001 From: Julian Lechner Date: Thu, 24 Sep 2026 22:20:30 +0200 Subject: [PATCH] fix(retrieval): invalidate stale model caches --- shared/retrieval/server.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/shared/retrieval/server.py b/shared/retrieval/server.py index 51ae7ec..9a0d89a 100644 --- a/shared/retrieval/server.py +++ b/shared/retrieval/server.py @@ -371,8 +371,9 @@ class Index: self.root = root.resolve() self.data = data.resolve() self.data.mkdir(parents=True, exist_ok=True) - identity = json.dumps([os.path.normcase(str(self.root)), MODEL, EMBEDDING_DIMENSIONS, - INDEX_VERSION, CHUNK_TOKENS, OVERLAP_TOKENS]) + identity = json.dumps([os.path.normcase(str(self.root)), MODEL, MODEL_REVISION, + EMBEDDING_DIMENSIONS, RETRIEVAL_INSTRUCTION, INDEX_VERSION, + CHUNK_TOKENS, OVERLAP_TOKENS]) database = hashlib.sha256(identity.encode()).hexdigest() + ".sqlite3" self.db = sqlite3.connect(self.data / database, check_same_thread=False, timeout=30) self.db.execute("create table if not exists chunks (path text, symbol text, text text, vector blob)") @@ -468,8 +469,12 @@ class Index: def cache_key(self, query: str, top_k: int): files = self.db.execute("select path, digest from files order by path").fetchall() - state = json.dumps(files, separators=(",", ":")) - return hashlib.sha256(f"{top_k}\0{query}\0{state}".encode("utf-8")).hexdigest() + identity = json.dumps([ + query, top_k, files, + RERANKER_MODEL, RERANKER_MODEL_REVISION, RETRIEVAL_INSTRUCTION, + DENSE_CANDIDATES, LEXICAL_CANDIDATES, RERANK_CANDIDATES, FINAL_RESULTS, RRF_K, + ], ensure_ascii=False, separators=(",", ":")) + return hashlib.sha256(identity.encode("utf-8")).hexdigest() def search(self, query: str, top_k: int = FINAL_RESULTS): if not query.strip():