65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
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() |