修复追问时agent丢失:服务器重启后自动重建agent,恢复file_list用于数据加载
This commit is contained in:
22
web/main.py
22
web/main.py
@@ -183,6 +183,8 @@ class SessionManager:
|
||||
pass
|
||||
|
||||
# Recover Metadata
|
||||
session.file_list = meta.get("file_list", [])
|
||||
session.user_requirement = meta.get("user_requirement", "")
|
||||
try:
|
||||
stat = os.stat(output_dir)
|
||||
dt = datetime.fromtimestamp(stat.st_ctime)
|
||||
@@ -248,6 +250,7 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
|
||||
return
|
||||
|
||||
session.is_running = True
|
||||
session.file_list = files or []
|
||||
try:
|
||||
base_output_dir = "outputs"
|
||||
|
||||
@@ -261,7 +264,7 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
|
||||
# even if the server restarts mid-analysis
|
||||
try:
|
||||
with open(os.path.join(session_output_dir, "session_meta.json"), "w") as f:
|
||||
json.dump({"session_id": session_id, "user_requirement": user_requirement}, f, default=str)
|
||||
json.dump({"session_id": session_id, "user_requirement": user_requirement, "file_list": files or []}, f, default=str)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@@ -298,8 +301,12 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
|
||||
else:
|
||||
agent = session.agent
|
||||
if not agent:
|
||||
print("Error: Agent not initialized for follow-up.")
|
||||
return
|
||||
# Agent lost (server restart). Recreate and run as new session
|
||||
# with the follow-up requirement, reusing the same output dir.
|
||||
print("[WARN] Agent not initialized, recreating for follow-up.")
|
||||
llm_config = LLMConfig()
|
||||
agent = DataAnalysisAgent(llm_config, force_max_rounds=False, output_dir=base_output_dir)
|
||||
session.agent = agent
|
||||
|
||||
# Wire progress callback for follow-up sessions
|
||||
def progress_cb_followup(current, total, message):
|
||||
@@ -311,11 +318,16 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
|
||||
agent.set_progress_callback(progress_cb_followup)
|
||||
agent.set_session_ref(session)
|
||||
|
||||
# If agent was just recreated, load data files so it has context
|
||||
data_files = None
|
||||
if not agent.data_files and session.file_list:
|
||||
data_files = session.file_list
|
||||
|
||||
result = agent.analyze(
|
||||
user_input=user_requirement,
|
||||
files=None,
|
||||
files=data_files,
|
||||
session_output_dir=session_output_dir,
|
||||
reset_session=False,
|
||||
reset_session=not bool(agent.conversation_history),
|
||||
max_rounds=10,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user