feat: add support for searx/searxng (#253)

* add searx/searxng support

* nit

* Fix indentation in search.py for readability

* Clean up imports in search.py

Removed unused imports from search.py

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
This commit is contained in:
Gordon
2025-09-22 18:54:30 +08:00
committed by GitHub
parent 6bb0b95579
commit 1c27e0f2ae
10 changed files with 41 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ class SearchEngine(enum.Enum):
DUCKDUCKGO = "duckduckgo"
BRAVE_SEARCH = "brave_search"
ARXIV = "arxiv"
SEARX = "searx"
WIKIPEDIA = "wikipedia"

View File

@@ -8,12 +8,14 @@ from typing import List, Optional
from langchain_community.tools import (
BraveSearch,
DuckDuckGoSearchResults,
SearxSearchRun,
WikipediaQueryRun,
)
from langchain_community.tools.arxiv import ArxivQueryRun
from langchain_community.utilities import (
ArxivAPIWrapper,
BraveSearchWrapper,
SearxSearchWrapper,
WikipediaAPIWrapper,
)
@@ -30,6 +32,7 @@ LoggedTavilySearch = create_logged_tool(TavilySearchWithImages)
LoggedDuckDuckGoSearch = create_logged_tool(DuckDuckGoSearchResults)
LoggedBraveSearch = create_logged_tool(BraveSearch)
LoggedArxivSearch = create_logged_tool(ArxivQueryRun)
LoggedSearxSearch = create_logged_tool(SearxSearchRun)
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
@@ -88,6 +91,13 @@ def get_web_search_tool(max_search_results: int):
load_all_available_meta=True,
),
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.SEARX.value:
return LoggedSearxSearch(
name="web_search",
wrapper=SearxSearchWrapper(
k=max_search_results,
)
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.WIKIPEDIA.value:
wiki_lang = search_config.get("wikipedia_lang", "en")
wiki_doc_content_chars_max = search_config.get(