dashboard-nanobot/dashboard-edge/app/runtime/factory.py

32 lines
1022 B
Python

import os
from typing import Dict
from app.core.settings import EDGE_BOTS_WORKSPACE_ROOT, EDGE_BASE_IMAGE
from app.runtime.docker_manager import EdgeDockerManager
from app.runtime.native_manager import EdgeNativeRuntimeBackend
def edge_runtime_mode() -> str:
runtime_kind = str(os.getenv("EDGE_RUNTIME_KIND", "all") or "all").strip().lower()
if runtime_kind in {"docker", "native"}:
return runtime_kind
return "all"
def build_edge_runtime_backends() -> Dict[str, object]:
mode = edge_runtime_mode()
backends: Dict[str, object] = {}
if mode in {"all", "docker"}:
backends["docker"] = EdgeDockerManager(host_data_root=EDGE_BOTS_WORKSPACE_ROOT, base_image=EDGE_BASE_IMAGE)
if mode in {"all", "native"}:
backends["native"] = EdgeNativeRuntimeBackend()
return backends
def preferred_edge_runtime_kind(backends: Dict[str, object]) -> str:
if "docker" in backends:
return "docker"
if "native" in backends:
return "native"
return "docker"