fix: search_documents 端点添加异常处理防止 traceback 泄露
This commit is contained in:
@@ -63,18 +63,6 @@ for label, d in targets:
|
||||
skipped.append((f.name, size))
|
||||
continue
|
||||
files.append((label, str(f)))
|
||||
# 顶层 .md 文件
|
||||
for target_info in targets:
|
||||
d = target_info[1]
|
||||
p = Path(d)
|
||||
if not p.exists():
|
||||
continue
|
||||
for f in p.glob("*.md"):
|
||||
sz = f.stat().st_size
|
||||
if sz > MAX_SIZE:
|
||||
skipped.append((f.name, sz))
|
||||
else:
|
||||
files.append(("顶层/" + p.name, str(f)))
|
||||
|
||||
log(f"待处理: {len(files)} 个文件")
|
||||
if skipped:
|
||||
|
||||
@@ -32,12 +32,11 @@ class PDFSplitter:
|
||||
pdf_path = text # text 参数实际是文件路径
|
||||
extracted_pages = []
|
||||
try:
|
||||
doc = fitz.open(pdf_path)
|
||||
for page in doc:
|
||||
page_text = page.get_text()
|
||||
if page_text.strip():
|
||||
extracted_pages.append(page_text)
|
||||
doc.close()
|
||||
with fitz.open(pdf_path) as doc:
|
||||
for page in doc:
|
||||
page_text = page.get_text()
|
||||
if page_text.strip():
|
||||
extracted_pages.append(page_text)
|
||||
except Exception as e:
|
||||
logger.error("PDF 解析失败: %s — %s", pdf_path, e)
|
||||
raise ValueError(f"PDF 解析失败: {e}") from e
|
||||
|
||||
+9
-3
@@ -150,9 +150,15 @@ def search_documents(
|
||||
state: AppState = Depends(get_state),
|
||||
_: bool = Depends(verify_api_key),
|
||||
):
|
||||
searcher = state.get_searcher(req.collection)
|
||||
results = searcher.search(req.query, top_k=req.top_k)
|
||||
return {"results": results, "collection": searcher.collection_name}
|
||||
try:
|
||||
searcher = state.get_searcher(req.collection)
|
||||
results = searcher.search(req.query, top_k=req.top_k)
|
||||
return {"results": results, "collection": searcher.collection_name}
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception:
|
||||
logger.exception("检索失败")
|
||||
raise HTTPException(status_code=500, detail="服务器内部错误")
|
||||
|
||||
|
||||
@app.delete("/api/v1/documents/{file_name}")
|
||||
|
||||
Reference in New Issue
Block a user