from pydantic_settings import BaseSettings from typing import Optional class Settings(BaseSettings): # MQTT mqtt_broker: str = "localhost" mqtt_port: int = 1883 mqtt_user: Optional[str] = None mqtt_pass: Optional[str] = None # GCP gcp_credentials_path: Optional[str] = None # None → uses ADC gcs_bucket: Optional[str] = None # None → audio upload disabled firestore_database: str = "(default)" # Node health node_offline_threshold: int = 90 # seconds without checkin before marking offline # OpenAI (Whisper STT) openai_api_key: Optional[str] = None # Gemini (intelligence extraction, embeddings, incident summaries) gemini_api_key: Optional[str] = None summary_interval_minutes: int = 2 # how often the summary loop runs correlation_window_hours: int = 2 # slow/location path: max hours since last call embedding_similarity_threshold: float = 0.93 # slow-path cosine threshold (tiebreaker only) location_proximity_km: float = 0.5 # radius for location-proximity matching incident_auto_resolve_minutes: int = 90 # auto-resolve after N minutes with no new calls # Internal service key — allows server-side services (discord bot) to call C2 without Firebase service_key: Optional[str] = None # CORS — comma-separated list of allowed origins, or "*" for all cors_origins: list[str] = ["*"] class Config: env_file = ".env" settings = Settings()