93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
"""
|
|
Hermes-Agent-Status (Control-Plane-Read). MC betreibt Hermes NICHT — es zeigt nur
|
|
Status + verlinkt das standalone hermes-webui. Voller Zugriff + Tools/MCP werden in
|
|
Hermes' eigener Config verdrahtet (siehe docs/HERMES_SETUP.md).
|
|
"""
|
|
|
|
import httpx
|
|
|
|
from config import HERMES_API_URL, HERMES_HOME, HERMES_WEBUI_URL, yaml
|
|
|
|
|
|
def _reach(url: str, path: str = "") -> bool:
|
|
try:
|
|
with httpx.Client(timeout=3.0) as c:
|
|
return c.get(f"{url}{path}").status_code < 500
|
|
except Exception:
|
|
return False
|
|
|
|
|
|
def agent_status() -> dict:
|
|
"""Erreichbarkeit von Gateway (:8642) + WebUI (:8787) + lokale Hinweise."""
|
|
home = HERMES_HOME
|
|
brain_model = "auto"
|
|
config_path = home / "config.yaml"
|
|
if config_path.exists():
|
|
try:
|
|
from ruamel.yaml import YAML
|
|
r_yaml = YAML()
|
|
with config_path.open("r", encoding="utf-8") as f:
|
|
cfg = r_yaml.load(f) or {}
|
|
if isinstance(cfg, dict):
|
|
brain_model = cfg.get("model", {}).get("model", "auto")
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
return {
|
|
"gateway_url": HERMES_API_URL,
|
|
"webui_url": HERMES_WEBUI_URL,
|
|
"gateway_reachable": _reach(HERMES_API_URL, "/v1/models"),
|
|
"webui_reachable": _reach(HERMES_WEBUI_URL),
|
|
"home_exists": home.exists(),
|
|
"brain_model": brain_model,
|
|
# Best-effort: welche Verdrahtung lokal sichtbar ist (auf der Box aussagekräftig).
|
|
"has_config": (home / "config.yaml").exists() or (home / "config.json").exists(),
|
|
"has_skills": (home / "skills").exists(),
|
|
"has_memories": (home / "memories").exists(),
|
|
}
|
|
|
|
|
|
def update_brain_model(new_model: str) -> bool:
|
|
from config import HERMES_HOME
|
|
home = HERMES_HOME
|
|
config_path = home / "config.yaml"
|
|
|
|
# Ensure home directory exists
|
|
home.mkdir(parents=True, exist_ok=True)
|
|
|
|
cfg = {}
|
|
if config_path.exists():
|
|
try:
|
|
from ruamel.yaml import YAML
|
|
r_yaml = YAML()
|
|
with config_path.open("r", encoding="utf-8") as f:
|
|
cfg = r_yaml.load(f) or {}
|
|
except Exception:
|
|
cfg = {}
|
|
|
|
if not isinstance(cfg, dict):
|
|
cfg = {}
|
|
|
|
if "model" not in cfg or not isinstance(cfg["model"], dict):
|
|
cfg["model"] = {}
|
|
|
|
cfg["model"]["model"] = new_model
|
|
|
|
try:
|
|
from ruamel.yaml import YAML
|
|
r_yaml = YAML()
|
|
with config_path.open("w", encoding="utf-8") as f:
|
|
r_yaml.dump(cfg, f)
|
|
|
|
# Restart the user-space service to apply changes
|
|
try:
|
|
import services.maintenance as maintenance
|
|
maintenance.restart_service("hermes-gateway")
|
|
except Exception:
|
|
pass
|
|
|
|
return True
|
|
except Exception:
|
|
return False
|