Files
AILab/bbit_ai/app/app.py
T
2026-02-04 13:58:18 +08:00

99 lines
3.5 KiB
Python

import asyncio
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from uvicorn import Config, Server
from config.emqx import mqtt_client_runner
from config.yolo import YOLOSingleton
from models.BaseResponse import BaseResponse
from routers.AnnualMeeting import amRouter
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(amRouter, prefix="/am", tags=["annual_meeting"])
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"])
# ----------- 全局异常捕获 ---------
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
return BaseResponse(status=False, message=str(exc), data=None)
config = Config(app=app, host="0.0.0.0", port=13011, log_level="warning")
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_runner())
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())