fix(scriberr): diarization works again: HF_TOKEN passthrough, pyannote env torchcodec pin (patch 0003); mirror retention; YaRN stays off

Scriberr: pyannote's diarization models are gated, and Scriberr had no Hugging
Face token, so every diarized job died at the diarize step (WhisperX after a full
CPU transcription). HF_TOKEN now passes through compose; the value is only in the
host .env (vault fv-ml1/hf-token). The separate pyannote env had torchcodec 0.16
(needs torch >=2.11/CUDA 13) beside torch 2.8, so pyannote 4 had no
AudioDecoder. Pinned to 0.7 by hand on the live env; patch 0003 makes it
durable at the next rebuild. WhisperX's adapter defaults to cpu/small/float32,
now documented. Both paths verified on GPU 3 with a real multi-speaker clip.

pbs-nh3: the backups-mirror prune job now keeps the primary's history
(last 3, daily 14, weekly 8, monthly 12, yearly 5). Dry-run: keep 738,
remove 3,194 across 32 groups; first run at the job's 00:00.
This commit is contained in:
vh
2026-10-06 13:20:21 -07:00
parent ef67546b9c
commit 5896a7479c
5 changed files with 56 additions and 0 deletions
@@ -0,0 +1,34 @@
Subject: [PATCH 0003] pyannote env: pin torch/torchaudio 2.8 and torchcodec 0.7
The embedded pyannote env leaves torchcodec unpinned (and torch >=2.5). On fv-ml1
(2026-10-06) uv resolved torch 2.8.0+cu128 with torchcodec 0.16.0, which needs
torch >=2.11 and CUDA 13 (libnvrtc.so.13). torchcodec's import fails, so
pyannote.audio 4 has no AudioDecoder, and every Parakeet+pyannote diarization
fails with "name 'AudioDecoder' is not defined". torchcodec's own compatibility
table pairs 0.7 with torch 2.8. Pin all three together, so a fresh env resolves
the set that was verified: community-1 diarization on GPU, 3 speakers on a 4-min
clip, 11 s.
---
--- a/internal/transcription/adapters/py/pyannote/pyproject.toml
+++ b/internal/transcription/adapters/py/pyannote/pyproject.toml
@@ -4,8 +4,8 @@
description = "Audio diarization using PyAnnote"
requires-python = ">=3.10"
dependencies = [
- "torch>=2.5.0",
- "torchaudio>=2.5.0",
+ "torch==2.8.*",
+ "torchaudio==2.8.*",
"huggingface-hub>=0.28.1",
"pyannote.audio==4.0.2"
]
@@ -18,7 +18,7 @@
[tool.uv]
override-dependencies = [
- "torchcodec ; sys_platform != 'linux' or platform_machine != 'aarch64'"
+ "torchcodec==0.7.* ; sys_platform != 'linux' or platform_machine != 'aarch64'"
]
[tool.uv.sources]
+1
View File
@@ -9,6 +9,7 @@ distinctly tagged image, and proves it before anyone deploys it.
|---|---|---|
| `0001-parakeet-pause-aware-slicer.patch` | upstream `a353078` (HEAD 2026-09-20) | **LIVE on fv-ml1 since 2026-09-30 1211 PT** as `scriberr:local-blackwell-a353078-slicer1`; superseded in production by 0002 on top of it; **no upstream PR (Prime, 2026-10-01)**. Both patches are carried locally only |
| `0002-parakeet-model-path-and-gap-retry.patch` | 0001 | **LIVE on fv-ml1 since 2026-09-30 1602 PT** as `scriberr:local-blackwell-a353078-dropout2` (Prime: "Scriberr gets the basic fix, no surgery for the new toolkit"; v3 stays). Live check: a 20-min file peaked at 5,502 MiB on GPU 3, `retried_gaps: 1`, +29 words against the slicer1 image. Why: `docs/pfi/parakeet-dropout-investigation-2026-09-30.md` |
| `0003-pyannote-env-pin-torchcodec.patch` | 0002 | **NOT in an image yet (2026-10-06).** Pins torch/torchaudio 2.8 and torchcodec 0.7 in the embedded pyannote env pyproject. The live env was fixed by hand the same way (`../README.md` § Diarization), so this only matters when the env is rebuilt or Scriberr re-runs its setup. `git apply --check` passes on a353078+0001+0002. |
Rollback for the live deploy: `SCRIBERR_IMAGE=scriberr:local-blackwell` (the