File: //proc/thread-self/root/opt/panomity_tools/panomity_tools.py
import time
import requests
from crewai_tools import BaseTool
class SearXNGSearchTool(BaseTool):
name: str = "SearXNG Search Tool"
description: str = "Searches queries using SearXNG and returns the results."
def _run(self, query: str) -> str:
searx_url = "https://search.panomity.com/search"
params = {
"q": query,
"format": "json"
}
for attempt in range(5): # Retry up to 5 times
response = requests.get(searx_url, params=params)
if response.status_code == 200:
results = response.json()
return self._format_results(results)
elif response.status_code == 429:
time.sleep(2 ** attempt) # Exponential backoff
else:
return f"Error: Unable to fetch results (Status Code: {response.status_code})"
return "Error: Too many requests. Please try again later."
def _format_results(self, results: dict) -> str:
formatted_results = ""
for result in results.get('results', []):
formatted_results += f"Title: {result.get('title')}\n"
formatted_results += f"URL: {result.get('url')}\n"
formatted_results += f"Snippet: {result.get('content')}\n\n"
return formatted_results if formatted_results else "No results found."