2 Commits

Author SHA1 Message Date
javis-bot
677bfcd2a9 feat: log the resolved whisper device on bridge load
Some checks failed
Release / semantic-release (push) Successful in 24s
tests / Unit tests (Linux, Python 3.11) (push) Failing after 5m19s
Release / build-linux (push) Failing after 7m10s
Release / build-windows (push) Has been cancelled
Release / build-macos (arm64, macos-latest) (push) Has been cancelled
Release / build-macos (x64, macos-15-intel) (push) Has been cancelled
Release / release-main (push) Has been cancelled
Release / release-develop (push) Has been cancelled
The bridge only logged Whisper's device on the CPU-fallback path, so a
successful GPU (or silent CPU) load was invisible. Print the CTranslate2-
resolved device on success and on the fallback load, so it is verifiable that
STT is actually running on cuda alongside ollama (GPU) and MeloTTS (cuda).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-23 00:19:20 +09:00
javis-bot
e49be6d04e fix: add video driver capability so NVENC works in the container
Some checks failed
Release / semantic-release (push) Successful in 31s
Release / build-windows (push) Has been cancelled
Release / build-macos (arm64, macos-latest) (push) Has been cancelled
Release / build-macos (x64, macos-15-intel) (push) Has been cancelled
Release / build-linux (push) Has been cancelled
Release / release-main (push) Has been cancelled
Release / release-develop (push) Has been cancelled
tests / Unit tests (Linux, Python 3.11) (push) Has been cancelled
The Go-Live broadcast encodes with h264_nvenc, but the image only requested
NVIDIA_DRIVER_CAPABILITIES=compute,utility. The NVIDIA Container Toolkit gates
which driver libraries it injects by capability, and the NVENC/NVDEC libs
(libnvidia-encode.so.1 / libnvidia-decode.so.1) come with the `video`
capability. Without it the broadcast ffmpeg dies with
"Cannot load libnvidia-encode.so.1", the capture produces no packets, and
Go-Live never connects, while CUDA workloads (ollama/whisper/melo) and
nvidia-smi keep working because compute+utility are present.

Add `video` so hardware encode is available. Applies to both Linux (CDI) and
Windows Docker Desktop (WSL2).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-23 00:16:12 +09:00
2 changed files with 13 additions and 2 deletions

View File

@@ -10,8 +10,14 @@ ENV DEBIAN_FRONTEND=noninteractive \
DISPLAY=:1 \
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 \
PATH=/opt/venv/bin:/root/.bun/bin:/usr/local/bin:/usr/bin:/bin \
NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=compute,utility
NVIDIA_VISIBLE_DEVICES=all
# `video` is REQUIRED for NVENC/NVDEC: it tells the NVIDIA Container Toolkit to
# inject libnvidia-encode.so.1 / libnvidia-decode.so.1 into the container. With
# only `compute,utility` you get CUDA (ollama/whisper/melo) + nvidia-smi, but the
# Go-Live broadcast's h264_nvenc fails with "Cannot load libnvidia-encode.so.1".
# Applies on both Linux (CDI) and Windows Docker Desktop (WSL2).
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
# --- System packages: desktop, VNC, Chrome deps, ffmpeg, python, ocr ---
RUN apt-get update && apt-get install -y --no-install-recommends \

View File

@@ -150,12 +150,17 @@ def _ensure_brain():
compute = os.environ.get("WHISPER_COMPUTE_TYPE", "auto")
try:
whisper = WhisperModel(cfg.whisper_model, device=device, compute_type=compute)
# Log the device actually resolved by CTranslate2 (device="auto"
# picks cuda when available) so a silent CPU load is visible.
resolved = str(getattr(getattr(whisper, "model", None), "device", device)).lower()
print(f"[bridge] whisper loaded on {resolved} (compute={compute})", flush=True)
except Exception as ge:
# GPU not available / unsupported -> fall back to CPU so the
# bridge still works without a GPU passed to the container.
if device != "cpu":
print(f"[bridge] whisper device='{device}' failed ({ge}); falling back to CPU", flush=True)
whisper = WhisperModel(cfg.whisper_model, device="cpu", compute_type="int8")
print("[bridge] whisper loaded on cpu (compute=int8)", flush=True)
else:
raise