2026-07-27 09:12:47 +08:00
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
from functools import lru_cache
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _int_env(name: str, default: int) -> int:
|
|
|
|
|
|
raw = os.getenv(name)
|
|
|
|
|
|
if raw is None or raw == "":
|
|
|
|
|
|
return default
|
|
|
|
|
|
return int(raw)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _list_env(name: str, default: list[str]) -> list[str]:
|
|
|
|
|
|
raw = os.getenv(name)
|
|
|
|
|
|
if raw is None or raw.strip() == "":
|
|
|
|
|
|
return default
|
|
|
|
|
|
return [item.strip() for item in raw.split(",") if item.strip()]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
|
|
class Settings:
|
|
|
|
|
|
app_name: str = os.getenv("APP_NAME", "YG Fine-Tune Platform API")
|
|
|
|
|
|
app_env: str = os.getenv("APP_ENV", "local")
|
|
|
|
|
|
route_prefix: str = os.getenv("MODELTF_ROUTE_PREFIX", "/modelTF")
|
|
|
|
|
|
app_mode: str = os.getenv("APP_MODE", "local")
|
2026-07-30 14:38:56 +08:00
|
|
|
|
database_url: str = os.getenv("DATABASE_URL", "postgresql+psycopg://root:8811614287327Leo@www.caoxiaozhu.com:5432/yg_ft")
|
2026-07-27 09:12:47 +08:00
|
|
|
|
cors_allow_origins: list[str] = None # type: ignore[assignment]
|
|
|
|
|
|
compute_mode: str = os.getenv("COMPUTE_MODE", "real")
|
|
|
|
|
|
compute_status_sync_mode: str = os.getenv("COMPUTE_STATUS_SYNC_MODE", "polling")
|
|
|
|
|
|
compute_poll_interval_seconds: int = _int_env("COMPUTE_POLL_INTERVAL_SECONDS", 3)
|
|
|
|
|
|
log_level: str = os.getenv("LOG_LEVEL", "INFO")
|
|
|
|
|
|
log_dir: str = os.getenv("LOG_DIR", "./logs")
|
|
|
|
|
|
log_file_prefix: str = os.getenv("LOG_FILE_PREFIX", "backend")
|
|
|
|
|
|
log_error_file_prefix: str = os.getenv("LOG_ERROR_FILE_PREFIX", "error")
|
|
|
|
|
|
log_max_bytes: int = _int_env("LOG_MAX_BYTES", 20 * 1024 * 1024)
|
|
|
|
|
|
log_retention_days: int = _int_env("LOG_RETENTION_DAYS", 10)
|
|
|
|
|
|
jwt_secret: str = os.getenv("JWT_SECRET", "dev-insecure-change-me")
|
|
|
|
|
|
jwt_algorithm: str = os.getenv("JWT_ALGORITHM", "HS256")
|
|
|
|
|
|
access_token_expire_minutes: int = _int_env("ACCESS_TOKEN_EXPIRE_MINUTES", 1440)
|
|
|
|
|
|
|
|
|
|
|
|
def __post_init__(self) -> None:
|
|
|
|
|
|
object.__setattr__(
|
|
|
|
|
|
self,
|
|
|
|
|
|
"cors_allow_origins",
|
|
|
|
|
|
_list_env(
|
|
|
|
|
|
"CORS_ALLOW_ORIGINS",
|
|
|
|
|
|
[
|
|
|
|
|
|
"http://localhost:16801",
|
|
|
|
|
|
"http://127.0.0.1:16801",
|
|
|
|
|
|
"http://localhost:17861",
|
|
|
|
|
|
"http://127.0.0.1:17861",
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@lru_cache
|
|
|
|
|
|
def get_settings() -> Settings:
|
|
|
|
|
|
return Settings()
|
|
|
|
|
|
|