fix(post-3.5g): restore generate_embedding for KM dual-write (CRIT-1)
從 4349db2~1 撈回 OllamaService.generate_embedding,補齊被誤刪的方法。
問題:
- services/openclaw_learning_service.py:67 仍呼叫 ollama_service.generate_embedding(...)
- 4349db2 大改時把這個方法刪掉,導致每次 NemoTron 寫入學習資料時觸發
AttributeError: 'OllamaService' object has no attribute 'generate_embedding'
- pgvector KM 因此完全停寫,違反 ADR-007 雙寫鐵律
修法:
- 把 method paste 回 OllamaService 末端(line 508)
- 對齊現代 config:os 已在檔案頂部 import,移除方法內重複 import
- embedding 走 EMBEDDING_HOST(Hermes 主機,內網免認證)
- model 預設 bge-m3:latest(ADR-003 對齊)
驗證:
- AST parse OK
- grep 'def generate_embedding' 已存在
Critic finding: CRIT-1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -505,6 +505,37 @@ class OllamaService:
|
||||
|
||||
return self.generate(prompt, system_prompt=system_prompt, temperature=0.5, timeout=120)
|
||||
|
||||
def generate_embedding(self, text: str, model: str = "bge-m3:latest",
|
||||
host: str = None) -> List[float]:
|
||||
"""
|
||||
[ADR-007, Step 3] 呼叫 Ollama API 將文字轉換為向量 Embedding
|
||||
|
||||
2026-04-19 更新(ADR-003 對齊):
|
||||
embedding 預設走 Hermes 主機 `EMBEDDING_HOST`(env: EMBEDDING_HOST
|
||||
→ fallback http://192.168.0.111:11434,內網免認證),
|
||||
避免 self.host 若指向公開 ollama.wooo.work 時回 401。
|
||||
可透過 host 參數 override。
|
||||
"""
|
||||
target_host = host or os.getenv("EMBEDDING_HOST", "http://192.168.0.111:11434")
|
||||
try:
|
||||
payload = {"model": model, "prompt": text}
|
||||
response = requests.post(
|
||||
f"{target_host}/api/embeddings",
|
||||
json=payload,
|
||||
timeout=60,
|
||||
)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
return data.get("embedding", [])
|
||||
else:
|
||||
logger.error(
|
||||
f"Ollama Embed Error HTTP {response.status_code} @ {target_host}: {response.text[:200]}"
|
||||
)
|
||||
return []
|
||||
except Exception as e:
|
||||
logger.error(f"Ollama Embed Exception @ {target_host}: {e}")
|
||||
return []
|
||||
|
||||
|
||||
# 建立全域服務實例
|
||||
ollama_service = OllamaService()
|
||||
|
||||
Reference in New Issue
Block a user