File size: 2,427 Bytes
dbc3c35 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | from functools import lru_cache
import os
from pathlib import Path
from pydantic import Field
from pydantic import BaseModel
class Settings(BaseModel):
app_name: str = "ElevenClip.AI"
demo_mode: bool = True
storage_dir: Path = Path("data")
frontend_origin: str = "http://localhost:5173"
whisper_model_id: str = "openai/whisper-large-v3"
qwen_text_model_id: str = "Qwen/Qwen2.5-7B-Instruct"
qwen_vl_model_id: str = "Qwen/Qwen2-VL-7B-Instruct"
hf_token: str | None = None
preferred_torch_dtype: str = "bfloat16"
target_clip_count: int = Field(default=5, ge=1, le=20)
max_clips: int = Field(default=10, ge=1, le=50)
ffmpeg_binary: str = "ffmpeg"
ffprobe_binary: str = "ffprobe"
ffmpeg_video_codec: str = "h264_amf"
ffmpeg_cpu_codec: str = "libx264"
redis_url: str = "redis://redis:6379/0"
celery_enabled: bool = False
@lru_cache
def get_settings() -> Settings:
settings = Settings(
demo_mode=_bool_env("DEMO_MODE", True),
storage_dir=Path(os.getenv("STORAGE_DIR", "data")),
frontend_origin=os.getenv("FRONTEND_ORIGIN", "http://localhost:5173"),
whisper_model_id=os.getenv("WHISPER_MODEL_ID", "openai/whisper-large-v3"),
qwen_text_model_id=os.getenv("QWEN_TEXT_MODEL_ID", "Qwen/Qwen2.5-7B-Instruct"),
qwen_vl_model_id=os.getenv("QWEN_VL_MODEL_ID", "Qwen/Qwen2-VL-7B-Instruct"),
hf_token=os.getenv("HF_TOKEN") or None,
preferred_torch_dtype=os.getenv("TORCH_DTYPE", "bfloat16"),
target_clip_count=_int_env("TARGET_CLIP_COUNT", 5),
max_clips=_int_env("MAX_CLIPS", 10),
ffmpeg_binary=os.getenv("FFMPEG_BINARY", "ffmpeg"),
ffprobe_binary=os.getenv("FFPROBE_BINARY", "ffprobe"),
ffmpeg_video_codec=os.getenv("FFMPEG_VIDEO_CODEC", "h264_amf"),
ffmpeg_cpu_codec=os.getenv("FFMPEG_CPU_CODEC", "libx264"),
redis_url=os.getenv("REDIS_URL", "redis://redis:6379/0"),
celery_enabled=_bool_env("CELERY_ENABLED", False),
)
settings.storage_dir.mkdir(parents=True, exist_ok=True)
return settings
def _bool_env(name: str, default: bool) -> bool:
value = os.getenv(name)
if value is None:
return default
return value.strip().lower() in {"1", "true", "yes", "on"}
def _int_env(name: str, default: int) -> int:
value = os.getenv(name)
if value is None:
return default
return int(value)
|