gperdrizet commited on
Commit
ddcf5ea
·
unverified ·
2 Parent(s): 1ad027d e5249be

Merge pull request #19 from gperdrizet/dev

Browse files
Files changed (2) hide show
  1. assets/text.py +35 -8
  2. rss_server.py +1 -1
assets/text.py CHANGED
@@ -2,22 +2,49 @@
2
 
3
  TITLE = ('''
4
  <center>
5
- <h1>RSS feed reader</h1>
 
6
  </center>
7
  ''')
8
 
9
  DESCRIPTION = ('''
10
- RSS feed reader MCP server. See
 
 
 
 
 
 
 
11
  [Agentic RSS reader](https://huggingface.co/spaces/Agents-MCP-Hackathon/rss-mcp-client)
12
- for a demonstration. Check out the
13
- [main project repo on GitHub](https://github.com/gperdrizet/MCP-hackathon/tree/main)
14
- . Both Spaces by
15
- [George Perdrizet](https://www.linkedin.com/in/gperdrizet)
 
 
 
 
 
 
16
 
17
- This space is not meant to be used directly. It exposes a set of tools to
18
- interact with RSS feeds for use by agents. For testing and demonstration,
 
 
 
 
19
  you can try the tools directly below.
20
 
 
 
 
 
 
 
 
 
 
21
  ## Tools
22
 
23
  1. `get_feed()`: Given a website name or URL, find its RSS feed and
 
2
 
3
  TITLE = ('''
4
  <center>
5
+ <h1>RASS (retrieval augmented simple syndication) MCP server</h1>
6
+ <h2>RSS feed tools for agents</h2>
7
  </center>
8
  ''')
9
 
10
  DESCRIPTION = ('''
11
+ **Problem**: I love RSS feeds, but need help keeping up with all of the content from my subscriptions.
12
+
13
+ **Solution**: Build a tool to allow LLMs to find and interact with RSS feeds on behalf of the user.
14
+
15
+ ## Introduction
16
+
17
+ This space is a MCP server which exposes custom tools to find and interact with
18
+ RSS feed. See
19
  [Agentic RSS reader](https://huggingface.co/spaces/Agents-MCP-Hackathon/rss-mcp-client)
20
+ for a demonstration of its use by an agent. Also, check out the
21
+ [main project repo on GitHub](https://github.com/gperdrizet/MCP-hackathon/tree/main).
22
+ Both Spaces by [George Perdrizet](https://www.linkedin.com/in/gperdrizet)
23
+
24
+ I love RSS feeds - they remind me of a time when the internet was a weird and
25
+ wonderful place, filled with interesting content hiding behind every link. The tools
26
+ to produce and navigate that content have improved by leaps and bounds. However,
27
+ the improvement has not come without some losses. Content often feels homogeneous and
28
+ it is too often painfully apparent that your favorite platform has a large degree of
29
+ control over what content you see and what content you don't.
30
 
31
+ This tool give the user back some of that control. It let's them decide what content
32
+ and sources they are interested in. I built it because I want access to diverse,
33
+ unfiltered publishing by many sources, paired modern AI to help me navigate it.
34
+ I want the model to help me ingest my feed, not create it for me!
35
+
36
+ **Note**: This space is not meant to be used directly. But, for testing and demonstration,
37
  you can try the tools directly below.
38
 
39
+ ## Features
40
+
41
+ 1. Feeds are found using a combination of [findfeed](https://pypi.org/project/findfeed) and/or Google search with [googlesearch-python](https://pypi.org/project/googlesearch-python/) as needed.
42
+ 2. Recent posts from the feed are extracted using [feedparser](https://pypi.org/project/feedparser).
43
+ 3. Article content is either taken from the feed if avalible, or pulled from the linked article using [boilerpy3](https://pypi.org/project/boilerpy3/) and good old RegEx, if possible.
44
+ 4. The article content is summarized using [Meta-Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) on [Modal](https://modal.com).
45
+ 5. Article content is embedded into a vector database on [Upstash](https://upstash.com/) for RAG.
46
+ 6. Results are cached to a Redis database on [Upstash](https://upstash.com/) to minimize unnecessary calls to the web crawler/scraper or summarizer.
47
+
48
  ## Tools
49
 
50
  1. `get_feed()`: Given a website name or URL, find its RSS feed and
rss_server.py CHANGED
@@ -34,7 +34,7 @@ logging.basicConfig(
34
  # Get a logger
35
  logger = logging.getLogger(__name__)
36
 
37
- with gr.Blocks() as demo:
38
 
39
  # Page text
40
  gr.HTML(text.TITLE)
 
34
  # Get a logger
35
  logger = logging.getLogger(__name__)
36
 
37
+ with gr.Blocks(title='RASS server') as demo:
38
 
39
  # Page text
40
  gr.HTML(text.TITLE)