From 0426e61cea54eca41e7821a4c31f7c75d143e0bb Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Sat, 2 May 2026 23:49:18 +0200 Subject: [PATCH] fix(sf): getRelevantMemoriesRanked pool size never less than limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pool was Math.min(50, limit * 5). For default limit=10 this gives 50 (intended 5× oversample for rerank). But for limit=100 it gives 50 — caller asking for 100 results would silently get at most 50. Now: max(limit, limit * 5), capped at 200 to bound rerank latency on huge requests. Default behavior unchanged for limit ≤ 10; large requests now work correctly. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/resources/extensions/sf/memory-store.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/resources/extensions/sf/memory-store.ts b/src/resources/extensions/sf/memory-store.ts index 99e69b16d..af8ea8f56 100644 --- a/src/resources/extensions/sf/memory-store.ts +++ b/src/resources/extensions/sf/memory-store.ts @@ -156,7 +156,12 @@ export async function getRelevantMemoriesRanked( limit = 10, ): Promise { if (!isDbAvailable()) return []; - const pool = getActiveMemoriesRanked(Math.min(50, limit * 5)); + // Pool sizing: 5× oversample for the embedding rerank to be meaningful, + // but never less than `limit` itself — otherwise asking for limit=100 + // would silently cap at pool=50 and return only 50 results. Hard ceiling + // at 200 to bound rerank latency on huge requests. + const poolSize = Math.min(200, Math.max(limit, limit * 5)); + const pool = getActiveMemoriesRanked(poolSize); if (pool.length === 0 || !query.trim()) { return pool.slice(0, limit); }