import os from pathlib import Path from dotenv import load_dotenv # Load .env from project folder so Groq/debug flags are available under uvicorn/nohup. _HERE = Path(__file__).resolve().parent.parent load_dotenv(_HERE / ".env") DATA_DIR = Path(os.getenv("NEWS_MCP_DATA_DIR", Path(__file__).resolve().parent / "data")) DATA_DIR.mkdir(parents=True, exist_ok=True) DB_PATH = Path(os.getenv("NEWS_MCP_DB_PATH", str(DATA_DIR / "news.sqlite"))) # Backward-compatible aliases for older config names. NEWS_FEED_URL = os.getenv("NEWS_FEED_URL", os.getenv("NEWS_RSS_FEED_URL", "https://breakingthenews.net/news-feed.xml")) # Optional multi-feed mode: comma-separated feed URLs. # If set (non-empty), this overrides NEWS_FEED_URL. NEWS_FEED_URLS = os.getenv("NEWS_FEED_URLS", os.getenv("NEWS_RSS_FEED_URLS", "")).strip() # Legacy names kept for compatibility. RSS_FEED_URL = NEWS_FEED_URL RSS_FEED_URLS = NEWS_FEED_URLS # Clusters TTL (hours) CLUSTERS_TTL_HOURS = float(os.getenv("NEWS_CLUSTERS_TTL_HOURS", "24")) DEFAULT_TOPICS = ["crypto", "macro", "regulation", "ai", "other"] # Optional LLM enrichment (Groq) GROQ_API_KEY = os.getenv("GROQ_API_KEY") GROQ_MODEL = os.getenv("GROQ_MODEL", "llama4-16e") GROQ_DEBUG = os.getenv("GROQ_DEBUG", "false").lower() == "true" # Groq enrichment is the default for all incoming news. # Set GROQ_ENRICH_OTHER_ONLY=true only if you want to restrict it for cost control. GROQ_ENRICH_OTHER_ONLY = os.getenv("GROQ_ENRICH_OTHER_ONLY", "false").lower() == "true" # Limit enriched clusters per refresh call. GROQ_MAX_CLUSTERS_PER_REFRESH = int(os.getenv("GROQ_MAX_CLUSTERS_PER_REFRESH", "20")) # Background refresh NEWS_REFRESH_INTERVAL_SECONDS = int(os.getenv("NEWS_REFRESH_INTERVAL_SECONDS", "900")) NEWS_BACKGROUND_REFRESH_ENABLED = os.getenv("NEWS_BACKGROUND_REFRESH_ENABLED", "true").lower() == "true" NEWS_BACKGROUND_REFRESH_ON_START = os.getenv("NEWS_BACKGROUND_REFRESH_ON_START", "true").lower() == "true"