import asyncio from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from uvicorn import Config, Server from config.emqx import mqtt_client_async from config.yolo import YOLOSingleton from routers.Bot import botRouter from routers.Chat import chatRouter from routers.Datasource import reportDataRouter from routers.Iot import iot_router from routers.Knowledge import knowledgeRouter from routers.Public import publicRouter from routers.RabbitMQ import rqRouter from routers.Report import reportRouter from routers.Sentinel import sentinel_router from routers.Service import serviceRouter from routers.System import systemRouter from routers.Vision import visionRouter from routers.WS import iot_ws_router from service.RabbitMQ import sentinel_pull_analysis_async async def ai_lab(): app = FastAPI(title="BBIT_AI") origins = [ "http://localhost:8091", # Vite dev 默认端口 "https://ai.ronsunny.cn:8090", "*", # ⚠️ 生产环境不要用 ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], # 必须包含 OPTIONS、GET 等 allow_headers=["*"], ) routers = [ chatRouter, reportRouter, knowledgeRouter, reportDataRouter, serviceRouter, botRouter, rqRouter, ] for r in routers: app.include_router(r, prefix="/llm", tags=["llm"]) app.include_router(visionRouter, prefix="/cv", tags=["cv"]) app.include_router(systemRouter, prefix="/system", tags=["system"]) app.include_router(iot_router, prefix="/iot", tags=["iot"]) app.include_router(sentinel_router, prefix="/iot/sentinel", tags=["iot_sentinel"]) app.include_router(iot_ws_router, prefix="/iot/ws", tags=["iot_ws"]) app.include_router(publicRouter, prefix="/api/public", tags=["api"]) config = Config(app=app, host="0.0.0.0", port=13011, log_level="debug") server = Server(config) await server.serve() async def main(): # 初始化模型 YOLOSingleton.init_model() # 主干AI实验室FastAPI服务 task_api = asyncio.create_task(ai_lab()) # RabbitMQ服务 task_mq = asyncio.create_task(sentinel_pull_analysis_async()) # 等 HTTP 服务启动后再启动 MQTT task_mqtt = asyncio.create_task(mqtt_client_async()) await asyncio.gather(task_api, task_mq, task_mqtt) # MCP服务-ailab # endpoint_url_ai_lab = "wss://ai.ronsunny.cn:8090/aimcp/mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" # endpoint_url_ai_lab = "ws://ce_bot_mcp:8004/mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" # task_mcp1 = asyncio.create_task(init_mcp_server(endpoint_url_ai_lab)) # MCP服务-ql # endpoint_url_ql = "wss://ai.ronsunny.cn:8090/aimcp/mcp_endpoint/mcp/?token=8ZmCzp7FzsbxwHOg2%2FvBQkxrC3QWJiI%2B4iTfouExinjcT8ZgLwQfFUtgcMInI7St" # task_mcp2 = asyncio.create_task(init_mcp_server(endpoint_url_ql)) # await asyncio.gather(task_api, task_mcp1, task_mcp2, task_mq) if __name__ == "__main__": asyncio.run(main())