| from functools import lru_cache |
| from typing import Literal |
|
|
| from pydantic import field_validator |
| from pydantic_settings import BaseSettings, SettingsConfigDict |
|
|
|
|
| class Settings(BaseSettings): |
| model_config = SettingsConfigDict( |
| env_file=".env", env_file_encoding="utf-8", extra="ignore" |
| ) |
|
|
| host: str = "0.0.0.0" |
| port: int = 7860 |
| model_dir: str = "/app/models/supertonic-2" |
| kitten_model_name: str = "KittenML/kitten-tts-micro-0.8" |
| kitten_cache_dir: str = "/app/models/hf-cache" |
| enable_melo_tts: bool = False |
| melo_device: Literal["cpu"] = "cpu" |
| melo_fail_fast: bool = True |
| custom_voice_dir: str = "/app/voices" |
| kokoro_model_dir: str = "/app/models/kokoro" |
| kokoro_model_file: str = "model_q8f16.onnx" |
| default_model: str = "supertonic-2" |
| default_voice: str = "alloy" |
| default_response_format: Literal["wav"] = "wav" |
| default_speed: float = 1.05 |
| default_quality: Literal["low", "balanced", "high"] = "balanced" |
| default_language: Literal["en", "ko", "es", "pt", "fr"] = "en" |
| require_auth: bool = False |
| api_key: str = "" |
| log_level: str = "info" |
| omp_num_threads: int = 1 |
| ort_intra_op_num_threads: int = 1 |
| ort_inter_op_num_threads: int = 1 |
| max_input_length: int = 5000 |
| job_poll_interval: float = 2.0 |
| workspace_dir: str = "/tmp/tts-server" |
| persistent_output_dir: str = "/store" |
|
|
| @field_validator("default_speed") |
| @classmethod |
| def validate_default_speed(cls, value: float) -> float: |
| if not 0.25 <= value <= 4.0: |
| raise ValueError("default_speed must be between 0.25 and 4.0") |
| return value |
|
|
|
|
| @lru_cache(maxsize=1) |
| def get_settings() -> Settings: |
| return Settings() |
|
|