import asyncio from pathlib import Path import sys # 为了避免耦合,微服务,可能确实要将上级的上级目录作为一个单独的进程来处理,此目录作为一个单独的UI项目 sys.path.append(str(Path(__file__).parent)) from fastapi import FastAPI from routers.proxy import router,sub_mgr from routers.file import router as file_router from routers.worker import router as worker_router from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from utils.process_mgr import process_manager from utils.config import config,WORKER_DIR_BASE from src.services.celery_worker import CeleryWorker,celery_worker from utils.logu import get_logger,logger async def startup(): """应用启动时执行的操作""" global process_manager,config tasks = [] logger.info(f"startup") tasks.append(asyncio.create_task(celery_worker.run())) tasks.append(asyncio.create_task(sub_mgr.startup())) return tasks # 确保返回任务列表 @asynccontextmanager async def lifespan(app: FastAPI): """应用生命周期管理""" tasks = await startup() yield logger.info(f"quite {tasks}") for name,model in celery_worker.workers_model.items(): await celery_worker.stop_worker(name) # 创建 FastAPI 应用实例 app = FastAPI( description="", version="1.0.0", lifespan=lifespan ) app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有域名访问 allow_credentials=True, allow_methods=["*"], # 允许所有方法(GET, POST, PUT, DELETE 等) allow_headers=["*"], # 允许所有头部 ) # 将 gpt_router 挂载到应用中 app.include_router(router, prefix="/api/proxy", tags=["chat"]) app.include_router(worker_router, prefix="/api/worker", tags=["worker"]) if __name__ == "__main__": import uvicorn # 注意: 由于涉及到多进程管理机制,因此不能使用 reload 。例如 uvicorn main:app --port 5835 --reload uvicorn.run(app, host=config.backend.host, port=config.backend.port)