"""配置文件 - 集中管理所有配置项"""
import logging
import os
from pathlib import Path
# ==================== 路径配置 ====================
# 项目根目录
PROJECT_ROOT = Path(__file__).parent
WORKSPACE_ROOT = PROJECT_ROOT.parent
# 源代码目录
SRC_DIR = PROJECT_ROOT / "src"
# 静态文件目录
STATIC_DIR = PROJECT_ROOT / "static"
# 日志目录 (默认在项目根目录,实际会在工作目录的 .batch_task/logs 中)
LOGS_DIR = PROJECT_ROOT / "logs"
# 日志目录名称 (在 .batch_task 中的子目录)
LOGS_DIR_NAME = "logs"
# 提示词目录名称
PROMPTS_DIR_NAME = "prompts"
# 输出目录名称
OUTPUT_DIR_NAME = "output"
# 任务文件名称
TASKS_FILE_NAME = "tasks.json"
# 默认提示词文件名称
DEFAULT_PROMPT_FILE_NAME = "改写提示词.md"
# ==================== 工作目录配置 ====================
# 批处理任务目录名 (可通过环境变量 BATCH_TASK_DIR 配置)
BATCH_TASK_DIR_NAME = os.getenv('BATCH_TASK_DIR', '.batch_task')
# ==================== 服务器配置 ====================
# 服务器主机地址
SERVER_HOST = "127.0.0.1"
# 服务器端口
SERVER_PORT = 8298
# MCP 挂载路径
MCP_MOUNT_PATH = "/mcp"
# MCP 应用名称
MCP_APP_NAME = "novel-processor"
# ==================== 日志配置 ====================
# 日志级别
LOG_LEVEL = logging.DEBUG
# 日志格式
LOG_FORMAT = '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
# 日志文件配置
LOG_MAX_BYTES = 10 * 1024 * 1024 # 10MB
LOG_BACKUP_COUNT = 5
# 日志文件名格式 (使用 - 分隔符使其更易读)
LOG_FILENAME_FORMAT = "%Y-%m-%d_%H-%M-%S"
# 应用日志名称
APP_LOGGER_NAME = "fastmcp"
DEFAULT_LOGGER_NAME = "novel_processor"
# ==================== 任务管理配置 ====================
# 后台检查间隔 (秒)
BACKGROUND_CHECK_INTERVAL = 30
# 任务超时时间 (分钟)
TASK_TIMEOUT_MINUTES = 10
# 最低字数要求比例 (改写后字数/原始字数)
MIN_WORD_RATIO = 0.8
# ==================== 小说处理配置 ====================
# 默认最大字符数 (分割小说时)
DEFAULT_MAX_CHARS = 500
# 支持的文件编码列表 (按优先级排序)
SUPPORTED_ENCODINGS = [
'utf-8',
'gbk',
'gb2312',
'gb18030',
'big5',
'utf-16'
]
# Token 计算方法
TOKEN_ENCODING = 'cl100k_base' # 适用于 GPT-3.5-turbo, GPT-4 等
# 提示词文件类型
PROMPT_FILE_EXTENSIONS = ["*.md", "*.txt"]
# ==================== 文件锁配置 ====================
# 文件锁超时时间 (秒)
FILE_LOCK_TIMEOUT = 30.0
# ==================== Web 界面配置 ====================
# 首页重定向路径(主控制台页面)
HOME_REDIRECT_PATH = "/static/index.html"
# API 路由前缀
API_PREFIX = "/api"
# ==================== 初始化函数 ====================
def ensure_directories(work_dir: Path = None):
"""确保所有必需的目录存在
注意:此函数已被 workspace_manager 替代,仅用于向后兼容。
建议使用 workspace_manager.set_work_dir() 来管理工作目录。
Args:
work_dir: 工作目录路径,如果提供则使用该目录,否则使用当前工作目录
"""
from src.workspace_manager import workspace_manager
if work_dir:
# 使用 workspace_manager 设置工作目录
workspace_manager.set_work_dir(work_dir)
else:
# 使用默认工作目录(workspace_manager 会自动从环境变量或使用当前目录)
current_work_dir = workspace_manager.get_work_dir()
# 确保目录结构存在
workspace_manager.set_work_dir(current_work_dir)
def get_config_summary() -> str:
"""获取配置摘要信息"""
from src.workspace_manager import workspace_manager
# 从 workspace_manager 获取动态路径
work_dir = workspace_manager.get_work_dir()
batch_dir = workspace_manager.get_batch_dir()
prompts_dir = workspace_manager.get_prompts_dir()
tasks_file = workspace_manager.get_tasks_file()
logs_dir = workspace_manager.get_logs_dir()
return f"""
📋 FastMCP 配置摘要
{'=' * 60}
路径配置:
项目根目录: {PROJECT_ROOT}
工作空间: {WORKSPACE_ROOT}
当前工作目录: {work_dir}
批处理任务目录: {batch_dir}
提示词目录: {prompts_dir}
任务文件: {tasks_file}
日志目录: {logs_dir}
目录名称配置:
批处理目录名: {BATCH_TASK_DIR_NAME}
提示词目录名: {PROMPTS_DIR_NAME}
输出目录名: {OUTPUT_DIR_NAME}
日志目录名: {LOGS_DIR_NAME}
服务器配置:
主机地址: {SERVER_HOST}
端口: {SERVER_PORT}
MCP 路径: {MCP_MOUNT_PATH}
任务管理:
后台检查间隔: {BACKGROUND_CHECK_INTERVAL} 秒
任务超时时间: {TASK_TIMEOUT_MINUTES} 分钟
最低字数比例: {MIN_WORD_RATIO * 100}%
小说处理:
默认最大字符: {DEFAULT_MAX_CHARS}
Token 编码: {TOKEN_ENCODING}
日志配置:
日志级别: {logging.getLevelName(LOG_LEVEL)}
最大文件大小: {LOG_MAX_BYTES / (1024*1024):.0f}MB
备份数量: {LOG_BACKUP_COUNT}
{'=' * 60}
"""
# 导出所有配置
__all__ = [
# 路径配置
'PROJECT_ROOT',
'WORKSPACE_ROOT',
'SRC_DIR',
'STATIC_DIR',
'LOGS_DIR',
'LOGS_DIR_NAME',
'PROMPTS_DIR_NAME',
'OUTPUT_DIR_NAME',
'TASKS_FILE_NAME',
'DEFAULT_PROMPT_FILE_NAME',
# 工作目录配置(仅保留常量名称,实际路径由 workspace_manager 管理)
'BATCH_TASK_DIR_NAME',
# 服务器配置
'SERVER_HOST',
'SERVER_PORT',
'MCP_MOUNT_PATH',
'MCP_APP_NAME',
# 日志配置
'LOG_LEVEL',
'LOG_FORMAT',
'LOG_DATE_FORMAT',
'LOG_FILENAME_FORMAT',
'LOG_MAX_BYTES',
'LOG_BACKUP_COUNT',
'APP_LOGGER_NAME',
'DEFAULT_LOGGER_NAME',
# 任务管理配置
'BACKGROUND_CHECK_INTERVAL',
'TASK_TIMEOUT_MINUTES',
'MIN_WORD_RATIO',
# 小说处理配置
'DEFAULT_MAX_CHARS',
'SUPPORTED_ENCODINGS',
'TOKEN_ENCODING',
'PROMPT_FILE_EXTENSIONS',
# 文件锁配置
'FILE_LOCK_TIMEOUT',
# Web 界面配置
'HOME_REDIRECT_PATH',
'API_PREFIX',
# 工具函数
'ensure_directories',
'get_config_summary',
]