""" 精简配置模块(仅 LLM API 相关) 支持: 1. 环境变量(HF Spaces Secrets / .env 文件) 2. 运行时内存更新(界面输入框) """ import json import logging import os from pathlib import Path from typing import Optional from dotenv import load_dotenv logger = logging.getLogger(__name__) # ---- 内存状态 ---- _llm_provider = "deepseek" _openai_api_key = "" _openai_model = "gpt-4o-mini" _deepseek_api_key = "" _deepseek_model = "deepseek-chat" # 所有合法分类标签 ALL_CATEGORIES = [ "Auto reply", "career page", "connect more", "considered", "not hiring", "do not exist", "not fit", "Forward", ] # 分类标签 → 颜色映射(供前端展示用) CATEGORY_COLORS = { "Auto reply": "#94a3b8", # 灰 "career page": "#60a5fa", # 蓝 "connect more": "#34d399", # 绿 "considered": "#fbbf24", # 黄 "not hiring": "#f87171", # 红 "do not exist": "#d1d5db", # 浅灰 "not fit": "#fb923c", # 橙 "Forward": "#a78bfa", # 紫 } CATEGORY_EMOJI = { "Auto reply": "🤖", "career page": "🔗", "connect more": "💬", "considered": "📌", "not hiring": "🚫", "do not exist": "❌", "not fit": "👋", "Forward": "📤", } def load_env(): """从环境变量加载配置(支持 .env 文件和 HF Spaces Secrets)""" global _llm_provider, _openai_api_key, _openai_model global _deepseek_api_key, _deepseek_model load_dotenv() env_provider = os.getenv("LLM_PROVIDER") if env_provider: _llm_provider = env_provider env_openai_key = os.getenv("OPENAI_API_KEY") if env_openai_key: _openai_api_key = env_openai_key env_openai_model = os.getenv("OPENAI_MODEL") if env_openai_model: _openai_model = env_openai_model env_deepseek_key = os.getenv("DEEPSEEK_API_KEY") if env_deepseek_key: _deepseek_api_key = env_deepseek_key env_deepseek_model = os.getenv("DEEPSEEK_MODEL") if env_deepseek_model: _deepseek_model = env_deepseek_model def apply_runtime_config(provider: str, api_key: str, model: str): """运行时更新(来自界面输入框)""" global _llm_provider, _openai_api_key, _openai_model global _deepseek_api_key, _deepseek_model _llm_provider = provider if provider == "deepseek": _deepseek_api_key = api_key _deepseek_model = model or "deepseek-chat" else: _openai_api_key = api_key _openai_model = model or "gpt-4o-mini" def get_llm_provider() -> str: return _llm_provider def get_llm_api_key() -> str: return _deepseek_api_key if _llm_provider == "deepseek" else _openai_api_key def get_llm_model() -> str: return _deepseek_model if _llm_provider == "deepseek" else _openai_model def get_llm_base_url() -> Optional[str]: return "https://api.deepseek.com" if _llm_provider == "deepseek" else None def get_current_config() -> dict: return { "provider": _llm_provider, "api_key": get_llm_api_key(), "model": get_llm_model(), } # 启动时自动从环境变量加载 load_env()