Retire GPU box 192.168.123.14 from TTS and node-report configuration

The box is offline and being reconfigured. Removed the relay helper URL from
.env (qwen_tts_helper_url defaults to empty, so local :8881 is now the only
backend), dropped the 18881 relay entry from MEANINGFUL_PORTS, and made the
node report state plainly that no controller endpoint exists rather than
advertising one on a retired host.

Also recorded that ModelCoordinator.ensure_qwen_server() already spawns the
Qwen server on demand - it checks /health first, so a launchd-owned instance is
reused instead of double-spawned.
This commit is contained in:
B.D. Murphy
2026-10-08 07:33:54 -07:00
parent a6ed6e86be
commit 0722a85ffd
4 changed files with 35 additions and 8 deletions

6
.env
View File

@@ -14,9 +14,9 @@ UMBRA_TTS__RETRY_DELAY=2.0
UMBRA_TTS__VOICEDESIGN_MODEL=/Volumes/1TB_APL_Storage/UmbraAudio/models/Qwen3-TTS-12Hz-1.7B-VoiceDesign
UMBRA_TTS__BASE_MODEL=/Volumes/1TB_APL_Storage/UmbraAudio/models/Qwen3-TTS-12Hz-1.7B-Base
UMBRA_TTS__QWEN_TTS_URL=http://localhost:8881
# Optional GPU accelerator: relay 127.0.0.1:18881 -> 192.168.123.14:8881.
# Helper is tried first when healthy; local server above is the required fallback.
UMBRA_TTS__QWEN_TTS_HELPER_URL=http://127.0.0.1:18881
# The GPU box (192.168.123.14) is retired and removed from the configuration:
# it is offline and being reconfigured, so there is no relay and no helper URL.
# Local Qwen3-TTS on 8881 is the only TTS backend.
# --- LLM ---
UMBRA_LLM__PROVIDER=auto

View File

@@ -210,6 +210,32 @@ Each pass has quality gates. Quality is the primary concern; generation speed is
- Prefer: stdlib → third-party → custom implementation
## Current Session Summary
### Session: GPU box retired; Qwen TTS boot start; public DNS findings
- **GPU box `192.168.123.14` is RETIRED (2026-10-08)** - offline and being reconfigured.
Removed from configuration: `.env` no longer sets `UMBRA_TTS__QWEN_TTS_HELPER_URL`
(default is `""`, so this is a no-op fallback), `MEANINGFUL_PORTS` lost the `18881`
relay entry, and `umbra_node_report.py` now reports `controller_endpoint: None` with a
`controller_status` explaining why. `config.py` comment updated. **Local `:8881` is the
only TTS backend.** The root relay `/Library/LaunchDaemons/com.umba.qwen-relay.plist` +
`qwen_relay.py` still need removing with sudo. Note this also strands the **UmbraTrans
controller** (spec 21/22 assume it on that host) - specs 21/22 are now blocked on new
controller hosting.
- **The web UI already self-heals TTS:** `ModelCoordinator.ensure_qwen_server()`
(`model_coordinator.py:238`) spawns `scripts/qwen_tts_server.py` via
`Popen(start_new_session=True)` when `/health` fails. It is called only from
`switch_to()` (line 293) - i.e. **on demand during pipeline work, NOT at boot or web
startup**. It checks `qwen_health()` first, so a launchd-owned instance is reused
rather than double-spawned: the two mechanisms are complementary, not conflicting.
- **`umbraaudio.bdmurphy.me` TLS: Caddy fails with `internal error` (alert 80)** on the
vhost while `bdmurphy.me` itself presents a valid cert. Cause was the missing public A
record - with no DNS entry an ACME HTTP-01 challenge cannot validate, so on-demand TLS
aborts the handshake. Caddy is at **`192.168.123.5`** (NOT the public IP: port-forwarded
from 97.113.1.212). Diagnosing this via the public IP is misleading: the LAN host
answers :80 and :443, the public IP does not hairpin from inside the LAN.
- Useful negative result: Caddy answers `308 -> https://<Host>/` for **any** hostname,
including invented ones, so a redirect Location cannot be used to infer vhost config.
Only an SNI handshake (`openssl s_client -servername ...`) distinguishes them.
### Session: Voice-maintenance guard (409) + boot auto-start failure diagnosed
- **The banner lied by omission.** `voice_maintenance` was wired into `routes.py` **only**

View File

@@ -56,7 +56,6 @@ NODE_CONTRACT_VERSION = 1
MEANINGFUL_PORTS = {
8420: "umbraaudio web UI (FastAPI/HTMX)",
8881: "Qwen3-TTS local API",
18881: "qwen-relay listener (loopback -> LAN GPU box)",
1234: "LM Studio OpenAI-compatible server",
5432: "PostgreSQL (control plane, not hosted here)",
}
@@ -323,8 +322,9 @@ def build_report(project_dir: str | None = None) -> dict[str, Any]:
"audio_record_lives_in": "filesystem + *.wav.txt markers",
"authentication": "none; active_project is an unsigned browser cookie",
"shared_database_present_here": False,
"controller_endpoint": "http://192.168.123.14:8442 (Host: umbratrans.bdmurphy.me)",
"controller_stage_reached": "0 (reachability verified 2026-10-03)",
"controller_endpoint": None,
"controller_status": "unavailable: host 192.168.123.14 retired/offline (2026-10-08)",
"controller_stage_reached": "0 (was reachable 2026-10-03, before retirement)",
"secret_values_reported": False,
}
return report

View File

@@ -58,8 +58,9 @@ class TTSConfig(BaseSettings):
voicedesign_model: str = "/Volumes/1TB_APL_Storage/UmbraAudio/models/Qwen3-TTS-12Hz-1.7B-VoiceDesign"
base_model: str = "/Volumes/1TB_APL_Storage/UmbraAudio/models/Qwen3-TTS-12Hz-1.7B-Base"
qwen_tts_url: str = "http://localhost:8881"
# Optional GPU accelerator (e.g. http://127.0.0.1:18881 relay to the
# 192.168.123.14 box). Tried first when healthy; local always falls back.
# Optional second TTS backend, tried first when healthy. The GPU box
# (192.168.123.14) that this pointed at is retired, so it is now unset and
# local 8881 is the only backend.
qwen_tts_helper_url: str = ""