# Provides auxiliary tools for agent from llama_index.tools.duckduckgo import DuckDuckGoSearchToolSpec import random from huggingface_hub import list_models import aiohttp import os import json from dotenv import load_dotenv import asyncio tool_spec = DuckDuckGoSearchToolSpec() search_tool = tool_spec.duckduckgo_full_search async def google_search(query: str, num_results: int = 5) -> str: """ Args: query: Search query num_results: Max results to return Returns: dict: JSON response from Google API. """ api_key = os.getenv("GOOGLE_API_KEY") cse_id = os.getenv("GOOGLE_CSE_ID") if not api_key or not cse_id: raise ValueError( "GOOGLE_API_KEY and GOOGLE_CSE_ID must be set in environment variables." ) url = "https://www.googleapis.com/customsearch/v1" params = {"key": api_key, "cx": cse_id, "q": query} async with aiohttp.ClientSession() as session: async with session.get(url, params=params) as response: response.raise_for_status() data = await response.json() results = "Web Search results:\n\n" + "\n\n".join( [ f"Link:{result['link']}\nTitle:{result['title']}\nSnippet:{result['snippet']}" for result in data["items"][:num_results] ] ) print(results) return results def get_weather_info(location: str) -> str: """Fetches dummy weather information for a given location""" # Dummy weather data weather_conditions = [ {"condition": "Rainy", "temp_c": 15}, {"condition": "Clear", "temp_c": 25}, {"condition": "Windy", "temp_c": 20}, ] # Randomly select a weather condition data = random.choice(weather_conditions) return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C" def get_hub_stats(author: str) -> str: """Fetches the most downloaded model from a specific author on the Hugging Face Hub.""" try: # List models from the specified author, sorted by downloads 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)}" async def main(): response = await google_search("Who's the current President of France 2025?") print(response) if __name__ == "__main__": load_dotenv() asyncio.run(main()) # print(get_hub_stats("facebook"))