from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict(env_file=".env", extra="ignore") mobilityops_env: str = "development" mobilityops_demo_mode: bool = True database_url: str = "postgresql+psycopg://mobilityops:mobilityops@db:5432/mobilityops" knowledge_provider: str = "demo" ragcore_base_url: str = "http://ragcore-api:8000" ragcore_tenant: str = "northstar-mobility-demo" ragcore_workspace: str = "mobilityops" ragcore_collection: str = "internal-procedures" ragcore_api_token: str = "" ragcore_http_timeout_seconds: float = 5.0 n8n_webhook_url: str = "http://n8n:5678/webhook/mobilityops-return" n8n_callback_token: str = "replace-me-n8n-callback-token" n8n_dispatch_enabled: bool = True n8n_dispatch_interval_seconds: float = 3.0 n8n_http_timeout_seconds: float = 5.0 n8n_max_attempts: int = 5 app_secret: str = "replace-in-production" session_cookie_name: str = "mobilityops_session" session_ttl_seconds: int = 60 * 60 * 8 seed_dir: str = "/app/seed" knowledge_dir: str = "/app/knowledge/procedures" cors_allow_origins: str = "http://localhost:1228" demo_today: str = "2026-08-01" @lru_cache def get_settings() -> Settings: return Settings()