Skip to content

v0.5.0

Latest

Choose a tag to compare

@lukaesch lukaesch released this 09 Feb 21:56

What's New

Composable Incremental Index

IncrementalDiskANN now supports filtered search (labels) and quantized search (F16/Int8/PQ), independently or combined on a single index — without code duplication.

New API

  • build_with_labels() — incremental + filtered
  • build_quantized_f16() / build_quantized_int8() / build_quantized_pq() — incremental + quantized
  • build_full() — incremental + filtered + quantized (all three)
  • search_filtered() / search_filtered_with_dists() — label-based filtered search on incremental indexes
  • add_vectors_with_labels() — add labeled vectors without rebuilding
  • IncrementalQuantizedConfig, QuantizerKind — configuration types

Internal Architecture

  • GraphIndex trait — internal abstraction for searchable graph indexes, enabling code reuse across all index types
  • UnifiedView adapter — presents base + delta layer as a single graph for multi-seed beam search
  • Multi-seed beam_search — explores disconnected base/delta subgraphs in a single pass
  • Extracted free functionsfiltered_search() and quantized_search() shared by all index types

Serialization

  • New incremental format with INCR magic number and versioning
  • Full backward compatibility with v0.4 format (auto-detected on load)
  • Labels and quantizer state survive to_bytes() / from_bytes() roundtrips

Bug Fixes

  • Tombstone filtering now integrated into beam search filter (not post-hoc), returning correct k results
  • Fixed lock ordering in add_vectors / add_vectors_with_labels to prevent label/vector misalignment under concurrency
  • stats().total_live uses saturating subtraction to prevent underflow

No Breaking Changes

All existing public APIs remain unchanged. All 138 tests pass (75 unit + 63 integration).

Full Changelog

v0.4.0...v0.5.0