feat: expand AI workflow support and refresh docs
This commit is contained in:
@@ -1,5 +1,30 @@
|
||||
from pathlib import Path
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parents[2]
|
||||
ENV_FILE = BASE_DIR / ".env"
|
||||
PLACEHOLDER_SECRET_VALUES = {
|
||||
"",
|
||||
"your-super-secret-key-change-this",
|
||||
"admin-secret-token-change-this",
|
||||
}
|
||||
|
||||
|
||||
def resolve_database_url(raw_url: str) -> str:
|
||||
"""Resolve relative SQLite paths against the Server directory."""
|
||||
if not raw_url.startswith("sqlite:///"):
|
||||
return raw_url
|
||||
|
||||
sqlite_path = raw_url.removeprefix("sqlite:///")
|
||||
if not sqlite_path or sqlite_path == ":memory:":
|
||||
return raw_url
|
||||
|
||||
path_obj = Path(sqlite_path)
|
||||
if path_obj.is_absolute():
|
||||
return raw_url
|
||||
|
||||
return f"sqlite:///{(BASE_DIR / path_obj).resolve().as_posix()}"
|
||||
|
||||
class Settings(BaseSettings):
|
||||
ENV: str = "development"
|
||||
PROJECT_NAME: str = "DesignerCEP Backend"
|
||||
@@ -25,17 +50,41 @@ class Settings(BaseSettings):
|
||||
QINIU_BUCKET: str = ""
|
||||
QINIU_DOMAIN: str = ""
|
||||
|
||||
# AI 配置 — 通义千问 Qwen(DashScope)
|
||||
AI_API_KEY: str = "" # LLM API Key(OpenAI / DeepSeek 等)
|
||||
AI_BASE_URL: str = "" # LLM API 地址(留空则用 OpenAI 默认)
|
||||
AI_MODEL: str = "qwen3-max-2026-01-23" # 默认模型(通义千问3深度思考)
|
||||
AI_VISION_MODEL: str = "qwen-vl-max-latest" # 视觉分析模型(看图分析成衣)
|
||||
AI_IMAGE_EDIT_MODEL: str = "qwen-image-edit-max-2026-01-16" # 图片编辑/生成模型
|
||||
# AI 配置
|
||||
AI_PROVIDER: str = "ark"
|
||||
AI_API_KEY: str = ""
|
||||
AI_BASE_URL: str = "https://ark.cn-beijing.volces.com/api/v3"
|
||||
AI_CHAT_BASE_URL: str = ""
|
||||
AI_VISION_BASE_URL: str = ""
|
||||
AI_IMAGE_BASE_URL: str = ""
|
||||
AI_MODEL: str = "doubao-seed-2-0-mini-260215"
|
||||
AI_VISION_MODEL: str = "doubao-seed-2-0-mini-260215"
|
||||
AI_IMAGE_EDIT_MODEL: str = "doubao-seedream-5-0-260128"
|
||||
AI_CHAT_MODELS: str = ""
|
||||
AI_VISION_MODELS: str = ""
|
||||
AI_IMAGE_EDIT_MODELS: str = ""
|
||||
|
||||
# AI 配置 — Gemini(第三方代理)
|
||||
GEMINI_API_KEY: str = ""
|
||||
GEMINI_BASE_URL: str = "https://api.apiqik.online"
|
||||
# 兼容旧字段
|
||||
ARK_API_KEY: str = ""
|
||||
ARK_BASE_URL: str = "https://ark.cn-beijing.volces.com/api/v3"
|
||||
|
||||
model_config = SettingsConfigDict(env_file=".env", extra="ignore")
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=ENV_FILE,
|
||||
env_file_encoding="utf-8",
|
||||
extra="ignore"
|
||||
)
|
||||
|
||||
def runtime_warnings(self) -> list[str]:
|
||||
warnings: list[str] = []
|
||||
if not ENV_FILE.exists():
|
||||
warnings.append("未找到 Server/.env,当前使用的是代码默认配置。")
|
||||
if self.SECRET_KEY in PLACEHOLDER_SECRET_VALUES:
|
||||
warnings.append("SECRET_KEY 仍是默认值,请在部署前替换。")
|
||||
if self.ADMIN_TOKEN in PLACEHOLDER_SECRET_VALUES:
|
||||
warnings.append("ADMIN_TOKEN 仍是默认值,请在部署前替换。")
|
||||
if not self.AI_API_KEY and not self.ARK_API_KEY:
|
||||
warnings.append("AI_API_KEY / ARK_API_KEY 未配置;如果走用户自带 Key 模式可忽略此项。")
|
||||
return warnings
|
||||
|
||||
settings = Settings()
|
||||
settings.DATABASE_URL = resolve_database_url(settings.DATABASE_URL)
|
||||
|
||||
Reference in New Issue
Block a user