refactor(lightrag): 优化文件上传接口
Browse files- 移除 InsertFileRequest 模型,改用 FastAPI 的 File 和 UploadFile
- 修改 insert_file 函数,以适应新的文件上传方式
- 更新函数参数和逻辑,支持直接上传文件
- 优化错误处理和响应消息
examples/lightrag_api_openai_compatible_demo.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
from fastapi import FastAPI, HTTPException
|
2 |
from pydantic import BaseModel
|
3 |
import os
|
4 |
from lightrag import LightRAG, QueryParam
|
@@ -78,10 +78,6 @@ class InsertRequest(BaseModel):
|
|
78 |
text: str
|
79 |
|
80 |
|
81 |
-
class InsertFileRequest(BaseModel):
|
82 |
-
file_path: str
|
83 |
-
|
84 |
-
|
85 |
class Response(BaseModel):
|
86 |
status: str
|
87 |
data: Optional[str] = None
|
@@ -115,30 +111,22 @@ async def insert_endpoint(request: InsertRequest):
|
|
115 |
|
116 |
|
117 |
@app.post("/insert_file", response_model=Response)
|
118 |
-
async def insert_file(
|
119 |
try:
|
120 |
-
|
121 |
-
if not os.path.exists(request.file_path):
|
122 |
-
raise HTTPException(
|
123 |
-
status_code=404, detail=f"File not found: {request.file_path}"
|
124 |
-
)
|
125 |
-
|
126 |
# Read file content
|
127 |
try:
|
128 |
-
|
129 |
-
content = f.read()
|
130 |
except UnicodeDecodeError:
|
131 |
# If UTF-8 decoding fails, try other encodings
|
132 |
-
|
133 |
-
content = f.read()
|
134 |
-
|
135 |
# Insert file content
|
136 |
loop = asyncio.get_event_loop()
|
137 |
await loop.run_in_executor(None, lambda: rag.insert(content))
|
138 |
|
139 |
return Response(
|
140 |
status="success",
|
141 |
-
message=f"File content from {
|
142 |
)
|
143 |
except Exception as e:
|
144 |
raise HTTPException(status_code=500, detail=str(e))
|
|
|
1 |
+
from fastapi import FastAPI, HTTPException, File, UploadFile
|
2 |
from pydantic import BaseModel
|
3 |
import os
|
4 |
from lightrag import LightRAG, QueryParam
|
|
|
78 |
text: str
|
79 |
|
80 |
|
|
|
|
|
|
|
|
|
81 |
class Response(BaseModel):
|
82 |
status: str
|
83 |
data: Optional[str] = None
|
|
|
111 |
|
112 |
|
113 |
@app.post("/insert_file", response_model=Response)
|
114 |
+
async def insert_file(file: UploadFile = File(...)):
|
115 |
try:
|
116 |
+
file_content = await file.read()
|
|
|
|
|
|
|
|
|
|
|
117 |
# Read file content
|
118 |
try:
|
119 |
+
content = file_content.decode("utf-8")
|
|
|
120 |
except UnicodeDecodeError:
|
121 |
# If UTF-8 decoding fails, try other encodings
|
122 |
+
content = file_content.decode("gbk")
|
|
|
|
|
123 |
# Insert file content
|
124 |
loop = asyncio.get_event_loop()
|
125 |
await loop.run_in_executor(None, lambda: rag.insert(content))
|
126 |
|
127 |
return Response(
|
128 |
status="success",
|
129 |
+
message=f"File content from {file.filename} inserted successfully",
|
130 |
)
|
131 |
except Exception as e:
|
132 |
raise HTTPException(status_code=500, detail=str(e))
|