Files

80 lines
3.3 KiB
Python

"""全局配置:环境变量优先,提供默认值便于开箱即用。"""
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent # backend/
class Settings:
# ---- 基础 ----
APP_NAME = "随身助手"
API_PREFIX = "/api"
DEBUG = os.environ.get("DEBUG", "1") == "1"
HOST = os.environ.get("HOST", "0.0.0.0")
PORT = int(os.environ.get("PORT", "16080"))
PUBLIC_BASE_URL = os.environ.get("PUBLIC_BASE_URL", "http://121.40.164.32:16080")
# ---- 数据库 ----
DATABASE_URL = os.environ.get("DATABASE_URL", f"sqlite:///{BASE_DIR}/data/assistant.db")
# ---- JWT ----
SECRET_KEY = os.environ.get("SECRET_KEY", "companion-assistant-secret-change-me-7f3a9c")
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = int(os.environ.get("ACCESS_TOKEN_EXPIRE_MINUTES", "43200")) # 30 天
# ---- 存储 ----
DATA_DIR = BASE_DIR / "data"
UPLOAD_DIR = DATA_DIR / "uploads"
WORKSPACE_DIR = DATA_DIR / "workspace"
MAX_UPLOAD_MB = int(os.environ.get("MAX_UPLOAD_MB", "500"))
# ---- LLM 提供商(OpenAI 兼容)----
# api_key 留空则使用环境变量 <NAME>_API_KEY
LLM_PROVIDERS = {
"doubao": {
"base_url": os.environ.get("DOUBAO_BASE_URL", "https://ark.cn-beijing.volces.com/api/plan/v3"),
"api_key": os.environ.get("DOUBAO_API_KEY", "ark-2b06dc9d-8878-4c6e-b201-f422376e79cb-246d9"),
"models": ["doubao-seed-evolving", "doubao-1.5-vision-pro", "doubao-1-5-thinking"],
},
"deepseek": {
"base_url": os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
"api_key": os.environ.get("DEEPSEEK_API_KEY", "sk-edb9df58ff574f8c98df1cd6a425e97c"),
"models": ["deepseek-chat", "deepseek-reasoner"],
},
"qwen": {
"base_url": os.environ.get("QWEN_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"),
"api_key": os.environ.get("QWEN_API_KEY", ""),
"models": ["qwen-max", "qwen-plus", "qwen-vl-max"],
},
"autodl": {
"base_url": os.environ.get("AUTODL_BASE_URL", "https://www.autodl.art/api/v1"),
"api_key": os.environ.get("AUTODL_API_KEY", "F9MBfolzuapqTsD4KmUf9qen720rXvUZ3Sp3IrWiCTukqonx"),
"models": [],
},
}
# 默认模型(对话/通用)
DEFAULT_MODEL = os.environ.get("DEFAULT_MODEL", "doubao-seed-evolving")
# 视觉模型(视频/图片分析)—— plan 端点下 seed-evolving 支持多模态
VISION_MODEL = os.environ.get("VISION_MODEL", "doubao-seed-evolving")
# 思考模型(复杂任务)
THINKING_MODEL = os.environ.get("THINKING_MODEL", "deepseek-reasoner")
def find_provider(self, model: str):
"""根据模型名找到对应 provider 配置。"""
for name, cfg in self.LLM_PROVIDERS.items():
if model in cfg["models"] or model == name:
return name, cfg
# 兜底:按名称前缀匹配
for name, cfg in self.LLM_PROVIDERS.items():
if model.startswith(name) or name in model:
return name, cfg
return "doubao", self.LLM_PROVIDERS["doubao"]
def ensure_dirs(self):
for d in (self.DATA_DIR, self.UPLOAD_DIR, self.WORKSPACE_DIR):
d.mkdir(parents=True, exist_ok=True)
settings = Settings()