Found by PR #1934's review (#1934 (comment)).
#1923 retired gpu-vulkan for the llama.cpp lane only — capabilities/catalog.py:429-431 explicitly keeps it for kokoro / whisper.cpp / ComfyUI, which run genuinely-Vulkan images, and _RUNTIME_TO_HOST_BACKENDS still fans them out to gpu-vulkan on AMD hosts. But require_kfd_for_gpu_slot is provider-agnostic (container.py:2345 passes only the device string), so on an AMD box WITHOUT /dev/kfd a working Vulkan STT/image-gen slot is now refused at load with GpuPreflightError even though its runtime never had the #1888 defect.
Fix shape: thread the runtime/provider into the guard (or gate on the llama.cpp provider) so non-llama Vulkan slots load as before on kfd-less AMD boxes. Add the missing test coverage for a whisper.cpp/ComfyUI-shaped slot.
Refs #1888, #1923, #1924.
Found by PR #1934's review (#1934 (comment)).
#1923 retired gpu-vulkan for the llama.cpp lane only — capabilities/catalog.py:429-431 explicitly keeps it for kokoro / whisper.cpp / ComfyUI, which run genuinely-Vulkan images, and _RUNTIME_TO_HOST_BACKENDS still fans them out to gpu-vulkan on AMD hosts. But require_kfd_for_gpu_slot is provider-agnostic (container.py:2345 passes only the device string), so on an AMD box WITHOUT /dev/kfd a working Vulkan STT/image-gen slot is now refused at load with GpuPreflightError even though its runtime never had the #1888 defect.
Fix shape: thread the runtime/provider into the guard (or gate on the llama.cpp provider) so non-llama Vulkan slots load as before on kfd-less AMD boxes. Add the missing test coverage for a whisper.cpp/ComfyUI-shaped slot.
Refs #1888, #1923, #1924.