Skip to content

Releases: oasysai/oasysdb

v0.6.1

12 Jun 19:36
Compare
Choose a tag to compare

What's Changed

  • Add support for boolean metadata type. This allows full compatibility with JSON-like object or dictionary metadata when storing vector records in the collection.
  • We optimize the database save and get collection operations performance by 10-20% by reducing the number of IO operations. Also, the save collection operation is now atomic which means that the collection is saved to the disk only when the operation is completed successfully.
  • We launch our own documentation website at docs.oasysdb.com to provide a better user experience and more comprehensive documentation for the OasysDB library. It's still a work in progress and we will continue to improve the documentation over time.

Contributors

Full Changelog

v0.6.0...v0.6.1

v0.6.0

31 May 02:03
37171db
Compare
Choose a tag to compare

What's Changed

  • CONDITIONAL BREAKING CHANGE: We remove support for dot distance metric and we replace cosine similarity with cosine distance metric. This change is made to make the distance metric consistent with the other distance metrics.

  • The default configuration for the collection (EF Construction and EF Search) is increased to a more sensible value according to the common real-world use cases. The default EF Construction is set to 128 and the default EF Search is set to 64.

  • We add a new script to measure the recall rate of the collection search functionality. And with this, we improve the search recall rate of OasysDB to match the recall rate of HNSWLib with the same configuration.

    cargo run --example measure-recall
  • We add a new benchmark to measure the performance of saving and getting the collection. The benchmark can be run by running the command below.

    cargo bench

Contributors

Full Changelog

v0.5.1...v0.6.0

v0.5.1

25 May 03:10
Compare
Choose a tag to compare

What's Changed

We add a new method Collection.filter to filter the vector records based on the metadata. This method returns a HashMap of the filtered vector records and their corresponding vector IDs. This implementation performs a linear search through the collection and thus might be slow for large datasets.

This implementation includes support for the following metadata to filter:

  • String: Stored value must include the filter string.
  • Float: Stored value must be equal to the filter float.
  • Integer: Stored value must be equal to the filter integer.
  • Object: Stored value must match all the key-value pairs in the filter object.

We currently don't support filtering based on the array type metadata because I am not sure of the best way to implement it. If you have any suggestions, please let me know.

Contributors

Full Changelog

v0.5.0...v0.5.1

v0.5.0

17 May 00:10
Compare
Choose a tag to compare

What's Changed

  • BREAKING CHANGE: Although there is no change in the database API, the underlying storage format has been changed to save the collection data to dedicated files directly. The details of the new persistent system and how to migrate from v0.4.x to v0.5.0 can be found in this migration guide.

  • By adding the feature gen, you can now use the EmbeddingModel trait and OpenAI's embedding models to generate vectors or records from text without external dependencies. This feature is optional and can be enabled by adding the feature to the Cargo.toml file.

    [dependencies]
    oasysdb = { version = "0.5.0", features = ["gen"] }
    use oasysdb::vectorgen::*;
    
    fn main() {
        // Change the API key to your own.
        let api_key = "xxx";
        let model = OpenAI::new(api_key, "text-embedding-3-small");
    
        let content = "OasysDB is awesome!";
        let vector = model.create_vector(content).unwrap();
        assert_eq!(vector.len(), 1536);
    }

Contributors

Full Changelog

v0.4.5...v0.5.0

v0.4.5

04 May 22:32
Compare
Choose a tag to compare

What's Changed

  • Add insert benchmark to measure the performance of inserting vectors into the collection. The benchmark can be run using the cargo bench command.
  • Fix the issue with large-size dirty IO buffers caused by the database operation. This issue is fixed by flushing the dirty IO buffers after the operation is completed. This operation can be done synchronously or asynchronously based on the user's preference since this operation might take some time to complete.

Contributors

Full Changelog

v0.4.4...v0.4.5

v0.4.4

27 Apr 00:16
9b95642
Compare
Choose a tag to compare

What's Changed

  • Maximize compatibility with the standard library error types to allow users to convert OasysDB errors to most commonly used error handling libraries such as anyhow, thiserror, etc.
  • Add conversion methods to convert metadata to JSON value by serde_json and vice versa. This allows users to store JSON format metadata easily.
  • Add normalized cosine distance metric to the collection search functionality. Read more about the normalized cosine distance metric here.
  • Fix the search distance calculation to use the correct distance metric and sort it accordingly based on the collection configuration.
  • Add vector ID utility methods to the VectorID struct to make it easier to work with the vector ID.

Additional Notes

  • Add a new benchmark to measure the true search AKA brute-force search performance of the collection. If possible, dealing with a small dataset, it is recommended to use the true search method for better accuracy. The benchmark can be run using the cargo bench command.
  • Improve the documentation to include more examples and explanations on how to use the library: Comprehensive Guide.

Contributors

Full Changelog

v0.4.3...v0.4.4

v0.4.3

17 Apr 18:03
Compare
Choose a tag to compare

What's Changed

  • Add SIMD acceleration to calculate the distance between vectors. This improves the performance of inserting and searching vectors in the collection.
  • Improve OasysDB native error type implementation to include the type/kind of error that occurred in addition to the error message. For example, ErrorKind::CollectionError is used to represent errors that occur during collection operations.
  • Fix the Config.ml default value from 0.3 to 0.2885 which is the optimal value for the HNSW with M of 32. The optimal value formula for ml is 1/ln(M).

Contributors

Full Changelog

v0.4.2...v0.4.3

v0.4.2

09 Apr 10:48
Compare
Choose a tag to compare

What's Changed

Due to an issue (#62) with the Python release of v0.4.1, this patch version is released to fix the build wheels for Python users. The issue is caused due to the new optional PyO3 feature for the v0.4.1 Rust crate release which exclude PyO3 dependencies from the build process. To solve this, the Python package build and deploy script now includes --features py argument.

For Rust users, this version doesn't offer any additional features or functionality compared to v0.4.1 release.

Full Changelog

v0.4.1...v0.4.2

v0.4.1

08 Apr 22:05
Compare
Choose a tag to compare

What's Changed

  • Added quality of life improvements to the VectorID type interoperability.
  • Improved the README.md file with additional data points on the database performance.
  • Changed to Collection.insert method to return the new VectorID after inserting a new vector record.
  • Pyo3 dependencies are now hidden behind the py feature. This allows users to build the library without the Python bindings if they don't need it, which is probably all of them.

Contributors

Full Changelog

v0.4.0...v0.4.1

v0.4.0

03 Apr 17:29
Compare
Choose a tag to compare

What's Changed

  • CONDITIONAL BREAKING CHANGE: Add an option to configure distance for the vector collection via Config struct. The new field distance can be set using the Distance enum. This includes Euclidean, Cosine, and Dot distance metrics. The default distance metric is Euclidean. This change is backward compatible if you are creating a config using the Config::default() method. Otherwise, you need to update the config to include the distance metric.

    let config = Config {
        ...
        distance: Distance::Cosine,
    };
  • With the new distance metric feature, now, you can set a relevancy threshold for the search results. This will filter out the results that are below or above the threshold depending on the distance metric used. This feature is disabled by default which is set to -1.0. To enable this feature, you can set the relevancy field in the Collection struct.

    ...
    let mut collection = Collection::new(&config)?;
    collection.relevancy = 3.0;
  • Add a new method Collection::insert_many to insert multiple vector records into the collection at once. This method is more optimized than using the Collection::insert method in a loop.

Contributors

Full Changelog

v0.3.0...v0.4.0