From c8ace0251a8ee6a37de43fefc51a6b9216273090 Mon Sep 17 00:00:00 2001 From: pei711 <199601925+pei711@users.noreply.github.com> Date: Tue, 27 Oct 2026 13:42:51 +0800 Subject: [PATCH] fix(agents): return failed response for NewsAgent stream errors --- python/valuecell/agents/news_agent/core.py | 2 +- .../agents/news_agent/tests/test_core.py | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 python/valuecell/agents/news_agent/tests/test_core.py diff --git a/python/valuecell/agents/news_agent/core.py b/python/valuecell/agents/news_agent/core.py index 8bd6f992c..c7e3a2694 100644 --- a/python/valuecell/agents/news_agent/core.py +++ b/python/valuecell/agents/news_agent/core.py @@ -75,7 +75,7 @@ async def stream( except Exception as e: logger.error(f"Error processing news query: {str(e)}") logger.exception("Full error details:") - yield {"type": "error", "content": f"Error processing news query: {str(e)}"} + yield streaming.failed(f"Error processing news query: {str(e)}") async def run(self, query: str, **kwargs) -> str: """Run news agent and return response.""" diff --git a/python/valuecell/agents/news_agent/tests/test_core.py b/python/valuecell/agents/news_agent/tests/test_core.py new file mode 100644 index 000000000..c3ef55483 --- /dev/null +++ b/python/valuecell/agents/news_agent/tests/test_core.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import pytest + +from valuecell.core.types import StreamResponse, TaskStatusEvent + + +@pytest.mark.asyncio +async def test_stream_returns_failed_response_when_agent_raises(): + from valuecell.agents.news_agent.core import NewsAgent + + class FailingAgent: + async def arun(self, *args, **kwargs): + if False: + yield None + raise RuntimeError("upstream news API unavailable") + + agent = object.__new__(NewsAgent) + agent.knowledge_news_agent = FailingAgent() + + responses = [ + response + async for response in agent.stream( + query="latest market news", conversation_id="conversation", task_id="task" + ) + ] + + assert len(responses) == 1 + assert isinstance(responses[0], StreamResponse) + assert responses[0].event == TaskStatusEvent.TASK_FAILED + assert ( + responses[0].content + == "Error processing news query: upstream news API unavailable" + )