File size: 1,546 Bytes
b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 b8e5043 a7c4301 | 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 | """Environment adapter - auto-detect and adapt to different runtime environments."""
import os
from pathlib import Path
from enum import Enum
class Environment(Enum):
HF_SPACES = "hf_spaces"
DOCKER = "docker"
LOCAL = "local"
class EnvAdapter:
"""Environment adapter for HF Spaces / Docker / local."""
def __init__(self):
self.env = self._detect_environment()
self.data_dir = self._get_data_dir()
self.browser_headless = self._should_be_headless()
def _detect_environment(self) -> Environment:
if os.getenv("HF_SPACE_ID"):
return Environment.HF_SPACES
elif os.getenv("DOCKER_CONTAINER"):
return Environment.DOCKER
return Environment.LOCAL
def _get_data_dir(self) -> Path:
override = os.getenv("DATA_DIR")
if override:
return Path(override)
if self.env == Environment.HF_SPACES:
return Path("/data")
return Path("data")
def _should_be_headless(self) -> bool:
if self.env == Environment.HF_SPACES:
return True
return os.getenv("BROWSER_HEADLESS", "true").lower() == "true"
def get_memory_path(self) -> Path:
return self.data_dir / "memory"
def get_plugins_path(self) -> Path:
return self.data_dir / "plugins"
def get_browser_profile_path(self) -> Path:
return self.data_dir / "browser" / "profiles"
def get_log_path(self) -> Path:
return self.data_dir / "logs"
# Global instance
env = EnvAdapter()
|