diff --git a/services/event_router.py b/services/event_router.py index ef11102..d963f8d 100644 --- a/services/event_router.py +++ b/services/event_router.py @@ -231,7 +231,12 @@ def _render_l2_with_fallback(event: dict) -> str: # ===================================================================== _HERMES_URL = os.getenv("HERMES_URL", "http://192.168.0.111:11434") _HERMES_MODEL = os.getenv("HERMES_MODEL", "hermes3:latest") -_HERMES_TIMEOUT = int(os.getenv("HERMES_TIMEOUT", "30")) +# 放寬 timeout:hermes3 warm 後 <1s,冷啟動 30-60s(deepseek-r1 佔 VRAM 時會切換) +# 設 HERMES_TIMEOUT=0 表示無限制(僅受 OS TCP 層保底 ~120s) +_HERMES_TIMEOUT_RAW = int(os.getenv("HERMES_TIMEOUT", "180")) +_HERMES_TIMEOUT: float | None = None if _HERMES_TIMEOUT_RAW <= 0 else _HERMES_TIMEOUT_RAW +# keep_alive=24h 讓 hermes3 常駐記憶體,避免被其他客戶端切換掉造成冷啟動 +_HERMES_KEEP_ALIVE = os.getenv("HERMES_KEEP_ALIVE", "24h") _HERMES_OBSERVE_PROMPT = """你是一個 SRE 助手,任務是把技術錯誤翻譯成人類可理解的摘要。 @@ -267,6 +272,7 @@ def _hermes_observe_parsed(event: dict) -> dict | None: "system": _HERMES_OBSERVE_PROMPT, "prompt": user_prompt, "stream": False, + "keep_alive": _HERMES_KEEP_ALIVE, # 讓模型常駐 VRAM,避免冷切換 "options": {"temperature": 0.1, "num_predict": 300}, }, timeout=_HERMES_TIMEOUT,