from contextlib import asynccontextmanager from apscheduler.schedulers.background import BackgroundScheduler from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from starlette.staticfiles import StaticFiles from app.api.auth import router as auth_router from app.api.canvas import canvas_router from app.api.chat import router as chat_router from app.api.agent import router as agent_router from app.api.dialog import dialog_router from app.api.excel import router as excel_router from app.api.files import router as files_router from app.api.knowledge import knowledge_router from app.api.label import label_router from app.api.llm import llm_router from app.api.organization import dept_router from app.api.v2.public_api import public_api from app.api.report import router as report_router from app.api.resource import menu_router # from app.api.sync_data import sync_router from app.api.user import user_router from app.api.group import group_router from app.api.role import role_router # from app.models.base_model import init_db from app.task.fetch_agent import sync_agents, initialize_agents, sync_agents_v2, sync_knowledge from app.init_config.init_run_data import sync_default_data # 使用 Lifespan 事件处理程序 @asynccontextmanager async def lifespan(app: FastAPI): # 初始化代理 initialize_agents() # 在应用启动时同步代理 sync_agents() await sync_default_data() sync_agents_v2() sync_knowledge() yield # 在应用关闭时执行清理操作(如果需要) pass # init_db() app = FastAPI( title="basic_rag_gateway", version="0.1", description="", lifespan=lifespan ) # 设置 CORS 中间件 # app.add_middleware( # CORSMiddleware, # allow_origins=["http://192.168.20.119:9303", "http://192.168.20.119:9301", "http://smartai.com:8293","http://localhost:9303", "http://127.0.0.1:9303","http://localhost:5173","http://192.168.20.158:5173"], # allow_credentials=True, # allow_methods=["*"], # 允许所有方法 # allow_headers=["*"], # 允许所有头部 # ) # 创建调度器 scheduler = BackgroundScheduler() scheduler.add_job(sync_agents_v2, 'interval', minutes=60, id="sync_resource_data") scheduler.start() app.include_router(auth_router, prefix='/api/auth', tags=["auth"]) app.include_router(chat_router, prefix='/api/chat', tags=["chat"]) app.include_router(agent_router, prefix='/api/agent', tags=["agent"]) app.include_router(excel_router, prefix='/api/document', tags=["document"]) app.include_router(files_router, prefix='/api/files', tags=["files"]) app.include_router(report_router, prefix='/api/report', tags=["report"]) app.include_router(user_router, prefix='/api/user', tags=["user"]) app.include_router(group_router, prefix='/api/group', tags=["group"]) app.include_router(role_router, prefix='/api/role', tags=["role"]) app.include_router(dept_router, prefix='/api/dept', tags=["dept"]) app.include_router(menu_router, prefix='/api/menu', tags=["menu"]) app.include_router(knowledge_router, prefix='/api/knowledge', tags=["knowledge"]) app.include_router(llm_router, prefix='/api/llm', tags=["llm"]) app.include_router(dialog_router, prefix='/api/dialog', tags=["dialog"]) app.include_router(canvas_router, prefix='/api/canvas', tags=["canvas"]) app.include_router(label_router, prefix='/api/label', tags=["label"]) app.include_router(public_api, prefix='/v1/api', tags=["public_api"]) app.mount("/static", StaticFiles(directory="app/images"), name="static") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=9201)