Skip to content

Commit bf286e1

Browse files
committed
fix: 修复由于文件处理超时导致异常未能捕获的情况
1 parent a1bf8d3 commit bf286e1

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

server/routers/knowledge_router.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,40 @@ async def run_ingest(context: TaskContext):
236236
await context.set_progress(progress, f"正在处理第 {idx}/{total} 个文档")
237237

238238
# 处理单个文档
239-
result = await knowledge_base.add_content(db_id, [item], params=params)
240-
processed_items.extend(result)
239+
try:
240+
result = await knowledge_base.add_content(db_id, [item], params=params)
241+
processed_items.extend(result)
242+
except Exception as doc_error:
243+
# 处理单个文档处理的所有异常(包括超时)
244+
logger.error(f"Document processing failed for {item}: {doc_error}")
245+
246+
# 判断是否是超时异常
247+
error_type = "timeout" if isinstance(doc_error, TimeoutError) else "processing_error"
248+
error_msg = "处理超时" if isinstance(doc_error, TimeoutError) else "处理失败"
249+
250+
processed_items.append({
251+
"item": item,
252+
"status": "failed",
253+
"error": f"{error_msg}: {str(doc_error)}",
254+
"error_type": error_type
255+
})
241256

242257
except asyncio.CancelledError:
243258
await context.set_progress(100.0, "任务已取消")
244259
raise
260+
except Exception as task_error:
261+
# 处理整体任务的其他异常(如内存不足、网络错误等)
262+
logger.exception(f"Task processing failed: {task_error}")
263+
await context.set_progress(100.0, f"任务处理失败: {str(task_error)}")
264+
# 将所有未处理的文档标记为失败
265+
for item in items[len(processed_items):]:
266+
processed_items.append({
267+
"item": item,
268+
"status": "failed",
269+
"error": f"任务失败: {str(task_error)}",
270+
"error_type": "task_failed"
271+
})
272+
raise
245273

246274
item_type = "URL" if content_type == "url" else "文件"
247275
failed_count = len([_p for _p in processed_items if _p.get("status") == "failed"])

0 commit comments

Comments
 (0)