Files

93 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ===== PPT 自动生成 Agent 配置 =====
import os
from pathlib import Path
# 项目根目录
BASE_DIR = Path(__file__).resolve().parent
# 引擎路径(2026-08-24 选型:渲染=aura-ppt 主引擎;解析/搜图=ppt-master 辅助)
# 所有引擎优化只在项目内副本做,技能原版路径只读
AURA_ENGINE_PATH = Path(os.environ.get("AURA_ENGINE_PATH", BASE_DIR / "engine" / "aura-ppt"))
AURA_ENGINE_SCRIPT = AURA_ENGINE_PATH / "scripts" / "engine.py"
PPT_MASTER_PATH = Path(os.environ.get("PPT_MASTER_PATH", BASE_DIR / "engine" / "ppt-master"))
# 公司模板(--template 模式继承母版/Logo/页脚)
COMPANY_TEMPLATE = Path(os.environ.get("COMPANY_TEMPLATE", AURA_ENGINE_PATH / "assets" / "company-template.pptx"))
# 模板模式策略:always=始终用模板 / ja=仅日语生成用 / off=不用
COMPANY_TEMPLATE_MODE = os.environ.get("COMPANY_TEMPLATE_MODE", "ja")
# ===== 大模型接入(2026-08-25=====
# backend: opencode=复用 opencode serve(零 Key / openai=OpenAI 兼容接口(DeepSeek等) / off=关闭
LLM_BACKEND = os.environ.get("LLM_BACKEND", "opencode")
# opencode 模式(模型经基准测试选定:mimo-v2.5-free 结构化输出最快最稳,44s/大纲)
OPENCODE_SERVE = os.environ.get("OPENCODE_SERVE", "http://127.0.0.1:4096")
OPENCODE_SERVE_PORT = int(os.environ.get("OPENCODE_SERVE_PORT", "4096"))
OPENCODE_MODEL = os.environ.get("OPENCODE_MODEL", "opencode/mimo-v2.5-free")
# openai 兼容模式(DeepSeek: https://api.deepseek.com, model=deepseek-chat
OPENAI_API_BASE = os.environ.get("OPENAI_API_BASE", "")
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "deepseek-chat")
# LLM 调用超时(秒)
LLM_TIMEOUT = int(os.environ.get("LLM_TIMEOUT", "180"))
# 长文档两级规划(2026-08-26):分段通读 → 汇总大纲
PLAN_CHUNK_CHARS = int(os.environ.get("PLAN_CHUNK_CHARS", "6000"))
PLAN_MAX_CHUNKS = int(os.environ.get("PLAN_MAX_CHUNKS", "8"))
# 生成任务输出根目录
PROJECTS_PATH = Path(os.environ.get("PROJECTS_PATH", BASE_DIR / "src" / "web" / "data" / "projects"))
# SQLite 数据库路径
DB_PATH = Path(os.environ.get("DB_PATH", BASE_DIR / "src" / "web" / "data" / "ppt.db"))
# Flask Session 密钥(环境变量注入,不进仓库)
SECRET_KEY = os.environ.get("SECRET_KEY", "ppt-agent-dev-secret-key-do-not-use-in-prod")
# 服务绑定
HOST = os.environ.get("HOST", "127.0.0.1")
PORT = int(os.environ.get("PORT", "5000"))
DEBUG = os.environ.get("FLASK_DEBUG", "0") == "1"
# 上传限制
MAX_UPLOAD_MB = 20
UPLOAD_DIR = BASE_DIR / "src" / "web" / "data" / "uploads"
# 文件类型白名单
ALLOWED_EXTENSIONS = {
".pdf": "pdf",
".docx": "doc",
".doc": "doc",
".xlsx": "excel",
".xlsm": "excel",
".pptx": "ppt",
".md": "markdown",
".txt": "text",
".html": "html",
".htm": "html",
}
# 枚举白名单
ALLOWED_SCENES = ("report", "training")
ALLOWED_COLORS = ("blue", "green", "purple", "orange", "gray")
ALLOWED_LANGS = ("zh", "ja")
ALLOWED_CANVAS = ("ppt169", "ppt43")
ALLOWED_IMAGE_STRATEGIES = ("web", "ai", "off")
# 配图策略(web 默认)
DEFAULT_IMAGE_STRATEGY = "web"
# 生成任务并发上限
MAX_CONCURRENT_GENERATION = 1
# ===== 网络搜图(2026-08-25=====
# web=调用 ppt-master image_search.pyopenverse/wikimedia 零配置)
# test=本地样例图通道(e2e 用,读 IMAGE_SEARCH_TEST_DIR
# off=禁用配图
IMAGE_SEARCH_MODE = os.environ.get("IMAGE_SEARCH_MODE", "web")
IMAGE_SEARCH_TEST_DIR = os.environ.get("IMAGE_SEARCH_TEST_DIR", "")
IMAGE_SEARCH_TIMEOUT = int(os.environ.get("IMAGE_SEARCH_TIMEOUT", "90"))
MAX_IMAGE_SLIDES = int(os.environ.get("MAX_IMAGE_SLIDES", "4"))
# 引擎剧本目录(会话用)
GENERATION_SCRIPT = None