Product Pricing Security & data Research Publications Blog About Careers Alpha Talk to us Download alpha
Research Retrieval · 28 April 2026 · 8 min read

Retrieval quality against index size for on-device browsing history

A semantic index over everything you have read is only useful if it fits on your laptop and answers fast. We measured the trade-off across seven index configurations and found the curve bends much earlier than we expected.

ReportDBR-2026-01
Versionv1.0
AreaOn-device retrieval

Published 28 April 2026

Abstract

We evaluated seven on-device index configurations over a 14-month synthetic browsing corpus of 41,000 documents, measuring recall@10, query latency, index size, and incremental update cost. A 384-dimension embedding with product quantisation and a chunk-level inverted index achieved 91% of the recall of an unquantised 1024-dimension baseline at 11% of the storage. Beyond roughly 900 MB of index, additional storage produced negligible recall gains on realistic browsing queries, because the binding constraint shifts from representation quality to chunking strategy.

11%of baseline storage for 91% of baseline recall
~900 MBindex size beyond which recall gains flatten
38 msmedian query latency at the recommended configuration

The Dart Agent's core claim is that it answers from what you have actually read. That requires an index over your browsing history, and it has to live on your machine. Which turns a research problem into an engineering one: how good can retrieval be inside a storage and latency budget a laptop will tolerate?

We built a 14-month synthetic browsing corpus — 41,000 documents, with a realistic mix of long articles, documentation, short pages, and PDFs — and a set of 1,200 queries written to resemble what people actually ask an agent about their own history. Then we evaluated seven index configurations against it.

The curve bends early

02550751000.5 GB0.8 GB0.9 GB1.4 GB3.1 GB4.1 GB8.2 GB
Recall@10 against index size across seven configurations. The knee sits far to the left of where the storage budget would allow.

The unquantised 1024-dimension baseline is the ceiling, and it costs 8.2 GB for our corpus — which for a 14-month history is more than most people will accept for a browser feature. The interesting result is how quickly the curve approaches it. A 384-dimension embedding with product quantisation reaches 91% of baseline recall at 0.9 GB. Doubling that storage to 1.8 GB recovers only a further three points.

ConfigurationIndex sizeRecall@10Query p50Update cost
1024-d, FP32, flat8.2 GB0.81310 mshigh
1024-d, FP16, HNSW4.1 GB0.8062 mshigh
768-d, FP16, HNSW3.1 GB0.7854 msmedium
768-d, PQ, HNSW1.4 GB0.7644 msmedium
384-d, PQ, HNSW + inverted0.9 GB0.7438 mslow
384-d, PQ, HNSW0.8 GB0.6936 mslow
256-d, PQ, HNSW0.5 GB0.5831 mslow
Recall@10 measured against human-labelled relevance over 1,200 queries. Update cost is the amortised work to index one new page.

The row we recommend is not the highest-recall row. It is the one where a hybrid approach — dense vectors for semantic similarity plus a chunk-level inverted index for exact terms — recovers five recall points over dense-only at almost no storage cost. Browsing queries turn out to contain a lot of exact strings: error messages, function names, product SKUs, people's names. Dense retrieval handles those poorly and an inverted index handles them almost for free.

Why more storage stops helping

Past roughly 900 MB, the errors that remain are not representation errors. We hand-inspected 200 failures from the best configuration and found that 71% of them were chunking failures: the relevant passage spanned a boundary, or a table was split from its caption, or a document's structure meant the answer lived in a section whose surrounding text did not resemble the query at all.

0%20%40%60%80%Chunk boundary split71%Query/document vocabulary gap14%Embedding representation9%Index recall ceiling6%
Failure attribution for the recommended configuration. Better embeddings address the smallest slice.

This reframes where effort should go. Once you are past the knee of the curve, buying a larger embedding model improves the smallest category of failure. Improving how documents are split — respecting headings, keeping tables with captions, overlapping windows across boundaries — addresses the largest. We spent the following quarter on chunking rather than embeddings, and it was the right call by a wide margin.

We were about to buy a bigger embedding model. The failure analysis said the bottleneck was three lines of splitting logic. Measuring the failures rather than the successes saved us a quarter.

Latency and the update path

02550751005k10k20k30k40k60kMedian latency95th percentile
Median and 95th-percentile query latency as the corpus grows. The recommended configuration stays inside our 60 ms budget through 40,000 documents.

Query latency matters less than people assume, because 38 ms is imperceptible next to the inference that follows it. The number that actually constrains the design is incremental update cost. Every page you visit has to be chunked, embedded, and inserted while you are using the browser, on the same hardware that is rendering it.

At the recommended configuration, indexing a typical article costs about 240 ms of background compute, which we schedule during idle periods and cap so it never competes with the compositor. The 1024-dimension configurations cost roughly 1.4 s per page — and a person browsing quickly can outrun that, which produces an index that is permanently behind and a browser that feels warm. That failure mode does not show up in a recall benchmark at all.

Method

Corpus41,000 documents · 14 months synthetic history · mixed article, docs, PDF
Queries1,200 · written to resemble agent questions about one’s own history
RelevanceHuman-labelled, 3 annotators, adjudicated disagreements · α = 0.81
HardwareM3 Pro 18 GB · measurements taken with the browser under load
EmbeddingsFour open models at 256/384/768/1024 dimensions, identical training recipe

Limitations

A synthetic corpus is the weakest part of this study. We built it to resemble real browsing, but we generated it, and a real 14-month history has structure — revisits, bursts around projects, long dormant stretches — that we approximated rather than reproduced. Our queries were written by people who knew the corpus, which almost certainly makes them easier than genuine questions about a history you half remember. Recall@10 is also a proxy: what matters is whether the agent's final answer was right, and a retrieval miss is sometimes recoverable while a retrieval hit is sometimes wasted. We are working on an end-to-end measure and expect it to be less flattering.

The corpus generator, query set, and evaluation harness are open. If you have a real browsing history you would be willing to evaluate against locally — nothing leaves your machine, the harness reports aggregate scores only — we would value the result: research@dartbrowser.com.

Dense retrieval [1] and the approximate-nearest-neighbour structures that make it practical [2, 3, 4] are mature. BEIR [6] established that retrieval quality generalises poorly across domains, which is the finding most relevant to us: personal browsing history is a domain with no public benchmark and unusual properties, including heavy revisitation and a long tail of near-duplicates. Our failure analysis also echoes a point made repeatedly in the hybrid-retrieval literature [5] — that lexical matching remains necessary for exact strings — and quantifies how much it is worth in this specific setting.

Artefacts

Everything below is published or available on request. A number nobody can reproduce is an advertisement, not a result.

corpusdart-history-corpus41,000 synthetic documents · generator included · MIT
data1,200 labelled queriesHuman relevance judgements · CC BY 4.0
harnessLocal evaluation harnessRuns against your own history, reports aggregates only

References

  1. Karpukhin, V., Oğuz, B., Min, S., et al. (2020). Dense Passage Retrieval for Open-Domain Question Answering. EMNLP.
  2. Jégou, H., Douze, M., & Schmid, C. (2011). Product Quantization for Nearest Neighbor Search. IEEE TPAMI, 33(1).
  3. Malkov, Y. A., & Yashunin, D. A. (2018). Efficient and Robust Approximate Nearest Neighbor Search Using Hierarchical Navigable Small World Graphs. IEEE TPAMI.
  4. Johnson, J., Douze, M., & Jégou, H. (2019). Billion-scale Similarity Search with GPUs. IEEE Big Data.
  5. Robertson, S., & Zaragoza, H. (2009). The Probabilistic Relevance Framework: BM25 and Beyond. Foundations and Trends in IR.
  6. Thakur, N., Reimers, N., Rücklé, A., Srivastava, A., & Gurevych, I. (2021). BEIR: A Heterogeneous Benchmark for Zero-shot Evaluation of Information Retrieval Models. NeurIPS Datasets & Benchmarks.
Cite this work

Bhardwaj, M. (2026). Retrieval quality against index size for on-device browsing history. Dart Browser Research, DBR-2026-01.

Mohit Bhardwaj

Member of Technical Staff · Dart Browser

Mohit works on the inference and retrieval layer of the Dart Agent, where he is responsible for on-device model integration, the semantic index, and the benchmark harness the team uses to decide what ships. He writes up the measurements that changed our minds.