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