main
HuangHai 3 weeks ago
parent b2ee229e15
commit 15095235c3

@ -54,10 +54,10 @@ app = FastAPI(lifespan=lifespan)
# 挂载静态文件目录
app.mount("/static", StaticFiles(directory="Static"), name="static")
@app.post("/api/rag", response_model=None)
@app.post("/api/rag")
async def rag(request: fastapi.Request):
data = await request.json()
query = data.get('query', '')
query = data.get("query")
working_dir = "./Test/Math" # 使用与T2_Query.py相同的目录
async def generate_response_stream(query: str):
@ -69,17 +69,15 @@ async def rag(request: fastapi.Request):
if not chunk:
continue
# 正确的SSE格式应该是单层data:前缀
# 确保SSE格式正确
yield f"data: {json.dumps({'reply': chunk})}\n\n"
# 打印到控制台用于调试
print(chunk, end='', flush=True)
except Exception as e:
yield f"data: {json.dumps({'error': str(e)})}\n\n"
finally:
if 'rag' in locals():
await rag.finalize()
await rag.finalize_storages()
return EventSourceResponse(generate_response_stream(query=query))

@ -308,15 +308,15 @@
function submitQuestion() {
const question = document.getElementById('questionInput').value.trim();
const answerArea = document.getElementById('answerArea');
if (!question) {
alert('请输入问题!');
return;
}
// 添加加载动画
answerArea.innerHTML = '<div class="loading-animation"><div class="spinner"></div><div>思考中...</div></div>';
fetch('/api/rag', {
method: 'POST',
headers: {
@ -332,18 +332,18 @@
const decoder = new TextDecoder();
let buffer = '';
let accumulatedContent = '';
function processChunk() {
return reader.read().then(({done, value}) => {
if (done) return;
buffer += decoder.decode(value, {stream: true});
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
if (line.includes('data:')) {
const jsonStr = line.replace(/^data:\s*/, '').trim();
const jsonStr = line.replace(/^data:\s*/, '').replace(/^data:\s*/, '').trim();
if (jsonStr) {
try {
const data = JSON.parse(jsonStr);
@ -358,14 +358,23 @@
}
}
}
return processChunk();
return processChunk().then(() => {
// 在流处理完成后保存完整的markdown内容
localStorage.setItem('lastMarkdownContent', accumulatedContent);
});
});
}
return processChunk();
})
.catch(error => {
answerArea.innerHTML = '<div style="color:red">请求出错,请重试</div>';
// 移除加载动画
answerArea.innerHTML = '';
console.error('Error:', error);
// 出错时也移除加载动画
answerArea.innerHTML = '<div style="color:red">请求出错,请重试</div>';
});
}

Loading…
Cancel
Save