sayed99's picture
project transferred to Langgraph implementation. |
4826e54
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