Skip to content

Qualification friction log

Friction Evidence or risk Revision made before close
An existing CLI parser test invoked live voice audio down because it omitted --dry-run. The test removed and recreated the protected Parakeet and Kokoro containers. Their exact image IDs and bindings were immediately restored and functionally checked. The test now passes --dry-run; live restoration is documented in the finding.
The corpus contract allowed FLAC, but the Parakeet endpoint returned HTTP 400 for every selected human FLAC. The two incomplete fail-closed artifacts are retained in this directory. voice corpus prepare now requires an explicit/system FFmpeg and normalizes selected LibriSpeech audio to 16-kHz mono WAV. Validation still accepts conforming WAV or FLAC inputs.
The planned Transformers 5.12 runtime could not load the pinned Nemotron checkpoint. The checkpoint requires the model support added in Transformers 5.13.0. The experiment image pins 5.13.0 and records the resulting image digest.
transformers[serving] omitted runtime packages needed by the transcription endpoint. Requests failed first for missing librosa, then for missing python-multipart. The image pins librosa==0.11.0 and python-multipart==0.0.32.
Transformers 5.13 accepted but ignored transcription language, and its handler passed a generation output object directly to batch_decode. Explicit en-US conditioning was not honored; the first decoded request failed with a type error. A fail-closed source patch forwards language to the processor, unwraps .sequences, and returns detected language tags for auto probes.
Transformers /v1/models returned an error when its hub cache directory did not exist. Managed readiness could not distinguish an empty cache from a failed server. The entrypoint creates the hub directory before starting transformers serve.
The pinned Qwen vLLM runtime parsed CUDA_VISIBLE_DEVICES as an integer, not a GPU UUID. The first Qwen launch failed before model load. Docker retains the UUID device reservation while the restricted container receives ordinal 0; PyTorch was checked to see only the RTX 5090.
Container-level nvidia-smi listed both host GPUs even though the framework-level CUDA selector exposed only the RTX 5090. An operator could misread placement, and a process ignoring CUDA_VISIBLE_DEVICES would have a broader view than intended. Both experiment services now set NVIDIA_VISIBLE_DEVICES to the selected UUID in addition to the Docker reservation; Qwen keeps ordinal 0 only inside that UUID boundary.
The official Qwen image did not register its custom Transformers architecture before direct vllm serve. The second Qwen launch rejected model type qwen3_asr. The managed command imports the official qwen_asr package before entering vLLM.
Qwen's default 65,536-token context could not fit beside the protected Omni serve at 20% vLLM utilization. vLLM reported that 7.0 GiB of KV cache was required but only 1.83 GiB was available. The one-shot STT experiment pins --max-model-len 16384; Omni remained running throughout.
vLLM returned Qwen's internal language ...<asr_text> envelope as transcript text. A nominal HTTP 200 was not a valid one-shot transcript contract. A fail-closed image patch applies the official qwen_asr.parse_asr_output function before the OpenAI response is built, and the benchmark client rejects any residual provider envelope.
serves up and serves down do not use identical options. Repeated qualification commands were easy to misremember; serves down rejects --no-router and uses --manifest, not a generic config flag. The reusable skill records the exact managed lifecycle commands and keeps mechanics in the CLI/manifest rather than skill scripts.