Spaces:
Running
Running
# Standard Library Imports | |
import logging | |
import os | |
from dataclasses import dataclass | |
from pathlib import Path | |
from typing import TYPE_CHECKING, ClassVar, Optional | |
# Third-Party Library Imports | |
from dotenv import load_dotenv | |
# Local Application Imports | |
if TYPE_CHECKING: | |
from src.integrations import AnthropicConfig, ElevenLabsConfig, HumeConfig, OpenAIConfig | |
logger: logging.Logger = logging.getLogger("expressive_tts_arena") | |
class Config: | |
_config: ClassVar[Optional["Config"]] = None | |
app_env: str | |
debug: bool | |
database_url: Optional[str] | |
audio_dir: Path | |
anthropic_config: "AnthropicConfig" | |
hume_config: "HumeConfig" | |
elevenlabs_config: "ElevenLabsConfig" | |
openai_config: "OpenAIConfig" | |
def get(cls) -> "Config": | |
if cls._config: | |
return cls._config | |
_config = Config._init() | |
cls._config = _config | |
return _config | |
def _init(): | |
app_env = os.getenv("APP_ENV", "dev").lower() | |
if app_env not in {"dev", "prod"}: | |
app_env = "dev" | |
# In development, load environment variables from .env file (not used in production) | |
if app_env == "dev" and Path(".env").exists(): | |
load_dotenv(".env", override=True) | |
# Enable debug mode if in development (or if explicitly set in env variables) | |
debug = app_env == "dev" or os.getenv("DEBUG", "false").lower() == "true" | |
database_url = os.getenv("DATABASE_URL") | |
# Configure the logger | |
logging.basicConfig( | |
level=logging.DEBUG if debug else logging.INFO, | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", | |
) | |
logger.info(f'App running in "{app_env}" mode.') | |
logger.info(f"Debug mode is {'enabled' if debug else 'disabled'}.") | |
# Define the directory for audio files relative to the project root | |
audio_dir = Path.cwd() / "static" / "audio" | |
audio_dir.mkdir(parents=True, exist_ok=True) | |
logger.debug(f"Audio directory set to {audio_dir}") | |
if debug: | |
logger.debug("DEBUG mode enabled.") | |
from src.integrations import AnthropicConfig, ElevenLabsConfig, HumeConfig, OpenAIConfig | |
return Config( | |
app_env=app_env, | |
debug=debug, | |
database_url=database_url, | |
audio_dir=audio_dir, | |
anthropic_config=AnthropicConfig(), | |
hume_config=HumeConfig(), | |
elevenlabs_config=ElevenLabsConfig(), | |
openai_config=OpenAIConfig(), | |
) | |