53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
def _env_bool(name: str, default: bool = False) -> bool:
|
|
raw = os.getenv(name)
|
|
if raw is None:
|
|
return default
|
|
return raw.strip().lower() in {"1", "true", "yes", "on"}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AppConfig:
|
|
openai_api_key: str
|
|
screenjob_token: str
|
|
disable_ui: bool
|
|
default_model: str
|
|
safety_model: str
|
|
host: str
|
|
port: int
|
|
runs_dir: Path
|
|
db_path: Path
|
|
|
|
|
|
def load_app_config(cwd: Path) -> AppConfig:
|
|
load_dotenv()
|
|
openai_api_key = os.getenv("OPENAI_API_KEY", "").strip()
|
|
screenjob_token = os.getenv("SCREENJOB_TOKEN", "").strip()
|
|
default_model = os.getenv("SCREENJOB_DEFAULT_MODEL", "gpt-5.4-mini").strip() or "gpt-5.4-mini"
|
|
safety_model = os.getenv("SCREENJOB_SAFETY_MODEL", "gpt-5.4-mini").strip() or "gpt-5.4-mini"
|
|
host = os.getenv("SCREENJOB_HOST", "127.0.0.1").strip() or "127.0.0.1"
|
|
port = int(os.getenv("SCREENJOB_PORT", "8787").strip() or "8787")
|
|
runs_dir = cwd / "screenjob_runs"
|
|
db_path = cwd / "screenjob.db"
|
|
disable_ui = _env_bool("DISABLE_UI", default=False)
|
|
return AppConfig(
|
|
openai_api_key=openai_api_key,
|
|
screenjob_token=screenjob_token,
|
|
disable_ui=disable_ui,
|
|
default_model=default_model,
|
|
safety_model=safety_model,
|
|
host=host,
|
|
port=port,
|
|
runs_dir=runs_dir,
|
|
db_path=db_path,
|
|
)
|
|
|