feat: Introduce LLM response caching and streaming, add application configuration, and enhance session data with progress and history tracking.
This commit is contained in:
80
web/main.py
80
web/main.py
@@ -43,6 +43,18 @@ class SessionData:
|
||||
self.log_file: Optional[str] = None
|
||||
self.analysis_results: List[Dict] = [] # Store analysis results for gallery
|
||||
self.agent: Optional[DataAnalysisAgent] = None # Store the agent instance for follow-up
|
||||
|
||||
# 新增:进度跟踪
|
||||
self.current_round: int = 0
|
||||
self.max_rounds: int = 20
|
||||
self.progress_percentage: float = 0.0
|
||||
self.status_message: str = "等待开始"
|
||||
|
||||
# 新增:历史记录
|
||||
self.created_at: str = ""
|
||||
self.last_updated: str = ""
|
||||
self.user_requirement: str = ""
|
||||
self.file_list: List[str] = []
|
||||
|
||||
|
||||
class SessionManager:
|
||||
@@ -56,11 +68,40 @@ class SessionManager:
|
||||
self.sessions[session_id] = SessionData(session_id)
|
||||
return session_id
|
||||
|
||||
|
||||
def get_session(self, session_id: str) -> Optional[SessionData]:
|
||||
return self.sessions.get(session_id)
|
||||
|
||||
def list_sessions(self):
|
||||
return list(self.sessions.keys())
|
||||
|
||||
def delete_session(self, session_id: str) -> bool:
|
||||
"""删除指定会话"""
|
||||
with self.lock:
|
||||
if session_id in self.sessions:
|
||||
session = self.sessions[session_id]
|
||||
if session.agent:
|
||||
session.agent.reset()
|
||||
del self.sessions[session_id]
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_session_info(self, session_id: str) -> Optional[Dict]:
|
||||
"""获取会话详细信息"""
|
||||
session = self.get_session(session_id)
|
||||
if session:
|
||||
return {
|
||||
"session_id": session.session_id,
|
||||
"is_running": session.is_running,
|
||||
"progress": session.progress_percentage,
|
||||
"status": session.status_message,
|
||||
"current_round": session.current_round,
|
||||
"max_rounds": session.max_rounds,
|
||||
"created_at": session.created_at,
|
||||
"last_updated": session.last_updated,
|
||||
"user_requirement": session.user_requirement[:100] + "..." if len(session.user_requirement) > 100 else session.user_requirement
|
||||
}
|
||||
return None
|
||||
|
||||
session_manager = SessionManager()
|
||||
|
||||
@@ -477,3 +518,42 @@ async def get_troubleshooting_guide():
|
||||
return {"content": content}
|
||||
except Exception as e:
|
||||
return {"content": f"# Error Loading Guide\n\n{e}"}
|
||||
|
||||
|
||||
# --- 新增API端点 ---
|
||||
|
||||
@app.get("/api/sessions/progress")
|
||||
async def get_session_progress(session_id: str = Query(..., description="Session ID")):
|
||||
"""获取会话分析进度"""
|
||||
session_info = session_manager.get_session_info(session_id)
|
||||
if not session_info:
|
||||
raise HTTPException(status_code=404, detail="Session not found")
|
||||
return session_info
|
||||
|
||||
|
||||
@app.get("/api/sessions/list")
|
||||
async def list_all_sessions():
|
||||
"""获取所有会话列表"""
|
||||
session_ids = session_manager.list_sessions()
|
||||
sessions_info = []
|
||||
|
||||
for sid in session_ids:
|
||||
info = session_manager.get_session_info(sid)
|
||||
if info:
|
||||
sessions_info.append(info)
|
||||
|
||||
return {"sessions": sessions_info, "total": len(sessions_info)}
|
||||
|
||||
|
||||
@app.delete("/api/sessions/{session_id}")
|
||||
async def delete_specific_session(session_id: str):
|
||||
"""删除指定会话"""
|
||||
success = session_manager.delete_session(session_id)
|
||||
if not success:
|
||||
raise HTTPException(status_code=404, detail="Session not found")
|
||||
return {"status": "deleted", "session_id": session_id}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
|
||||
Reference in New Issue
Block a user