fix(web): pass proxy to DDGS client
The DuckDuckGo search provider instantiated DDGS(timeout=10) without passing the configured proxy, making web_search unusable in environments that require a proxy (e.g. behind GFW). DDGS supports a proxy parameter and the proxy value is already available as self.proxy — it was simply not forwarded. Add a test verifying the proxy kwarg is forwarded to DDGS.
This commit is contained in:
@@ -759,7 +759,7 @@ class WebSearchTool(Tool):
|
||||
# We run it in a thread to avoid blocking the loop
|
||||
from ddgs import DDGS
|
||||
|
||||
ddgs = DDGS(timeout=10)
|
||||
ddgs = DDGS(timeout=10, proxy=self.proxy)
|
||||
raw = await asyncio.wait_for(
|
||||
asyncio.to_thread(ddgs.text, query, max_results=n),
|
||||
timeout=self.config.timeout,
|
||||
|
||||
@@ -365,6 +365,27 @@ async def test_duckduckgo_search(monkeypatch):
|
||||
assert "DDG Result" in result
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_duckduckgo_search_passes_proxy(monkeypatch):
|
||||
"""DDGS client must receive the configured proxy so search works behind a proxy."""
|
||||
captured: dict = {}
|
||||
|
||||
class ProxyCaptorDDGS:
|
||||
def __init__(self, **kw):
|
||||
captured.update(kw)
|
||||
|
||||
def text(self, query, max_results=5):
|
||||
return [{"title": "Proxied", "href": "https://ddg.example", "body": "OK"}]
|
||||
|
||||
monkeypatch.setattr("ddgs.DDGS", ProxyCaptorDDGS)
|
||||
|
||||
tool = _tool(provider="duckduckgo")
|
||||
tool.proxy = "http://192.168.1.1:8080"
|
||||
result = await tool.execute(query="hello")
|
||||
assert captured.get("proxy") == "http://192.168.1.1:8080"
|
||||
assert "Proxied" in result
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_brave_fallback_to_duckduckgo_when_no_key(monkeypatch):
|
||||
class MockDDGS:
|
||||
|
||||
Reference in New Issue
Block a user