from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import get_settings settings = get_settings() @asynccontextmanager async def lifespan(app: FastAPI): # 启动时:确保数据目录存在 settings.ensure_dirs() yield # 关闭时:清理资源(如有需要) def create_app() -> FastAPI: app = FastAPI( title="PEFT Fine-Tuning Platform", version="0.1.0", lifespan=lifespan, ) # CORS 中间件 app.add_middleware( CORSMiddleware, allow_origins=settings.backend_cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 挂载路由 (Phase 2 起逐步填充) from app.api import models as models_api from app.api import datasets as datasets_api from app.api import training as training_api from app.api import evaluation as evaluation_api from app.api import deployment as deployment_api app.include_router(models_api.router, prefix="/api/v1/models", tags=["models"]) app.include_router(datasets_api.router, prefix="/api/v1/datasets", tags=["datasets"]) app.include_router(training_api.router, prefix="/api/v1/training", tags=["training"]) app.include_router(evaluation_api.router, prefix="/api/v1/evaluation", tags=["evaluation"]) app.include_router(deployment_api.router, prefix="/api/v1/deployment", tags=["deployment"]) # WebSocket from app.core.websocket import router as ws_router app.include_router(ws_router) @app.get("/health") async def health_check(): return {"status": "ok", "env": settings.backend_env} return app app = create_app()