From 1cfa48ad4a8af80ec68a3c9f1f9cf30bf22ac23f Mon Sep 17 00:00:00 2001 From: Xubin Ren <52506698+Re-bin@users.noreply.github.com> Date: Sun, 5 Jul 2026 14:14:28 +0800 Subject: [PATCH] fix(web-search): return structured Serper errors --- nanobot/agent/tools/web.py | 6 +++--- tests/tools/test_web_search_tool.py | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/nanobot/agent/tools/web.py b/nanobot/agent/tools/web.py index 335fc9be..aa5645ac 100644 --- a/nanobot/agent/tools/web.py +++ b/nanobot/agent/tools/web.py @@ -705,10 +705,10 @@ class WebSearchTool(Tool): return _format_results(query, items, n) except httpx.HTTPStatusError as e: if e.response.status_code == 429: - return "Error: Serper search rate limited. Try again later or reduce search frequency." - return f"Error: Serper search failed ({e.response.status_code}): {e}" + return ToolResult.error("Error: Serper search rate limited. Try again later or reduce search frequency.") + return ToolResult.error(f"Error: Serper search failed ({e.response.status_code}): {e}") except Exception as e: - return f"Error: Serper search failed: {e}" + return ToolResult.error(f"Error: Serper search failed: {e}") async def _search_volcengine( self, diff --git a/tests/tools/test_web_search_tool.py b/tests/tools/test_web_search_tool.py index 18dbf160..b7ad7d60 100644 --- a/tests/tools/test_web_search_tool.py +++ b/tests/tools/test_web_search_tool.py @@ -3,6 +3,7 @@ import httpx import pytest +from nanobot.agent.tools.registry import is_tool_error_result from nanobot.agent.tools.web import WebSearchTool from nanobot.config.schema import WebSearchConfig @@ -271,6 +272,7 @@ async def test_serper_search_http_error(monkeypatch): tool = _tool(provider="serper", api_key="bad-serper-key") result = await tool.execute(query="serper") assert "Error: Serper search failed (403)" in result + assert is_tool_error_result(tool.name, result) @pytest.mark.asyncio @@ -282,6 +284,7 @@ async def test_serper_search_rate_limited(monkeypatch): tool = _tool(provider="serper", api_key="serper-key") result = await tool.execute(query="serper") assert "Serper search rate limited" in result + assert is_tool_error_result(tool.name, result) @pytest.mark.asyncio