README: document round-robin posting mode
This commit is contained in:
10
README.md
10
README.md
@@ -8,6 +8,7 @@ A Matrix news bot that ingests RSS feeds from curated sources, classifies storie
|
||||
- **Two-tier classification** — Tier 1 sources use direct routing or lightweight LLM routing; Tier 2 (wire services) use a keyword gating pipeline before LLM
|
||||
- **Semantic deduplication** — GUID exact match + LLM-based cross-source duplicate detection
|
||||
- **Metered release** — per-channel post queues with minimum interval (5min) and burst cap (3/30min)
|
||||
- **Round-robin mode** — opt-in pacing: one story per N hours (default 4), cycling through sources in config order, skip-and-advance over empty sources, state persists across restarts
|
||||
- **Reaction tracking** — records emoji reactions on posts for classifier tuning
|
||||
- **`!explain` via ❓ reaction** — react with `❓` (or `❔ ⁉ 🤔 ?`) on any post; Pete fetches the article body and replies in-thread with a 3-bullet Ollama-generated TL;DR
|
||||
- **Paywall detection** — if an article's visible body text is below threshold, Pete swaps in a Wayback Machine snapshot URL for both the lead image and the posted link
|
||||
@@ -57,12 +58,18 @@ See `config.example.yaml` for the full structure. Key sections:
|
||||
|
||||
- `matrix` — homeserver, credentials, channel room IDs, optional admin room
|
||||
- `ollama` — base URL, model name, timeout
|
||||
- `posting` — rate limiting (min interval, burst cap)
|
||||
- `posting` — rate limiting (min interval, burst cap, daily cap), optional `round_robin` block
|
||||
- `storage` — database path, retention windows
|
||||
- `sources` — RSS feeds with tier, polling interval, feed hint, optional direct routing
|
||||
|
||||
Environment variables can be referenced with `${VAR}` syntax in the YAML.
|
||||
|
||||
### Round-robin mode
|
||||
|
||||
Set `posting.round_robin.enabled: true` to switch Pete from "post on classify" to a paced rotation. On each tick (`interval_hours`, default 4) Pete picks the newest unposted classified story from the next source in config order, posting through the existing queue. Empty sources are skipped; the rotation pointer advances to whichever source actually posted, and `last_source` / `last_tick_at` are persisted so restarts don't reset the cycle.
|
||||
|
||||
With a 4-hour cadence Pete will post at most 6 stories/day, so set `posting.daily_cap_total` to 0 (or ≥6) when enabling this — otherwise the daily cap can silently swallow a tick.
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
@@ -104,6 +111,7 @@ Posted message ← ❓ reaction → Explainer → Article Fetch → Ollama summa
|
||||
| `internal/matrix` | Password auth with device persistence, posting, threaded replies, reaction listener |
|
||||
| `internal/poster` | Per-channel metered release queue, reaction tracking, callback hook |
|
||||
| `internal/explainer` | ❓-reaction → article fetch → Ollama summary → threaded reply |
|
||||
| `internal/scheduler` | Round-robin posting scheduler: paced rotation across sources when enabled |
|
||||
|
||||
## Post Format
|
||||
|
||||
|
||||
Reference in New Issue
Block a user