"""Konfiguracija iz okoline (~/.config/idriz/env se učitava preko systemd EnvironmentFile).""" import os from dataclasses import dataclass, field from pathlib import Path def _env(name: str, default: str) -> str: return os.environ.get(name, default) @dataclass class Config: openai_api_key: str = field(default_factory=lambda: _env("OPENAI_API_KEY", "")) realtime_model: str = field(default_factory=lambda: _env("IDRIZ_REALTIME_MODEL", "gpt-realtime-2.1")) text_model: str = field(default_factory=lambda: _env("IDRIZ_TEXT_MODEL", "gpt-5.5")) game_model: str = field(default_factory=lambda: _env("IDRIZ_GAME_MODEL", "gpt-4.1-mini")) image_model: str = field(default_factory=lambda: _env("IDRIZ_IMAGE_MODEL", "gpt-image-2")) transcription_model: str = field(default_factory=lambda: _env("IDRIZ_TRANSCRIPTION_MODEL", "gpt-4o-mini-transcribe")) voice: str = field(default_factory=lambda: _env("IDRIZ_VOICE", "cedar")) printer: str = field(default_factory=lambda: _env("IDRIZ_PRINTER", "idriz-printer")) mic_device: str = field(default_factory=lambda: _env("IDRIZ_MIC_DEVICE", "")) speaker_device: str = field(default_factory=lambda: _env("IDRIZ_SPEAKER_DEVICE", "")) out_dir: Path = field(default_factory=lambda: Path(_env("IDRIZ_OUT_DIR", str(Path.home() / ".local/share/idriz/out")))) max_pages: int = field(default_factory=lambda: int(_env("IDRIZ_MAX_PAGES", "2"))) dry_run: bool = field(default_factory=lambda: _env("IDRIZ_DRY_RUN", "0") == "1") vad_silence_ms: int = field(default_factory=lambda: int(_env("IDRIZ_VAD_SILENCE_MS", "900"))) mic_gain: float = field(default_factory=lambda: float(_env("IDRIZ_MIC_GAIN", "3.0"))) vad_threshold: float = field(default_factory=lambda: float(_env("IDRIZ_VAD_THRESHOLD", "0.5"))) def __post_init__(self) -> None: self.out_dir.mkdir(parents=True, exist_ok=True) # igra koristi brzi mini model (gpt-4.1-mini) da presuda ne traje dugo; # promjenjivo preko IDRIZ_GAME_MODEL if not self.game_model: self.game_model = "gpt-4.1-mini" def load() -> Config: return Config()