Model catalog
Every model candding ships, generated from the registry: the dense, sparse, multi-vector and rerank catalogs, each row with its own per-device status.
The tables are generated from the registry by just docs-models, from the JSON that candding list-models --json prints.
| Model | Family | Dim | Pooling | Max length | Dtypes | CPU | Metal | CUDA | License |
|---|---|---|---|---|---|---|---|---|---|
| BAAI/bge-small-en-v1.5 | BERT | 384 | cls | 512 | f32f16bf16 | verified | verified | verified | MIT |
| BAAI/bge-base-en-v1.5 | BERT | 768 | cls | 512 | f32f16bf16 | verified | verified | verified | MIT |
| BAAI/bge-large-en-v1.5 | BERT | 1024 | cls | 512 | f32f16bf16 | verified | verified | verified | MIT |
| BAAI/bge-small-zh-v1.5 | BERT | 512 | cls | 512 | f32f16bf16 | verified | verified | verified | MIT |
| sentence-transformers/all-MiniLM-L6-v2 | BERT | 384 | mean | 256 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| thenlper/gte-base | BERT | 768 | mean | 512 | f32f16bf16 | verified | verified | verified | MIT |
| thenlper/gte-large | BERT | 1024 | mean | 512 | f32f16bf16 | verified | verified | verified | MIT |
| mixedbread-ai/mxbai-embed-large-v1 | BERT | 1024 | cls | 512 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Snowflake/snowflake-arctic-embed-xs | BERT | 384 | cls | 512 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Snowflake/snowflake-arctic-embed-s | BERT | 384 | cls | 512 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Snowflake/snowflake-arctic-embed-m | BERT | 768 | cls | 512 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Snowflake/snowflake-arctic-embed-l | BERT | 1024 | cls | 512 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 | BERT | 384 | mean | 128 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| intfloat/multilingual-e5-small | BERT | 384 | mean | 512 | f32f16bf16 | verified | verified | verified | MIT |
| Qwen/Qwen3-Embedding-0.6B | Qwen3 | 1024 | last_token | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Qwen/Qwen3-Embedding-4B | Qwen3 | 2560 | last_token | 8192 | bf16f32f16 | verified | verified | verified | Apache-2.0 |
| Qwen/Qwen3-Embedding-8B | Qwen3 | 4096 | last_token | 8192 | bf16f32f16 | untested | verified | untested | Apache-2.0 |
| google/embeddinggemma-300m | Gemma3 | 768 | mean | 2048 | f32f16bf16 | verified | verified | untested | gemma |
| intfloat/multilingual-e5-base | XLM-RoBERTa | 768 | mean | 512 | f32f16bf16 | verified | verified | verified | MIT |
| intfloat/multilingual-e5-large | XLM-RoBERTa | 1024 | mean | 512 | f32f16bf16 | verified | verified | verified | MIT |
| BAAI/bge-m3 | XLM-RoBERTa | 1024 | cls | 8192 | f32f16bf16 | verified | verified | verified | MIT |
| sentence-transformers/paraphrase-multilingual-mpnet-base-v2 | XLM-RoBERTa | 768 | mean | 128 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| sentence-transformers/all-mpnet-base-v2 | MPNet | 768 | mean | 384 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-small-en | JinaBERT | 512 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-base-en | JinaBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-base-de | JinaBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-base-zh | JinaBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-base-es | JinaBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| jinaai/jina-embeddings-v2-base-code | JinaBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| nomic-ai/nomic-embed-text-v1 | NomicBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| nomic-ai/nomic-embed-text-v1.5 | NomicBERT | 768 | mean | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Snowflake/snowflake-arctic-embed-m-long | NomicBERT | 768 | cls | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Alibaba-NLP/gte-modernbert-base | ModernBERT | 768 | cls | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Alibaba-NLP/gte-multilingual-base | GTE (new) | 768 | cls | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
| Alibaba-NLP/gte-base-en-v1.5 | GTE (new) | 768 | cls | 8192 | f32f16bf16 | verified | verified | verified | Apache-2.0 |
Dtypes: bold is the default the builder loads; plain text is verified, muted is untested, struck through is unsupported, each colored by the dtype's own Metal status so a processor-only refusal does not read as unsupported everywhere; hover a dtype for its own cpu/metal/cuda breakdown. F16 is refused on the CPU and verified on Metal for Qwen/Qwen3-Embedding-0.6B, Qwen/Qwen3-Embedding-4B, jinaai/jina-embeddings-v2-base-de and jinaai/jina-embeddings-v2-base-zh. BF16 is refused on the CPU for every row: candle has no CPU BF16 matmul.
Sparse models
| Model | Head | Vocab | Max length | Phase | Dtypes | License |
|---|---|---|---|---|---|---|
| prithivida/Splade_PP_en_v1 | splade_mlm | 30522 | 512 | 3 | f32f16bf16 | Apache-2.0 |
| BAAI/bge-m3 | m3_linear | 250002 | 8192 | 3 | f32f16bf16 | MIT |
| naver/splade-code-06B | splade_tied | 151936 | 1024 | 3 | f32f16bf16 | NAVER Non-Commercial (Splade-Code) |
| jinaai/jina-embeddings-v2-small-en | mini_coil | 19125 | 8192 | 3 | f32f16bf16 | Apache-2.0 |
| sentence-transformers/all-MiniLM-L6-v2 | bm42 | 30522 | 256 | 3 | f32f16bf16 | Apache-2.0 |
| Qdrant/bm25 | bm25 | n/a | n/a | 3 | f32f16bf16 | Apache-2.0 |
n/a marks an axis that does not exist for that row rather than one nobody has checked yet — Qdrant/bm25 has no encoder, no vocabulary and no device or numeric format anywhere in its own computation. Dtypes read the same way as in the dense table. F16 is refused on the CPU and verified on Metal for BAAI/bge-m3 and jinaai/jina-embeddings-v2-small-en. BF16 is refused on the CPU for every row except Qdrant/bm25, which has no device axis: candle has no CPU BF16 matmul.
Multi-vector models
| Model | Head | Width | CLS row | Normalized | Score reduction | Query length | Max length | Phase | Dtypes | License |
|---|---|---|---|---|---|---|---|---|---|---|
| BAAI/bge-m3 | m3_colbert | 1024 → 1024 | no | yes | mean_by_query_length | n/a | 8192 | 4 | f32f16bf16 | MIT |
| colbert-ir/colbertv2.0 | stanford_colbert | 768 → 128 | yes | yes | sum | 32 | 180 | 4 | f32f16bf16 | MIT |
| answerdotai/answerai-colbert-small-v1 | stanford_colbert | 384 → 96 | yes | yes | sum | 32 | 300 | 4 | f32f16bf16 | Apache-2.0 |
| jinaai/jina-colbert-v2 | jina_colbert | 1024 → 128 | yes | yes | sum | 32 | 300 | 4 | f32f16bf16 | CC-BY-NC-4.0 |
width is the projection's input and output row length; n/a in Query length marks a checkpoint whose own head fixes no such length at all, the same way it marks a missing axis in the sparse table above. Dtypes read the same way as in the dense table. BF16 is refused on the CPU for every row: candle has no CPU BF16 matmul.
Rerank models
| Model | Family | Head | Score | Input | Max length | Phase | Dtypes | License |
|---|---|---|---|---|---|---|---|---|
| cross-encoder/ms-marco-MiniLM-L6-v2 | BERT | bert_pooler | raw logit | pair, longest first | 512 | 5 | f32f16bf16 | Apache-2.0 |
| jinaai/jina-reranker-v1-tiny-en | JinaBERT | bert_pooler | probability | pair, longest first | 512 | 5 | f32f16bf16 | Apache-2.0 |
| BAAI/bge-reranker-base | XLM-RoBERTa | roberta_classification_head | raw logit | pair, query capped at 3/4 | 512 | 5 | f32f16bf16 | MIT |
| BAAI/bge-reranker-v2-m3 | XLM-RoBERTa | roberta_classification_head | raw logit | pair, query capped at 3/4 | 512 | 5 | f32f16bf16 | Apache-2.0 |
| Qwen/Qwen3-Reranker-0.6B | Qwen3 | logit_score | raw logit | prompt, Qwen3 reranker template | 8192 | 5 | f32f16bf16 | Apache-2.0 |
| Qwen/Qwen3-Reranker-4B | Qwen3 | logit_score | raw logit | prompt, Qwen3 reranker template | 8192 | 5 | f32f16bf16 | Apache-2.0 |
| Qwen/Qwen3-Reranker-8B | Qwen3 | logit_score | raw logit | prompt, Qwen3 reranker template | 8192 | 5 | f32f16bf16 | Apache-2.0 |
| jinaai/jina-reranker-v2-base-multilingual | XLM-RoBERTa (flash), learned positions | roberta_classification_head | probability | windowed pair, best window | 1024 | 5 | f32f16bf16 | CC-BY-NC-4.0 |
Tooltips give the values candding list-models prints, and the rerank page explains each score and input. Dtypes read the same way as in the dense table. F16 is refused on the CPU and verified on Metal for cross-encoder/ms-marco-MiniLM-L6-v2, jinaai/jina-reranker-v1-tiny-en, BAAI/bge-reranker-base, BAAI/bge-reranker-v2-m3, Qwen/Qwen3-Reranker-0.6B and jinaai/jina-reranker-v2-base-multilingual. BF16 is refused on the CPU for every row: candle has no CPU BF16 matmul.
Reading the columns
| Column | Tables | Meaning |
|---|---|---|
| Pooling | dense | how per-token states become one vector, cls, mean or last_token; see pooling and templates |
| Max length | all | the default truncation, special and template tokens included; the builder caps any length at the model's position limit |
| Dtypes | all | F32, F16 and BF16, styled as the footnote under the dense table explains; hover a dtype for its CPU, Metal and CUDA statuses |
| CPU, Metal, CUDA | dense | the model's status on each device, as below |
| Phase | sparse, multi-vector, rerank | the roadmap phase that added the row |
| License | all | the licence of the weights on Hugging Face, which governs their use; candding's own is on the API page |
| Head | sparse, multi-vector, rerank | the head the row runs; the sparse, multi-vector and rerank pages explain each |
| Vocab | sparse | the row's index width; n/a for Qdrant/bm25, as are its max length and dtypes |
| Width | multi-vector | the projection's input and output width; every output row has the second |
| CLS row, Normalized | multi-vector | whether the classification position survives as a row, and whether every row is L2-normalized |
| Score reduction | multi-vector | how late_interaction_score_for reduces the summed score: sum, or mean_by_query_length |
| Query length | multi-vector | the fixed row count a query is padded to; n/a for a head that fixes none |
| Family | rerank | the family the checkpoint runs on; for XLM-RoBERTa (flash) it adds how the encoder numbers tokens |
| Score | rerank | what RerankScore::value() returns: raw logit, a difference of two logits for a logit_score head, or probability, after a sigmoid |
| Input | rerank | pair with its truncation, longest first or query capped at 3/4; prompt with its template; or windowed pair, best window; the rerank page explains each |
Statuses
| Status | Meaning |
|---|---|
| verified | the device's check passed in that dtype, as testing defines it |
| pending | a run is planned |
| untested | no run has reached the registry |
Testing has the tolerance each dtype is held to.
Comparison
Where candding sits next to fastembed, fastembed-rs, EmbedAnything, text-embeddings-inference, candle-transformers and hosted embedding APIs.
BERT
The BERT encoder family behind bge, MiniLM, gte, mxbai and Snowflake Arctic embeddings, and the details that make its vectors match the reference.