| """ |
| 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() |
| |
| 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...") |
|
|
|
|
| |
| 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", |
| ) |
|
|
| |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| |
| 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)], |
| ) |
|
|