feat: Nous Portal news summarizer, ticker flags, map pins #8

Merged
sirius merged 13 commits from feat/nous-news-summarizer into master 2026-08-28 17:43:41 -04:00
Owner

Summary

Rebase of the news-summarizer work onto this morning's master (lean-Pi WS / geofences / DVR, #7). Rebase was clean — both trees are present.

Hourly news summarizer now uses Nous Portal (inference-api.nousresearch.com) instead of Gemini.

  • Keys UI: paste NOUS_API_KEY like FIRMS/AIS. Env still wins if set.
  • Settings: model selector (default Hermes-4.3-36B) persisted in app_settings. Compose does not inject a default SUMMARY_MODEL, so a Settings save is picked up at the next :05 with no container restart.
  • News Brief: English hourly executive summary (GET /api/news/summaries).
  • Ticker: flagged critical/high items only (GET /api/news/ticker). Quiet hour falls back to a short brief + headlines.
  • Map: Critical News overlay (GET /api/news/map) — LLM-estimated lat/lon, world zoom, not mixed into event blips or overlay_catalog().

Gemini is gone from runtime (summarizer, compose, Keys registry, HUD copy).

After merge on the Pi

  1. Paste the Portal key in API Keys.
  2. Optionally pick a model in Settings.
  3. Rebuild osint-news-summarizer (docker compose --profile ingest).
  4. Leave SUMMARY_MODEL unset in .env unless you want to override Settings.

Test plan

  • PYTHONPATH=news/summerizer pytest news/summerizer/tests (no network)
  • GET /api/news key set unchanged (no lat/lon on articles)
  • /api/map/layers overlays key set unchanged
  • Keys UI save NOUS_API_KEY****last4
  • Settings save model → GET /api/settings echoes it; next summarizer run uses it
  • Ticker shows CRITICAL/HIGH chips; map pins popup with location
## Summary Rebase of the news-summarizer work onto this morning's `master` (lean-Pi WS / geofences / DVR, #7). Rebase was clean — both trees are present. Hourly news summarizer now uses **Nous Portal** (`inference-api.nousresearch.com`) instead of Gemini. - **Keys UI:** paste `NOUS_API_KEY` like FIRMS/AIS. Env still wins if set. - **Settings:** model selector (default `Hermes-4.3-36B`) persisted in `app_settings`. Compose does **not** inject a default `SUMMARY_MODEL`, so a Settings save is picked up at the next `:05` with no container restart. - **News Brief:** English hourly executive summary (`GET /api/news/summaries`). - **Ticker:** flagged `critical`/`high` items only (`GET /api/news/ticker`). Quiet hour falls back to a short brief + headlines. - **Map:** Critical News overlay (`GET /api/news/map`) — LLM-estimated lat/lon, world zoom, not mixed into event blips or `overlay_catalog()`. Gemini is gone from runtime (summarizer, compose, Keys registry, HUD copy). ## After merge on the Pi 1. Paste the Portal key in API Keys. 2. Optionally pick a model in Settings. 3. Rebuild `osint-news-summarizer` (`docker compose --profile ingest`). 4. Leave `SUMMARY_MODEL` unset in `.env` unless you want to override Settings. ## Test plan - [ ] `PYTHONPATH=news/summerizer pytest news/summerizer/tests` (no network) - [ ] `GET /api/news` key set unchanged (no lat/lon on articles) - [ ] `/api/map/layers` `overlays` key set unchanged - [ ] Keys UI save `NOUS_API_KEY` → `****last4` - [ ] Settings save model → `GET /api/settings` echoes it; next summarizer run uses it - [ ] Ticker shows CRITICAL/HIGH chips; map pins popup with location
sirius added 13 commits 2026-08-28 17:05:33 -04:00
sirius merged commit f1d70d3f4c into master 2026-08-28 17:43:41 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sirius/osint-dashboard#8
No description provided.