Skip to content

Conversation

@LHT129
Copy link
Collaborator

@LHT129 LHT129 commented Nov 25, 2025

closed: #1370

Summary by Sourcery

Add support for an MRLE-based vector transformer in the transform quantization pipeline and enforce ordering constraints when it is used in transformer chains.

New Features:

  • Introduce an MRLE vector transformer type and implementation for preprocessing vectors, including cosine-metric normalization.
  • Allow configuration of MRLE output dimensions via JSON parameters and transformer chain configuration.

Enhancements:

  • Validate that MRLE appears only as the first transformer in a transform quantizer chain and update compatibility checks for transformer parameters.
  • Extend transformer parameter handling, enums, and string constants to include MRLE-specific configuration and defaults.

Tests:

  • Update and extend transform quantizer unit tests to cover MRLE configuration, serialization, and computation chains.

@LHT129 LHT129 self-assigned this Nov 25, 2025
@LHT129 LHT129 added the kind/feature New feature or request label Nov 25, 2025
@LHT129 LHT129 requested review from inabao and wxyucs as code owners November 25, 2025 09:35
@sourcery-ai
Copy link

sourcery-ai bot commented Nov 25, 2025

Reviewer's Guide

Adds an MRLE transformer type and dimension parameter into the transform quantization pipeline, wiring it through configuration, type enums, and tests, while enforcing that MRLE appears first in any transformer chain and implementing a basic MRLE transformer class.

Sequence diagram for applying MRLE transformer in cosine metric

sequenceDiagram
    participant TQ as TransformQuantizer
    participant MRLE as MRLETransformer_cosine
    participant Meta as MRLETMeta

    TQ->>MRLE: Transform(original_vec, transformed_vec)
    activate MRLE
    MRLE->>MRLE: memcpy(transformed_vec, original_vec, output_dim_ * sizeof(float))
    MRLE->>MRLE: Normalize(transformed_vec, transformed_vec, output_dim_)
    MRLE->>Meta: create MRLETMeta
    activate Meta
    MRLE-->>TQ: return MRLETMeta
    deactivate Meta
    deactivate MRLE
    TQ-->>TQ: use transformed_vec in quantization pipeline
Loading

Class diagram for new MRLE transformer integration

classDiagram
    class VectorTransformer {
        <<abstract>>
        +Allocator* allocator_
        +int64_t input_dim_
        +int64_t output_dim_
        +VectorTransformerType type_
        +Transform(original_vec float*, transformed_vec float*) TransformerMetaPtr
        +InverseTransform(transformed_vec float*, original_vec float*) void
        +Serialize(writer StreamWriter&) void
        +Deserialize(reader StreamReader&) void
        +Train(data float*, count uint64_t) void
    }

    class VectorTransformerType {
        <<enum>>
        NONE
        PCA
        RANDOM_ORTHOGONAL
        FHT
        RESIDUAL
        NORMALIZE
        MRLE
    }

    class TransformerMeta {
        <<interface>>
    }

    class MRLETMeta {
    }

    class MRLETransformer {
        <<template<MetricType metric>>
        +MRLETransformer(allocator Allocator*, input_dim int64_t, output_dim int64_t)
        +~MRLETransformer()
        +Transform(original_vec float*, transformed_vec float*) TransformerMetaPtr
        +InverseTransform(transformed_vec float*, original_vec float*) void
        +Serialize(writer StreamWriter&) void
        +Deserialize(reader StreamReader&) void
        +Train(data float*, count uint64_t) void
    }

    class VectorTransformerParameter {
        +uint32_t input_dim_ = 0
        +uint32_t pca_dim_ = 0
        +uint32_t mrle_dim_ = 0
        +FromJson(json JsonType) static VectorTransformerParameter
        +ToJson() JsonType
        +CheckCompatibility(other ParamPtr) bool
    }

    class TransformQuantizer {
        <<template<QuantTmpl, MetricType metric>>
        -VectorTransformerParameter transformer_param_
        -std::vector<VectorTransformerPtr> transform_chain_
        +TransformQuantizer(other const TransformQuantizer&)
        +MakeTransformerInstance(transform_str std::string, param const VectorTransformerParameter&) VectorTransformerPtr
    }

    class InnerStringParams {
        <<constants>>
        +TRANSFORMER_TYPE_VALUE_PCA : const char* const
        +TRANSFORMER_TYPE_VALUE_ROM : const char* const
        +TRANSFORMER_TYPE_VALUE_FHT : const char* const
        +TRANSFORMER_TYPE_VALUE_MRLE : const char* const
        +TRANSFORMER_TYPE_VALUE_RESIDUAL : const char* const
        +TRANSFORMER_TYPE_VALUE_NORMALIZE : const char* const
        +INPUT_DIM_KEY : const char* const
        +PCA_DIM_KEY : const char* const
        +MRLE_DIM_KEY : const char* const
    }

    TransformerMeta <|-- MRLETMeta
    VectorTransformer <|-- MRLETransformer
    TransformQuantizer ..> VectorTransformer : uses
    TransformQuantizer ..> VectorTransformerParameter : config
    MRLETransformer ..> MRLETMeta : creates
    VectorTransformerType <.. MRLETransformer : sets_type
    InnerStringParams <.. TransformQuantizer : transformer_name_strings
    InnerStringParams <.. VectorTransformerParameter : json_keys
Loading

File-Level Changes

Change Details Files
Wire MRLE transformer into TransformQuantizer creation and enforce ordering constraints.
  • Extend MakeTransformerInstance to recognize the "mrle" transformer string, optionally override output dimension with mrle_dim_, and construct an MRLETransformer instance
  • Update TransformQuantizer constructor to throw an INVALID_ARGUMENT exception when MRLE is not the first transformer in a non-empty chain
src/quantization/transform_quantization/transform_quantizer.h
Propagate new mrle_dim parameter through transformer configuration and compatibility checks.
  • Update VectorTransformerParameter::FromJson and ::ToJson to read and write mrle_dim
  • Add mrle_dim_ with default initialization to VectorTransformerParameter and include it in CheckCompatibility
src/impl/transform/vector_transformer_parameter.cpp
src/impl/transform/vector_transformer_parameter.h
Introduce MRLE-specific identifiers and enum value in the transformer infrastructure.
  • Extend VectorTransformerType enum with MRLE
  • Add TRANSFORMER_TYPE_VALUE_MRLE string constant and MRLE_DIM_KEY JSON key for configuration
src/impl/transform/vector_transformer.h
src/inner_string_params.h
Add MRLETransformer implementation and integrate it into the build.
  • Create mrle_transformer.h defining MRLETransformer with passthrough transform semantics, optional cosine normalization, and unimplemented inverse/serialize/train stubs
src/impl/transform/mrle_transformer.h
Update TransformQuantizer tests to cover MRLE and use the new mrle_dim parameter.
  • Extend JSON parameter templates in tests to include mrle_dim and adjust formatted values
  • Add "mrle, fp32" to the tested transformer chains
src/quantization/transform_quantization/transform_quantizer_test.cpp

Assessment against linked issues

Issue Objective Addressed Explanation
#1370 Introduce an MRL-E vector transformer ("mrle") that can be used in the transform quantization chain to preprocess embedding vectors, including appropriate type wiring and parameter support.
#1370 Integrate the MRL-E transformer into the quantization pipeline (including configuration, validation, and tests) so that embedding models using MRL-E can be quantized, with fp32 as the base quantization (e.g., chain "mrle, fp32").

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@gemini-code-assist
Copy link

Summary of Changes

Hello @LHT129, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the vector transformation capabilities by introducing a new MRL-E preprocess transformer. This addition allows for specific vector handling, including direct copying and conditional normalization, within the existing transformation pipeline. The changes involve extending the core transformer framework to recognize and configure the MRL-E type, alongside implementing a crucial validation to maintain the integrity of transformation chains by enforcing MRL-E's position as the initial step when utilized.

Highlights

  • New MRLETransformer: Introduced a new MRLETransformer class for vector preprocessing, which primarily copies the input vector and can optionally normalize it for cosine metric types.
  • Framework Integration: The new MRLETransformer is integrated into the VectorTransformerType enum, its parameters (mrle_dim_) are added to VectorTransformerParameter, and string constants are defined for its type and dimension key.
  • Transform Chain Validation: Added a validation rule in TransformQuantizer ensuring that if the MRLETransformer is used in a transform chain, it must be the very first transformer in that sequence.
  • Test Coverage: Updated existing test cases for transform quantization to include the new MRLETransformer and its associated parameters, ensuring proper functionality and integration.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes and found some issues that need to be addressed.

  • In mrle_transformer.h, the MRLETransformer template has an extra closing brace after the class definition (} };), which will break compilation and should be reduced to a single };.
  • Consider using a more specific error type/message for MRLETransformer::InverseTransform (e.g., NOT_IMPLEMENTED) instead of INTERNAL_ERROR to make error handling and debugging clearer when inverse transforms are intentionally unsupported.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In mrle_transformer.h, the MRLETransformer template has an extra closing brace after the class definition (`} };`), which will break compilation and should be reduced to a single `};`.
- Consider using a more specific error type/message for MRLETransformer::InverseTransform (e.g., NOT_IMPLEMENTED) instead of INTERNAL_ERROR to make error handling and debugging clearer when inverse transforms are intentionally unsupported.

## Individual Comments

### Comment 1
<location> `src/impl/transform/mrle_transformer.h:46-32` </location>
<code_context>
+        return meta;
+    }
+
+    void
+    InverseTransform(const float* transformed_vec, float* original_vec) const override {
+        throw VsagException(ErrorType::INTERNAL_ERROR, "InverseTransform not implement");
+    }
+
+    void
</code_context>

<issue_to_address>
**issue (bug_risk):** There appears to be an extra closing brace at the end of MRLETransformer, which will cause a compile error.

The class should be closed with a single `};`. Please remove the standalone `}` that appears immediately before the final `};` so the class definition compiles correctly.
</issue_to_address>

### Comment 2
<location> `src/impl/transform/mrle_transformer.h:24` </location>
<code_context>
+#include "vsag_exception.h"
+
+namespace vsag {
+struct MRLETMeta : public TransformerMeta {};
+
+template <MetricType metric = MetricType::METRIC_TYPE_L2SQR>
</code_context>

<issue_to_address>
**suggestion (typo):** The MRLETMeta type name looks inconsistent with the MRLE naming used elsewhere.

If this isn’t intentional, please rename `MRLETMeta` to `MRLEMeta` (to match `MRLETransformer`, `VectorTransformerType::MRLE`, etc.) so the MRLE-related types stay consistent.

Suggested implementation:

```c
namespace vsag {
struct MRLEMeta : public TransformerMeta {};

```

Renaming the type here will require updating all other usages of `MRLETMeta` in the codebase to `MRLEMeta`. Please:
1. Search for `MRLETMeta` in the project and replace each occurrence with `MRLEMeta`.
2. If there are any factory/registration mechanisms or type traits that reference `MRLETMeta`, update those references as well to keep the MRLE-related types consistent.
</issue_to_address>

### Comment 3
<location> `src/impl/transform/mrle_transformer.h:38-39` </location>
<code_context>
+
+    TransformerMetaPtr
+    Transform(const float* original_vec, float* transformed_vec) const override {
+        auto meta = std::make_shared<MRLETMeta>();
+        memcpy(transformed_vec, original_vec, this->output_dim_ * sizeof(float));
+        if constexpr (metric == MetricType::METRIC_TYPE_COSINE) {
+            Normalize(transformed_vec, transformed_vec, this->output_dim_);
</code_context>

<issue_to_address>
**issue (bug_risk):** Using output_dim_ as the memcpy length can cause out-of-bounds reads if output_dim_ > input_dim_.

Here `memcpy` uses `this->output_dim_` elements, but `original_vec` is only guaranteed to be `input_dim_` long. If `output_dim_ > input_dim_` (as might be allowed for MRLE), this will read past `original_vec`. Either guarantee `output_dim_ <= input_dim_` (e.g., via an invariant/assert) or bound the copy with `std::min(this->input_dim_, this->output_dim_)`, depending on the intended contract.
</issue_to_address>

### Comment 4
<location> `src/impl/transform/mrle_transformer.h:48` </location>
<code_context>
+
+    void
+    InverseTransform(const float* transformed_vec, float* original_vec) const override {
+        throw VsagException(ErrorType::INTERNAL_ERROR, "InverseTransform not implement");
+    }
+
</code_context>

<issue_to_address>
**suggestion:** The exception for InverseTransform is a bit misleading and the message is unclear.

Using `ErrorType::INTERNAL_ERROR` for an unimplemented method blurs the line between real internal failures and unsupported functionality. If available, prefer a more specific error code for "not implemented" or "unsupported", and update the message to something clearer like "InverseTransform not implemented".

Suggested implementation:

```c
    void
    InverseTransform(const float* transformed_vec, float* original_vec) const override {
        // Currently, inverse transformation is not supported for MRLET.
        // Use a specific error type to distinguish unsupported functionality
        // from real internal errors.
        throw VsagException(ErrorType::NOT_IMPLEMENTED, "InverseTransform not implemented");
    }

// Copyright 2024-present the vsag project

```

- If `ErrorType::NOT_IMPLEMENTED` does not exist in your codebase, replace it with the most appropriate existing value (for example `UNIMPLEMENTED`, `UNSUPPORTED`, or similar) in both the enum definition and this throw site.
- Ensure `VsagException` and `ErrorType` are included/visible in this header (they likely already are; if not, add the appropriate include that is used elsewhere for throwing `VsagException`).
</issue_to_address>

### Comment 5
<location> `src/quantization/transform_quantization/transform_quantizer_test.cpp:97` </location>
<code_context>
 TEST_CASE("TQ Compute", "[ut][TransformQuantizer]") {
     constexpr MetricType metrics[1] = {MetricType::METRIC_TYPE_L2SQR};
-    std::string tq_chain = GENERATE("rom, pca, fp32", "rom, fp32", "fht, fp32");
+    std::string tq_chain = GENERATE("rom, pca, fp32", "rom, fp32", "fht, fp32", "mrle, fp32");

     for (auto dim : dims) {
</code_context>

<issue_to_address>
**issue (testing):** Add a negative test to verify that using MRLE not as the first transformer in the chain correctly throws an exception.

Since the code requires MRLE to be first in the chain (`MRLE must be first if exists`), please also add a negative test that builds a chain like `"rom, mrle, fp32"` (and optionally `"pca, mrle, fp32"`) and asserts that constructing `TransformQuantizer` throws the expected `VsagException` with the correct error type/message. This will ensure the MRLE-position constraint is properly enforced and prevent regressions.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

#include "vsag_exception.h"

namespace vsag {
struct MRLETMeta : public TransformerMeta {};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (typo): The MRLETMeta type name looks inconsistent with the MRLE naming used elsewhere.

If this isn’t intentional, please rename MRLETMeta to MRLEMeta (to match MRLETransformer, VectorTransformerType::MRLE, etc.) so the MRLE-related types stay consistent.

Suggested implementation:

namespace vsag {
struct MRLEMeta : public TransformerMeta {};

Renaming the type here will require updating all other usages of MRLETMeta in the codebase to MRLEMeta. Please:

  1. Search for MRLETMeta in the project and replace each occurrence with MRLEMeta.
  2. If there are any factory/registration mechanisms or type traits that reference MRLETMeta, update those references as well to keep the MRLE-related types consistent.


void
InverseTransform(const float* transformed_vec, float* original_vec) const override {
throw VsagException(ErrorType::INTERNAL_ERROR, "InverseTransform not implement");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: The exception for InverseTransform is a bit misleading and the message is unclear.

Using ErrorType::INTERNAL_ERROR for an unimplemented method blurs the line between real internal failures and unsupported functionality. If available, prefer a more specific error code for "not implemented" or "unsupported", and update the message to something clearer like "InverseTransform not implemented".

Suggested implementation:

    void
    InverseTransform(const float* transformed_vec, float* original_vec) const override {
        // Currently, inverse transformation is not supported for MRLET.
        // Use a specific error type to distinguish unsupported functionality
        // from real internal errors.
        throw VsagException(ErrorType::NOT_IMPLEMENTED, "InverseTransform not implemented");
    }

// Copyright 2024-present the vsag project
  • If ErrorType::NOT_IMPLEMENTED does not exist in your codebase, replace it with the most appropriate existing value (for example UNIMPLEMENTED, UNSUPPORTED, or similar) in both the enum definition and this throw site.
  • Ensure VsagException and ErrorType are included/visible in this header (they likely already are; if not, add the appropriate include that is used elsewhere for throwing VsagException).

TEST_CASE("TQ Compute", "[ut][TransformQuantizer]") {
constexpr MetricType metrics[1] = {MetricType::METRIC_TYPE_L2SQR};
std::string tq_chain = GENERATE("rom, pca, fp32", "rom, fp32", "fht, fp32");
std::string tq_chain = GENERATE("rom, pca, fp32", "rom, fp32", "fht, fp32", "mrle, fp32");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (testing): Add a negative test to verify that using MRLE not as the first transformer in the chain correctly throws an exception.

Since the code requires MRLE to be first in the chain (MRLE must be first if exists), please also add a negative test that builds a chain like "rom, mrle, fp32" (and optionally "pca, mrle, fp32") and asserts that constructing TransformQuantizer throws the expected VsagException with the correct error type/message. This will ensure the MRLE-position constraint is properly enforced and prevent regressions.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new MRLE vector transformer. The implementation is a good start, but I've found a few issues. There is a critical bug in the MRLETransformer that could lead to a buffer over-read, for which I've suggested a fix. I also found a minor typo in an error message. Additionally, some changes in the test files appear to unintentionally alter the behavior of existing tests for PCA; I've provided suggestions to address this. Please review my comments below.

TransformerMetaPtr
Transform(const float* original_vec, float* transformed_vec) const override {
auto meta = std::make_shared<MRLETMeta>();
memcpy(transformed_vec, original_vec, this->output_dim_ * sizeof(float));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The memcpy can read beyond the bounds of original_vec if output_dim_ is greater than input_dim_. This is a critical bug that can cause crashes or unpredictable behavior. The copy size should be limited by input_dim_. Additionally, if output_dim_ is greater than input_dim_, the remainder of transformed_vec will contain uninitialized data, which is then passed to Normalize, leading to incorrect results. The rest of the vector should be zero-padded to ensure correctness.

        const auto copy_elements = std::min(static_cast<size_t>(this->input_dim_), static_cast<size_t>(this->output_dim_));
        memcpy(transformed_vec, original_vec, copy_elements * sizeof(float));
        if (this->output_dim_ > this->input_dim_) {
            memset(transformed_vec + copy_elements, 0, (this->output_dim_ - copy_elements) * sizeof(float));
        }


void
InverseTransform(const float* transformed_vec, float* original_vec) const override {
throw VsagException(ErrorType::INTERNAL_ERROR, "InverseTransform not implement");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There is a typo in the exception message. It should be "implemented" instead of "implement".

        throw VsagException(ErrorType::INTERNAL_ERROR, "InverseTransform not implemented");

}}
)";
auto param_str = fmt::format(param_template, tq_chain, dim - 1);
auto param_str = fmt::format(param_template, tq_chain, dim, dim - 1);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This change unintentionally alters the behavior of existing PCA tests. pca_dim was previously dim - 1, performing dimension reduction. It is now set to dim, which means PCA no longer reduces dimensionality in this test. To preserve the original test behavior for PCA while accommodating the new mrle_dim parameter, consider providing distinct values that maintain the spirit of the original test.

Suggested change
auto param_str = fmt::format(param_template, tq_chain, dim, dim - 1);
auto param_str = fmt::format(param_template, tq_chain, dim - 1, dim - 1);

}}
)";
auto param_str = fmt::format(param_template, tq_chain, dim - 2);
auto param_str = fmt::format(param_template, tq_chain, dim, dim - 1);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to the previous comment, this change alters the behavior of existing PCA tests in TestSerializeDeserializeTQ. pca_dim was dim - 2 and is now dim, removing the dimensionality reduction aspect from this test. To maintain the original test's intent, you should restore the previous value for pca_dim.

Suggested change
auto param_str = fmt::format(param_template, tq_chain, dim, dim - 1);
auto param_str = fmt::format(param_template, tq_chain, dim - 2, dim - 1);

@codecov
Copy link

codecov bot commented Nov 25, 2025

Codecov Report

❌ Patch coverage is 71.42857% with 8 lines in your changes missing coverage. Please review.

❌ Your patch check has failed because the patch coverage (71.42%) is below the target coverage (80.00%). You can increase the patch coverage or adjust the target coverage.

@@            Coverage Diff             @@
##             main    #1371      +/-   ##
==========================================
- Coverage   90.95%   90.95%   -0.01%     
==========================================
  Files         322      323       +1     
  Lines       18363    18393      +30     
==========================================
+ Hits        16702    16729      +27     
- Misses       1661     1664       +3     
Flag Coverage Δ
cpp 90.95% <71.42%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
common 85.62% <ø> (-0.19%) ⬇️
datacell 93.44% <77.77%> (+0.21%) ⬆️
index 89.84% <ø> (+0.12%) ⬆️
simd 100.00% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3d4c551...6d5ebc1. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Collaborator

@wxyucs wxyucs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Copy link
Collaborator

@inabao inabao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Collaborator

@inabao inabao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support MRL-E Embedding's Quantization

3 participants