bge-m3 GGUF

GGUF format of BAAI/bge-m3 for use with CrispEmbed.

BGE-M3. Dense + sparse + ColBERT multi-vector retrieval in one model. 100+ languages, 8192 context.

Files

File Quantization Size
bge-m3-q4_k.gguf Q4_K 438 MB
bge-m3-q8_0.gguf Q8_0 583 MB
bge-m3.gguf F32 2175 MB

Quick Start

# Download
huggingface-cli download cstr/bge-m3-GGUF bge-m3-q4_k.gguf --local-dir .

# Run with CrispEmbed
./crispembed -m bge-m3-q4_k.gguf "Hello world"

# Or with auto-download
./crispembed -m bge-m3 "Hello world"

Model Details

Property Value
Architecture XLM-R
Parameters 568M
Embedding Dimension 1024
Layers 24
Pooling mean
Tokenizer SentencePiece
Base Model BAAI/bge-m3

Verification

Verified bit-identical to HuggingFace sentence-transformers (cosine similarity >= 0.999 on test texts).

Usage with CrispEmbed

CrispEmbed is a lightweight C/C++ text embedding inference engine using ggml. No Python runtime, no ONNX. Supports BERT, XLM-R, Qwen3, and Gemma3 architectures.

# Build CrispEmbed
git clone https://github.com/CrispStrobe/CrispEmbed
cd CrispEmbed
cmake -S . -B build && cmake --build build -j

# Encode
./build/crispembed -m bge-m3-q4_k.gguf "query text"

# Server mode
./build/crispembed-server -m bge-m3-q4_k.gguf --port 8080
curl -X POST http://localhost:8080/v1/embeddings \
    -d '{"input": ["Hello world"], "model": "bge-m3"}'

Credits

  • Original model: BAAI/bge-m3
  • Inference engine: CrispEmbed (ggml-based)
  • Conversion: convert-bert-embed-to-gguf.py

Provenance and EU AI Act Art. 53 note

  • Upstream model: BAAI/bge-m3 β€” published by BAAI.
  • Upstream licence: mit. This repository redistributes under the same terms; it grants no rights the upstream licence does not.
  • What was done here: format conversion and/or quantisation only (GGUF/GGML). No training, no fine-tuning, no merging, no distillation, no change to architecture, vocabulary or capability. Only the numeric representation of the upstream weights differs.
  • Training data: documented β€” where it is documented at all β€” by the upstream provider; see the upstream model card. No training data was used, added or selected by this repository.
  • Provider status: under Regulation (EU) 2024/1689 the upstream authors remain the provider of this model. Converting the serialisation format does not make this repository the provider of a new general-purpose AI model, and no such claim is made. Questions about training content, copyright policy or model capability belong upstream.

Revision 2026-11-02: GGUFs with the sparse and ColBERT heads

The earlier files in this repo (bge-m3.gguf, -q8_0, -q4_k*, -iq4_xs) were converted in the default (Ollama) layout, which drops BGE-M3's sparse_linear and colbert_linear heads, so they support dense retrieval only. They remain unchanged. The new files are converted with --crisp and keep both heads:

  • bge-m3-heads-f16.gguf: F16 encoder with the heads in F32.
  • bge-m3-heads-q8_0-mixed.gguf: Q8_0, with encoder blocks 0-11 in F16.

Uniform Q8_0 keeps dense and sparse output above the bar but flips a few ColBERT token vectors (per-token minimum cosine 0.61). That error comes from the weights; it does not depend on colbert_linear's precision. Keeping the first 12 blocks in F16 brings it back to 0.973. A Q4_K variant with heads did not clear the bar (ColBERT minimum 0.37-0.60) and is not published. The checks used FlagEmbedding BGEM3FlagModel (FP32) on a 77-text panel, comparing dense vectors, lexical weights and every ColBERT token. They need CrispEmbed with the matching tokenizer and sparse fixes (CRISPEMBED_SPM_COLLAPSE_SPACES and CRISPEMBED_SPARSE_KEEP_SPECIAL, both default-correct). Evidence: CrispEmbed tests/results/below-bar/.

Revision 2026-11-03: bge-m3-heads-q8_0-enc0-15-f16.gguf supersedes bge-m3-heads-q8_0-mixed.gguf

bge-m3-heads-q8_0-mixed.gguf (Q8_0, encoder blocks 0-11 in F16) clears the Q8_0 bar on CPU (ColBERT minimum token cosine 0.9726 against FlagEmbedding) but not on CUDA: on a Tesla T4 its ColBERT minimum against the CPU F16 reference is 0.9667. It is kept unchanged and marked superseded. The new file keeps encoder blocks 0-15 in F16 (the rest Q8_0, heads F32): ColBERT minimum 0.9911 against FlagEmbedding BGEM3FlagModel (FP32, 77-text panel, portable CPU build) and 0.9922 on CUDA (T4); dense and sparse stay above 0.9995. 763 MiB, against 1599 MiB for bge-m3-heads-f16.gguf. Built with crispembed-quantize q8_0 --tensor-type 'enc.N.*=f16' for N = 0..15 from a fresh --crisp F32 conversion; the bytes reproduce identically on two different hosts. Evidence: CrispEmbed tests/results/below-bar/.

Downloads last month
1,002
GGUF
Model size
0.6B params
Architecture
bert
Hardware compatibility
Log In to add your hardware

4-bit

8-bit

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for cstr/bge-m3-GGUF

Base model

BAAI/bge-m3
Quantized
(309)
this model