feat:增加分析进度接口

This commit is contained in:
2026-10-10 07:26:24 -07:00
parent e3699d1a30
commit cd5a2b4d8f
15 changed files with 632 additions and 143 deletions
+15 -14
View File
@@ -1,4 +1,4 @@
"""数据文件接口:上传限制、上传解析、列出、查看、删除,见 docs/screen-agent/data-files.md 第 5 节"""
"""数据文件接口:上传限制、上传解析及进度、列出、查看、删除,见 docs/screen-agent/data-files.md 第 5 节"""
from typing import Annotated, Literal, get_args
@@ -28,6 +28,7 @@ from app.schemas.data_file import (
DataFileRecord,
DataFormat,
DataTableRows,
UploadProgress,
)
from app.schemas.user import CurrentUser
@@ -105,17 +106,18 @@ async def get_limits(request: Request) -> ApiResponse[DataFileLimits]:
)
@router.post("")
@router.post("", status_code=202)
async def upload_file(
request: Request,
conversation_id: Annotated[NonBlankString, Form()],
file: Annotated[UploadFile, File()],
user: Annotated[CurrentUser, Depends(get_current_user)],
) -> ApiResponse[DataFileDetail]:
record = await _service(request).upload(
) -> ApiResponse[UploadProgress]:
"""原文件保存后立即返回,解析在后台进行,前端用返回的 file_id 轮询进度"""
progress = await _service(request).upload(
user.id, conversation_id, file.filename, file.file
)
return success_response(_detail(record))
return success_response(progress)
@router.get("")
@@ -124,12 +126,14 @@ async def list_files(
conversation_id: Annotated[NonBlankString, Query()],
user: Annotated[CurrentUser, Depends(get_current_user)],
) -> ApiResponse[DataFileList]:
records = await _service(request).list_files(user.id, conversation_id)
service = _service(request)
records = await service.list_files(user.id, conversation_id)
return success_response(
DataFileList(
files=[
DataFileInfo.model_validate(record.model_dump()) for record in records
]
],
uploads=service.list_uploads(user.id, conversation_id),
)
)
@@ -143,16 +147,13 @@ async def get_file(
return success_response(_detail(await _service(request).get_file(user.id, file_id)))
@router.post("/{file_id}/insights")
async def regenerate_insights(
@router.get("/{file_id}/progress")
async def get_progress(
file_id: str,
request: Request,
user: Annotated[CurrentUser, Depends(get_current_user)],
) -> ApiResponse[DataFileDetail]:
"""重新分析文件,上次分析失败后用;分析在后台进行,返回的 insights 为 pending"""
return success_response(
_detail(await _service(request).regenerate_insights(user.id, file_id))
)
) -> ApiResponse[UploadProgress]:
return success_response(await _service(request).get_progress(user.id, file_id))
@router.get("/{file_id}/tables/{table}/rows")