Skip to content

DiskANN v0.53.0

Latest

Choose a tag to compare

@arkrishn94 arkrishn94 released this 28 May 16:01
· 18 commits to main since this release
f8bbf3e

DiskANN v0.53.0 Release Notes

Breaking Changes

An AI generated, human reviewed list of changes is summarized below.

Paged search overhauled — channel-based API (#1078)

PagedSearchState and its 'static-bound pause/resume model have been replaced with an async, channel-based interface. The recommended way to drive paged search is now via a tokio::sync::mpsc channel, with the searcher embedded in an otherwise-'static future. See the rendered RFC for the new shape. Callers wired against PagedSearchState must migrate to the channel API.

Users of paged search via wrapped_async::DiskANNIndex that know their inner futures will never suspend can use the new wrapped_async::DiskANNIndex::paged_search_no_await; this will efficiently run paged searches with minimal synchronization overhead.

DiskANNIndex::flat_search removed (#1076)

DiskANNIndex::flat_search and the IdIterator trait have been removed from the diskann crate. Equivalent functionality lives on the new inherent method DiskIndexSearcher::flat_search in diskann-disk. This unblocks the experimental directions in #1067 and #983.

// Before
diskann_index.flat_search(query, ...)?;

// After
disk_index_searcher.flat_search(query, ...).await?;

DiskIndexSearcher::flat_search now batched (#1097)

The new DiskIndexSearcher::flat_search uses the bulk pq_distances path instead of one-vector-at-a-time Accessor::build_query_computer + evaluate_similarity. Downstream behavior is equivalent but tighter resource bounds apply.

centroid removed from PQ interfaces (#1010)

The dataset-centroid argument has been removed from FixedChunkPQTable construction, populate, and most other PQ APIs. The shift only ever worked for L2 distance and was silently ignored for inner-product / cosine, so passing it was a footgun. When an L2 shift is required, fold it into the PQ pivots instead (the library now does this internally).

// Before
let table = FixedChunkPQTable::new(.., centroid, ..);

// After — drop the centroid argument
let table = FixedChunkPQTable::new(.., ..);

Flat search interface (#983)

A new flat module in diskann adds a provider-agnostic brute-force search surface, mirroring the shape of graph search. Backends implement a single trait, DistancesUnordered<C> (in flat/strategy.rs), which fuses iteration and distance computation, allowing any backend (in-memory, quantized, disk, remote) to plug into a shared algorithm. See the rendered RFC. This is additive but is the new canonical surface — direct ad-hoc flat-search call sites should migrate.

bf_tree extracted into diskann-bftree crate (#1020)

The bf_tree provider has been moved out of diskann-providers (previously at diskann-providers/src/model/graph/provider/async_/bf_tree/) into a new standalone diskann-bftree crate. Along with the move:

  • Switched from PQ to spherical quantization.
  • Dropped dependencies on DeletionCheck, AsDeletionCheck, and RemoveDeletedIdsAndCopy.
  • Simplified generics.

Consumers must update their Cargo.toml to depend on diskann-bftree and update import paths.

direct_distance_impl and inner_product_raw re-exposed (#1081)

direct_distance_impl (free function) and FixedChunkPQTable::inner_product_raw are pub again after being privatized in #1044. Restored to unblock a downstream user. Not breaking in the typical direction — this restores previously available API surface.

MinMax recompress takes a grid-scale parameter (#1109)

The MinMax recompress API now accepts a grid-scale parameter.

New Features

  • SIMD-optimized L2-squared norm (#1107)
  • Significantly faster bitmap computation (#1099)
  • Large speedup on the bitmap construction path used by filtered search.
  • LLVM IR bloat regression check in CI (#1083)
  • CI now flags regressions in generated LLVM IR size, helping catch unintended monomorphization blow-ups.
  • Recall computation fix for under-k groundtruth (#1069)

Full List of Changes

New Contributors

Full Changelog: v0.52.0...v0.53.0