diff --git a/apps/api/src/api/v1/incidents.py b/apps/api/src/api/v1/incidents.py index ed1f8ceb..bcfa11d3 100644 --- a/apps/api/src/api/v1/incidents.py +++ b/apps/api/src/api/v1/incidents.py @@ -166,10 +166,20 @@ async def list_incidents() -> IncidentListResponse: else: # 無快取 → 背景觸發,本次返回 None(前端看到 decision=null 會 poll) responses.append(IncidentResponse.from_incident(incident, None)) - timeout = 120.0 if incident.severity in (Severity.P0, Severity.P1) else 180.0 - background_tasks.append( - decision_manager.get_or_create_decision(incident=incident, timeout_sec=timeout) - ) + # 2026-04-16 Claude Sonnet 4.6: 只對 48h 內的 incident 觸發 AI 分析 + # 舊 incident token 每小時過期,若不限制會反覆重新分析歷史事件 → Telegram 洪水 + from datetime import datetime, timezone, timedelta + _created = getattr(incident, "created_at", None) + _too_old = False + if _created: + if _created.tzinfo is None: + _created = _created.replace(tzinfo=timezone.utc) + _too_old = (_created < datetime.now(timezone.utc) - timedelta(hours=48)) + if not _too_old: + timeout = 120.0 if incident.severity in (Severity.P0, Severity.P1) else 180.0 + background_tasks.append( + decision_manager.get_or_create_decision(incident=incident, timeout_sec=timeout) + ) except Exception as e: logger.warning( "decision_generation_failed",