import os from llama_index.core.tools import FunctionTool from llama_index.tools.tavily_research import TavilyToolSpec from llama_index.readers.wikipedia import WikipediaReader from llama_index.readers.papers import ArxivReader from llama_index.core.tools.ondemand_loader_tool import OnDemandLoaderTool from huggingface_hub import list_models # Math functions def multiply(a: int, b: int) -> int: """Multiply two numbers.""" return a * b def add(a: int, b: int) -> int: """Add two numbers.""" return a + b def subtract(a: int, b: int) -> int: """Subtract two numbers.""" return a - b def divide(a: int, b: int) -> int: """Divide two numbers.""" if b == 0: raise ValueError("Cannot divide by zero.") return a / b def modulus(a: int, b: int) -> int: """Get the modulus of two numbers.""" return a % b # Hugging Face Hub stats tool def get_hub_stats(author: str) -> str: """Fetches the most downloaded model from a specific author on the Hugging Face Hub.""" try: models = list(list_models(author=author, sort="downloads", direction=-1, limit=1)) if models: model = models[0] return f"The most downloaded model by {author} is {model.id} with {model.downloads:,} downloads." else: return f"No models found for author {author}." except Exception as e: return f"Error fetching models for {author}: {str(e)}" # Tool initializations (as functions to be called in agent) def get_tavily_tool(): return TavilyToolSpec(api_key=os.getenv("TAVILY_API_KEY")) def get_arxiv_reader(): return ArxivReader() def get_wikipedia_reader(): return WikipediaReader() def get_wikipedia_tool(wikipedia_reader=None): if wikipedia_reader is None: wikipedia_reader = get_wikipedia_reader() return OnDemandLoaderTool.from_defaults( wikipedia_reader, name="Wikipedia Tool", description="A tool for loading data and querying articles from Wikipedia", ) def get_arxiv_tool(arxiv_reader=None): if arxiv_reader is None: arxiv_reader = get_arxiv_reader() return OnDemandLoaderTool.from_defaults( arxiv_reader, name="Arxiv Tool", description="A tool for loading data and querying articles from Arxiv", ) def get_search_tool(): return get_tavily_tool().to_tool_list() def get_calculator_tool(): return [ FunctionTool.from_defaults(multiply), FunctionTool.from_defaults(add), FunctionTool.from_defaults(subtract), FunctionTool.from_defaults(divide), FunctionTool.from_defaults(modulus), ] def get_hub_stats_tool(): return FunctionTool.from_defaults(get_hub_stats)