feat: add Serper search engine support (#762)

* feat: add Serper search engine support

* docs: update configuration guide and env example for Serper

* test: add test case for Serper with missing API key
This commit is contained in:
Willem Jiang
2025-12-15 23:04:26 +08:00
committed by GitHub
parent 93d81d450d
commit 2a97170b6c
5 changed files with 47 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ import os
from unittest.mock import patch
import pytest
from pydantic import ValidationError
from src.config import SearchEngine
from src.tools.search import get_web_search_tool
@@ -56,6 +57,20 @@ class TestGetWebSearchTool:
tool = get_web_search_tool(max_search_results=1)
assert tool.search_wrapper.api_key.get_secret_value() == ""
@patch("src.tools.search.SELECTED_SEARCH_ENGINE", SearchEngine.SERPER.value)
@patch.dict(os.environ, {"SERPER_API_KEY": "test_serper_key"})
def test_get_web_search_tool_serper(self):
tool = get_web_search_tool(max_search_results=6)
assert tool.name == "web_search"
assert tool.api_wrapper.k == 6
assert tool.api_wrapper.serper_api_key == "test_serper_key"
@patch("src.tools.search.SELECTED_SEARCH_ENGINE", SearchEngine.SERPER.value)
@patch.dict(os.environ, {}, clear=True)
def test_get_web_search_tool_serper_no_api_key(self):
with pytest.raises(ValidationError):
get_web_search_tool(max_search_results=1)
@patch("src.tools.search.SELECTED_SEARCH_ENGINE", SearchEngine.TAVILY.value)
@patch("src.tools.search.load_yaml_config")
def test_get_web_search_tool_tavily_with_custom_config(self, mock_config):