Auto-News
repository·main·Indexed 21 days ago
https://github.com/finaldie/auto-newsAn LLM-powered news aggregator that automates the collection, summarization, and filtering of information from RSS, social media, and web sources, delivering results to a Notion-based interface. It supports multi-LLM integration (OpenAI ChatGPT, Google Gemini, Ollama) and provides features for insight generation, noise reduction, and weekly recaps. The backend can be self-hosted via Docker-compose, Portainer, Helm, or ArgoCD, utilizing components such as Airflow, Milvus, Redis, and MySQL.
What's inside auto-news
- Auto-News is an automatic news aggregator powered by Large Language Models (LLMs). It is designed to help users navigate information overload by aggregating various feed sources, generating insights, and filtering noise. It provides a unified reading experience, typically using Notion as a client/frontend.
Key features of Auto-News
mainAuto-News provides several automated content processing capabilities:
- Feed Aggregation: Collects content from RSS, Reddit, Tweets, and more.
- Insight Generation: Creates summaries and insights for YouTube videos (including transcoding if no transcript is available) and web articles.
- Noise Reduction: Filters content based on personal interests to remove significant amounts of irrelevant information.
- Recap & Organization: Provides weekly Top-k recaps, generates
TODOlists from takeaways, and organizes daily journal notes with insights. - Multi-LLM Support: Compatible with OpenAI ChatGPT, Google Gemini, and Ollama.
- Experimental Multi-Agents: Supports deep-dive topic research via web search agents and
autogen.
Deploy auto-news apps using ArgoCD
mainYou can deploy theauto-newsapplication services by installing the ArgoCD application manifests. Once the manifests are installed into your ArgoCD instance, ArgoCD will automatically deploy the services. This approach allows you to easily track the status of different services and resources, and simplifies the operation of sub-services within theauto-newsecosystem.Deploy Auto-News using Helm
mainAuto-News can be deployed as a Helm chart. This deployment includes the following dependencies:
- Airflow
- Milvus
- Redis
- MySQL database
Self-host the Auto-News backend
mainFor full control, you can self-host the backend. The system uses Notion as the client interface.
Backend System Requirements
Component Minimum Recommended OS Linux, MacOS Linux, MacOS CPU 2 cores 8 cores Memory 6GB 16GB Disk 20GB 100GB Installation Methods
Detailed instructions for each method can be found in the project Wiki:
- Docker-compose: Installation using Docker-compose
- Portainer: Installation using Portainer
- Helm (Kubernetes): Installation using Helm
- ArgoCD (Kubernetes): Installation using ArgoCD
Use the Managed Solution (Quickest Setup)
mainIf you do not want to manage the backend infrastructure, you can use the managed solution powered by Auto-News. This includes a web version and mobile applications.
- Web Version (Beta): https://dots.dotsfy.com/
- iOS App: Available on the App Store.
- Android App: Available on Google Play.
Note: Mobile apps are currently available in the US and Canada.
Customize Auto-News deployment values
mainTo modify the default configuration of the Auto-News Helm chart, overwrite the settings provided in thevalues.ymlfile. This file contains all the default values used during the installation process.Use OperatorCollection to manage news aggregation workflows
mainThe
OperatorCollectionclass is a specialized operator designed to handle the end-to-end lifecycle of news collections. It manages pulling data from various sources (like YouTube, Twitter, or RSS), performing local storage, deduplication, summarization, ranking, and finally publishing the results.It relies on several key stages:
- Pulling: Fetching items from Notion databases.
- Filtering: Pre-filtering by user rating and post-filtering by relevance scores.
- Scoring: Using vector similarity (via Milvus) to rank content.
- Pushing: Publishing the processed collection back to a target (e.g., Notion).
from src.ops_collection import OperatorCollection # Example of the logical flow an end-user would implement collection = OperatorCollection() # 1. Pull raw_pages = collection.pull(collection_type="weekly", sources=["Youtube", "RSS"]) # 2. Score scored_pages = collection.score(raw_pages, top_k_similar=4) # 3. Filter final_pages = collection.post_filter(scored_pages, k=3, min_score=4.5) # 4. Push collection.push(final_pages, takeaway_pages=[], targets=["notion"])Use OperatorRSS for automated RSS news processing
mainOperatorRSSis a specialized operator designed to manage the full lifecycle of RSS feed aggregation. It handles pulling data from RSS feeds, deduplicating articles, scoring them based on relevance, summarizing content using LLMs, ranking them by category, and finally pushing them to targets like Notion.Key capabilities include:
- Pulling: Fetches articles from RSS URLs stored in Notion databases.
- Deduplication: Prevents processing the same article multiple times using MD5 hashing of titles and publication dates.
- Scoring: Uses Milvus vector search to score articles against existing content.
- Summarization: Uses LLMs to generate summaries, with fallback to web loading if the RSS entry is empty.
- Ranking: Categorizes and rates articles using LLMs.
- Pushing: Exports processed articles to Notion 'ToRead' databases.
# Example of the logical flow an end-user would implement using OperatorRSS methods: # 1. Pull articles pages = operator_rss.pull() # 2. Deduplicate deduped_pages = operator_rss.dedup(pages) # 3. Score scored_pages = operator_rss.score(deduped_pages) # 4. Filter filtered_pages = operator_rss.filter(scored_pages, k=3, min_score=4) # 5. Summarize summarized_pages = operator_rss.summarize(filtered_pages) # 6. Rank ranked_pages = operator_rss.rank(summarized_pages) # 7. Push to Notion operator_rss.push(ranked_pages, targets=['notion'])Implement a custom operator by extending OperatorBase
mainThe
OperatorBaseclass serves as the foundation for defining data processing pipelines in Auto-News. To create a new operator, inherit fromOperatorBaseand implement the core lifecycle methods. While the base class provides several utility methods for data handling, you are expected to provide implementations for the primary processing steps:pull,dedup,summarize,rank,score, andpush.class MyCustomOperator(OperatorBase): def pull(self): # Implement data retrieval logic return {} def dedup(self, data, target): # Implement deduplication logic return data def summarize(self, data): # Implement summarization logic return data def rank(self, data): # Implement ranking logic return data def score(self, data): # Implement scoring logic return data def push(self, ranked_data, targets, topk=3): # Implement pushing logic returnUse OperatorObsidian to manage Obsidian note workflows
mainThe
OperatorObsidianclass provides a pipeline for processing news data and converting it into Obsidian markdown files. It follows a three-step pattern:- Deduplication (
dedup): Prevents duplicate notes by checking existing IDs in the database. - Filtering (
filters): Removes low-quality content based on a rating threshold. - Pushing (
push): Generates markdown content from Notion-style data and saves it to a local Obsidian vault.
To use the
pushmethod, you must ensure theOBSIDIAN_FOLDERenvironment variable is set or provide adata_folderinkwargs.from src.ops_obsidian import OperatorObsidian operator = OperatorObsidian() # 1. Deduplicate deduped_pages = operator.dedup(pages_dict) # 2. Filter filtered_pages = operator.filters(deduped_pages, min_rating=4) # 3. Push to Obsidian operator.push(filtered_pages, data_folder="my_vault/news")- Deduplication (
Run Flower for Celery monitoring
mainTo monitor Celery workers using Flower, you can use the
flowerprofile. This is not started by default.Use the following command to start the cluster with Flower enabled:
docker-compose --profile flower up