Create search_engine.py

frdel committed May 27, 2025 at 13:24 UTC c07330acd94f7a1fad850974c7c3639ec4d7e0d9
1 file changed +38
python/tools/search_engine.py new
+38
@@ -0,0 +1,38 @@
1 +import os
2 +import asyncio
3 +from python.helpers import dotenv, memory, perplexity_search, duckduckgo_search
4 +from python.helpers.tool import Tool, Response
5 +from python.helpers.print_style import PrintStyle
6 +from python.helpers.errors import handle_error
7 +from python.helpers.searxng import search as searxng
8 +
9 +SEARCH_ENGINE_RESULTS = 10
10 +
11 +
12 +class SearchEngine(Tool):
13 + async def execute(self, query="", **kwargs):
14 +
15 +
16 + searxng_result = await self.searxng_search(query)
17 +
18 + await self.agent.handle_intervention(
19 + searxng_result
20 + ) # wait for intervention and handle it, if paused
21 +
22 + return Response(message=searxng_result, break_loop=False)
23 +
24 +
25 + async def searxng_search(self, question):
26 + results = await searxng(question)
27 + return self.format_result_searxng(results, "Search Engine")
28 +
29 + def format_result_searxng(self, result, source):
30 + if isinstance(result, Exception):
31 + handle_error(result)
32 + return f"{source} search failed: {str(result)}"
33 +
34 + outputs = []
35 + for item in result["results"]:
36 + outputs.append(f"{item['title']}\n{item['url']}\n{item['content']}")
37 +
38 + return "\n\n".join(outputs[:SEARCH_ENGINE_RESULTS]).strip()