You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Issue filed by an AI agent on behalf of @ohdearquant.
Context
#655 reports that @ruvector/ruvllm's embed()/similarity are non-discriminative — the
embedder is a random-init character-level matrix (examples/ruvLLM/src/embedding.rs), never
loaded from a checkpoint, so unrelated pairs often out-score paraphrases.
A fix is in progress that backs EmbeddingService with a real pretrained embedder — ruvector_core::embeddings::LatticeEmbedding (already merged into ruvector-core behind the lattice-embeddings feature; supports MiniLM, BGE-small/base/large, E5, Qwen3-Embedding). It's
API-compatible with the existing EmbeddingService surface, so napi.rs doesn't change.
The one real decision isn't code — it's distribution, and it's yours to make. Filing this to
ask before assuming.
The fork
A. Default-on.embed()/similarity produce real semantic embeddings out of the box —
fixes #655 for every user with zero opt-in.
Cost: a pretrained model (~90 MB MiniLM / ~130 MB BGE-small) becomes a runtime dependency of the
published package (download-on-first-use unless bundled); the feature build requires Rust ≥ 1.93
(lattice-embed 0.6, edition 2024); heavier build.
B. Opt-in (what the in-progress PR does today). Default build, footprint, and MSRV unchanged;
the real embedder is available when the lattice-embeddings feature is compiled in and a model is
selected (via config/env). A visibility flag (pretrained: bool on the stats) makes the
random-vs-pretrained state explicit so the #655 failure mode is never silent. Downside: users
hitting #655 have to opt in to get the fix.
If you want A (default-on), three sub-choices
Default model — MiniLM (smaller, symmetric, solid STS/similarity) vs BGE-small (asymmetric
query/passage prefixing, stronger retrieval).
Bundle vs lazy-download — ship the weights inside the npm package (bigger install, works
offline immediately) vs fetch on first embed() (small install, needs network on first run).
Which do you want — A or B, and if A, your calls on the three sub-choices? The PR is wired for B
right now; flipping it to default-on (plus wiring the chosen model and bundle/lazy behavior) is a
small change once you decide. Not going to change the default footprint of your published package
without your say-so.
Context
#655 reports that
@ruvector/ruvllm'sembed()/similarityare non-discriminative — theembedder is a random-init character-level matrix (
examples/ruvLLM/src/embedding.rs), neverloaded from a checkpoint, so unrelated pairs often out-score paraphrases.
A fix is in progress that backs
EmbeddingServicewith a real pretrained embedder —ruvector_core::embeddings::LatticeEmbedding(already merged intoruvector-corebehind thelattice-embeddingsfeature; supports MiniLM, BGE-small/base/large, E5, Qwen3-Embedding). It'sAPI-compatible with the existing
EmbeddingServicesurface, sonapi.rsdoesn't change.The one real decision isn't code — it's distribution, and it's yours to make. Filing this to
ask before assuming.
The fork
A. Default-on.
embed()/similarityproduce real semantic embeddings out of the box —fixes #655 for every user with zero opt-in.
Cost: a pretrained model (~90 MB MiniLM / ~130 MB BGE-small) becomes a runtime dependency of the
published package (download-on-first-use unless bundled); the feature build requires Rust ≥ 1.93
(lattice-embed 0.6, edition 2024); heavier build.
B. Opt-in (what the in-progress PR does today). Default build, footprint, and MSRV unchanged;
the real embedder is available when the
lattice-embeddingsfeature is compiled in and a model isselected (via config/env). A visibility flag (
pretrained: boolon the stats) makes therandom-vs-pretrained state explicit so the #655 failure mode is never silent. Downside: users
hitting #655 have to opt in to get the fix.
If you want A (default-on), three sub-choices
query/passage prefixing, stronger retrieval).
offline immediately) vs fetch on first
embed()(small install, needs network on first run).the "embedding" framing there entirely (per ruvllm: embed()/similarity produce non-discriminative embeddings (random-init char-level embedder, no pretrained weights) #655's own third suggestion).
Ask
Which do you want — A or B, and if A, your calls on the three sub-choices? The PR is wired for B
right now; flipping it to default-on (plus wiring the chosen model and bundle/lazy behavior) is a
small change once you decide. Not going to change the default footprint of your published package
without your say-so.