liumaolin
refactor(config): centralize configuration management in `project_config`
8f68d0a
"""
FastAPI 应用入口
GPT-SoVITS 音色训练 HTTP API 服务
启动方式:
uvicorn api_server.app.main:app --host 0.0.0.0 --port 8000 --reload
"""
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from project_config import settings, ensure_data_dirs
from .api.v1.router import api_router
@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
"""
应用生命周期管理
启动时:
- 确保数据目录存在
- 恢复中断的任务(可选)
关闭时:
- 清理资源
"""
# 启动时执行
print(f"Starting GPT-SoVITS Training API in {settings.DEPLOYMENT_MODE.upper()} mode")
print(f" Project Root: {settings.PROJECT_ROOT}")
print(f" Data Directory: {settings.DATA_DIR}")
print(f" SQLite Path: {settings.SQLITE_PATH}")
# 确保数据目录存在
ensure_data_dirs()
# 恢复中断的任务(可选)
if settings.DEPLOYMENT_MODE == "local":
try:
from .core.adapters import get_task_queue_adapter
queue = get_task_queue_adapter()
# 检查是否有 recover_pending_tasks 方法
if hasattr(queue, 'recover_pending_tasks'):
count = await queue.recover_pending_tasks()
if count > 0:
print(f" Recovered {count} pending tasks")
except Exception as e:
print(f" Warning: Failed to recover tasks: {e}")
print(" API Server ready!")
print(f" Docs: http://{settings.API_HOST}:{settings.API_PORT}/docs")
yield
# 关闭时执行
print("Shutting down GPT-SoVITS Training API...")
# 创建 FastAPI 应用
app = FastAPI(
title="GPT-SoVITS Training API",
description="""
GPT-SoVITS 音色训练 HTTP API 服务
## 功能概述
提供两种训练模式:
### Quick Mode(小白用户)
- 上传音频即可训练,系统自动配置所有参数
- 适合个人开发者、快速验证
### Advanced Mode(专家用户)
- 分阶段控制训练流程
- 精细调整每个阶段的参数
- 适合需要深度定制的用户
## API 分组
- **Quick Mode - 任务管理**: `/api/v1/tasks`
- **Advanced Mode - 实验管理**: `/api/v1/experiments`
- **文件管理**: `/api/v1/files`
- **阶段模板**: `/api/v1/stages`
""",
version="1.0.0",
lifespan=lifespan,
docs_url="/docs",
redoc_url="/redoc",
openapi_url="/openapi.json",
)
# 配置 CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 生产环境应该限制来源
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 注册 API 路由
app.include_router(api_router, prefix=settings.API_V1_PREFIX)
# ============================================================
# 根路由和健康检查
# ============================================================
@app.get("/", tags=["Root"])
async def root():
"""
根路由
返回 API 基本信息
"""
return {
"name": "GPT-SoVITS Training API",
"version": "1.0.0",
"mode": settings.DEPLOYMENT_MODE,
"docs": "/docs",
"health": "/health",
}
@app.get("/health", tags=["Health"])
async def health_check():
"""
健康检查端点
用于容器编排和负载均衡器健康检查
"""
return {
"status": "healthy",
"mode": settings.DEPLOYMENT_MODE,
}
# ============================================================
# 开发模式直接运行
# ============================================================
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"api_server.app.main:app",
host=settings.API_HOST,
port=settings.API_PORT,
reload=True,
reload_dirs=[str(settings.API_SERVER_ROOT)],
)