web-researcher / search.py
anirudhs's picture
added researcher files
8fd59af
from tavily import TavilyClient
import ui
from typing import List, Dict
import os
from dotenv import load_dotenv
load_dotenv()
tavily_search = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
def format_search_results(results: List[Dict]) -> str:
formatted_results = []
for result in results:
formatted_result = ''
formatted_result = f"[{result.get('number', '')}] Title: {result.get('title', 'N/A')}\n"
formatted_result += f" Snippet: {result.get('body', '')}\n"
formatted_result += f" URL: {result.get('href', 'N/A')}\n\n"
formatted_results.append(formatted_result)
return "\n".join(formatted_results)
def fetch_search_results(query: List[str], task_status, task_name, fn):
results = []
for q in query:
task_status[task_name]["name"] = "Searching for: " + q
yield from fn()
ui.system_sub_update(f"Searching for: {q}")
try:
result = tavily_search.search(q)
result = result["results"][:3]
result = [{'title': res['title'], 'body': res['content'], 'href': res['url']} for res in result]
results.extend(result)
except:
result = tavily_search.search(q)
result = result["results"][:3]
result = [{'title': res['title'], 'body': res['content'], 'href': res['url']} for res in result]
results.extend(result)
results = [{'number' : i+1, **result } for i, result in enumerate(results)]
formatted_results = format_search_results(results)
return formatted_results, results
if __name__ == "__main__":
fetch_search_results(['gitlab', 'github'])