fix: use AIMessage content for summarization response parsing

Agent-Logs-Url: https://github.com/bytedance/deer-flow/sessions/0b34cccd-f69a-4f68-bfa6-9a41256b63b5

Co-authored-by: WillemJiang <219644+WillemJiang@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-05-11 14:48:45 +00:00
committed by GitHub
parent c995c3a394
commit 6ffe267d20
2 changed files with 10 additions and 4 deletions
@@ -201,7 +201,7 @@ class DeerFlowSummarizationMiddleware(SummarizationMiddleware):
"callbacks": [],
},
)
return response.text.strip()
return self._extract_summary_text(response)
except Exception as e:
return f"Error generating summary: {e!s}"
@@ -230,10 +230,16 @@ class DeerFlowSummarizationMiddleware(SummarizationMiddleware):
"callbacks": [],
},
)
return response.text.strip()
return self._extract_summary_text(response)
except Exception as e:
return f"Error generating summary: {e!s}"
def _extract_summary_text(self, response: Any) -> str:
summary_text = getattr(response, "content", None)
if summary_text is None:
summary_text = getattr(response, "text", "")
return summary_text.strip() if isinstance(summary_text, str) else str(summary_text).strip()
@override
def _build_new_messages(self, summary: str) -> list[HumanMessage]:
"""Override the base implementation to let the human message with the special name 'summary'.
@@ -50,7 +50,7 @@ def _middleware(
preserve_recent_skill_tokens_per_skill: int = 0,
) -> DeerFlowSummarizationMiddleware:
model = MagicMock()
model.invoke.return_value = SimpleNamespace(text="compressed summary")
model.invoke.return_value = AIMessage(content="compressed summary")
return DeerFlowSummarizationMiddleware(
model=model,
trigger=trigger,
@@ -672,7 +672,7 @@ async def test_acreate_summary_suppresses_callbacks() -> None:
"""_acreate_summary must pass callbacks=[] to prevent the internal LLM call
from producing visible streaming events in the frontend (issue #2804)."""
middleware = _middleware()
middleware.model.ainvoke = mock.AsyncMock(return_value=SimpleNamespace(text="async summary"))
middleware.model.ainvoke = mock.AsyncMock(return_value=AIMessage(content="async summary"))
await middleware._acreate_summary(_messages())