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 β so it is one call in, one
768-d unit vector out, with 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 Status before choosing.
β οΈ Neither bundle has produced an embedding vector on Apple silicon. Everything below the Provenance table is a build-and-bytes result, not a runtime result.
Contents
| Path | Bytes | Weights | Sequence length |
|---|---|---|---|
model/ β embeddinggemma-300m_float32_static.aimodel + reference.json + tokenizer/ |
1,277,545,730 | fp32 | 256 |
int8/ β embeddinggemma-300m_int8_static.aimodel + reference.json + 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.
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) |
These are an independent export from the zoo's verified recipe, at the same layout as the
zoo's own bundle β not a byte mirror of it. Rebuilt from the same recipe, main.mlirb differed
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.
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.
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, and none of the residency cautions that apply to the generative bundles in this org apply here.
- Minimum practical machine memory: 8 GB.
Note the sequence-length difference from the Core ML artifact in this org
(visible-cx/embeddinggemma-300m-CoreML),
which is seq 128. The two are not drop-in substitutes for each other.
Measurements
None, from either bundle. No embedding vector has been computed from either artifact on
Apple silicon: no throughput, no latency, no ANE-residency figure, no cross-runtime vector
parity. export_embeddinggemma.py exposes only --dtype, --seq-len, --output-dir,
--overwrite; there is no compute-unit flag to report either.
What is verified is the source pipeline, not the exported graph's execution:
- 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 checkpoint β prompts β pooling β dense β L2, and explicitly does not validate the exported graph. - The exporter's pre-export gate passed β the wrapper against
sentence_transformers.encode, cosine > 0.999.
The int8 caveat is not boilerplate. fp16 embeddinggemma is already a known failure at vector
precision, because a full .to(float16) overflows Gemma 3 activations and emits NaN embeddings.
A 4Γ compression passing parity is a hypothesis, not an expectation, and the gate it needs is
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.
Usage
Swift Package Manager, via CoreAIKit β a community package, not affiliated with Apple, requiring macOS 27 beta:
.package(url: "https://github.com/john-rocky/coreai-kit", branch: "main")
// target dependency: .product(name: "CoreAIKitEmbeddings", package: "coreai-kit")
TextEmbedder takes a bundle directory holding one *.aimodel plus a tokenizer/ folder, and
applies EmbeddingGemma's own query/document prompt prefixes:
import CoreAIKitEmbeddings
let url = try await ModelStore.default.download(
ModelID("visible-cx/embeddinggemma-300m-CoreAI", path: "model"))
let embedder = try await TextEmbedder(bundleAt: url, prompts: .embeddingGemma)
let q = try await embedder.embed(query: "how do I cancel my order")
let d = try await embedder.embed(document: "Orders can be cancelled within 24 hoursβ¦")
// both are L2-normalised [Float] of embedder.dimension (768); cosine == dot product
Two things to hold onto:
- Use the matching prompts.
.embeddingGemmasupplies the query and document prefixes this checkpoint was trained with. Embedding a query with the document prefix quietly degrades retrieval;embed(text:)applies no prefix at all and is for when you want that. - Both sides of a comparison must come from the same artifact. Vectors from this bundle and vectors from the Core ML sibling are not interchangeable β different sequence length, different runtime, and no measured parity between them.
embedder.sequenceLength reads 256 off the graph; text longer than that is truncated.
Integrity
Core AI .aimodel bundles are not byte-reproducible β the exporter is not deterministic
even against itself (see Provenance), so integrity here rests on per-file SHA-256 of the exact
published bytes, not on a rebuild. Every bundle carries main.hash, the raw 32 bytes of
sha256(main.mlirb); on the Hub the same value is recoverable from the LFS oid without fetching
the file.
The sibling visible-cx/embeddinggemma-300m-CoreML
repo is bit-reproducible for its weights β a different supply-chain argument for the same
model, and the exception in this org.
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 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 per vector and retrieval-rank agreement on a fixed corpus. Do not use for production embeddings until that passes. |
License
EmbeddingGemma is Gemma-family and the upstream checkpoint is gated on Hugging Face. 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