# M4 Embedding Benchmark (含 ANE CoreML)

**作者**：M4  
**日期**：2026-05-07  

---

## 三種方案比較

| 方案 | Engine | Model | Dim | short 5B | long 1000B | 穩定度 | 硬體 |
|------|--------|-------|-----|----------|-----------|--------|------|
| **CoreML ANE** | mxbai-embed-large.mlpackage | mxbai-embed-large | **1024** | **69ms** | **63ms** | ✅ 不受 text length 影響 | **ANE** |
| Ollama GPU | ollama @ 11434 | mxbai-embed-large | 1024 | 50ms | 145ms | ⚠️ 隨 text length 增加 | Metal GPU |
| llama.cpp GPU | llama-server @ 8082 | bge-m3 Q8_0 | 1024 | 63ms | 220ms | ⚠️ 隨 text length 增加 | Metal GPU |

---

## 關鍵發現

**CoreML ANE 穩定度最高** — 因為模型固定 padding 到 512 tokens，不論 text 長度 latency 都維持在 63-69ms。Ollama 和 llama.cpp 則隨 text length 線性增加。

---

## 建議

1. **Primary**: CoreML ANE (mxbai-embed-large.mlpackage) — 最穩定、最低功耗
2. **Fallback**: Ollama mxbai-embed-large — 已整合進 codebase
3. **備用**: llama.cpp bge-m3 — 多語言需求時使用

## CoreML 模型位置

```
/Users/accusys/momentry_core_0.1/models/mxbai-embed-large-v1.mlpackage
```

## 更新 search.rs

改為使用 CoreML ANE embedding 的變更由 M5 處理。
