From f9771700e4da6470c510ca9cdf6a5afa8708ec0f Mon Sep 17 00:00:00 2001 From: Gabriel Altay Date: Sun, 25 Jun 2023 22:54:15 -0400 Subject: [PATCH] prevent DuckDuckGoSearchAPIWrapper from consuming top result (#6727) remove the `next` call that checks for None on the results generator --- langchain/utilities/duckduckgo_search.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/langchain/utilities/duckduckgo_search.py b/langchain/utilities/duckduckgo_search.py index 4780d85ef98..f90fdf7fecf 100644 --- a/langchain/utilities/duckduckgo_search.py +++ b/langchain/utilities/duckduckgo_search.py @@ -49,14 +49,15 @@ class DuckDuckGoSearchAPIWrapper(BaseModel): safesearch=self.safesearch, timelimit=self.time, ) - if results is None or next(results, None) is None: + if results is None: return ["No good DuckDuckGo Search Result was found"] snippets = [] for i, res in enumerate(results, 1): - snippets.append(res["body"]) - if i == self.max_results: + if res is not None: + snippets.append(res["body"]) + if len(snippets) == self.max_results: break - return snippets + return snippets def run(self, query: str) -> str: snippets = self.get_snippets(query) @@ -84,7 +85,7 @@ class DuckDuckGoSearchAPIWrapper(BaseModel): safesearch=self.safesearch, timelimit=self.time, ) - if results is None or next(results, None) is None: + if results is None: return [{"Result": "No good DuckDuckGo Search Result was found"}] def to_metadata(result: Dict) -> Dict[str, str]: @@ -96,7 +97,8 @@ class DuckDuckGoSearchAPIWrapper(BaseModel): formatted_results = [] for i, res in enumerate(results, 1): - formatted_results.append(to_metadata(res)) - if i == num_results: + if res is not None: + formatted_results.append(to_metadata(res)) + if len(formatted_results) == num_results: break - return formatted_results + return formatted_results