feat:完成大部分数据文件上传解析功能
This commit is contained in:
+17
-1
@@ -8,6 +8,8 @@ from loguru import logger
|
||||
|
||||
from app.api.agent import router
|
||||
from app.api.conversations import router as conversation_router
|
||||
from app.api.files import limits_router as file_limits_router
|
||||
from app.api.files import router as file_router
|
||||
from app.api.materials import router as material_router
|
||||
from app.core.auth import get_current_user
|
||||
from app.core.exceptions import register_exception_handlers
|
||||
@@ -21,6 +23,8 @@ async def lifespan(application: FastAPI):
|
||||
from app.clients.decision import close_decision_engine
|
||||
from app.clients.mcp import start_mcp_servers, stop_mcp_servers
|
||||
from app.clients.user_center import close_user_center
|
||||
from app.datafiles.service import DataFileService
|
||||
from app.datafiles.storage import open_data_file_store
|
||||
from app.observability.tracing import flush_tracing
|
||||
from app.processor.graph import build_graph
|
||||
from app.services.agent import AgentService
|
||||
@@ -31,7 +35,14 @@ async def lifespan(application: FastAPI):
|
||||
persistence = await open_persistence()
|
||||
application.state.conversation_store = persistence.store
|
||||
mcp_processes = []
|
||||
sweeper = None
|
||||
try:
|
||||
# 数据文件的元数据和会话记录用同一种存储;启动时先清理一遍过期目录,之后每小时一次
|
||||
data_files = DataFileService(
|
||||
await open_data_file_store(persistence.db), persistence.store
|
||||
)
|
||||
application.state.data_file_service = data_files
|
||||
sweeper = asyncio.create_task(data_files.run_sweeper())
|
||||
# 物料目录启动时载入内存,动作校验与前端接口共用,避免重复查询数据库
|
||||
await warm_material_cache(persistence.db)
|
||||
# 拉起 mcp_servers.json 中由应用管理的服务;单个服务失败只记录,用到它的请求执行时报错
|
||||
@@ -42,10 +53,12 @@ async def lifespan(application: FastAPI):
|
||||
except Exception as error:
|
||||
logger.opt(exception=error).error("screen agent 预先组装失败")
|
||||
application.state.agent_service = AgentService(
|
||||
build_graph(persistence.checkpointer), persistence.store
|
||||
build_graph(persistence.checkpointer), persistence.store, data_files
|
||||
)
|
||||
yield
|
||||
finally:
|
||||
if sweeper is not None:
|
||||
sweeper.cancel()
|
||||
# 共享客户端只在应用退出时关闭,追踪刷新放到线程避免阻塞事件循环
|
||||
try:
|
||||
await stop_mcp_servers(mcp_processes)
|
||||
@@ -76,6 +89,9 @@ def create_app() -> FastAPI:
|
||||
application.include_router(
|
||||
conversation_router, prefix="/api", dependencies=authenticated
|
||||
)
|
||||
# 上传限制无需登录;要先于 /files/{file_id} 注册,否则会被当成文件 ID
|
||||
application.include_router(file_limits_router, prefix="/api")
|
||||
application.include_router(file_router, prefix="/api", dependencies=authenticated)
|
||||
application.include_router(material_router, prefix="/api")
|
||||
return application
|
||||
|
||||
|
||||
Reference in New Issue
Block a user