From 337c7caafa0225badaaedd361ec323b63f75734a Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Tue, 8 Apr 2025 13:51:54 +0200 Subject: [PATCH 1/2] improve stack trace of duckduckgo exception * fix search_results out of scope * ddgs.text does already always return a list --- backend/open_webui/retrieval/web/duckduckgo.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/open_webui/retrieval/web/duckduckgo.py b/backend/open_webui/retrieval/web/duckduckgo.py index d95086671..550c59793 100644 --- a/backend/open_webui/retrieval/web/duckduckgo.py +++ b/backend/open_webui/retrieval/web/duckduckgo.py @@ -3,6 +3,7 @@ from typing import Optional from open_webui.retrieval.web.main import SearchResult, get_filtered_results from duckduckgo_search import DDGS +from duckduckgo_search.exceptions import RatelimitException from open_webui.env import SRC_LOG_LEVELS log = logging.getLogger(__name__) @@ -22,16 +23,15 @@ def search_duckduckgo( list[SearchResult]: A list of search results """ # Use the DDGS context manager to create a DDGS object + search_results = [] 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] - + try: + search_results = ddgs.text( + query, safesearch="moderate", max_results=count, backend="api" + ) + except RatelimitException as e: + log.error(f"RatelimitException: {e}") if filter_list: search_results = get_filtered_results(search_results, filter_list) From 760ea3f4afbbaa4f2046dc53aa9ea3fd2f784c53 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Tue, 8 Apr 2025 14:01:44 +0200 Subject: [PATCH 2/2] duckduckgo: backend api has been deprecated since december also increase duckduckgo-search version see https://github.com/deedy5/duckduckgo_search/commit/3ee8e08b1c8efc9b7356f406db299f1114dc4860 --- backend/open_webui/retrieval/web/duckduckgo.py | 2 +- backend/requirements.txt | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/retrieval/web/duckduckgo.py b/backend/open_webui/retrieval/web/duckduckgo.py index 550c59793..bf8ae6880 100644 --- a/backend/open_webui/retrieval/web/duckduckgo.py +++ b/backend/open_webui/retrieval/web/duckduckgo.py @@ -28,7 +28,7 @@ def search_duckduckgo( # Use the ddgs.text() method to perform the search try: search_results = ddgs.text( - query, safesearch="moderate", max_results=count, backend="api" + query, safesearch="moderate", max_results=count, backend="lite" ) except RatelimitException as e: log.error(f"RatelimitException: {e}") diff --git a/backend/requirements.txt b/backend/requirements.txt index 56cde3862..ad490d00a 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -98,7 +98,7 @@ pytube==15.0.0 extract_msg pydub -duckduckgo-search~=7.3.2 +duckduckgo-search~=7.5.5 ## Google Drive google-api-python-client diff --git a/pyproject.toml b/pyproject.toml index 52260e45e..18e833290 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,7 +104,7 @@ dependencies = [ "extract_msg", "pydub", - "duckduckgo-search~=7.3.2", + "duckduckgo-search~=7.5.5", "google-api-python-client", "google-auth-httplib2",