Build1 distinct publisher3 min readPublished
The one question this on-prem Chinese RAG always got wrong had its answer passage sitting at rank 83 in raw vector similarity, which made depth 100 the only setting worth testing, and when it ran the reranker still left that passage below the top five.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
At depth 30 the two sets line up exactly, and that is what makes the shortcut tempting. One question was wrong, and exactly one question's answer passage fell outside the candidate set [1][4]. A passage the reranker never sees cannot be promoted, so the out-of-candidates set is always a subset of the miss set, and when both have size one they are the same set. The author of the dev.to writeup drew the conclusion that follows: the reranker promotes whatever it is handed, so depth is the bottleneck [16]. That inference is valid only while the two sizes match. Depth 100 empties the out-of-candidates set and leaves the miss set at one, and the conclusion dies with it [6].
Now the cost side. A reranker here is a cross-encoder, so handing it 100 candidates means 100 query-passage relevance computations; the bill is linear in candidate count [8]. The measured numbers are worse than linear. Per question, depth 30 took 6.8 seconds and depth 100 took 37.7 [7]. Scaling the smaller figure by 100/30 predicts 22.7 seconds, so the run came in about 1.66 times over that prediction [3]. Fit both points to a fixed overhead plus a per-candidate cost and you get 0.441 seconds per candidate and an overhead of minus 6.4 seconds [5], which no profiler will sell you. Two data points is not a model, but on this CPU ONNX path the marginal candidate got dearer rather than cheaper. Across 25 questions, depth 100 spent roughly 12.9 extra minutes of wall clock [2] for no additional correct answers [6]. The plan's cost line said "zero cost, zero VRAM"; the VRAM half holds [9].
The benchmark that justified the sweep is a public set of 3,493 traditional-Chinese questions where a weak embedding plus a reranker reaches 98%+ at k=100, beating every single-stage retriever [13]. For that number to transfer, your reranker has to be willing to pull a candidate the embedding ranked 83rd into the top few. The one in this stack is bge-reranker-base, a 2023 base-tier model, and it saw that passage and left it outside the top 5 [6][11]. The plan also carried a SIGIR 2025 warning about over-reranking degrading results [14]; the failure mode that actually showed up was not degradation but flat accuracy at 5.5 times the latency [7].
The named fix does not install. The to-do said move to bge-reranker-v2-m3, billed as +1.3GB, same architecture, same API, no prompt changes [10]. fastembed's cross-encoder list has six models and v2-m3 is not among them; only two are multilingual, the incumbent and jinaai/jina-reranker-v2-base-multilingual at 1.11 GB [11]. Getting v2-m3 means moving the whole service off ONNX onto PyTorch [12], which is not a config change.
One caution on resolution. The measured table is 25 questions, where a single question is 4 percentage points [18], while the sweep plan describes 29 questions per configuration [2]. At that size the ceiling column is a bound, not an accuracy estimate. What the probe buys is knowing which of the two conditions you are failing: seeing the passage at all, or getting it ranked [17].
Ranked by verification strength, evidence, and original report placement.
Running depth 100 falsified the author's conclusion: the correct answer ranks 83rd, so it entered the 100 candidates and the reranker did score it, but the reranker then ranked it outside the top 5, producing zero extra correct answers.
The previous evaluation round scored 96%, which is 24 out of 25 questions, and the single miss was always the same question.
Without the probe the author would have swept top-k = 10 / 20 / 30 / 50 / 80 / 100: six configurations, 29 questions each, tens of seconds per question, about an hour.
The probe is one embedding call and one round of cosine similarity that computes where the passage containing the correct answer ranks in raw vector similarity, with no reranker and no full pipeline, and takes ten seconds.
Probe results: at depth 10 the correct answer was present in candidates for 23/25 questions (ceiling 92%); at depth 30, 24/25 (ceiling 96%); at depth 50 and 80 still 24/25, because that question's passage sits at rank 83, an identical ceiling to depth 30; at depth 100, 25/25 (ceiling 100%).
The ceilings matched the measured accuracy: depth 10's ceiling of 92% against a measured 92%, and depth 30's ceiling of 96% against a measured 96%.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 1, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
A .keras config can carry a marshalled Python code object, and load_model runs it1 distinct publisher
build
A RAG pipeline injected itself: no attacker, just a book about LLMs in the index1 distinct publisher
build
1,500 submissions in 14 days: what a 12th-place GPU kernel says about agent loops1 distinct publisher
build
PyInstaller exits zero, then the real work starts: notarization traps that report success1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
First-hand, specific, unrepeatable
Rank 83, 24 of 25, 6.8 seconds against 37.7 — every figure comes from one practitioner's runs on a client corpus no reader can open, and there is no second party anywhere in this reporting. What lifts it above an anecdote is the shape of the argument: the ceiling predicted 92% and 96% before the scores were consulted, and then the depth-100 run contradicted the author's own published inference and he printed that too. What holds it down is the borrowed evidence, a 3,493-question benchmark and a SIGIR 2025 paper cited without titles, plus timings given with no hardware behind them.
One stack, one client, 25 questions
This is a single engagement: one on-prem Chinese knowledge base, one CPU inference path through fastembed, one 25-question evaluation set, and one reranker swap that got reverted. Nobody else is shown running the cosine probe, and no user counts, deployment scale or third-party uptake appear anywhere in this reporting. The only broader usage signal is negative and useful — what fastembed actually ships constrained which reranker could be adopted at all.
Mostly deflationary, with two soft spots
A headline saying both knobs went to maximum and nothing improved is not a hype problem, and the piece hedges its own advice ('only might help') before the reader can object. The small positive comes from reach exceeding grip in two places: a universal opening instruction — spend ten seconds on this first — generalised from one failing question in one corpus, and a confident 'cost is linear in the candidate count' that the author's own pair of timings outruns by two-thirds. The probe's headline achievement, six configurations reduced to one, is the best-supported thing here.
Billable work, published under his own name
The material is client consulting written up first as an internal handoff and then as a public post, which rewards looking rigorous — and the author's stated fear on the client's behalf, fabrication, is also the thing his preferred abstain gate solves. Against that, the recommendations point away from spending: keep the 2023 incumbent, do not upgrade the model, do not raise k. No vendor relationship, sponsorship or affiliation with BGE, Jina or fastembed is disclosed or implied, and the commercially sensitive part — whether the K=1 column decides if the client buys a GPU — is stated out loud rather than buried.
Trust the mechanism, not the magnitudes
Two different reliabilities are tangled together here. The mechanism — a passage the reranker never sees cannot be answered, and one it does see may still be ranked away — is sturdy and internally demonstrated. The numbers attached to it are single-source, unauditable, and in the latency case internally inconsistent with the model invoked to explain them. Treat the probe as a method you can try tomorrow and the 92/96/100 ladder as one system's fingerprint.