config.py 1.53 KB
"""Minimal settings for standalone audio analysis pipeline."""

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env",
        env_file_encoding="utf-8",
        extra="ignore",
    )

    # Qwen
    QWEN_API_KEY: str | None = None
    QWEN_DASHSCOPE_API_KEY: str | None = None
    QWEN_BASE_URL: str | None = "https://dashscope.aliyuncs.com/compatible-mode/v1"
    QWEN_MODEL: str | None = "qwen3-omni-flash"
    QWEN_TIMEOUT: float = 15.0
    QWEN_LYRICS_TIMEOUT: float = 90.0
    QWEN_MAX_RETRIES: int = 3
    MUSIC_ANALYZE_LIGHT_MODE: bool = True
    MUSIC_DOWNLOAD_DIR: str = "music"
    MUSIC_MAPPING_FILE: str = "music/music_file_mapping.csv"

    # Optional features
    SONGFORMER_URL: str | None = None

    # DashScope ASR
    DASHSCOPE_FUNASR_MODEL: str = "fun-asr"
    DASHSCOPE_BASE_HTTP_API_URL: str = "https://dashscope.aliyuncs.com/api/v1"
    DASHSCOPE_ASR_POLL_INTERVAL: float = 1.0
    DASHSCOPE_ASR_POLL_TIMEOUT: float = 120.0
    DASHSCOPE_ASR_SUBMIT_URL: str = (
        "https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription"
    )
    DASHSCOPE_ASR_MODEL: str = "qwen3-asr-flash-filetrans"
    DASHSCOPE_TASK_STATUS_BASE_URL: str = "https://dashscope.aliyuncs.com/api/v1/tasks"

    # OSS
    OSS_ACCESS_KEY_ID: str | None = None
    OSS_ACCESS_KEY_SECRET: str | None = None
    OSS_ENDPOINT: str | None = None
    OSS_BUCKET_NAME: str | None = None
    OSS_ENDPOINT_INTERNAL: str | None = None


settings = Settings()