"""Tools to search the web and extract information.""" import os from tavily import AsyncTavilyClient from llama_index.core.tools import FunctionTool async def tavily_web_tool(query: str) -> str: """ Search the web with a given query and return the first two results. If results do not return what you are looking for, rephrasing the query can help. """ client = AsyncTavilyClient(api_key=os.getenv("TAVILY")) res = await client.search(query) urls = [r.get("url") for r in res.get("results", []) if "url" in r][:2] page_contents = { url: await client.extract(url) for url in urls } return "\n\n".join( f"RESULT {i}:\n{content}" for i, content in enumerate(page_contents.values()) ) def get_search_web_tool(): return FunctionTool.from_defaults( fn=tavily_web_tool, description="Search the web with a given query and return the first two results." )