import os from typing import List from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() class Config: """Configuration settings loaded from environment variables.""" # Google Cloud Configuration GOOGLE_APPLICATION_CREDENTIALS: str = os.getenv("GOOGLE_APPLICATION_CREDENTIALS", "") GOOGLE_CLOUD_PROJECT: str = os.getenv("GOOGLE_CLOUD_PROJECT", "") # OpenAI Configuration OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "") OPENAI_MODEL: str = os.getenv("OPENAI_MODEL", "gpt-4o-mini") # Speech-to-Text Configuration SPEECH_LANGUAGE_CODE: str = os.getenv("SPEECH_LANGUAGE_CODE", "id-ID") SPEECH_SAMPLE_RATE: int = int(os.getenv("SPEECH_SAMPLE_RATE", "48000")) SPEECH_ENCODING: str = os.getenv("SPEECH_ENCODING", "WEBM_OPUS") # Text-to-Speech Configuration TTS_LANGUAGE_CODE: str = os.getenv("TTS_LANGUAGE_CODE", "id-ID") TTS_VOICE_NAME: str = os.getenv("TTS_VOICE_NAME", "id-ID-Standard-A") TTS_VOICE_GENDER: str = os.getenv("TTS_VOICE_GENDER", "FEMALE") TTS_SPEAKING_RATE: float = float(os.getenv("TTS_SPEAKING_RATE", "1.0")) TTS_PITCH: float = float(os.getenv("TTS_PITCH", "0.0")) # Server Configuration HOST: str = os.getenv("HOST", "0.0.0.0") PORT: int = int(os.getenv("PORT", "8000")) DEBUG: bool = os.getenv("DEBUG", "false").lower() == "true" # CORS Configuration CORS_ORIGINS: List[str] = [ origin.strip() for origin in os.getenv("CORS_ORIGINS", "http://localhost:3000,http://localhost:5173").split(",") ] @classmethod def validate(cls) -> None: """Validate required environment variables are set.""" required_vars = [ ("OPENAI_API_KEY", cls.OPENAI_API_KEY), ] missing_vars = [] for var_name, var_value in required_vars: if not var_value: missing_vars.append(var_name) if missing_vars: raise ValueError(f"Missing required environment variables: {', '.join(missing_vars)}") # Warn about optional but recommended variables if not cls.GOOGLE_APPLICATION_CREDENTIALS: print("Warning: GOOGLE_APPLICATION_CREDENTIALS not set. Speech features may not work.") if not cls.GOOGLE_CLOUD_PROJECT: print("Warning: GOOGLE_CLOUD_PROJECT not set. Some Google Cloud features may not work.") # Global config instance config = Config()