File size: 2,777 Bytes
ce1c576
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 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"))