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'])