|
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 = {} |
|
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] |
|
|
|
result = "## NYTimes Latest Headlines and URLs\n\n" + "\n".join( |
|
f"- [{entry.title}]({entry.link})" for entry in latest_entries |
|
) |
|
return result |
|
|