fix(alerts): bypass proxy timeout for GCP Ollama
This commit is contained in:
@@ -215,8 +215,8 @@ class Settings(BaseSettings):
|
||||
description="Phase 25 P0: DIAGNOSE NIM timeout (秒),實測 2.2-27.3s avg 10.6s,60s 含 buffer",
|
||||
)
|
||||
OLLAMA_DIAGNOSE_TIMEOUT_SECONDS: int = Field(
|
||||
default=200,
|
||||
description="Phase 25 P0: Ollama timeout (秒),實測 CPU-only 238s,保留欄位但 DIAGNOSE 不再走 Ollama",
|
||||
default=300,
|
||||
description="Ollama diagnose timeout (秒)。GCP qwen3:14b CPU-only can exceed the old 120s proxy limit.",
|
||||
)
|
||||
|
||||
# ==========================================================================
|
||||
@@ -534,7 +534,7 @@ class Settings(BaseSettings):
|
||||
),
|
||||
)
|
||||
INCIDENT_LLM_TIMEOUT_SECONDS: int = Field(
|
||||
default=240,
|
||||
default=360,
|
||||
description=(
|
||||
"Outer timeout for incident OpenClaw proposal generation. This must "
|
||||
"be long enough for the GCP-A/GCP-B/111 Ollama lane to complete "
|
||||
|
||||
@@ -70,11 +70,11 @@ def _agent_debate_global_timeout_seconds() -> float:
|
||||
90s guard. Keep a hard ceiling, but make it an explicit deployment knob.
|
||||
"""
|
||||
|
||||
raw = os.environ.get("AGENT_DEBATE_GLOBAL_TIMEOUT_SEC", "260.0")
|
||||
raw = os.environ.get("AGENT_DEBATE_GLOBAL_TIMEOUT_SEC", "420.0")
|
||||
try:
|
||||
timeout = float(raw)
|
||||
except (TypeError, ValueError):
|
||||
timeout = 260.0
|
||||
timeout = 420.0
|
||||
return max(timeout, 90.0)
|
||||
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ class OllamaProvider:
|
||||
options = registry.get_provider_options("ollama")
|
||||
|
||||
# P0 2026-04-04 Claude Code: per-task timeout(Option C 分情境)
|
||||
# FORCE_LOCAL/diagnose → OLLAMA_DIAGNOSE_TIMEOUT_SECONDS (200s,實測 ~173s)
|
||||
# FORCE_LOCAL/diagnose → OLLAMA_DIAGNOSE_TIMEOUT_SECONDS
|
||||
# 其他 → OPENCLAW_TIMEOUT(既有設定)
|
||||
task_type = (context or {}).get("task_type", "")
|
||||
if task_type in ("diagnose", "force_local"):
|
||||
|
||||
@@ -1137,7 +1137,7 @@ class OpenClawService:
|
||||
|
||||
# 2026-04-29 ogt + Claude Code: 注入 task_type 讓 Ollama 用正確 timeout
|
||||
# 根因: ai_providers/ollama.py:77 讀 context["task_type"] 決定 timeout
|
||||
# - "diagnose"/"force_local" → OLLAMA_DIAGNOSE_TIMEOUT_SECONDS=200s
|
||||
# - "diagnose"/"force_local" → OLLAMA_DIAGNOSE_TIMEOUT_SECONDS
|
||||
# - 其他/未注入 → OPENCLAW_TIMEOUT=30s(不夠 qwen2.5:7b 推理)
|
||||
# webhooks alert_context 從未注入 task_type → Ollama fallback 永遠 30s timeout
|
||||
# 對齊 decision.intent 後 Ollama fallback 真正能跑完
|
||||
|
||||
@@ -71,8 +71,8 @@ class TestTimeoutDefaults:
|
||||
f"Critic default timeout 期望 15.0,實際 {mod.AGENT_CRITIC_TIMEOUT_SEC}"
|
||||
)
|
||||
|
||||
def test_agent_debate_global_timeout_default_is_260(self, monkeypatch):
|
||||
"""Agent debate global timeout defaults to the GCP Ollama-first budget."""
|
||||
def test_agent_debate_global_timeout_default_is_420(self, monkeypatch):
|
||||
"""Agent debate global timeout defaults to the direct GCP qwen3 budget."""
|
||||
monkeypatch.delenv("AGENT_DEBATE_GLOBAL_TIMEOUT_SEC", raising=False)
|
||||
|
||||
if "src.services.agent_orchestrator" in sys.modules:
|
||||
@@ -80,7 +80,7 @@ class TestTimeoutDefaults:
|
||||
import src.services.agent_orchestrator as mod
|
||||
importlib.reload(mod)
|
||||
|
||||
assert mod.GLOBAL_TIMEOUT_SEC == 260.0
|
||||
assert mod.GLOBAL_TIMEOUT_SEC == 420.0
|
||||
|
||||
def test_deprecated_alias_matches_new_constant_diagnostician(self, monkeypatch):
|
||||
"""PHASE2_STEP_TIMEOUT_SEC alias 應等於 AGENT_DIAGNOSTICIAN_TIMEOUT_SEC(相容性保證)"""
|
||||
@@ -183,7 +183,7 @@ class TestEnvOverride:
|
||||
assert mod.PHASE2_STEP_TIMEOUT_SEC == mod.AGENT_CRITIC_TIMEOUT_SEC
|
||||
|
||||
def test_agent_debate_global_timeout_env_override(self, monkeypatch):
|
||||
"""AGENT_DEBATE_GLOBAL_TIMEOUT_SEC=300 覆蓋 default 260.0"""
|
||||
"""AGENT_DEBATE_GLOBAL_TIMEOUT_SEC=300 覆蓋 default 420.0"""
|
||||
monkeypatch.setenv("AGENT_DEBATE_GLOBAL_TIMEOUT_SEC", "300")
|
||||
|
||||
if "src.services.agent_orchestrator" in sys.modules:
|
||||
|
||||
Reference in New Issue
Block a user