Refactor backend status handling and improve idle management

- Updated the idle-killer logic to treat SwarmUI `empty` and `disabled` states as busy, preventing unnecessary idle time during provisioning.
- Enhanced the `wait_backend_idle` function to recognize suspended backends as ready, improving resource utilization and user feedback.
- Refined the `install_swarm_comfy` script to skip installation when backends are already present, streamlining the setup process.
- Improved the `resolve_llm_runtime` function to prioritize live configuration over stale state notes, ensuring accurate runtime detection.
- Added tests to validate the new backend status handling and idle management logic, ensuring robustness and reliability.
This commit is contained in:
Leonid Pershin
2026-08-21 10:07:16 +03:00
parent 26f3be6e96
commit 1785ab369c
13 changed files with 302 additions and 90 deletions
+14 -13
View File
@@ -27,30 +27,34 @@ def test_decide_exit_missing():
assert d.kind == "exit"
def test_tunnel_forwards_swarm_only(monkeypatch):
def test_decide_soft_fail_keeps_tunnel():
d = decide_watch("SOFT_FAIL", tunnel_alive=True)
assert d.kind == "ok"
assert "soft-fail" in d.detail
def test_tunnel_forwards_swarm_only():
class Cfg:
swarmui_local_port = 17801
llm_runtime = "none"
ollama_local_port = 17811
enable_swarmui = True
monkeypatch.setattr("gpu_rent.tunnel.load_state", lambda: type("S", (), {"notes": {}})())
assert tunnel_forwards(Cfg()) == [(17801, 7801)]
def test_tunnel_forwards_prefers_cfg_over_stale_notes(monkeypatch):
def test_tunnel_forwards_prefers_cfg_over_stale_notes():
"""tunnel_forwards uses cfg only — notes must not add Ollama."""
class Cfg:
swarmui_local_port = 17801
llm_runtime = "none"
ollama_local_port = 17811
enable_swarmui = True
monkeypatch.setattr(
"gpu_rent.tunnel.load_state",
lambda: type("S", (), {"notes": {"llm_runtime": "ollama"}})(),
)
assert tunnel_forwards(Cfg()) == [(17801, 7801)]
def test_resolve_llm_notes_only_when_cfg_none(monkeypatch):
def test_resolve_llm_uses_cfg_only(monkeypatch):
from gpu_rent.access_card import resolve_llm_runtime
class Cfg:
@@ -60,13 +64,10 @@ def test_resolve_llm_notes_only_when_cfg_none(monkeypatch):
"gpu_rent.access_card.load_state",
lambda: type("S", (), {"notes": {"llm_runtime": "ollama"}})(),
)
assert resolve_llm_runtime(Cfg()) == "ollama"
# Stale notes must not override live cfg=none
assert resolve_llm_runtime(Cfg()) == "none"
class Cfg2:
llm_runtime = "ollama"
monkeypatch.setattr(
"gpu_rent.access_card.load_state",
lambda: type("S", (), {"notes": {"llm_runtime": "none"}})(),
)
assert resolve_llm_runtime(Cfg2()) == "ollama"