From c5ac89f01fcc761d7c8d8952c5f8f0575ad30816 Mon Sep 17 00:00:00 2001 From: Rudra Sarker <78224940+rudra496@users.noreply.github.com> Date: Sun, 7 Jun 2026 20:53:14 +0600 Subject: [PATCH] fix: preserve partial deep research findings on non-timeout errors (#2189) * fix: preserve partial deep research findings on non-timeout errors * fix: preserve partial deep research findings on non-timeout errors --- src/research_handler.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/research_handler.py b/src/research_handler.py index 70433b61b..2fc369195 100644 --- a/src/research_handler.py +++ b/src/research_handler.py @@ -362,8 +362,26 @@ class ResearchHandler: raise except Exception as e: logger.error(f"Background research failed: {e}", exc_info=True) - entry["result"] = str(e) - entry["status"] = "error" + # Preserve partial findings if available (mirrors timeout branch) + researcher = entry.get("researcher") + if researcher and researcher.evolving_report: + _elapsed = time.time() - entry["started_at"] + entry["result"] = self._format_research_report( + query, researcher.evolving_report, + researcher.get_stats(), _elapsed, + ) + entry["status"] = "done" + self._save_result(session_id, entry) + try: + sources = self._extract_sources(researcher.findings) if researcher.findings else [] + findings = self._extract_raw_findings(researcher.findings) if researcher.findings else [] + _guarded_complete(session_id, entry["result"], sources, findings) + except Exception as cb_err: + logger.warning(f"on_complete callback failed in error branch: {cb_err}") + on_progress({"phase": "warning", "message": f"Research finished with errors — partial results saved ({_elapsed:.0f}s elapsed)"}) + else: + entry["result"] = str(e) + entry["status"] = "error" task = asyncio.create_task(_run()) entry["task"] = task