What
Contribute Rust bindings for the IVF-SQ (scalar quantization) index to rapidsai/cuvs, mirroring the wrapper pattern from our v26.06.00 contributions ("feat(rust): add serialize/deserialize support for CAGRA index", "feat(rust): add search_with_filter to CAGRA Index").
Why
cuVS v26.06.00 shipped IVF-SQ as C++ and C APIs only ("IVF-SQ C++ API", "IVF-SQ C API") — no Rust surface. Scalar quantization stores vectors at ~4x smaller than f32. For cqs that matters as slots multiply: every A/B slot carries a full per-model vector index, and multi-slot experiments are the standard retune workflow.
Scope (upstream, in cuvs Rust crate)
- Wrap the IVF-SQ C API: index build params, build, search, serialize/deserialize
- Follow the existing
cagra module structure in the Rust crate (we know this surface — we wrote parts of it)
- Tests mirroring the CAGRA Rust test layout
cqs-side follow-up (separate, after upstream merge + release)
- Optional
IndexBackend impl behind cuda-index, selectable for memory-constrained slots
- A/B recall-vs-memory on the v3.v2 fixture before any default change
Prereqs
- We must be on official cuvs 26.6 first (fork retirement in progress)
- Conda
libcuvs and crate pin move in lockstep (RMM → CCCL MR migration in 26.06 makes ABI matching non-negotiable)
What
Contribute Rust bindings for the IVF-SQ (scalar quantization) index to rapidsai/cuvs, mirroring the wrapper pattern from our v26.06.00 contributions ("feat(rust): add serialize/deserialize support for CAGRA index", "feat(rust): add search_with_filter to CAGRA Index").
Why
cuVS v26.06.00 shipped IVF-SQ as C++ and C APIs only ("IVF-SQ C++ API", "IVF-SQ C API") — no Rust surface. Scalar quantization stores vectors at ~4x smaller than f32. For cqs that matters as slots multiply: every A/B slot carries a full per-model vector index, and multi-slot experiments are the standard retune workflow.
Scope (upstream, in cuvs Rust crate)
cagramodule structure in the Rust crate (we know this surface — we wrote parts of it)cqs-side follow-up (separate, after upstream merge + release)
IndexBackendimpl behindcuda-index, selectable for memory-constrained slotsPrereqs
libcuvsand crate pin move in lockstep (RMM → CCCL MR migration in 26.06 makes ABI matching non-negotiable)