Picture a maintenance contractor three floors underground. No bars, no Wi-Fi, a pump that's failing again. Somewhere on his phone there's a voice note from last year where the previous tech explained exactly what he did to it. Good luck finding it by scrolling.
That's the problem most "AI search" demos skip. Real archives aren't tidy folders of PDFs. They're photos with names like IMG_4471, WhatsApp voice notes, shaky repair videos and the odd scanned invoice. And the people who need them most are often the ones with the worst connection.
Google's EmbeddingGemma 2, released on 6 October, is the first open model I've seen that takes that problem seriously on a phone.
It maps text, code, images, audio and video into one shared 768-number vector space. So a typed question can land next to a voice note or a video clip without a transcript in the middle. One model, open weights, Apache 2.0, and it's small enough to run on the device that's in the basement.
The 13-second version:
Watch the explainer video or view the one-page infographic.
The numbers
Here's what's in the box, from Google's launch post and the model card.
Spec EmbeddingGemma 2
Total parameters 740M
text backbone + embedder 270M
vision encoder 170M (optional)
audio encoder 300M (optional)
Output 768d, truncatable to 512 / 256 / 128
Context 8,192 tokens, shared by all inputs
Languages 100+
Licence Apache 2.0
RAM on a phone (quantized) ~191MB text only, ~567MB full multimodal
The encoders are modular, which matters more than it sounds. If your use case is photos and text, you load 440M parameters, not 740M. Text plus audio is 570M.
On benchmarks it holds its own as a text model and adds the rest on top:
Benchmark EmbeddingGemma 2 EmbeddingGemma 1
MTEB multilingual (text) 61.36 61.15
MTEB code 78.68 68.76
MMEB v2 image (Hit@1) 57.28 n/a
MMEB v2 visual docs (NDCG@5) 67.84 n/a
MMEB v2 video (Hit@1) 50.67 n/a
MSEB audio retrieval (MRR@10) 69.54 n/a
The code jump is the quiet headline. Almost ten points on MTEB code makes it a serious option for local codebase search and coding-agent retrieval too.
Five use cases I'd actually build
Field work, offline. Index a contractor's or technician's years of site photos, voice memos and repair reports on the device. "Leak near the boiler, 2024" pulls back the photo, the audio note and the report together. No signal needed.
Property management archives. Building managers live in WhatsApp. Audio complaints, videos of damp walls, PDFs of quotes. Drop all of it into one index and "seepage complaints in block C" becomes a question with an answer, not an afternoon of scrolling.
Creative and marketing libraries. Every agency has a drive full of assets nobody can find because nobody remembers the project name. Search by what the image looks like: "teal product shoot on sand." Metadata becomes optional.
Inbox and attachment routing. This one is underrated. Embed each incoming attachment, compare it to a handful of labelled examples per team, and route by similarity. A damage photo goes to maintenance, an invoice goes to accounts. That's a classification step that doesn't need a generative model call at all, so it's cheap, fast and predictable.
Private, offline RAG. Google is explicit that this is meant to pair with Gemma 4. EmbeddingGemma 2 does the retrieval over local files, Gemma 4 does the reasoning. The whole agent stays on the laptop or phone. For regulated industries, or anyone who's been told "no customer data goes to a cloud API", that's the difference between a pilot and a no.
What this changes
One index instead of four pipelines. The usual multimodal search stack is a text embedder, an image model, a speech-to-text step and some frame-sampling video pipeline, glued together and kept in sync. A shared space collapses that into one model and one vector store.
Transcription stops being a dependency. Audio is embedded directly. You can still transcribe for display, but retrieval no longer depends on the transcript being right.
Storage gets cheap. Matryoshka truncation lets you store 256d vectors at roughly a third of the size with small quality loss on most benchmarks. For text-heavy workloads 128d gives you up to a 6x saving.
The privacy conversation gets shorter. When the embedding and the retrieval happen on the device, there's no data processing agreement to negotiate for that step.
What it doesn't tell you
The context window is shared. All modalities draw from the same 8,192 tokens. That's roughly 327 seconds of audio, about 58 video frames at the default budget, or about 29 images per input. Long recordings and videos need chunking, and your chunking strategy will decide your recall more than the model will.
Video is the weakest score. 50.67 Hit@1 on MMEB video is respectable for its size but well below its text and audio numbers. I'd test hard before promising "search inside our video library" to anyone.
128d is not free for multimodal. The model card is clear that quality holds down to 256d, but 128d drops multimodal retrieval sharply (MMEB overall falls from 59.01 to 45.65). Keep 128d for text-only indexes.
Precision gotcha. Run it in bfloat16 or float32. In float16 it can return NaNs or quietly degraded vectors with no error. That's the kind of bug that ships.
Benchmarks aren't your archive. WhatsApp audio recorded next to a generator in a stairwell is not a benchmark clip. Test on your own mess.
How I'd test it
- Pick one real archive with mixed media, a few thousand items, and write 30 questions people actually ask about it.
- Index it twice: once at 768d, once at 256d, loading only the encoders you need.
- Measure recall@10 per modality, not just overall, so a weak video score doesn't hide behind strong text.
- Chunk audio and video at a few lengths and see where recall stops improving.
- Run the whole thing with the network off. If it doesn't work in airplane mode, it's not the use case.
The interesting shift isn't a benchmark point. It's that "search everything we own" no longer needs a cloud contract.
Sources: Google: EmbeddingGemma 2 launch post, EmbeddingGemma 2 model card on Hugging Face, Unsloth: run and fine-tune EmbeddingGemma 2. Related: Adding agents to software you already run