From 5b366dc4ee44e5e2fb10d98ce30d2fd591f4e8ab Mon Sep 17 00:00:00 2001 From: Chhavi Mishra Date: Thu, 28 May 2026 12:05:41 +0530 Subject: [PATCH 1/2] feat: add news-summarizer-agent using NewsAPI and ASI:One LLM --- news-summarizer-agent/.env.example | 5 ++ news-summarizer-agent/README.md | 67 ++++++++++++++++++++ news-summarizer-agent/agent.py | 83 +++++++++++++++++++++++++ news-summarizer-agent/demo.png | Bin 0 -> 48096 bytes news-summarizer-agent/requirements.txt | 2 + 5 files changed, 157 insertions(+) create mode 100644 news-summarizer-agent/.env.example create mode 100644 news-summarizer-agent/README.md create mode 100644 news-summarizer-agent/agent.py create mode 100644 news-summarizer-agent/demo.png create mode 100644 news-summarizer-agent/requirements.txt diff --git a/news-summarizer-agent/.env.example b/news-summarizer-agent/.env.example new file mode 100644 index 0000000..d539bd4 --- /dev/null +++ b/news-summarizer-agent/.env.example @@ -0,0 +1,5 @@ +# ASI One API key +ASI1_API_KEY=your_asi1_api_key_here + +# NewsAPI key (free tier at newsapi.org/register) +NEWS_API_KEY=your_news_api_key_here diff --git a/news-summarizer-agent/README.md b/news-summarizer-agent/README.md new file mode 100644 index 0000000..d0af52e --- /dev/null +++ b/news-summarizer-agent/README.md @@ -0,0 +1,67 @@ +# News Summarizer Agent + +A beginner-friendly Fetch.ai agent that fetches top news headlines for any topic using [NewsAPI](https://newsapi.org/) and summarizes them using the [ASI:One](https://asi1.ai/) LLM. + +## What It Does + +1. You provide a topic (e.g. "AI", "climate", "sports") +2. The agent fetches the top 5 latest headlines from NewsAPI +3. The headlines are sent to ASI:One LLM for summarization +4. A short, readable summary is printed to the terminal + +## Tech Stack + +- Python 3.10+ +- NewsAPI - free tier, no credit card required +- ASI:One - Fetch.ai's LLM API +- requests - HTTP calls +- python-dotenv - environment variable management + +## Setup + +### 1. Clone the repo + +git clone https://github.com/fetchai/innovation-lab-examples.git +cd innovation-lab-examples/news-summarizer-agent + +### 2. Install dependencies + +pip install -r requirements.txt + +### 3. Set up environment variables + +cp .env.example .env + +Edit .env and fill in your API keys: + +ASI1_API_KEY=your_asi1_api_key_here +NEWS_API_KEY=your_news_api_key_here + +- Get a free NewsAPI key at: https://newsapi.org/register +- Get your ASI:One API key at: https://asi1.ai/ + +### 4. Run the agent + +python agent.py + +When prompted, enter a topic like AI, climate, or sports. + +## Demo + +![Demo output](demo.png) + +## Environment Variables + +| Variable | Description | +|---|---| +| ASI1_API_KEY | Your ASI:One API key from asi1.ai | +| NEWS_API_KEY | Your NewsAPI key from newsapi.org | + +## Project Structure + +news-summarizer-agent/ +├── agent.py # Main agent logic +├── requirements.txt # Python dependencies +├── .env.example # Environment variable template +├── demo.png # Demo screenshot +└── README.md # This file diff --git a/news-summarizer-agent/agent.py b/news-summarizer-agent/agent.py new file mode 100644 index 0000000..add9536 --- /dev/null +++ b/news-summarizer-agent/agent.py @@ -0,0 +1,83 @@ +import os +import requests +from dotenv import load_dotenv + +load_dotenv() + +load_dotenv() + +ASI1_API_KEY = os.getenv("ASI1_API_KEY") +NEWS_API_KEY = os.getenv("NEWS_API_KEY") + +NEWS_API_URL = "https://newsapi.org/v2/everything" +ASI1_API_URL = "https://api.asi1.ai/v1/chat/completions" + + +def fetch_headlines(topic: str) -> list[str]: + """Fetch top 5 news headlines for a given topic using NewsAPI.""" + params = { + "q": topic, + "pageSize": 5, + "sortBy": "publishedAt", + "language": "en", + "apiKey": NEWS_API_KEY, + } + response = requests.get(NEWS_API_URL, params=params) + response.raise_for_status() + articles = response.json().get("articles", []) + headlines = [a["title"] for a in articles if a.get("title")] + return headlines + + +def summarize_with_asi1(topic: str, headlines: list[str]) -> str: + """Send headlines to ASI:One LLM and get a readable summary.""" + headlines_text = "\n".join(f"- {h}" for h in headlines) + prompt = ( + f"Here are the top 5 recent news headlines about '{topic}':\n\n" + f"{headlines_text}\n\n" + f"Please write a short, clear, 3-4 sentence summary of what is " + f"currently happening with '{topic}' based on these headlines." + ) + + headers = { + "Authorization": f"Bearer {ASI1_API_KEY}", + "Content-Type": "application/json", + } + payload = { + "model": "asi1-mini", + "messages": [{"role": "user", "content": prompt}], + "temperature": 0.7, + "max_tokens": 300, + "stream": False, + } + + response = requests.post(ASI1_API_URL, headers=headers, json=payload) + response.raise_for_status() + data = response.json() + return data["choices"][0]["message"]["content"] + + +def run_agent(topic: str) -> None: + """Main agent flow: fetch headlines then summarize.""" + print(f"\nFetching top headlines for topic: '{topic}'...") + headlines = fetch_headlines(topic) + + if not headlines: + print("No headlines found for this topic. Try a different one.") + return + + print(f"\nFound {len(headlines)} headlines:") + for h in headlines: + print(f" - {h}") + + print("\nSummarizing with ASI:One LLM...") + summary = summarize_with_asi1(topic, headlines) + + print("\n--- Summary ---") + print(summary) + print("---------------\n") + + +if __name__ == "__main__": + topic = input("Enter a topic to summarize news for (e.g. AI, climate, sports): ") + run_agent(topic.strip()) \ No newline at end of file diff --git a/news-summarizer-agent/demo.png b/news-summarizer-agent/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffeffa670718595dd316617806829327102ef70b GIT binary patch literal 48096 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 Mr}n5+=GmM70SBeOnE(I) literal 0 HcmV?d00001 diff --git a/news-summarizer-agent/requirements.txt b/news-summarizer-agent/requirements.txt new file mode 100644 index 0000000..9ffc86f --- /dev/null +++ b/news-summarizer-agent/requirements.txt @@ -0,0 +1,2 @@ +requests>=2.28.0 +python-dotenv>=1.0.0 From 60bf2859d93cfa61f964132ba1959d689b4771ab Mon Sep 17 00:00:00 2001 From: Chhavi Mishra Date: Thu, 28 May 2026 12:08:18 +0530 Subject: [PATCH 2/2] style: apply ruff formatting to agent.py --- news-summarizer-agent/agent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/news-summarizer-agent/agent.py b/news-summarizer-agent/agent.py index add9536..6013e47 100644 --- a/news-summarizer-agent/agent.py +++ b/news-summarizer-agent/agent.py @@ -80,4 +80,4 @@ def run_agent(topic: str) -> None: if __name__ == "__main__": topic = input("Enter a topic to summarize news for (e.g. AI, climate, sports): ") - run_agent(topic.strip()) \ No newline at end of file + run_agent(topic.strip())