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()