-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.toml.example
247 lines (186 loc) · 7.44 KB
/
config.toml.example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# RSSidian Configuration
[obsidian]
# Path to your Obsidian vault
vault_path = "~/Documents/Obsidian"
# Template for the output filename
# Available variables: {from_date}, {to_date}, {date_range}, {date}, {datetime}
filename_template = "RSS Digest {from_date} to {to_date}"
# Template for generated digest note
# Available variables: {date_range}, {summary_items}, {value_analysis}, {feed_stats}, {aggregated_summary}, {cost_summary}
template = """# Feed Digest
## Aggregated Overview by Subject
{aggregated_summary}
## Article Summaries
{summary_items}
## Feed Statistics
{feed_stats}
## Cost Summary
{cost_summary}
"""
[search]
# Search configuration options
# Length of context to include in search excerpts (in characters)
excerpt_length = 300
[openrouter]
# OpenRouter API configuration
# API key can also be set via RSSIDIAN_OPENROUTER_API_KEY environment variable
api_key = ""
# Enable or disable cost tracking for API calls
cost_tracking_enabled = true
# Model to use for topic detection and article processing
processing_model = "openai/gpt-4o"
# Sample size in characters for topic detection
topic_sample_size = 4096
# Model to use for summarization
# See https://openrouter.ai/docs for available models
model = "openai/gpt-4o"
# Prompt template for processing articles
# Available variables: {content}
prompt = """You are a helpful article summarizer.
Given the following article content, provide:
1. A concise 1-2 sentence summary of the key points
2. The most important takeaway or insight
Content:
{content}
"""
# Enable value analysis in output
# When enabled, each article will include a Value assessment
value_prompt_enabled = true
# Minimum quality tier to include in digest (S, A, B, C, D)
# Articles with lower quality tiers will be discarded
minimum_quality_tier = "B"
# Aggregator prompt template for generating a categorized overview of articles
# Available variables: {summaries}
aggregator_prompt = """You are an expert content curator and analyst.
Your task is to organize and summarize the following article summaries into a cohesive overview, categorized by subject matter.
Group the articles into clear categories such as Politics, Science, Technology, AI/GenAI, Programming, Business, Startups, Health, etc. based on their content.
For each category:
1. Provide a brief overview of the key themes or trends
2. List the most important articles with their titles (in markdown link format) and a 1-sentence description
3. Highlight any connections or contradictions between articles in the same category
Finally, provide a brief "Big Picture" section that identifies any cross-category trends or important developments.
Article Summaries:
{summaries}
"""
# Value analysis prompt template
# This prompt analyzes the content to determine its value density
# Available variables: {content}
value_prompt = """
IDENTITY and GOAL:
You are an ultra-wise and brilliant classifier and judge of content. You label
content with a comma-separated list of single-word labels and then give it a
quality rating.
Take a deep breath and think step by step about how to perform the following to
get the best outcome.
STEPS:
1. You label the content with as many of the following labels that apply based
on the content of the input. These labels go into a section called LABELS:. Do
not create any new labels. Only use these.
LABEL OPTIONS TO SELECT FROM (Select All That Apply):
Meaning
Future
Business
Tutorial
Podcast
Miscellaneous
Creativity
NatSec
CyberSecurity
AI
Essay
Video
Conversation
Optimization
Personal
Writing
Human3.0
Health
Technology
Education
Leadership
Mindfulness
Innovation
Culture
Productivity
Science
Philosophy
END OF LABEL OPTIONS
2. You then rate the content based on the number of ideas in the input (below
ten is bad, between 11 and 20 is good, and above 25 is excellent) combined with
how well it directly and specifically matches the THEMES of: human meaning, the
future of human meaning, human flourishing, the future of AI, AI's impact on
humanity, human meaning in a post-AI world, continuous human improvement,
enhancing human creative output, and the role of art and reading in enhancing
human flourishing.
3. Rank content significantly lower if it's interesting and/or high quality but
not directly related to the human aspects of the topics, e.g., math or science
that doesn't discuss human creativity or meaning. Content must be highly focused
human flourishing and/or human meaning to get a high score.
4. Also rate the content significantly lower if it's significantly political,
meaning not that it mentions politics but if it's overtly or secretly advocating
for populist or extreme political views.
You use the following rating levels:
S Tier (Must Consume Original Content Within a Week): 18+ ideas and/or STRONG
theme matching with the themes in STEP #2.
A Tier (Should Consume Original Content This Month): 15+ ideas and/or GOOD theme
matching with the THEMES in STEP #2.
B Tier (Consume Original When Time Allows): 12+ ideas and/or DECENT theme
matching with the THEMES in STEP #2.
C Tier (Maybe Skip It): 10+ ideas and/or SOME theme matching with the THEMES in
STEP #2.
D Tier (Definitely Skip It): Few quality ideas and/or little theme matching with
the THEMES in STEP #2.
5. Also provide a score between 1 and 100 for the overall quality ranking, where
a 1 has low quality ideas or ideas that don't match the topics in step 2, and a
100 has very high quality ideas that closely match the themes in step 2.
6. Score content significantly lower if it's interesting and/or high quality but
not directly related to the human aspects of the topics in THEMES, e.g., math or
science that doesn't discuss human creativity or meaning. Content must be highly
focused on human flourishing and/or human meaning to get a high score.
7. Score content VERY LOW if it doesn't include interesting ideas or any
relation to the topics in THEMES.
OUTPUT:
The output should look like the following:
ONE SENTENCE SUMMARY:
A one-sentence summary of the content and why it's compelling, in less than 30
words.
LABELS:
CyberSecurity, Writing, Health, Personal
RATING:
S Tier: (Must Consume Original Content Immediately)
Explanation: $$Explanation in 5 short bullets for why you gave that rating.$$
QUALITY SCORE:
$$The 1-100 quality score$$
Explanation: $$Explanation in 5 short bullets for why you gave that score.$$
OUTPUT FORMAT:
Your output is ONLY in JSON. The structure looks like this:
{
"one-sentence-summary": "The one-sentence summary.",
"labels": "The labels that apply from the set of options above.",
"rating:": "S Tier: (Must Consume Original Content This Week) (or whatever the
rating is)",
"rating-explanation:": "The explanation given for the rating.",
"quality-score": "The numeric quality score",
"quality-score-explanation": "The explanation for the quality score.",
}
OUTPUT INSTRUCTIONS
• ONLY generate and use labels from the list above.
• ONLY OUTPUT THE JSON OBJECT ABOVE.
• Do not output the json``` container. Just the JSON object itself.
INPUT:
{content}
"""
[annoy]
# Path to vector index file
index_path = "~/.config/rssidian/annoy.idx"
# Number of trees (more = better accuracy but slower build)
n_trees = 10
# Distance metric (angular = cosine similarity)
metric = "angular"
[feeds]
# Default lookback period (in days) for RSS ingestion
default_lookback = 7
# Maximum articles to process per feed during ingestion
max_articles_per_feed = 25
# Settings for duplicate/similar article detection
similarity_threshold = 0.85 # Higher values mean stricter matching