From d1fb498579e292da2d8a1dbf333d19a4989a521c Mon Sep 17 00:00:00 2001 From: Jeason <1710884619@qq.com> Date: Mon, 20 Apr 2026 14:32:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=BD=E9=97=AE=E6=97=B6ag?= =?UTF-8?q?ent=E4=B8=A2=E5=A4=B1=EF=BC=9A=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E5=90=8E=E8=87=AA=E5=8A=A8=E9=87=8D=E5=BB=BA?= =?UTF-8?q?agent=EF=BC=8C=E6=81=A2=E5=A4=8Dfile=5Flist=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/main.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/web/main.py b/web/main.py index 5ecd6e0..d06293f 100644 --- a/web/main.py +++ b/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, )