mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-08-27 09:32:06 +00:00
* fix(embeddings): reconcile bge-small convention between Lattice providers Aligns the WASM (LatticeWasmEmbeddings, #651) and native Rust (LatticeEmbedding, #648) Lattice-backed embedding providers with lattice-embed's own native convention for bge-small (#662): - LatticeWasmEmbeddings gains embedQuery(), which applies BGE-v1.5's retrieval-instruction prefix on the query side (documents/passages stay raw via embedText/embedTexts), matching EmbeddingModel::query_instruction() in lattice-embed and LatticeEmbedding::embed_query() in ruvector-core. - LatticeWasmEmbeddings now accepts the same bge-small alias surface as lattice-embed's EmbeddingModel::from_str (bge-small, bge-small-en, bge-small-en-v1.5, small, BAAI/... ids, case/underscore-insensitive), normalized to a canonical model name via getModel(). - Documents, on both providers, that native BERT-family encoding (BGE/E5/MiniLM) is unconditionally L2-normalized, citing BertModel::encode/encode_batch's l2_normalize call in lattice-inference. Adds a query/passage prefix-asymmetry test and an alias-parsing test for the WASM provider, plus a bge-small alias regression test for the Rust provider. Closes #662. Co-Authored-By: Leo <noreply@khive.ai> * test(embeddings): pin cross-provider query/passage prefix contract (#662) Follow-up requested during review of #663: a shared-fixture contract test so the Rust `LatticeEmbedding` provider (crates/ruvector-core, delegates to lattice_embed::EmbeddingService::embed_query, which prepends EmbeddingModel::query_instruction() internally) and the TS/WASM `LatticeWasmEmbeddings` provider (npm/packages/ruvector- extensions, hardcodes the same prefix as a TS literal since the wasm binding exposes no prefix concept) cannot silently re-diverge on which retrieval-instruction prefix a model gets. - fixtures/lattice-embed/query-prefixes.json: the shared fixture, keyed by the canonical model alias both providers accept ("bge-small", "minilm"), pinning query_prefix / passage_prefix per model. - crates/ruvector-core/src/embeddings.rs: new cross_provider_query_prefix_contract test, asserting lattice_embed::EmbeddingModel::query_instruction()/ document_instruction() -- both documented "Stable" in lattice-embed's own API-stability convention -- against the fixture. No model weights or network access required. - npm/packages/ruvector-extensions/tests/lattice-prefix-contract.test.ts: the TS sibling, asserting applyLatticeWasmQueryPrefix() against the same fixture. No model weights or the optional @khive-ai/lattice-embed-wasm peer package required. Mutation-verified in both directions: changing the fixture's query_prefix fails both suites independently; changing LATTICE_WASM_QUERY_INSTRUCTIONS in src/embeddings.ts fails the TS test alone; and (verified against a scratch lattice-embed build with EmbeddingModel::query_instruction()'s bge-small branch changed, patched in via a temporary [patch.crates-io] override and reverted afterward) an upstream lattice-embed convention change fails the Rust test even with an untouched fixture -- the property this test exists to guarantee. Co-Authored-By: Leo <noreply@khive.ai> --------- Co-authored-by: Leo <noreply@khive.ai> |
||
|---|---|---|
| .. | ||
| lattice-embed | ||