a51161b5f3
- 新增 ai_whitelist 配置项,仅白名单用户可操作 AI 开关 - 新增 app/services/ai_state.py 运行时开关模块 - 系统管理菜单新增「AI 分析」按钮 (toggle_ai) - 监控配置、系统状态显示 AI 状态和 AI 标记统计 - pipeline 改用运行时开关 is_ai_enabled()
52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""AI 运行时状态 — 支持企微菜单动态开关"""
|
|
|
|
import logging
|
|
|
|
from app.config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# 运行时覆盖值,None 表示使用 settings.ai_enabled
|
|
_runtime_override: bool | None = None
|
|
|
|
|
|
def is_ai_enabled() -> bool:
|
|
"""获取 AI 分析当前是否启用(考虑运行时覆盖)"""
|
|
if _runtime_override is not None:
|
|
return _runtime_override
|
|
return settings.ai_enabled
|
|
|
|
|
|
def set_ai_enabled(enabled: bool) -> bool:
|
|
"""设置 AI 分析运行时开关,返回是否真的发生了变化"""
|
|
global _runtime_override
|
|
current = is_ai_enabled()
|
|
if enabled == current:
|
|
return False
|
|
_runtime_override = enabled
|
|
status = "启用" if enabled else "禁用"
|
|
logger.info("AI 分析已通过企微菜单%s", status)
|
|
return True
|
|
|
|
|
|
def get_ai_status_text() -> str:
|
|
"""获取 AI 状态文本"""
|
|
return "已启用" if is_ai_enabled() else "已禁用"
|
|
|
|
|
|
def get_whitelist() -> list[str]:
|
|
"""获取 AI 白名单用户列表"""
|
|
raw = settings.ai_whitelist
|
|
if not raw:
|
|
return []
|
|
return [u.strip() for u in raw.split(",") if u.strip()]
|
|
|
|
|
|
def is_whitelisted(user_id: str) -> bool:
|
|
"""检查用户是否在 AI 白名单中"""
|
|
whitelist = get_whitelist()
|
|
if not whitelist:
|
|
# 白名单为空则所有人都可以操作
|
|
return True
|
|
return user_id in whitelist
|