import logging from contextlib import asynccontextmanager import uvicorn from fastapi import FastAPI from config import Config from workflows.workflow_manager import WorkflowManager from services.nacos_service import load_nacos_config, load_service_config, NacosManager from services.tool_router import ToolRouter from api import endpoints logger = logging.getLogger(__name__) def create_app() -> FastAPI: """创建 FastAPI 应用""" service_config = load_service_config() nacos_config = load_nacos_config() default_model_section = Config._config.get("app", "model_section", fallback=Config.DEFAULT_MODEL_SECTION) workflow_manager = WorkflowManager(default_model_section=default_model_section) nacos_manager = NacosManager(nacos_config=nacos_config, service_config=service_config) tool_router = ToolRouter() @asynccontextmanager async def lifespan(app: FastAPI): """应用生命周期管理""" logger.info("🚀 服务启动中...") app.state.workflow_manager = workflow_manager app.state.nacos_manager = nacos_manager app.state.service_config = service_config app.state.tool_router = tool_router await nacos_manager.start() logger.info("✅ 服务准备就绪: %s on %s:%s", service_config.service_name, service_config.ip, service_config.port) yield logger.info("🛑 服务关闭中...") await nacos_manager.stop() logger.info("✅ 服务已关闭") app = FastAPI( title="More Dots API", description="More Dots 工作流服务", version=service_config.metadata.get("version", "1.0.0"), lifespan=lifespan, ) app.include_router(endpoints.router) return app app = create_app() if __name__ == "__main__": service_config = load_service_config() uvicorn.run( "server:app", host=service_config.host, port=service_config.port, reload=False, log_level="info", )