-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.yaml
More file actions
140 lines (125 loc) · 7.31 KB
/
Copy pathconfig.yaml
File metadata and controls
140 lines (125 loc) · 7.31 KB
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
# ARGUS configuration. Fork this repo and make it yours:
# * set `title`, `digest.recipient`
# * edit registry/sources.yaml (your queries, journals, feeds, keywords)
# * edit `tags` (your workstreams) and prompts/research.md (your profile+rubric)
# * pick a scoring provider below (several are free)
# MASTER SWITCH. `false` means scheduled sweeps do nothing at all — no
# collection, no scoring, no commit. A manual run of the pipeline workflow still
# works, so you can try one without editing this.
#
# It ships OFF in the template on purpose: an unconfigured copy would otherwise
# collect for the example field below, burn Actions minutes, and hand whatever
# it gathered to the next person who uses the template as their starting data.
# Turn it on once steps 1-3 of the README are done and your sources are yours.
enabled: false
title: "ARGUS"
window_days: 7 # collectors ignore items older than this
render_days: 14 # dashboard shows items from this window
# How items get scored. `llm` uses whichever provider you name below; `keyword`
# is the $0 fallback and needs no key at all. Either way, a missing API key
# degrades to keyword scoring rather than failing the run.
#
# provider presets (see argus/providers.py, README for the full table):
# anthropic ANTHROPIC_API_KEY claude-haiku-4-5 ~$1/$5 per Mtok
# groq GROQ_API_KEY llama-3.3-70b-versatile FREE tier
# gemini GEMINI_API_KEY gemini-2.0-flash FREE tier
# openrouter OPENROUTER_API_KEY ...:free models FREE
# openai OPENAI_API_KEY gpt-4o-mini
# deepseek DEEPSEEK_API_KEY deepseek-chat
# together TOGETHER_API_KEY Llama-3.3-70B-Instruct-Turbo
# ollama (no key) llama3.1 local only — `make run`, not Actions
# Any other OpenAI-compatible endpoint works too: set provider to a name of
# your choosing plus `base_url` and `api_key_env`.
scoring:
mode: llm # llm | keyword
provider: anthropic
model: claude-haiku-4-5 # omit to take the provider's default
# base_url: # only for a provider not in the preset table
# api_key_env: # ditto — the env var holding the key
batch_size: 20
max_llm_items_per_run: 150
# Peer-reviewed work is structurally handicapped and this corrects for it.
# OpenAlex carries no abstract for 60-82% of recent articles from the large
# commercial publishers (Elsevier deposits none to Crossref either), while
# arXiv always has one — so a journal paper gets judged on its title while a
# preprint gets judged on a full abstract. Measured here before this existed:
# arXiv was 57% of everything above threshold.
# Set both to 0 to rank purely on content, or raise `preprint` above 0 if you
# would rather see preprints first.
venue_weight:
enabled: true
peer_reviewed: 1 # published in a journal
preprint: -1 # arXiv and other repositories
no_abstract_offset: 1 # extra for a journal paper whose abstract is missing,
# since it was scored on a title alone
# Journal metadata frequently omits abstracts; try to recover them by DOI from
# Crossref. Free, no key. Gives up automatically after 10 consecutive misses —
# Elsevier deposits no abstracts, so for an Elsevier-heavy watchlist this costs
# ~10 requests once per run and then stops. Worth leaving on: it does work for
# MDPI, Springer, Wiley, IEEE and Taylor & Francis.
crossref_backfill:
enabled: true
limit: 60
prompt: prompts/research.md
# Reference documents. Drop a concept note, proposal, chapter outline or reading
# list into context/ and its text is appended to the scoring prompt, so items
# are judged against your actual project rather than a keyword list. Usually the
# highest-leverage tuning available — a two-page concept note says more about
# what you care about than any number of query strings.
# Plain text only (.md, .txt, .rst) and LLM scoring only; the keyword scorer
# does not read them.
context:
enabled: true
dir: context
max_chars: 24000 # whole block is truncated here, so a big drop can't
# blow the context window or the bill
# Relevance floors, on the scorer's 0-10 scale. Nothing below `show_threshold`
# is ever displayed — an empty dashboard is a valid, expected outcome, not a
# failure, and nothing in ARGUS tries to hit a quota of items. Raise these to
# make the radar pickier; lower them to see more.
show_threshold: 6 # dashboard floor (and the digest floor, unless digest.min_score is set)
highlight_threshold: 8 # "Top Picks" band on the dashboard
# Workstreams — the tags the scorer assigns. Colors are Paul Tol *vibrant*.
# Replace these with your own field's themes (keep keys in sync with the prompt).
tags:
planning: {label: "Planning & modeling", color: "#0077BB"}
market-reform: {label: "Market reform", color: "#33BBEE"}
industrial-power: {label: "Industrial power", color: "#CC3311"}
regional: {label: "Regional & cross-border", color: "#009988"}
stakeholder: {label: "Stakeholder intel", color: "#EE7733"}
methods: {label: "Methods & tools", color: "#EE3377"}
digest:
enabled: true
send_hour_utc: 0
recipient: you@university.edu
# min_score: 8 # email floor; defaults to show_threshold. Raise it to
# keep the daily email tighter than the dashboard.
# Zero qualifying items = no email that day.
synthesis: none # none | llm — a one-paragraph intro on top of the digest
# By default synthesis reuses the scoring provider above. Override either:
# synthesis_provider: anthropic
synthesis_model: claude-sonnet-4-6
prune:
keep_days: 180 # drop below-threshold items older than this
keep_run_days: 30 # trim the per-source run log; only the last 3 entries
# per source are ever read (failure detection)
# Library-seeded discovery (opt-in): study your Zotero library, then surface the
# recent papers that CITE it or are by the authors you read most. digest.py pulls
# the top `top_n` into a "From your library" section. Only DOIs are sent to
# OpenAlex; the library itself never leaves the machine / is never committed.
library:
enabled: true
source: zotero_api # zotero_api (auto, no manual export) | bib (local file)
every_days: 7 # run the library sweep at most weekly (it's a shortlist)
top_n: 30 # size of the "From your library" digest shortlist
# -- source: zotero_api -- fetch the library from zotero.org each run.
# Create a READ-ONLY key at zotero.org/settings/keys and add it as the
# ZOTERO_API_KEY Actions secret. Find your numeric id at zotero.org/settings/keys
# (personal "userID") or on the group page URL (group id).
zotero_library_type: user # user (personal library) | group (shared lab library)
zotero_library_id: "SET_ME" # numeric Zotero userID (the API key lives in ZOTERO_API_KEY, never here)
# -- source: bib -- alternatively, a local export at this path (gitignored).
bib_path: library/zotero.bib
discovery_days: 120 # lookback for citing papers / your authors' new work
max_authors: 15 # follow this many of your most-read authors
max_seed_works: 200 # cap library works used for citation discovery