embeddinggemma-300m β Core AI (.aimodel)
google/embeddinggemma-300m exported as a single static Core AI graph for Apple silicon by
visible-cx. The whole embedding pipeline is in the
graph: transformer β mean pooling β dense stack β L2 normalise, one call in, one 768-d
unit vector out. There is no host-side pooling to implement.
Two variants ship here: an fp32 bundle and an int8 bundle produced by compressing that graph in place. Their status is not the same β read the Status table before choosing.
Provenance
| Base checkpoint | google/embeddinggemma-300m |
| Recipe (fp32) | coreai-model-zoo/conversion/export_embeddinggemma.py --dtype float32 --seq-len 256 |
| Recipe index | models/qwen3-embedding/recipe.toml β ["embeddinggemma-300m"], status = "verified" |
| Upstream reference bundle | mlboydaisuke/embeddinggemma-300m-CoreAI @ d9a60a18d384484a8dab809b3070b82fb41458ce |
| Producer fingerprint | coreai-core 1.0.0b2 on both inner asset metadata.json files |
| Asset creation dates | 20260817T201458Z (fp32), 20260817T212021Z (int8) |
| Toolchain | coreai-torch 0.4.1, coreai-core 1.0.0b2, coreai-opt 0.2.1, torch 2.9.0 |
| Asset metadata | author: "Google DeepMind", license: "Gemma" (fp32 bundle) |
The int8/ bundle is not a second export. It is the fp32 bundle put through
coreai_opt.coreai_utils.quantize_weights(dtype=DType.INT8) β the Core AI graph
compression path, which rewrites an existing program's weight constants in place. There was
no PyTorch round-trip and no re-trace: the graph, the input signature and the tokenizer are
the fp32 bundle's, unchanged.
Contents
| Path | Bytes | Weights | Sequence length |
|---|---|---|---|
model/embeddinggemma-300m_float32_static.aimodel + model/reference.json + model/tokenizer/ |
1,277,545,730 | fp32 | 256 |
int8/embeddinggemma-300m_int8_static.aimodel + int8/reference.json + int8/tokenizer/ |
356,639,960 | int8 (graph-compressed) | 256 |
| File | fp32 (model/) |
int8 (int8/) |
|---|---|---|
main.mlirb |
1,244,157,766 | 323,252,231 (0.26Γ) |
main.hash |
32 | 32 |
asset metadata.json |
340 | 105 |
reference.json |
1,615 | 1,615 |
tokenizer/tokenizer.json |
33,385,272 | 33,385,272 |
tokenizer/tokenizer_config.json |
705 | 705 |
reference.json and tokenizer/ in int8/ are byte-identical copies of the fp32 bundle's,
carried so the folder is self-contained. reference.json is the exporter's torch oracle:
four reference texts and their pairwise cosines, for checking the source pipeline end to
end.
Requirements
- Apple silicon Mac, Core AI runtime, macOS 27+.
- Static input signature:
input_ids [1, 256] int32,attention_mask [1, 256] int32βembedding [1, 768]fp32, L2-normalised. Sequence length 256 is baked into the graph β pad or truncate to it; there is no dynamic-length variant. - Weights β 1.24 GB resident (fp32) or β 0.32 GB (int8). No KV cache; this is an encoder, so there is no per-token memory growth and no context ladder. Minimum practical machine memory: 8 GB.
Note the sequence-length difference from the Core ML artifact in this org, which is seq 128. The two are not drop-in substitutes for each other.
Performance
None measured, from either bundle. No embedding vector has been computed from either artifact on Apple silicon. Everything below the Provenance table is a build-and-bytes result, not a runtime result.
Status
| Artifact | Status |
|---|---|
model/ (fp32, seq 256) |
UNQUALIFIED β built and fingerprinted, runtime-unverified. The recipe is the zoo's status = "verified" entry, the producer fingerprint passes, and the exporter's pre-export gate (wrapper vs sentence_transformers.encode, cosine > 0.999) passed. No vector has been computed from the exported graph on Apple silicon. |
int8/ (graph-compressed) |
EXPERIMENTAL. Gate: cross-runtime vector parity against the fp32 bundle on Apple silicon β cosine similarity per vector and retrieval-rank agreement on a fixed corpus, not a spot-check of output shapes. Do not use for production embeddings until that passes. |
The int8 caveat is not boilerplate: fp16 embeddinggemma is already known to fail
vector-precision parity, because a full .to(float16) overflows Gemma3 activations and
emits NaN embeddings. A 4Γ compression passing parity is a hypothesis, not an expectation.
Verification
- Torch oracle agrees to ~6e-8.
reference.json's pairwise cosines from an independent rebuild match the published values to roughly seven decimal places (largest deviation ~6e-8). That is CPU float nondeterminism across machines, not a different model. It validates the source pipeline β checkpoint β prompts β pooling β dense β L2 β and explicitly does not validate the exported graph's execution. - Not byte-reproducible. Rebuilt from the same recipe,
main.mlirbdiffered from the published upstream bundle by +262 bytes, and two runs on the same host with an identical command differed from each other by +32 bytes. The tokenizer half is identical in every comparison. Integrity rests on per-file SHA-256 of the exact published bytes. (The siblingvisible-cx/embeddinggemma-300m-CoreMLrepo is bit-reproducible β a different supply-chain argument for the same model.) - No ANE-residency measurement exists for either bundle.
export_embeddinggemma.pyexposes only--dtype,--seq-len,--output-dir,--overwrite; there is no compute-unit flag.
License
EmbeddingGemma is Gemma-family. These bundles are a derivative of
google/embeddinggemma-300m, and use is subject to the
Gemma Terms of Use and the
Gemma Prohibited Use Policy. The fp32
bundle's own asset metadata carries license: "Gemma" and author: "Google DeepMind".
Those terms travel with the artifact and with any redistribution of it; the contribution
here is the conversion, not the weights.
Model tree for visible-cx/embeddinggemma-300m-CoreAI
Base model
google/embeddinggemma-300m