diff --git a/.env.example b/.env.example index 7bf60b3..ad2d4ee 100644 --- a/.env.example +++ b/.env.example @@ -60,7 +60,7 @@ FIRMS_INTERVAL=900 INGEST_FIRES=1 # ── API keys (managed from the dashboard UI) ────────────────────────────── -# Keys such as GEMINI_API_KEY and TELEGRAM_TOKEN are stored in the Postgres +# Keys such as NOUS_API_KEY and TELEGRAM_TOKEN are stored in the Postgres # `api_keys` table and managed from the dashboard's "Keys" tab # (GET/POST/DELETE /api/keys/{name}) — see app/keystore.py. The FIRMS ingestor # currently reads FIRMS_MAP_KEY from .env (above); wiring the Keys-UI store as @@ -68,13 +68,15 @@ INGEST_FIRES=1 # ── News pipeline (scraper + summarizer, profile `ingest`) ──────────────── # Hourly: the scraper crawls 257 RSS sources at minute :00 and the summarizer -# runs the Gemini map-reduce at minute :05, both writing to the shared osint-db +# runs the Nous map-reduce at minute :05, both writing to the shared osint-db # (tables `articles` + `article_summaries`, created by alembic 003_news). # Consume via GET /api/news and GET /api/news/summaries. -# GEMINI_API_KEY is REQUIRED for summarization; unset = summarizer idles. -GEMINI_API_KEY= +# NOUS_API_KEY is also (preferably) set in the Keys UI; env is an override. +# Unset in both env and api_keys = summarizer logs and idles (never crashes). +NOUS_API_KEY= +NOUS_BASE_URL=https://inference-api.nousresearch.com/v1 # Optional LLM knobs -SUMMARY_MODEL=gemini-2.0-flash +SUMMARY_MODEL=Hermes-4.3-36B NEWS_BATCH_SIZE=50 SUMMARY_WINDOW_HOURS=1 # Futures/markets coupling from the upstream pipeline is OFF by default @@ -87,6 +89,8 @@ NEWS_SUMMARIZE_MINUTE=5 # scheduled minute. NEWS_SCRAPE_RUN_ON_START=1 NEWS_SUMMARIZE_RUN_ON_START=1 +# "1" ignores the current-UTC-hour idempotency skip (double-pins on recreate). +NEWS_SUMMARIZE_FORCE=0 NEWS_LOG_LEVEL=INFO # Reserved for the (out-of-scope) Telegram delivery bot. TELEGRAM_TOKEN= diff --git a/docker-compose.yml b/docker-compose.yml index b2a7cd6..a34365c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -224,14 +224,16 @@ services: DB_HOST: db DB_PORT: ${DB_PORT:-5432} DB_NAME: ${DB_NAME:-osint_data} - # Required to do real work; unset → the loop logs and idles. - GEMINI_API_KEY: ${GEMINI_API_KEY:-} - SUMMARY_MODEL: ${SUMMARY_MODEL:-gemini-2.0-flash} + NOUS_API_KEY: ${NOUS_API_KEY:-} + NOUS_BASE_URL: ${NOUS_BASE_URL:-https://inference-api.nousresearch.com/v1} + SUMMARY_MODEL: ${SUMMARY_MODEL:-Hermes-4.3-36B} + OSINT_USER_AGENT: ${OSINT_USER_AGENT:-osint-dashboard-news-summarizer} BATCH_SIZE: ${NEWS_BATCH_SIZE:-50} SUMMARY_WINDOW_HOURS: ${SUMMARY_WINDOW_HOURS:-1} INCLUDE_FUTURES: ${INCLUDE_FUTURES:-0} NEWS_SUMMARIZE_MINUTE: ${NEWS_SUMMARIZE_MINUTE:-5} NEWS_SUMMARIZE_RUN_ON_START: ${NEWS_SUMMARIZE_RUN_ON_START:-1} + NEWS_SUMMARIZE_FORCE: ${NEWS_SUMMARIZE_FORCE:-0} command: ["python", "run_news_summarizer.py"] volumes: diff --git a/news/summerizer/requirements.txt b/news/summerizer/requirements.txt index 49aed17..30b9117 100644 --- a/news/summerizer/requirements.txt +++ b/news/summerizer/requirements.txt @@ -1,6 +1,2 @@ -# Database adapter for PostgreSQL (shared osint-db). psycopg2-binary==2.9.11 - -# Gemini LLM SDK (google-genai). yfinance is NOT a dependency: futures prices -# are gated behind INCLUDE_FUTURES=1 and lazy-imported (install it to enable). -google-genai +httpx==0.28.1