53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
|
|
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
|