config.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import os
  2. from pathlib import Path
  3. from dotenv import load_dotenv
  4. # Load .env from project folder so Groq/debug flags are available under uvicorn/nohup.
  5. _HERE = Path(__file__).resolve().parent.parent
  6. load_dotenv(_HERE / ".env")
  7. DATA_DIR = Path(os.getenv("NEWS_MCP_DATA_DIR", Path(__file__).resolve().parent / "data"))
  8. DATA_DIR.mkdir(parents=True, exist_ok=True)
  9. DB_PATH = Path(os.getenv("NEWS_MCP_DB_PATH", str(DATA_DIR / "news.sqlite")))
  10. RSS_FEED_URL = os.getenv("NEWS_RSS_FEED_URL", "https://breakingthenews.net/news-feed.xml")
  11. # Optional multi-feed mode: comma-separated RSS URLs.
  12. # If set (non-empty), this overrides RSS_FEED_URL.
  13. RSS_FEED_URLS = os.getenv("NEWS_RSS_FEED_URLS", "").strip()
  14. # Clusters TTL (hours)
  15. CLUSTERS_TTL_HOURS = float(os.getenv("NEWS_CLUSTERS_TTL_HOURS", "24"))
  16. DEFAULT_TOPICS = ["crypto", "macro", "regulation", "ai", "other"]
  17. # Optional LLM enrichment (Groq)
  18. GROQ_API_KEY = os.getenv("GROQ_API_KEY")
  19. GROQ_MODEL = os.getenv("GROQ_MODEL", "llama4-16e")
  20. GROQ_DEBUG = os.getenv("GROQ_DEBUG", "false").lower() == "true"
  21. # Cost control: only enrich clusters whose heuristic topic is "other" by default.
  22. GROQ_ENRICH_OTHER_ONLY = os.getenv("GROQ_ENRICH_OTHER_ONLY", "true").lower() == "true"
  23. # Limit enriched clusters per refresh call.
  24. GROQ_MAX_CLUSTERS_PER_REFRESH = int(os.getenv("GROQ_MAX_CLUSTERS_PER_REFRESH", "20"))
  25. # Background refresh
  26. NEWS_REFRESH_INTERVAL_SECONDS = int(os.getenv("NEWS_REFRESH_INTERVAL_SECONDS", "900"))
  27. NEWS_BACKGROUND_REFRESH_ENABLED = os.getenv("NEWS_BACKGROUND_REFRESH_ENABLED", "true").lower() == "true"
  28. NEWS_BACKGROUND_REFRESH_ON_START = os.getenv("NEWS_BACKGROUND_REFRESH_ON_START", "true").lower() == "true"