12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import logging
- from typing import Optional
- from open_webui.retrieval.web.main import SearchResult, get_filtered_results
- from duckduckgo_search import DDGS
- from open_webui.env import SRC_LOG_LEVELS
- log = logging.getLogger(__name__)
- log.setLevel(SRC_LOG_LEVELS["RAG"])
- def search_duckduckgo(
- query: str, count: int, filter_list: Optional[list[str]] = None
- ) -> list[SearchResult]:
- """
- Search using DuckDuckGo's Search API and return the results as a list of SearchResult objects.
- Args:
- query (str): The query to search for
- count (int): The number of results to return
- Returns:
- list[SearchResult]: A list of search results
- """
- # Use the DDGS context manager to create a DDGS object
- with DDGS() as ddgs:
- # Use the ddgs.text() method to perform the search
- ddgs_gen = ddgs.text(
- query, safesearch="moderate", max_results=count, backend="api"
- )
- # Check if there are search results
- if ddgs_gen:
- # Convert the search results into a list
- search_results = [r for r in ddgs_gen]
- if filter_list:
- search_results = get_filtered_results(search_results, filter_list)
- # Return the list of search results
- return [
- SearchResult(
- link=result["href"],
- title=result.get("title"),
- snippet=result.get("body"),
- )
- for result in search_results
- ]
|