candding

candding

Pure candle embeddings for Rust with no ONNX: dense, sparse, multi-vector and rerank models ship verified; Constella and image models remain on the roadmap.

candding runs embedding models on candle with no ONNX runtime. Every architecture is implemented in the crate on candle-core and candle-nn, and every registered model is compared against its reference implementation's output before it appears in the catalog.

What ships

The table is generated from the registry. The model catalog lists every model with its status per device and dtype, and testing says what "verified" means.

The pipeline

A dense model runs text → template → tokenizer → encoder → pooling → normalize, with the published tokenizer.json and right padding. The other outputs replace the stages after the encoder:

OutputAfter the encoder
Densepooling (CLS, mean or last token), the repository's Dense modules, L2 normalization
Sparsea head that weights the model's own vocabulary; Qdrant/bm25 has no encoder and computes its weights from the text
Multi-vectora head that keeps one L2-normalized row per surviving token
Reranka head that returns one score; the query and the document are tokenized together, as a pair, a rendered prompt or one pair per window of a long document

Pipeline has every stage with its tensor shapes.

Where to go

  • Getting started: install, embed, choose a device.
  • Concepts: the pipeline, pooling and templates, devices and dtypes, model files, and the sparse, multi-vector and rerank outputs.
  • Comparison: candding beside fastembed, text-embeddings-inference, candle-transformers and others.
  • Roadmap: image models, the Constella family, quantized weights, Python bindings and the pipelines around the catalog.

On this page