File size: 4,344 Bytes
4826e54
38812af
4826e54
38812af
4826e54
 
 
 
 
 
38812af
 
 
4826e54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38812af
4826e54
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from langchain.tools import Tool
import random
import os
from huggingface_hub import list_models
# from langchain_tavily import TavilySearch
from langchain_community.tools import DuckDuckGoSearchRun

from dotenv import load_dotenv

load_dotenv()


# Initialize the DuckDuckGo search tool
search_tool = DuckDuckGoSearchRun()



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)}"


# def get_latest_news(topic: str) -> str:
#     """Fetches the latest news about a specific topic using Tavily search."""
#     try:
#         # Initialize Tavily search with API key from environment
#         tavily_search = TavilySearch(
#             api_key=os.getenv("TAVILY_API_KEY"),
#             max_results=2,
#             topic="general",
#             search_depth="basic",
#             include_answer=True,
#             include_raw_content=False,
#             include_images=False
#         )

#         # Search for news about the topic
#         response = tavily_search.invoke(
#             {"query": f"latest news about {topic}"})

#         # Handle the correct Tavily response format
#         if isinstance(response, dict) and 'results' in response:
#             results = response['results']
#             answer = response.get('answer', '')

#             if results:
#                 # Format the results nicely
#                 formatted_news = f"๐Ÿ“ฐ Latest News about '{topic}':\n\n"

#                 # Add AI-generated answer if available
#                 if answer:
#                     formatted_news += f"๐Ÿค– **Quick Summary**: {answer}\n\n"

#                 # Add detailed results
#                 formatted_news += "๐Ÿ“‹ **Detailed Results**:\n\n"
#                 for i, result in enumerate(results, 1):
#                     title = result.get('title', 'No title')
#                     content = result.get('content', 'No content available')
#                     url = result.get('url', 'No URL')
#                     score = result.get('score', 0)

#                     formatted_news += f"{i}. **{title}**\n"
#                     formatted_news += f"   ๐Ÿ“„ Summary: {content}\n"
#                     formatted_news += f"   ๐Ÿ”— Source: {url}\n"
#                     formatted_news += f"   โญ Relevance: {score:.2f}\n\n"

#                 return formatted_news
#             else:
#                 return f"No recent news found about '{topic}'. Please try a different search term."
#         else:
#             return f"Unexpected response format from search. Raw response: {str(response)[:500]}..."

#     except Exception as e:
#         return f"Error fetching news about '{topic}': {str(e)}. Please check your Tavily API key and try again."


weather_info_tool = Tool(
    name="weather_info",
    func=get_weather_info,
    description="Fetches dummy weather information for a given location."
)

hub_stats_tool = Tool(
    name="hub_stats",
    func=get_hub_stats,
    description="Fetches the most downloaded model from a specific author on the Hugging Face Hub."
)

# news_search_tool = Tool(
#     name="news_search",
#     func=get_latest_news,
#     description="Fetches the latest news about a specific topic using Tavily search. Provide a topic or keyword to search for recent news articles."
# )

news_search_tool = search_tool