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, )