lmr
An offline research assistant that shows its work.
lmr is an offline research assistant that shows its work. You ask a question about 297 Wikipedia articles; BM25 keyword search finds the paragraphs, a 17M reranker decides which of them fit a 1,000-token budget, and a local 1.5B model writes the answer. It answers in about five seconds once warm (about 12 on a cold start) on a desktop CPU with no network, and it ships with a command line, a local web UI and a 19-page manual. The code is public on GitHub under MIT, and the live site has the manual and a recorded packing explorer.
The finding is why I built it this way. Search was already good: BM25 found 70 of the 73 paragraphs the dev questions needed, 96%. The evidence was lost afterwards, because only 54 of those reached the model. The 17M reranker found nothing new. It reordered what BM25 had, acting as an allocator, and 13 points more of the needed evidence reached the model (pooled across 195 required paragraphs, non-overlapping 95% intervals). The 68M reranker added one paragraph for 3.9 times the weights. The generator is now the bottleneck: even with perfect evidence the 1.5B model gets 14.6% exact match.
It was built under a strict protocol, run by AI agents with me setting the rules. Thresholds and kill conditions were preregistered before any code, a sealed test set was kept outside the repo, and eight independent freeze reviews were held. Seven sent the work back for repairs. 518 tests sit behind a ten-stage freeze gate. Every number in the manual is read from a file in the repo, not from an agent's summary.
The sealed evaluation store, 116 private questions, went missing on 2026-10-04, found during final verification. I could not establish the cause, I did not reconstruct or reseal it, and it was never scored, so no result depends on it. The gate reported it absent rather than passing, which is what it was built to do.
It began as an entry idea for the poidh offline-research bounty #31. Instead of building an app first, I asked whether retrieval quality matters on a phone-sized model. It does not, but packing does. Everything here was measured on a desktop; there is no Android build.
It started as an idea for an open bounty for an offline Android research app. It is not an entry yet: it meets the size, offline and open-source requirements, but it runs on a Linux desktop CPU, not a phone. The Android path (llama.cpp on arm64, a smaller reranker, a native app) is mapped out, not built.