import os from functools import lru_cache from pydantic import BaseModel, Field from dotenv import load_dotenv load_dotenv() class Settings(BaseModel): app_name: str = "FlowPilot" api_prefix: str = "/api" database_url: str = "sqlite:///./flowpilot.db" allow_origins: list[str] = Field(default_factory=lambda: _split_csv(os.getenv("ALLOW_ORIGINS", "*"))) ai_provider: str = os.getenv("AI_PROVIDER", "groq") analyze_with_ai: bool = os.getenv("ANALYZE_WITH_AI", "false").lower() == "true" gmail_poll_seconds: int = int(os.getenv("GMAIL_POLL_SECONDS", "30")) groq_api_key: str = os.getenv("GROQ_API_KEY", "") groq_model: str = os.getenv("GROQ_MODEL", "llama-3.3-70b-versatile") groq_base_url: str = os.getenv("GROQ_BASE_URL", "https://api.groq.com/openai/v1") groq_timeout_seconds: float = float(os.getenv("GROQ_TIMEOUT_SECONDS", "8")) def _split_csv(value: str) -> list[str]: return [item.strip() for item in value.split(",") if item.strip()] @lru_cache def get_settings() -> Settings: return Settings()