diff --git a/pyproject.toml b/pyproject.toml index 2b8beeeb..8f441f54 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,9 @@ openrag = "tui.main:run_tui" [tool.uv] package = true +[tool.setuptools.package-data] +"*" = ["docker-compose*.yml"] + [tool.uv.sources] torch = [ { index = "pytorch-cu128", marker = "sys_platform == 'linux' and platform_machine == 'x86_64'" }, diff --git a/src/tui/managers/container_manager.py b/src/tui/managers/container_manager.py index 24ed62f9..43378508 100644 --- a/src/tui/managers/container_manager.py +++ b/src/tui/managers/container_manager.py @@ -9,6 +9,10 @@ from enum import Enum from pathlib import Path from typing import Dict, List, Optional, AsyncIterator from utils.logging_config import get_logger +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files logger = get_logger(__name__) @@ -51,8 +55,8 @@ class ContainerManager: def __init__(self, compose_file: Optional[Path] = None): self.platform_detector = PlatformDetector() self.runtime_info = self.platform_detector.detect_runtime() - self.compose_file = compose_file or Path("docker-compose.yml") - self.cpu_compose_file = Path("docker-compose-cpu.yml") + self.compose_file = compose_file or self._find_compose_file("docker-compose.yml") + self.cpu_compose_file = self._find_compose_file("docker-compose-cpu.yml") self.services_cache: Dict[str, ServiceInfo] = {} self.last_status_update = 0 # Auto-select CPU compose if no GPU available @@ -80,6 +84,27 @@ class ContainerManager: "langflow": "langflow", } + def _find_compose_file(self, filename: str) -> Path: + """Find compose file in current directory or package resources.""" + # First check current working directory + cwd_path = Path(filename) + if cwd_path.exists(): + return cwd_path + + # Then check package resources + try: + pkg_files = files("openrag") + if (pkg_files / filename).is_file(): + # Copy to cwd for compose command to work + content = (pkg_files / filename).read_text() + cwd_path.write_text(content) + return cwd_path + except Exception: + pass + + # Fall back to original path (will fail later if not found) + return Path(filename) + def is_available(self) -> bool: """Check if container runtime is available.""" return self.runtime_info.runtime_type != RuntimeType.NONE diff --git a/uv.lock b/uv.lock index 853b6b23..db680724 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.13" resolution-markers = [ "sys_platform == 'darwin'", @@ -2282,7 +2282,7 @@ wheels = [ [[package]] name = "openrag" -version = "0.1.3" +version = "0.1.4" source = { editable = "." } dependencies = [ { name = "agentd" },