44 Downloads Updated 2 weeks ago
ollama pull alibayram/embeddingmagibu2:270m
Updated 2 weeks ago
2 weeks ago
d8c82180c82d · 557MB
Turkish-first multimodal embeddings: text, images and audio in one 768-dimensional space.
A multilingual, multimodal embedding model from Magibu AI Research, built on Google’s EmbeddingGemma 2 with a Turkish tokenizer (Altus) and Turkish-focused distillation, retrieval and multimodal training. Release: v1.
Load only the modalities you need. All tags share the same text model, so their text vectors are interchangeable.
| Tag | Inputs | Size (GGUF / MLX) |
|---|---|---|
270m |
Text | 0.30 GB / 0.56 GB |
440m |
Text, image | 0.67 GB / 0.89 GB |
570m |
Text, audio | 0.92 GB / 1.17 GB |
740m, latest |
Text, image, audio | 1.29 GB / 1.50 GB |
ollama pull alibayram/embeddingmagibu2 # text, image, audio
ollama pull alibayram/embeddingmagibu2:270m # text only
Ollama does not add prompts: prepend them to the text yourself.
| Use | Prefix |
|---|---|
| Search query | task: search result \| query: |
| Document | title: none \| text: (or title: {title} \| text:) |
| Sentence similarity (both sides) | task: sentence similarity \| query: |
| Question answering query | task: question answering \| query: |
| Classification / clustering | task: classification \| query: / task: clustering \| query: |
import ollama
q = ollama.embed(model="alibayram/embeddingmagibu2:270m",
input=["task: search result | query: Türkiye'nin başkenti neresidir?"])
d = ollama.embed(model="alibayram/embeddingmagibu2:270m",
input=["title: none | text: Ankara, Türkiye'nin başkentidir.",
"title: none | text: İstanbul, Türkiye'nin en kalabalık şehridir."])
scores = [sum(a * b for a, b in zip(q.embeddings[0], v)) for v in d.embeddings] # vectors are L2-normalized
Images and audio go without a prompt; use the query prompt for the text matched to them.
import base64, requests
def embed(inputs, model="alibayram/embeddingmagibu2"):
r = requests.post("http://localhost:11434/api/embed", json={"model": model, "input": inputs})
return r.json()["embeddings"]
text = embed(["task: search result | query: Karda koşan bir köpek"])
image = embed([{"image": base64.b64encode(open("photo.jpg", "rb").read()).decode()}])
speech = embed([{"audio": base64.b64encode(open("clip.wav", "rb").read()).decode()}]) # 16 kHz mono WAV
Ollama’s API does not accept video; use the Hugging Face model for video.
Every tag holds two builds and Ollama picks one for your machine:
Checked against the PyTorch model (FP32) on the same inputs, 30 items each (Turkish MS MARCO queries/documents, Flickr8k-TR images with Turkish captions, FLEURS Turkish speech with transcripts), for every tag:
| PyTorch | MLX | GGUF | |
|---|---|---|---|
| Text cosine to PyTorch (min) | 0.9997 | 0.9996 | |
| Image cosine to PyTorch (mean / min) | 0.999 / 0.998 | 0.94 / 0.89 | |
| Audio cosine to PyTorch (mean) | 1.000 | 0.998 | |
| Caption → image Recall@1 | 1.00 | 1.00 | 0.93 |
| Speech → transcript Recall@1 | 0.87 | 0.87 | 0.87 |
The GGUF image gap comes from llama.cpp’s image path: Google’s own embeddinggemma-2 GGUF gives the same 0.94 on these images. GGUF files: gguf/ in magibu/embeddingmagibu2.