Embedding models implemented on `candle-core` and `candle-nn`, with no ONNX runtime: dense, sparse, multi-vector and rerank output, each catalog model tested against its reference implementation with a status per device and dtype. The [model catalog](https://candding.rust-dd.com/docs/models) lists every model and its statuses, and the [documentation site](https://candding.rust-dd.com) explains the concepts and holds the roadmap.
```toml
[dependencies]
candding = "0.1"
```
The first `build()` of a model downloads it into the Hugging Face cache through the default `download` feature, and `features = ["metal"]` adds the Apple GPU backend.
```rust,no_run
use candding::TextEmbedding;
fn main() -> candding::Result<()> {
let model = TextEmbedding::builder("BAAI/bge-small-en-v1.5").build()?;
let passages = model.passage_embed(&["Embeddings map text to vectors."], None)?;
let queries = model.query_embed(&["what do embeddings do"], None)?;
Ok(())
}
```
| Dense vectors | [`TextEmbedding`] |
| Sparse `(index, weight)` rows | [`SparseTextEmbedding`], and [`Bm25TextEmbedding`] for `Qdrant/bm25` |
| Per-token matrices for late interaction | [`MultiVectorTextEmbedding`] |
| One score per query and document | [`TextCrossEncoder`] |
Anything `#[doc(hidden)]` is an implementation detail outside semver and can change in any release.