diff --git a/web/lib/retrieval/hybrid.ts b/web/lib/retrieval/hybrid.ts index b157868..df16bbb 100644 --- a/web/lib/retrieval/hybrid.ts +++ b/web/lib/retrieval/hybrid.ts @@ -85,25 +85,32 @@ export async function hybridSearch(opts: HybridSearchOptions): Promise { - if (lang === "en") return r.content_en || r.content_pt || ""; - return r.content_pt || r.content_en || ""; - }); + const candidateTexts = rows.map((r) => + lang === "en" ? r.content_en || r.content_pt || "" : r.content_pt || r.content_en || "", + ); let scores: number[] = []; try { scores = await rerank(query, candidateTexts); } catch { - // Reranker unavailable — return RRF order + // Reranker unavailable — fall back to RRF order (no relevance filter possible) return rows.slice(0, top_k); } - const reranked = rows.map((r, i) => ({ ...r, rerank_score: scores[i] })); - reranked.sort((a, b) => (b.rerank_score ?? 0) - (a.rerank_score ?? 0)); - return reranked.slice(0, top_k); + return rows + .map((r, i) => ({ ...r, rerank_score: scores[i] ?? 0 })) + .filter((r) => (r.rerank_score ?? 0) >= RELEVANCE_MIN) + .sort((a, b) => (b.rerank_score ?? 0) - (a.rerank_score ?? 0)) + .slice(0, top_k); } /** Quick chunk lookup by chunk_id (no embedding). For citation expansion. */