Skip to content

Recall quality on a real 18k store: honest measurements, early experiments, looking for the lever that moves it drastically #85

Description

@Marsu6996

We are measuring and trying to drastically improve recall quality on a real production store (18k records, French, custom Solon-large HTTP embedding provider), against a 63-query human-labelled gold set evaluated through the daemon path. Opening this issue to share findings as we go and to discuss directions — this is very much work in progress.

What we measured

  • Baseline (v2.5.1, exact index): top-1 12.7%, top-5 25.4%. The move from ANN to the exact index changed almost nothing on this benchmark — retrieval approximation was not the bottleneck.
  • ~90% of top-5 hits were raw episodic turns, even when curated doc:* chunks (ingested via upload/teach) containing the answer sat just below the cutoff: ranking does not distinguish knowledge from conversation.
  • The vocabulary gap dominates failures: a query phrased with words absent from the stored text ("versionnage" vs a record talking about semver/release/bump) leaves the target stranded at deep ranks.

What we tried so far (branches on our fork)

  • Source-aware weighting (m1-source-weighting): bounded soft boost of doc:*/semantic-tier records at final ranking, never a filter. Factor swept on the gold set; 1.05 optimal.
  • IDF-gated hybrid lexical⊕semantic (m2-hybrid-lexical): extends the in-tree BM25 LexicalIndex with FR tokenisation + deterministic synonyms, fires only on rare tokens (IDF ≥ 4), RRF fusion; RRF-k swept, 240 optimal.

Honest outcome: these two combined only moved top-1 from 12.7% to 14.3% (top-5 did better: 25.4% → 34.9%, and six previously unfindable queries now surface). That is far from what we consider acceptable — our target is near-assured top-5 recall.

Where we are heading

We are actively working on this and looking for the lever that moves the score drastically, not incrementally. Candidates on our list: a much larger gold set to understand the remaining failures, chunking/section-aware ingestion, and a measured reranker. We are open to any and all ideas — engine-side, ingestion-side, evaluation-side, or approaches we have not considered at all. If you have thoughts on where the engine itself could help most, or results from your own stores, we are very interested.

🤖 Designed by Marsu — Refined by Claude.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions