80 lines
3.4 KiB
Python
80 lines
3.4 KiB
Python
"""雅文内容创造工作台 - 配置"""
|
|||
|
|
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()]
|