Files

80 lines
3.4 KiB
Python
Raw Permalink Normal View History

"""雅文内容创造工作台 - 配置"""
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent # server/
# 双环境:YAWAN_ENV=dev → 数据在 data-dev/(开发库,随便折腾);默认/空 → data/(生产库,公网用)。
# 可用 YAWAN_DATA_DIR 将某个环境的数据根目录切到外接盘或其他持久化卷。
# 只接受绝对路径;未配置时保持原有的 server/data* 路径,避免插拔硬盘影响现有服务。
_ENV = os.environ.get("YAWAN_ENV", "prod").strip().lower()
_DATA_SUB = "data-dev" if _ENV == "dev" else "data"
_DATA_OVERRIDE = os.environ.get("YAWAN_DATA_DIR", "").strip()
if _DATA_OVERRIDE:
_override_path = Path(_DATA_OVERRIDE).expanduser()
if not _override_path.is_absolute():
raise RuntimeError("YAWAN_DATA_DIR 必须是绝对路径")
DATA_DIR = _override_path
else:
DATA_DIR = BASE_DIR / _DATA_SUB
KB_DIR = DATA_DIR / "kb" # 知识库素材文件
ARTIFACTS_DIR = DATA_DIR / "artifacts" # 段产物/组合产物
OCR_DIR = DATA_DIR / "ocr" # 导图 OCR 输出
MODELS_DIR = DATA_DIR / "models" # 本地 embedding 模型
DB_PATH = DATA_DIR / "workspace.db"
CHROMA_DIR = DATA_DIR / "chroma"
for d in (DATA_DIR, KB_DIR, ARTIFACTS_DIR, OCR_DIR, MODELS_DIR):
d.mkdir(parents=True, exist_ok=True)
# 预置模型 provider(值从本机已有配置读取,运行时可改)
DEFAULT_PROVIDERS = [
{
"name": "DeepSeek",
"base_url": "https://api.deepseek.com/v1",
"api_key": "" if _ENV == "dev" else os.environ.get("DEEPSEEK_API_KEY", ""),
"models": ["deepseek-chat", "deepseek-reasoner"],
"default_model": "deepseek-chat",
"builtin": True,
},
{
"name": "MiMo",
"base_url": "https://api.xiaomimimo.com/v1",
"api_key": "" if _ENV == "dev" else os.environ.get("MIMO_API_KEY", ""),
"models": ["mimo-v2.5-pro"],
"default_model": "mimo-v2.5-pro",
"builtin": True,
},
]
# 从 hurryyhao/.env 读取 DeepSeek key(用户主用账号)
_HY_ENV = Path.home() / "hurryyhao" / ".env"
if _ENV != "dev" and _HY_ENV.exists():
for line in _HY_ENV.read_text(encoding="utf-8", errors="ignore").splitlines():
line = line.strip()
if line.startswith("AI_API_KEY="):
DEFAULT_PROVIDERS[0]["api_key"] = line.split("=", 1)[1].strip().strip('"').strip("'")
elif line.startswith("MIMO_API_KEY="):
DEFAULT_PROVIDERS[1]["api_key"] = line.split("=", 1)[1].strip().strip('"').strip("'")
# AI 聚合网(环境变量)
_JUHE = "" if _ENV == "dev" else os.environ.get("AI_JUHE_API_KEY", "")
if _JUHE:
DEFAULT_PROVIDERS.append({
"name": "AI聚合网",
"base_url": "https://api.lk888.ai/api",
"api_key": _JUHE,
"models": ["deepseek-chat"],
"default_model": "deepseek-chat",
"builtin": True,
"note": "接口格式为聚合网专用,M1 后适配",
})
EMBEDDING_MODEL = os.environ.get("EMBEDDING_MODEL", "BAAI/bge-small-zh-v1.5") # M1 用 small 跑通,可换 bge-m3
EMBEDDING_DIM = 512
# 本地开发只允许工作台前端来源;生产环境通过环境变量显式配置,不再用通配符。
CORS_ORIGINS = [origin.strip().rstrip("/") for origin in os.environ.get(
"YAWEN_CORS_ORIGINS",
"http://localhost:5173,http://127.0.0.1:5173,https://agent.pducv.cn,http://agent.pducv.cn"
).split(",") if origin.strip()]