|
| 1 | +# SVS 0.0.2 Release Notes |
| 2 | + |
| 3 | +## `pysvs` (Python) |
| 4 | + |
| 5 | +* Deprecated `num_threads` keyword argument from `pysvs.VamanaBuildParameters` and added |
| 6 | + `num_threads` keyword to `pysvs.Vamana.build`. |
| 7 | +* Exposed the `prune_to` parameter for `pysvs.VamanaBuildParameters` (see description below |
| 8 | + for an explanation of this change). |
| 9 | +* Added preliminary support for building `pysvs.Flat` and `pysvs.Vamana` directly from |
| 10 | + `np.float16` arrays. |
| 11 | + |
| 12 | +## `libsvs` (C++) |
| 13 | + |
| 14 | +### Breaking Changes |
| 15 | + |
| 16 | +* Removed `nthreads` member of `VamanaBuildParameters` and added the number of threads as |
| 17 | + an argument to `svs::Vamana::build`/`svs::Vamana::build`. |
| 18 | +* Added a `prune_to` argument to `VamanaBuildParameters`. This can be set to a value less |
| 19 | + than graph_max_degree (heuristically, setting this to be 4 less is a good trade-off |
| 20 | + between accuracy and speed). When pruning is performed, this parameter is used to |
| 21 | + determine the number of candidates to generate after pruning. Setting this less than |
| 22 | + `graph_max_degree` greatly reduces the time spent when managing backedges. |
| 23 | +* Improved pruning rules for Euclidean and InnerProduct. Vamana index construction should |
| 24 | + be faster and yield slightly improved indexes. |
| 25 | +* Added an experimental external-threading interface to `svs::index::VamanaIndex`. |
| 26 | +* Overhauled extension mechanisms using a `tag_invoke` style approach. This decouples the |
| 27 | + `svs::index::VamanaIndex` implementation from extensions like LVQ, reducing header |
| 28 | + dependence and improving precision of algorithm customization. |
| 29 | + |
| 30 | +### Save/Load API |
| 31 | +* Enabled context-free saving and loading of simple data structures. This allows simple |
| 32 | + data structures to be saved and reloaded from TOML files without requiring access to the |
| 33 | + saving/loading directory. Classes implementing this saving and loading allow for more |
| 34 | + flexible storage. |
| 35 | +* Overhauled the implementation of saving and loading to enable more scalable implementation. |
| 36 | +* `svs::data::SimpleData` family of data structures are now directly saveable and loadable |
| 37 | + and no longer require proxy-classes. |
| 38 | + |
| 39 | +**Breaking Serialization Changes** |
| 40 | + |
| 41 | +* Changed LVQ-style datasets from `v0.0.1` to `v0.0.2`: Removed centroids from being stored |
| 42 | + with the ScaledBiasedCompressedDataset. Centroids are now stored in the higher level LVQ |
| 43 | + dataset. |
| 44 | + |
| 45 | +### Back-end Changes |
| 46 | + |
| 47 | +Changes to library internals that do not necessarily affect the top level API but could |
| 48 | +affect performance or users relying on internal APIs. |
| 49 | + |
| 50 | +* Improved the performance of the LVQ inner-product implementation. |
| 51 | +* Moved dynamic uispatcher from the Python bindings into `libsvs`. |
| 52 | +* Data structure loading has been augmented with the `svs::lib::Lazy` class, allowing for |
| 53 | + arbitrary deferred work to be executed when loading data structures. |
| 54 | +* Removed the old "access mode" style API for multi-level datasets, instead using |
| 55 | + `tag_invoke` for customization. |
| 56 | +* Reduced binary footprint by removing `std::function` use for general multi-threaded |
| 57 | + functions. |
| 58 | +* Updated `ANNException` to use `fmtlib` style message directly rather than `std::ostream` |
| 59 | + style overloading. The new syntax turns |
| 60 | + ```c++ |
| 61 | + ANNEXCEPTION("Expected ", a, ", got ", b, "!"); |
| 62 | + ``` |
| 63 | + to |
| 64 | + ```c++ |
| 65 | + ANNEXCEPTION("Expected {}, got {}!", a, b); |
| 66 | + ``` |
| 67 | + |
| 68 | +## Binaries and Utilities |
| 69 | + |
| 70 | +* Added a benchmarking framework in `/benchmark` to automatically run and aggregate index |
| 71 | + construction and search for large scale benchmarks. Documentation is currently sparse |
| 72 | + but planned. |
| 73 | + |
| 74 | +## Third Party |
| 75 | + |
| 76 | +* Bump [fmtlib](https://github.com/fmtlib/fmt) from 9.1.0 to 10.1.1. |
| 77 | + |
0 commit comments