Breaking changes since 0.53.0
Graph search: DataProvider contract collapsed into SearchAccessor (#1067)
Accessor, BuildQueryComputer, ExpandBeam, SearchExt, and AsNeighbor/NeighborAccessor are merged into a single SearchAccessor trait. The indexing layer no longer has a notion of element types.
- Upgrade: Implement
SearchAccessorinstead of the removed traits; useSearchAccessor::expand_beamfor search.SearchStrategy/InsertStrategy/DefaultSearchStrategy/DefaultPostProcessornow carry a lifetime, and the query is passed intosearch_accessor(accessors may now borrow the query).SearchPostProcessno longer takes aQueryComputer(only requiresHasId). The blanketworkingset::Fillimpl forworkingset::Mapwas removed — implementFillyourself, or use the new synchronousMap::fillhelper.
Insert/prune: consolidated into PruneAccessor (#1138, follow-up to #1067)
Removed DelegateNeighbor, AsNeighbor, AsNeighborMut, HasElementRef, BuildDistanceComputer, workingset::Fill, and workingset::AsWorkingSet, folded into a single PruneAccessor trait.
- Upgrade: Implement
PruneAccessor(providesneighbors()for neighbor delegation andfill()returning both aViewand the distance computer). Noteneighbors()now borrows&mut self.
VectorId: removed scalar conversion traits/bounds (#1145, #1133)
Dropped VectorIdTryFrom, TryIntoVectorId, methods vector_id_try_from/try_into_vector_id, helpers vecid_from_u32/vecid_from_usize, and IdConversionError/ErrorToVectorId. Internal IDs no longer need to convert to/from usize.
- Upgrade: Where
usizeconversion is still required (e.g. roaring-treemap keys indiskann-label-filter), add an explicitIntoUsizebound (now required onRoaringAttributeStore,InlineBetaStrategy,QueryBitmapEvaluator/BitmapFilter).DiskANNIndex::prune_rangenow takesimpl IntoIterator<Item = DP::InternalId> + Sendinstead ofRange<DP::InternalId>— construct the iterator for your ID type at the call site.SimpleNeighborProviderAsyncandbftree::VectorProviderare no longer generic over the ID type (fixed tou32).
DiskIndexReader: dropped vestigial VectorType generic (#1161)
- Upgrade: Replace
DiskIndexReader::<T>::new(...)withDiskIndexReader::new(...).
Filtered search renames (#1149)
MultihopSearch → MultihopFilterSearch; benchmark config phases MultiHopSearchPhase/InlineSearchPhase → MultihopFilterSearchPhase/InlineFilterSearchPhase.
- Upgrade: Update references to the new names.
diskann-garnet FFI: BIN/Q8 quantizers, bumped to 2.0.0 (#1050)
Vectors are now stored as Poly<[u8], AlignOfEight>; a type-erased GarnetQuantizer trait replaces index/provider type parameterization. New FFI: insert() returns a success/training-ready flag, plus build_quant_table() and backfill_quant_vectors() for caller-driven async training/backfill. Accessor renamed to DynamicAccessor; the FSM is now lockable and gained visit_used().
- Upgrade: Garnet consumers must adopt the new 2.0.0 FFI surface (handle the new
insert()return flag and drivebuild_quant_table/backfill_quant_vectors).
Full list of changes.
- Multi-vector MaxSim benchmark with BYOTE factory by @suri-kumkaran in #1027
- BufferedFnPtr and take
UnalignedSlice. by @hildebrandmw in #1113 - [diskann-wide] Test unaligned loads properly. by @hildebrandmw in #1110
- [diskann-garnet] Implement BIN and Q8 quantizers by @metajack in #1050
- Right-size tile conversion buffer in
tiled_reduceby @suri-kumkaran in #1123 - Add JobId labels to disk benchmark CI runners by @arrayka in #1120
- nightly: remove stale
bf_treefeature from DISKANN_FEATURES by @Copilot in #1112 - Add a small streaming runbook and groundtruth to test_data by @magdalendobson in #1127
- fix: redirect disk-index benchmark build artifacts to target/tmp by @arrayka in #1132
- Remove
try_into_vector_idconversion in prune. by @hildebrandmw in #1133 - [diskann-garnet] Fix handling of missing quant vectors during delete() by @metajack in #1130
- Simplify the
DataProvidercontract for graph search by @hildebrandmw in #1067 - Add Documentation DO/DON'T section in
agents.mdby @suri-kumkaran in #1103 - Fix quantizer detection in train_quantizer() and set_element() by @metajack in #1140
- add bf_tree benchmark infrastructure by @JordanMaples in #1106
- [RFC] What filtered search algorithms should DiskANN support? by @magdalendobson in #1128
- Inline filtered search with adaptive L by @magdalendobson in #1131
- [benchmark] Spherical exhaustive benchmark threadpool bug by @arkrishn94 in #1148
- Consolidate insert into
PruneAccessorby @hildebrandmw in #1138 - Rename MultihopSearch to MultihopFilterSearch by @magdalendobson in #1149
- [bftree] Bug with writing length to neighbor list by @arkrishn94 in #1150
- Fix handling of deletes and ID minting during concurrent insert/delete by @metajack in #1146
- [VectorId] Remove Id conversion bounds and traits by @arkrishn94 in #1145
- Remove vestigial VectorType parameter from DiskIndexReader by @doliawu in #1161
- change documentation link to repository link by @harsha-simhadri in #1156
- [diskann-garnet] Fix handling of start points on fresh indexes by @metajack in #1167
- Bump version to 0.54.0 by @arkrishn94 in #1165
Full Changelog: v0.53.0...v0.54.0