# M5 → M4 Embedding 部署方案

## 更換原因

mxbai-embed-large（1024D, ANE CoreML, English only）→ EmbeddingGemma 300M（768D, Python MPS, 多語）

## Portal Search 需要 embedding

M4 Portal 在做語意搜尋時需要 query → vector 的轉換，embedding 必須兩邊都能跑。

## 部署方式

```
M5（主力 + pipeline）                    M4（Portal + 備援）
─────────────────                       ─────────────────
EmbeddingGemma server (port 11436)      預設 call M5 API
Python MPS (Metal GPU)                  fallback: 自起 embed server
批量 vectorize pipeline 產出            雙重保障不中斷
```

## M4 安裝進度

| 項目 | 狀態 |
|------|------|
| `pip install torch transformers flask` | ✅ M4 已安裝 |
| 接受授權 + huggingface-cli login | ✅ M4 已完成 |
| `python3 scripts/embeddinggemma_server.py --port 11436` | ✅ 已啟動 |

##  Portal 前端修改

Portal embed client 加 retry 邏輯（⭕ M4 負責）：

```javascript
async function embedQuery(text) {
  const servers = [
    'http://192.168.110.201:11436/v1/embeddings',  // M5 主力
    'http://localhost:11436/v1/embeddings',          // M4 備援
  ];
  for (const url of servers) {
    try {
      const res = await fetch(url, { method: 'POST', ... });
      return data.data[0].embedding;
    } catch (e) { continue; }
  }
  throw new Error('Embedding servers unreachable');
}
```

## 目前進度

M5 正在跑 Charade 5W1H+（約剩 5h），完成後會自動用 EmbeddingGemma 產出 768D 向量存到 Qdrant。

## 相關文件

`API_V1.0.0/DEPLOY/EMBEDDING_DEPLOYMENT_V1.0.0.md`
