From 624fd46492be3535d9f7c3a544088f84be8e6b9e Mon Sep 17 00:00:00 2001 From: wugren Date: Sun, 26 Nov 2023 22:52:12 +0800 Subject: [PATCH] Add duckduckgo text search function --- .../duckduckgo_text_search_function.py | 52 +++++++++++++++++++ src/requirements.txt | 1 + 2 files changed, 53 insertions(+) create mode 100644 src/aios_kernel/duckduckgo_text_search_function.py diff --git a/src/aios_kernel/duckduckgo_text_search_function.py b/src/aios_kernel/duckduckgo_text_search_function.py new file mode 100644 index 0000000..154f761 --- /dev/null +++ b/src/aios_kernel/duckduckgo_text_search_function.py @@ -0,0 +1,52 @@ +import json +from typing import Dict + +from aios_kernel.ai_function import AIFunction +from duckduckgo_search import AsyncDDGS + + +class DuckDuckGoTextSearchFunction(AIFunction): + def __init__(self): + self.name = "duckduckgo_text_search" + self.description = "Search text from duckduckgo.com" + self.region = "wt-wt" + self.safesearch = "moderate" + self.time = "y" + self.max_results = 5 + + def get_name(self) -> str: + return self.name + + def get_description(self) -> str: + return self.description + + def get_parameters(self) -> Dict: + return {"type": "object", + "properties": { + "query": {"type": "string", "description": "The query to search for."} + } + } + + async def execute(self, **kwargs) -> str: + query = kwargs.get("query") + + async with AsyncDDGS() as ddgs: + results = [r async for r in ddgs.text( + query, + region=self.region, + safesearch=self.safesearch, + timelimit=self.time, + backend="api", + max_results=self.max_results + )] + + return json.dumps(results) + + def is_local(self) -> bool: + return True + + def is_in_zone(self) -> bool: + return True + + def is_ready_only(self) -> bool: + return False diff --git a/src/requirements.txt b/src/requirements.txt index 77bc2dc..bfe9053 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -144,3 +144,4 @@ srt==3.5.3 webvtt-py==0.4.6 docker generic_escape +duckduckgo-search