Spaces:
Sleeping
Sleeping
from typing import Any, Optional | |
from smolagents.tools import Tool | |
class GetNewsTool(Tool): | |
name = "Get_News" | |
description = "Fetches the latest NYTimes RSS feed and returns the headlines and URLs of the most recent 5 stories." | |
inputs = {} # This tool does not require any inputs. | |
output_type = "string" | |
def __init__(self, feed_url: str = "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml", max_results: int = 5, **kwargs): | |
super().__init__() | |
self.feed_url = feed_url | |
self.max_results = max_results | |
try: | |
import feedparser | |
except ImportError as e: | |
raise ImportError( | |
"You must install package `feedparser` to run this tool: for instance run `pip install feedparser`." | |
) from e | |
self.feedparser = feedparser | |
def forward(self) -> str: | |
feed = self.feedparser.parse(self.feed_url) | |
if not feed.entries: | |
raise Exception("No entries found in the feed.") | |
latest_entries = feed.entries[:self.max_results] | |
# Format each entry with its headline as a clickable link pointing to the URL. | |
result = "## NYTimes Latest Headlines and URLs\n\n" + "\n".join( | |
f"- [{entry.title}]({entry.link})" for entry in latest_entries | |
) | |
return result | |