{
 "schema_version": "1.0",
 "page_kind": "article",
 "pack_kind": "generate",
 "slug": "embeddinggemma-2-shared-space",
 "title": "EmbeddingGemma 2's shared space for text, images and audio, measured on what we publish",
 "dek": "Google's EmbeddingGemma 2 against the Nomic AI pair, the text model our stores are built on and the image model one product's retrieval code is wired to, in ten tests registered before their first scores, on our own published photographs, code and music and on 1,000 public COCO captions: on COCO it puts the right photograph first for 729 captions against the Nomic pair's 497 (the pair on transformers 4.57.6; a set most likely inside both models' training data), on code it is ahead by 50 of 316 docstring queries with the code-retrieval prefix, on our 14 photographs it leads too (exploratory at 12 scenes), on audio (exploratory, no incumbent to beat) it tracks how strongly a music model's adapter was applied and a loudness change barely moves it, but a clip finds the request that made it 1 time in 12 (chance), and nothing in our stores changes.",
 "published": "2026-10-09",
 "series": [
  "bench"
 ],
 "licence": "CC BY 4.0",
 "status": "pending-judge",
 "pack_note": "no judge is seated, so every chip is held",
 "notice": "items with published:false are held and are not this page's published words",
 "source": {
  "url": "https://research.strata2signal.com/embeddinggemma-2-shared-space/",
  "md_url": "https://research.strata2signal.com/embeddinggemma-2-shared-space/index.md",
  "md_sha": "c4cf0459cee2fd61c6cbf1aa82efedccb82b77c16b6830c996726d72ad604901",
  "html_sha": "fad098e67950f64f1ba362eed25cbcd492322b0008a5a6c65f8c517d7f4f25c5",
  "anchors_sha": "4f174ddf851e6631fd53edac06bc199391c0d2baaf770a0b72440d5e766e7518"
 },
 "short": {
  "paragraph": "EmbeddingGemma 2, written EG2 in this page's verdict words, turns text, code, images, video and audio (per its model card) into one 768-number space. Our stores are built on Nomic AI's text model, and one product's retrieval code is wired to its image partner; the companion page, \"EmbeddingGemma 2, measured on release day against the embedder we already run\", found NO MATERIAL DIFFERENCE between EmbeddingGemma 2 and nomic's text model on our own text, so this bench tested images, audio and code.",
  "from_dek": false,
  "counts": {
   "words": 12013,
   "minutes": 55,
   "tables": 11,
   "kit": false
  },
  "bullets": []
 },
 "sections": [
  {
   "id": "where-this-page-starts",
   "heading": "Where this page starts from",
   "level": 2,
   "span": [
    7303,
    8695
   ],
   "chunks": [
    [
     7303,
     8695
    ]
   ],
   "chars": 1392,
   "digest": "EmbeddingGemma 2 is a checkpoint with three towers and one 768-number output. A companion page measured the text model on release day, finding no material difference. This page is bench E-3, which is exploratory-only by registration.",
   "digest_skipped": null
  },
  {
   "id": "what-we-tested",
   "heading": "What we tested, and why these tests",
   "level": 2,
   "span": [
    8695,
    15536
   ],
   "chunks": [
    [
     8695,
     15536
    ]
   ],
   "chars": 6841,
   "digest": "The workshop tested a core set of 14 photographs in 12 scenes and 40 published texts. It compared the challenger to an incumbent pair using various recipes and prefixes. Nine further tests were registered as an addendum, covering code, audio, speed, and memory.",
   "digest_skipped": null
  },
  {
   "id": "which-library",
   "heading": "The incumbent's image model: which library, and why",
   "level": 2,
   "span": [
    15536,
    18662
   ],
   "chunks": [
    [
     15536,
     18662
    ]
   ],
   "chars": 3126,
   "digest": "The incumbent's image model failed to load under the product's pinned library, so it was run on transformers 4.57.6. This library choice does not change text vectors. The image processor resizes every image to 224 × 224, dropping proportions.",
   "digest_skipped": null
  },
  {
   "id": "what-the-images-show",
   "heading": "What the images show",
   "level": 2,
   "span": [
    18662,
    36879
   ],
   "chunks": [
    [
     18662,
     36879
    ]
   ],
   "chars": 18217,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-the-audio-shows",
   "heading": "What the audio shows",
   "level": 2,
   "span": [
    36879,
    40977
   ],
   "chunks": [
    [
     36879,
     40977
    ]
   ],
   "chars": 4098,
   "digest": "The audio test used 133 clips. The RMS ruler reproduces, and the audio tower is a steadier ruler. However, the request probe is at chance, as a clip cannot find its request.",
   "digest_skipped": null
  },
  {
   "id": "what-the-code-shows",
   "heading": "What the code shows",
   "level": 2,
   "span": [
    40977,
    46926
   ],
   "chunks": [
    [
     40977,
     46926
    ]
   ],
   "chars": 5949,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "speed",
   "heading": "Speed and memory: measured, contended, not compared",
   "level": 2,
   "span": [
    46926,
    49950
   ],
   "chunks": [
    [
     46926,
     49950
    ]
   ],
   "chars": 3024,
   "digest": "Every configuration ran with other jobs on the laptop, so every row is CONTENDED. The speed and memory measurements include CPU seconds, wall-clock time, and resident/peak memory.",
   "digest_skipped": null
  },
  {
   "id": "the-audit-and-the-verify",
   "heading": "The audit and the verifies",
   "level": 2,
   "span": [
    49950,
    53340
   ],
   "chunks": [
    [
     49950,
     53340
    ]
   ],
   "chars": 3390,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "how-to-run-it",
   "heading": "How to run it yourself, and the traps",
   "level": 2,
   "span": [
    53340,
    61417
   ],
   "chunks": [
    [
     53340,
     61417
    ]
   ],
   "chars": 8077,
   "digest": "Users can run the models through Google's code or llama.cpp. Traps include the importance of text prefixes, the danger of using float16, the image token budget, and the fact that llama.cpp image vectors are not Google's.",
   "digest_skipped": null
  },
  {
   "id": "what-moving-would-take",
   "heading": "What moving from nomic to EmbeddingGemma 2 would take, and why we are not doing it",
   "level": 2,
   "span": [
    61417,
    67197
   ],
   "chunks": [
    [
     61417,
     67197
    ]
   ],
   "chars": 5780,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-this-bench-does-not-say",
   "heading": "What this bench does not say",
   "level": 2,
   "span": [
    67197,
    68959
   ],
   "chunks": [
    [
     67197,
     68959
    ]
   ],
   "chars": 1762,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-to-take-with-you",
   "heading": "What to take with you",
   "level": 2,
   "span": [
    68959,
    71011
   ],
   "chunks": [
    [
     68959,
     71011
    ]
   ],
   "chars": 2052,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "how-to-check-our-work-and-see-it-live",
   "heading": "How to check our work — and see it live",
   "level": 2,
   "span": [
    71011,
    73987
   ],
   "chunks": [
    [
     71011,
     73987
    ]
   ],
   "chars": 2976,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "the-rest-of-the-seminar",
   "heading": "The rest of the seminar",
   "level": 2,
   "span": [
    73987,
    75434
   ],
   "chunks": [
    [
     73987,
     75434
    ]
   ],
   "chars": 1447,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "who-ran-this-and-thanks",
   "heading": "Who ran this, and thanks",
   "level": 2,
   "span": [
    75434,
    77139
   ],
   "chunks": [
    [
     75434,
     77139
    ]
   ],
   "chars": 1705,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "changes",
   "heading": "Changes",
   "level": 2,
   "span": [
    77139,
    78996
   ],
   "chunks": [
    [
     77139,
     78996
    ]
   ],
   "chars": 1857,
   "digest": "The article has undergone several drafts between 2026-10-07 and 2026-10-09, including folding in critic rounds and explaining terms. Corrections and later measurements will be added below.",
   "digest_skipped": null
  }
 ],
 "chips": [
  {
   "id": "c-51f7915a",
   "q": "how does embeddinggemma 2 compare to nomic on text retrieval?",
   "a": "On the 68-question bench, nomic-embed-text scored 44 hits in the top 8, while EmbeddingGemma 2 scored 45 against a pass mark of 51, resulting in a verdict of NO MATERIAL DIFFERENCE.",
   "cites": [
    "where-this-page-starts"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-65e2bbcf",
   "q": "what defines the core test set for the image benchmarks?",
   "a": "The core set consists of 14 photographs across 12 distinct scenes and 40 published texts, including 16 alt texts, 15 captions, and 9 thumbnail descriptions.",
   "cites": [
    "what-we-tested"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-fd35f6bc",
   "q": "how does the library choice affect nomic's image model loading?",
   "a": "The product's pinned library version cannot load the nomic image model due to a validation error; instead, the bench used transformers 4.57.6 to run the nomic image arms.",
   "cites": [
    "which-library"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-0749b315",
   "q": "how does the audio tower respond to changes in adapter strength?",
   "a": "The audio tower tracks the adapter's strength steadily, with the Spearman rank correlation between the Chopin dial's five strengths and their distance from strength 0 being 1.0.",
   "cites": [
    "what-the-audio-shows"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-0ff65220",
   "q": "what are the primary risks of using float16 for this model?",
   "a": "The model card forbids float16 because activations can overflow, leading to NaN or silently degraded vectors.",
   "cites": [
    "how-to-run-it"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-7e737719",
   "q": "what would a transition to embeddinggemma 2 require for a store?",
   "a": "A transition would require re-embedding all existing vectors, changing prefixes, and implementing a provenance guard to tie every vector to the digest of the files that created it.",
   "cites": [
    "what-moving-would-take"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  }
 ],
 "related": [
  {
   "slug": "embeddinggemma-2-on-release-day",
   "why": "shares ground with § Speed and memory: measured, contended, not compared · § Speed: not cleanly measured, and not compared"
  },
  {
   "slug": "ollama-and-vllm-on-one-rtx-3090",
   "why": "shares ground with § Speed and memory: measured, contended, not compared · § What each holds, and how fast it starts"
  },
  {
   "slug": "chopin-in-five-minutes",
   "why": "shares ground with § What the audio shows · § The dial"
  }
 ],
 "thanks": "## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThe models: **EmbeddingGemma 2** (`google/embeddinggemma-2`, Google, Apache 2.0, revision `914f7f89…`), its GGUF conversions and projectors from **Unsloth** (`unsloth/embeddinggemma-2-GGUF`, revision `ba388827…`); **nomic-embed-text-v1.5**, **nomic-embed-vision-v1.5** and the `nomic-bert-2048` loading code from **Nomic AI** (Apache 2.0), at the revisions above. The data: this workshop's own released photographs, paintings, screenshots, kit code and music; **COCO** (the COCO Consortium; annotations CC BY 4.0; images under the Flickr terms, used for evaluation only). The runtimes: **llama.cpp** (ggml-org) at commit `4fbc76d`, **sentence-transformers** 6.1.0 over **transformers** 5.19.0 and **PyTorch** 2.14.1 (CPU build) for the challenger; **transformers** 5.12.1 (the product's pin; its text model) and 4.57.6 (the incumbent's image arms, outside the product's pin) over **PyTorch** 2.12.1 (CPU build) for the incumbent. The licences this shelf has read first-hand are on its [licences](https://research.strata2signal.com/licences/) page.\n\nA small human team asked for this bench on the day the model's text half was measured, chose what it would and would not claim, and signed the numbers. A fleet of AI agents wrote the registration and its addenda, chose the nine further tests, built the sets from the published pages, ran the arms in isolated units, made the two decisions the second round waited on (under that team's standing instruction, each recorded with its time before the arms it admitted), audited and verified the runs with independent code, and drafted this page under that team's rulings. No visitor's data was involved.",
 "kit": null,
 "seat_class": {
  "writer": "gemma-class",
  "judge": null,
  "writer_runtime": "vllm"
 },
 "bench": {
  "bullets_written": 3,
  "bullets_kept": 0,
  "digests_written": 13,
  "digests_kept": 7,
  "chips_written": 8,
  "chips_kept": 6,
  "chips_grounded": 0,
  "chips_published": 0,
  "dropped_by": {
   "new_noun": 0,
   "figure": 1,
   "length": 0,
   "cite": 0,
   "judge": 0,
   "quote": 0,
   "directive": 0,
   "redaction": 0,
   "profanity": 0,
   "identifier": 0,
   "bare_figure": 1,
   "house_voice": 0,
   "editorial": 0,
   "hand-edit": 9
  },
  "new_noun_tokens_checked": [
   "0",
   "0.0008",
   "0.158",
   "0.158228",
   "0.497",
   "0.547468",
   "0.729",
   "000",
   "000-image",
   "1",
   "1.0",
   "12",
   "133",
   "14",
   "15",
   "16",
   "2",
   "2014",
   "2026-10-07",
   "2026-10-09",
   "224",
   "316",
   "4.57.6",
   "40",
   "44",
   "45",
   "51",
   "68-question",
   "768-number",
   "8",
   "8-bit",
   "9",
   "AHEAD",
   "BM25",
   "COCO",
   "CODE",
   "CONTENDED",
   "CPU",
   "Chopin",
   "DIFFERENCE",
   "E-3",
   "EG2",
   "EmbeddingGemma",
   "Google's",
   "MATERIAL",
   "NaN",
   "Ollama",
   "RMS",
   "Spearman",
   "VOID",
   "float16"
  ],
  "new_noun_tokens_withheld": 0,
  "figure_definition": "v3",
  "figure_boundary": "guarded",
  "drops": [
   {
    "kind": "digest",
    "reason": "figure",
    "item": "EmbeddingGemma 2 is ahead on code, with a gated gain of +0.158 recall@1. The gain depends on the code-retrieval prefix. BM25 keyword search trails every dense arm.",
    "detail": "figures absent: ['0.158']"
   },
   {
    "kind": "bullet",
    "reason": "bare_figure",
    "item": "the text model on release day measured 45",
    "detail": "the cited section writes this figure as '45 against' and the bullet prints '45' alone"
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 42,
    "text_sha": "2a94dbda1add",
    "figure": "0.547468",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "names no model and loses the condition its gain rests on: 0.547468 is the recall@1 of EmbeddingGemma 2 on 316 docstring queries with the code-retrieval prefix, and the section shows it falling to 0.496835 with the search prefix and to 0.401899 with none",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: names no model and loses the condition its gain rests on: 0.547468 is the recall@1 of EmbeddingGemma 2 on 316 docstring queries with the code-retrieval prefix, and the section shows it falling to 0.496835 with the search prefix and to 0.401899 with none. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 57,
    "text_sha": "88acbeb9268c",
    "figure": "0.0008",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "loses its unit and its setting: the page gives at most 0.0008 of cosine, between two llama.cpp servers with the 8-bit and the 16-bit vision projector on 237 images, an exploratory test; and the page prints that measurement with the word registered for it, QUANT-HARMFUL, which the line leaves out",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: loses its unit and its setting: the page gives at most 0.0008 of cosine, between two llama.cpp servers with the 8-bit and the 16-bit vision projector on 237 images, an exploratory test; and the page prints that measurement with the word registered for it, QUANT-HARMFUL, which the line leaves out. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 215,
    "text_sha": "8c1cb4bb0d24",
    "section": "what-the-images-show",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the digest says EmbeddingGemma 2 is ahead without naming the side it beat, the nomic pair on transformers 4.57.6, a release the product does not pin; and it gives the public set as clearing the house bar without the caveat the section sets beside it, that the set most likely sits inside the training distributions of both models",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the digest says EmbeddingGemma 2 is ahead without naming the side it beat, the nomic pair on transformers 4.57.6, a release the product does not pin; and it gives the public set as clearing the house bar without the caveat the section sets beside it, that the set most likely sits inside the training distributions of both models. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 266,
    "text_sha": "eacf1cb76cc8",
    "section": "the-audit-and-the-verify",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the digest has both verifies confirm that every word and prediction follows its registered rule; the section says the first verify found one prediction word printed off its rule, the server-parity prediction, and it was the second verify that found every word and prediction word on its rule",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the digest has both verifies confirm that every word and prediction follows its registered rule; the section says the first verify found one prediction word printed off its rule, the server-parity prediction, and it was the second verify that found every word and prediction word on its rule. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 247,
    "text_sha": "6e907982e7c3",
    "section": "what-moving-would-take",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the digest says the Ollama gap and the re-embed cost do not clear the pass mark; the section holds measured results to the pass mark, says the public image set and the code set clear it but neither is a store the workshop runs and nothing measured on one of its stores does, and sets the re-embed and the Ollama gap against a switch as costs",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the digest says the Ollama gap and the re-embed cost do not clear the pass mark; the section holds measured results to the pass mark, says the public image set and the code set clear it but neither is a store the workshop runs and nothing measured on one of its stores does, and sets the re-embed and the Ollama gap against a switch as costs. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 205,
    "text_sha": "934a603702b3",
    "section": "what-this-bench-does-not-say",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the digest says the parity gates cannot catch an error both models share; the section says the gates show that runtimes agree with the reference, so the error they cannot catch is one a runtime and the reference share, one model run two ways, not two models",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the digest says the parity gates cannot catch an error both models share; the section says the gates show that runtimes agree with the reference, so the error they cannot catch is one a runtime and the reference share, one model run two ways, not two models. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 199,
    "text_sha": "6b81e15aa903",
    "section": "what-to-take-with-you",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the digest has EmbeddingGemma 2 ahead on code without the code-retrieval prefix the gain depends on, and ahead on images without the nomic pair on transformers 4.57.6 or the training-data caveat of the public set, each of which the section prints beside its result",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the digest has EmbeddingGemma 2 ahead on code without the code-retrieval prefix the gain depends on, and ahead on images without the nomic pair on transformers 4.57.6 or the training-data caveat of the public set, each of which the section prints beside its result. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 200,
    "text_sha": "d6b2c94fb976",
    "chip_id": "c-b6c9b87c",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the answer gives 0.729 against 0.497 on the public COCO set without the two conditions the page puts on those figures: the nomic model ran on transformers 4.57.6, outside the pin of the product, and the set most likely sits inside the training distributions of both models",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the answer gives 0.729 against 0.497 on the public COCO set without the two conditions the page puts on those figures: the nomic model ran on transformers 4.57.6, outside the pin of the product, and the set most likely sits inside the training distributions of both models. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 237,
    "text_sha": "3c9c4e1801a5",
    "chip_id": "c-e276df9f",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-09",
    "why": "the answer gives the code win, 0.547468 and 0.158228 above nomic with the verdict EG2 AHEAD ON CODE, without the code-retrieval prefix it was measured with; the section shows the margin falling to 0.107595 with the search prefix and to 0.012658 with none",
    "detail": "removed from this pack by hand on 2026-10-09 (UTC), after the writer ran and after the gates had counted: the answer gives the code win, 0.547468 and 0.158228 above nomic with the verdict EG2 AHEAD ON CODE, without the code-retrieval prefix it was measured with; the section shows the margin falling to 0.107595 with the search prefix and to 0.012658 with none. Not a gate drop, and recorded here so the ledger adds up."
   }
  ]
 },
 "generated_utc": "2026-10-09T12:14:25Z"
}
