|
@@ -31,8 +31,6 @@ class QueryRequest(BaseModel):
|
|
|
class AnalysisResult(BaseModel):
|
|
|
sql: str
|
|
|
data: list
|
|
|
- visualization: dict = None
|
|
|
- similar_examples: List[Dict[str, Any]] = None
|
|
|
|
|
|
|
|
|
@app.post("/land_analysis/stream")
|
|
@@ -50,38 +48,43 @@ async def stream_land_analysis(request: QueryRequest):
|
|
|
data = json.loads(chunk)
|
|
|
|
|
|
if data["type"] == "sql_generation":
|
|
|
- yield chunk
|
|
|
+ yield "data: " + chunk + "\n"
|
|
|
elif data["type"] == "sql_result":
|
|
|
sql = data["content"]
|
|
|
result = await sql_generator.execute_sql(sql)
|
|
|
|
|
|
if result["status"] == "error":
|
|
|
- yield json.dumps({
|
|
|
+ error_data = json.dumps({
|
|
|
"type": "error",
|
|
|
"content": result["content"]
|
|
|
- }, ensure_ascii=False) + "\n"
|
|
|
+ }, ensure_ascii=False)
|
|
|
+ yield "data: " + error_data + "\n\n"
|
|
|
return
|
|
|
|
|
|
- yield json.dumps({
|
|
|
+ result_data = json.dumps({
|
|
|
"type": "result",
|
|
|
- "data": {
|
|
|
- "sql": sql,
|
|
|
- "exec_result": result["data"]
|
|
|
- }
|
|
|
- }, ensure_ascii=False) + "\n"
|
|
|
+ "data": result["data"]
|
|
|
+ }, ensure_ascii=False)
|
|
|
+ yield "data: " + result_data + "\n\n"
|
|
|
else:
|
|
|
- yield chunk
|
|
|
+ yield "data: " + chunk + "\n"
|
|
|
|
|
|
except Exception as e:
|
|
|
traceback.print_exc()
|
|
|
- yield json.dumps({
|
|
|
+ error_data = json.dumps({
|
|
|
"type": "error",
|
|
|
"content": str(e)
|
|
|
- }, ensure_ascii=False) + "\n"
|
|
|
+ }, ensure_ascii=False)
|
|
|
+ yield "data: " + error_data + "\n"
|
|
|
|
|
|
return StreamingResponse(
|
|
|
generate_stream(),
|
|
|
- media_type="text/event-stream"
|
|
|
+ media_type="text/event-stream",
|
|
|
+ headers={
|
|
|
+ "Cache-Control": "no-cache",
|
|
|
+ "Connection": "keep-alive",
|
|
|
+ "X-Accel-Buffering": "no"
|
|
|
+ }
|
|
|
)
|
|
|
|
|
|
|