修复追问时agent丢失:服务器重启后自动重建agent,恢复file_list用于数据加载
This commit is contained in:
22
web/main.py
22
web/main.py
@@ -183,6 +183,8 @@ class SessionManager:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
# Recover Metadata
|
# Recover Metadata
|
||||||
|
session.file_list = meta.get("file_list", [])
|
||||||
|
session.user_requirement = meta.get("user_requirement", "")
|
||||||
try:
|
try:
|
||||||
stat = os.stat(output_dir)
|
stat = os.stat(output_dir)
|
||||||
dt = datetime.fromtimestamp(stat.st_ctime)
|
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
|
return
|
||||||
|
|
||||||
session.is_running = True
|
session.is_running = True
|
||||||
|
session.file_list = files or []
|
||||||
try:
|
try:
|
||||||
base_output_dir = "outputs"
|
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
|
# even if the server restarts mid-analysis
|
||||||
try:
|
try:
|
||||||
with open(os.path.join(session_output_dir, "session_meta.json"), "w") as f:
|
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:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -298,8 +301,12 @@ def run_analysis_task(session_id: str, files: list, user_requirement: str, is_fo
|
|||||||
else:
|
else:
|
||||||
agent = session.agent
|
agent = session.agent
|
||||||
if not agent:
|
if not agent:
|
||||||
print("Error: Agent not initialized for follow-up.")
|
# Agent lost (server restart). Recreate and run as new session
|
||||||
return
|
# 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
|
# Wire progress callback for follow-up sessions
|
||||||
def progress_cb_followup(current, total, message):
|
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_progress_callback(progress_cb_followup)
|
||||||
agent.set_session_ref(session)
|
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(
|
result = agent.analyze(
|
||||||
user_input=user_requirement,
|
user_input=user_requirement,
|
||||||
files=None,
|
files=data_files,
|
||||||
session_output_dir=session_output_dir,
|
session_output_dir=session_output_dir,
|
||||||
reset_session=False,
|
reset_session=not bool(agent.conversation_history),
|
||||||
max_rounds=10,
|
max_rounds=10,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user