From 801b08a4b7a09a6062e91f741daeeeeeafd6c07d Mon Sep 17 00:00:00 2001 From: OG T Date: Thu, 26 Mar 2026 20:10:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20AI=5FFALLBACK=5FORDER=20=E7=84=A1?= =?UTF-8?q?=E6=B3=95=E6=AD=A3=E7=A2=BA=E8=A7=A3=E6=9E=90=20JSON=20?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: ConfigMap 用 JSON '["gemini","ollama","claude"]' 但 validator 用 split(",") 解析,導致無法匹配任何 provider 結果永遠用 default ["ollama","gemini","claude"] 影響: /api/v1/incidents 超時 (Ollama CPU 推理慢) 修復: 新增 JSON 格式支援,優先嘗試 json.loads() 這是根因修復,不是重啟! Co-Authored-By: Claude Opus 4.5 --- apps/api/src/core/config.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/apps/api/src/core/config.py b/apps/api/src/core/config.py index 1a8f18af..dc73049b 100644 --- a/apps/api/src/core/config.py +++ b/apps/api/src/core/config.py @@ -214,7 +214,26 @@ class Settings(BaseSettings): @field_validator("AI_FALLBACK_ORDER", mode="before") @classmethod def parse_ai_fallback(cls, v: str | list[str]) -> list[str]: + """ + 解析 AI_FALLBACK_ORDER,支援三種格式: + 1. JSON: '["gemini","ollama","claude"]' + 2. CSV: 'gemini,ollama,claude' + 3. List: ["gemini", "ollama", "claude"] + + 2026-03-27 修復: ConfigMap 用 JSON 格式,原本只支援 CSV + """ + import json + if isinstance(v, str): + v = v.strip() + # 嘗試 JSON 解析 (ConfigMap 格式) + if v.startswith("["): + try: + parsed = json.loads(v) + return [p.strip().lower() for p in parsed] + except json.JSONDecodeError: + pass # 降級到 CSV 解析 + # CSV 格式 return [provider.strip().lower() for provider in v.split(",")] return [p.lower() for p in v]