From b9fe98f59194955f2847140241cab32bb8664255 Mon Sep 17 00:00:00 2001 From: ogt Date: Mon, 27 Apr 2026 21:27:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20centralize=20config=20=E2=80=94=20H?= =?UTF-8?q?ERMES=5FURL,=20SSH=20params,=20validate=5Fcritical=5Fconfig()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - config.py: add HERMES_URL (default 192.168.0.111:11434), SSH jump params, validate_critical_config() - services/hermes_analyst_service.py: remove hardcoded HERMES_URL, import from config - app.py: call validate_critical_config() on startup, log warnings for optional missing vars Co-Authored-By: Claude Sonnet 4.6 --- app.py | 6 +++++- config.py | 21 ++++++++++++++++++++- services/hermes_analyst_service.py | 3 ++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index e686403..e3b5278 100644 --- a/app.py +++ b/app.py @@ -70,10 +70,14 @@ except ImportError as e: # ================= 🔧 3. 系統核心配置 ================= # 從 config.py 匯入必要的設定 -from config import EXCEL_EXPORT_DIR, DATABASE_TYPE +from config import EXCEL_EXPORT_DIR, DATABASE_TYPE, validate_critical_config sys_log = SystemLogger("Web_Server").get_logger() +# 驗證選用配置,缺少時輸出 warning(非 fatal) +for _warn in validate_critical_config(): + sys_log.warning(_warn) + # 🚩 V-Opt: 全域資料快取 (用於加速業績分析) _SALES_DF_CACHE = {} # 已棄用,保留相容性 _SALES_PROCESSED_CACHE = {} # V-Opt: 處理後資料快取 diff --git a/config.py b/config.py index ee10a2c..56ecec5 100644 --- a/config.py +++ b/config.py @@ -202,6 +202,15 @@ GRIST_URL = os.getenv('GRIST_URL', '') # Grist 資料協作連結 # ========================================== # AI 服務設定 # ========================================== +# Hermes AI Service (競價情報分析) +HERMES_URL = os.getenv('HERMES_URL', 'http://192.168.0.111:11434') + +# SSH Jump Configuration (AIOps AutoHeal) +SSH_JUMP_HOST = os.getenv('SSH_JUMP_HOST', '192.168.0.110') +SSH_JUMP_USER = os.getenv('SSH_JUMP_USER', 'wooo') +SSH_TARGET_HOST = os.getenv('SSH_TARGET_HOST', '192.168.0.188') +SSH_TARGET_USER = os.getenv('SSH_TARGET_USER', 'ollama') + # Ollama 本地 AI 服務 OLLAMA_HOST = os.getenv('OLLAMA_HOST', 'https://ollama.wooo.work/ollama') OLLAMA_MODEL = os.getenv('OLLAMA_MODEL', 'gemma3:4b') @@ -237,4 +246,14 @@ USE_MODULAR_ROUTES = { 'export': True, # 匯出功能 'import': True, # 匯入功能 'sales': True, # 業績分析 -} \ No newline at end of file +} + + +def validate_critical_config(): + """啟動時驗證選用配置,缺少則回傳 warning 清單(非 fatal)。""" + warnings = [] + optional_vars = ['HERMES_URL', 'GOOGLE_DRIVE_CREDENTIALS'] + for var in optional_vars: + if not os.getenv(var): + warnings.append(f"[Config] 選用設定 {var} 未設,部分功能可能停用") + return warnings \ No newline at end of file diff --git a/services/hermes_analyst_service.py b/services/hermes_analyst_service.py index 29870e0..51fbb1e 100644 --- a/services/hermes_analyst_service.py +++ b/services/hermes_analyst_service.py @@ -25,8 +25,9 @@ from sqlalchemy import text logger = logging.getLogger(__name__) +from config import HERMES_URL + HERMES_MODEL = "hermes3:latest" -HERMES_URL = "http://192.168.0.111:11434" HERMES_TIMEOUT = 120 # 秒,批量 300 筆最長預估 ~90s TOP_N = 20 # 輸出前 N 個威脅,控制 NemoTron 每次消耗配額