8 variants cover every retrieval × reranker pair. 6 more variants layer HyDE, multi-query,
or contextual compression onto the strongest baseline (hybrid_rrf), each with
and without the reranker — isolating each transform's individual effect.
(RAGAS metric average + DeepEval metric average) / 2 — a single number for
at-a-glance comparison, with the full metric breakdown always available in the table.
hybrid_rrf + HyDE or multi-query| Variant | Config | RAGAS faith. | RAGAS relev. | RAGAS ctx-prec. | RAGAS ctx-recall | DeepEval faith. | DeepEval relev. | DE pass% | Retrieval ms | Generate ms | Composite |
|---|
hybrid_rrf baseline — identically whether or not a reranker was also enabled.
That's a bigger single effect than switching retrieval mode or adding a reranker at all.
| Retrieval mode | No reranker | Cross-encoder | Δ |
|---|---|---|---|
| bm25 | 0.855 | 0.864 | +0.009 |
| dense | 0.853 | 0.856 | +0.004 |
| hybrid_rrf | 0.864 | 0.864 | +0.000 |
| hybrid_weighted | 0.850 | 0.837 | −0.013 |
hybrid_weighted specifically it
actively hurt — most likely by reordering a couple of fusion-scored candidates in a way that
didn't match reference expectations.
−0.013 composite with no reranker, +0.002 with the cross-encoder. At this corpus size the reranker already narrows to 5 chunks — there's little left to trim, so compression mostly adds an extra embedding-similarity pass for no benefit. It would likely earn its keep on a much larger, noisier corpus.
Avg 2.2ms vs. 53–125ms for embedding-based modes, since it's pure local lexical scoring with no embedding call in the loop — yet it scored within 0.01 composite of the best embedding-based baseline. On a keyword-rich corpus, BM25 is a legitimately strong default for latency-sensitive deployments, not just a fallback.
[19]) instead of the instructed
[chunk_id] format, and the extractor only recognizes exact chunk ids.
hybrid_rrf retrieval + HyDE query transform, reranker optional. Tied for best composite (0.881) with and without the reranker — meaning the reranker adds no measurable value once HyDE is in place, so skip it and save the latency.
If retrieval latency matters more than the last ~2% of quality: bm25, no reranker, no query transform is a strong lower-cost fallback (0.855 composite, a fraction of the latency, zero extra LLM calls).
[chunk_id] format more forcefully.
Every score in this presentation came from a real rag package execution — real
RAGAS calls, real DeepEval calls, real gpt-4o-mini generations. No fixture data,
no mocked judges.