aboutsummaryrefslogtreecommitdiff
path: root/app/tests/test_backends_managed.py
diff options
context:
space:
mode:
authorhistoria <historiavg@proton.me>2026-09-02 01:26:09 -0400
committerhistoria <historiavg@proton.me>2026-09-02 01:26:09 -0400
commit8579517a35ef1865fc9b428899d73d52dcb27a14 (patch)
treedba52f8d99cfe4014e0b787367de99f238e5a0db /app/tests/test_backends_managed.py
parent391f50da7a085bec75155c0eb9b47910266058cc (diff)
downloadtts-audiobook-generator-8579517a35ef1865fc9b428899d73d52dcb27a14.tar.gz
feat: sglang backend support
Diffstat (limited to 'app/tests/test_backends_managed.py')
-rw-r--r--app/tests/test_backends_managed.py95
1 files changed, 93 insertions, 2 deletions
diff --git a/app/tests/test_backends_managed.py b/app/tests/test_backends_managed.py
index cd1f03a..e0bb074 100644
--- a/app/tests/test_backends_managed.py
+++ b/app/tests/test_backends_managed.py
@@ -18,8 +18,8 @@ from backends.managed import ManagedServer, ensure_running
from backends.probe import (IDENTITY_AUDIOCPP, IDENTITY_QWEN_CLONE,
IDENTITY_QWEN_CUSTOM, IDENTITY_QWEN_DESIGN)
from converter.clients import (BACKEND_AUDIOCPP, BACKEND_QWEN,
- VOICE_MODE_CLONE, VOICE_MODE_CUSTOM,
- VOICE_MODE_DESIGN)
+ BACKEND_SGLOMNI, VOICE_MODE_CLONE,
+ VOICE_MODE_CUSTOM, VOICE_MODE_DESIGN)
def _spec(name="audiocpp", url="http://127.0.0.1:8080", identity=None):
@@ -269,6 +269,97 @@ class QwenEnsureRunningTests(unittest.TestCase):
mk_start.assert_not_called()
+class SglomniEnsureRunningTests(unittest.TestCase):
+ """sglomni hosts one model per server: the running-model check is
+ keyed on the served HuggingFace repo id (the qwen rules again)."""
+
+ def _detect_sglomni(self):
+ from backends.sglomni import status as sg_status
+ from backends.sglomni.catalog import entry_by_key
+ with patch("backends.sglomni.gpu.compute_capability",
+ return_value=None):
+ spec = sg_status.build_spec(entry_by_key("zonos2"))
+ return _status([spec], installed=True, label="SGLang-Omni")
+
+ def _run(self, model):
+ out = io.StringIO()
+ with redirect_stdout(out):
+ result = ensure_running(BACKEND_SGLOMNI, VOICE_MODE_CLONE,
+ model=model)
+ return result, out.getvalue()
+
+ def test_spec_aims_at_the_model_the_run_selected(self):
+ with patch("backends.detect", return_value=self._detect_sglomni()), \
+ patch("backends.sglomni.models.model_installed",
+ return_value=True), \
+ patch("backends.sglomni.gpu.compute_capability",
+ return_value=None), \
+ patch("backends.common.server_running",
+ return_value=False), \
+ patch.object(servers, "start",
+ return_value=True) as mk_start:
+ result, _ = self._run("zonos2")
+ spec = mk_start.call_args.args[0]
+ self.assertIn("Zyphra/zonos2", spec.argv)
+ self.assertNotIn("--config", spec.argv)
+ self.assertTrue(result.started)
+
+ def test_fp8_fallback_prints_a_note_and_boots_the_bf16_config(self):
+ with patch("backends.detect", return_value=self._detect_sglomni()), \
+ patch("backends.sglomni.models.model_installed",
+ return_value=True), \
+ patch("backends.sglomni.gpu.compute_capability",
+ return_value=(8, 6)), \
+ patch("backends.common.server_running",
+ return_value=False), \
+ patch.object(servers, "start",
+ return_value=True) as mk_start:
+ result, output = self._run("zonos2")
+ self.assertIn("bf16", output)
+ self.assertIn("--config", mk_start.call_args.args[0].argv)
+ self.assertTrue(result.started)
+
+ def test_managed_server_hosting_another_model_is_rebooted(self):
+ with patch("backends.detect", return_value=self._detect_sglomni()), \
+ patch("backends.sglomni.models.model_installed",
+ return_value=True), \
+ patch("backends.sglomni.gpu.compute_capability",
+ return_value=None), \
+ patch("backends.common.server_running",
+ return_value=True), \
+ patch("backends.probe.sglomni_served_model",
+ return_value="Qwen/Qwen3-TTS-12Hz-1.7B-Base"), \
+ patch.object(servers, "alive", return_value=True), \
+ patch.object(servers, "start",
+ return_value=True) as mk_start, \
+ patch.object(servers, "stop") as mk_stop:
+ result, output = self._run("zonos2")
+ self.assertIn("restarting", output)
+ mk_stop.assert_called_once_with("sglomni")
+ self.assertIn("Zyphra/zonos2",
+ mk_start.call_args.args[0].argv)
+ self.assertTrue(result.started)
+
+ def test_foreign_server_hosting_another_model_refuses_the_run(self):
+ with patch("backends.detect", return_value=self._detect_sglomni()), \
+ patch("backends.sglomni.models.model_installed",
+ return_value=True), \
+ patch("backends.sglomni.gpu.compute_capability",
+ return_value=None), \
+ patch("backends.common.server_running",
+ return_value=True), \
+ patch("backends.probe.sglomni_served_model",
+ return_value="Qwen/Qwen3-TTS-12Hz-1.7B-Base"), \
+ patch.object(servers, "alive", return_value=False), \
+ patch.object(servers, "start") as mk_start, \
+ patch.object(servers, "stop") as mk_stop:
+ result, output = self._run("zonos2")
+ self.assertFalse(result.ok)
+ self.assertIn("this run needs Zyphra/zonos2", output)
+ mk_start.assert_not_called()
+ mk_stop.assert_not_called()
+
+
class ManagedModuleSmokeTests(unittest.TestCase):
"""Import-surface sanity for the module the CLI wires in."""