LocalAI/pkg/huggingface-api/client_test.go
Ettore Di Giacinto c1f923b2bc
Some checks are pending
build backend container images / backend-jobs (moonshine, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-moonshine, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-vllm, 2404) (push) Waiting to run
build backend container images / backend-jobs (ace-step, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-ace-step, 2404) (push) Waiting to run
build backend container images / backend-jobs (ace-step, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-ace-step, 2404) (push) Waiting to run
build backend container images / backend-jobs (ace-step, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-ace-step, 2404) (push) Waiting to run
build backend container images / backend-jobs (ace-step, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-ace-step, 2404) (push) Waiting to run
build backend container images / backend-jobs (ace-step, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-ace-step, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-acestep-cpp, 2204) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (chatterbox, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-chatterbox, 2404) (push) Waiting to run
build backend container images / backend-jobs (chatterbox, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-chatterbox, 2404) (push) Waiting to run
build backend container images / backend-jobs (chatterbox, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-chatterbox, 2404) (push) Waiting to run
build backend container images / backend-jobs (coqui, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-coqui, 2404) (push) Waiting to run
build backend container images / backend-jobs (coqui, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, bigger-runner, false, auto, -gpu-rocm-hipblas-coqui, 2404) (push) Waiting to run
build backend container images / backend-jobs (coqui, ubuntu:24.04, cublas, ./, 12, 9, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-coqui, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-diffusers, 2204) (push) Waiting to run
build backend container images / backend-jobs (diffusers, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-qwen3-tts, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-faster-qwen3-tts, 2204) (push) Waiting to run
build backend container images / backend-jobs (faster-qwen3-tts, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-faster-qwen3-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (acestep-cpp, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan-acestep-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (chatterbox, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-arm64-chatterbox, 2204) (push) Waiting to run
build backend container images / backend-jobs (chatterbox, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-chatterbox, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (diffusers, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-diffusers, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-qwen3-tts, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-faster-qwen3-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-qwen3-tts, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-faster-qwen3-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-faster-whisper, 2204) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, bigger-runner, false, auto, -gpu-rocm-hipblas-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (faster-whisper, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-faster-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-fish-speech, 2204) (push) Waiting to run
build backend container images / backend-jobs (fish-speech, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-fish-speech, 2404) (push) Waiting to run
build backend container images / backend-jobs (ik-llama-cpp, ubuntu:24.04, , ./, , , ./backend/Dockerfile.ik-llama-cpp, linux/amd64, bigger-runner, false, auto, -cpu-ik-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (insightface, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-insightface, 2404) (push) Waiting to run
build backend container images / backend-jobs (insightface, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-insightface, 2404) (push) Waiting to run
build backend container images / backend-jobs (kitten-tts, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -kitten-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (kokoro, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-kokoro, 2204) (push) Waiting to run
build backend container images / backend-jobs (kokoro, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-kokoro, 2404) (push) Waiting to run
build backend container images / backend-jobs (kokoro, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-kokoro, 2404) (push) Waiting to run
build backend container images / backend-jobs (kokoro, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-kokoro, 2404) (push) Waiting to run
build backend container images / backend-jobs (kokoros, ubuntu:24.04, , ./, , , ./backend/Dockerfile.rust, linux/amd64, ubuntu-latest, false, auto, -cpu-kokoros, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.llama-cpp, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.llama-cpp, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-llama-cpp, 2204) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.llama-cpp, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, ubuntu:24.04, , ./, , , ./backend/Dockerfile.llama-cpp, linux/amd64,linux/arm64, bigger-runner, false, auto, -cpu-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.llama-cpp, linux/amd64, bigger-runner, false, auto, -gpu-nvidia-cuda-12-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.llama-cpp, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.llama-cpp, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.llama-cpp, linux/amd64,linux/arm64, bigger-runner, false, auto, -gpu-vulkan-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (kokoro, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-kokoro, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.llama-cpp, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-llama-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (llama-cpp-quantization, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, true, auto, -cpu-llama-cpp-quantization, 2404) (push) Waiting to run
build backend container images / backend-jobs (local-store, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-local-store, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-mlx, 2204) (push) Waiting to run
build backend container images / backend-jobs (mlx, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-mlx, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-mlx, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-mlx, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-mlx, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-audio, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-mlx-audio, 2204) (push) Waiting to run
build backend container images / backend-jobs (mlx-audio, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-mlx-audio, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-audio, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-mlx-audio, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-audio, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-mlx-audio, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-audio, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-mlx-audio, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-distributed, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-mlx-distributed, 2204) (push) Waiting to run
build backend container images / backend-jobs (mlx-distributed, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-mlx-distributed, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-distributed, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-mlx-distributed, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-distributed, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-mlx-distributed, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-distributed, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-mlx-distributed, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-vlm, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-mlx-vlm, 2204) (push) Waiting to run
build backend container images / backend-jobs (mlx-vlm, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-mlx-vlm, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-vlm, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-mlx-vlm, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-vlm, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-mlx-vlm, 2404) (push) Waiting to run
build backend container images / backend-jobs (mlx-vlm, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-mlx-vlm, 2404) (push) Waiting to run
build backend container images / backend-jobs (moonshine, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-moonshine, 2404) (push) Waiting to run
build backend container images / backend-jobs (moonshine, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-moonshine, 2404) (push) Waiting to run
build backend container images / backend-jobs (nemo, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-nemo, 2404) (push) Waiting to run
build backend container images / backend-jobs (nemo, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-nemo, 2404) (push) Waiting to run
build backend container images / backend-jobs (nemo, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-nemo, 2404) (push) Waiting to run
build backend container images / backend-jobs (nemo, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-nemo, 2404) (push) Waiting to run
build backend container images / backend-jobs (nemo, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-nemo, 2404) (push) Waiting to run
build backend container images / backend-jobs (neutts, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-neutts, 2404) (push) Waiting to run
build backend container images / backend-jobs (neutts, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-neutts, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-pocket-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-pocket-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-pocket-tts, 2404) (push) Waiting to run
Tests extras backends / tests-qwen-tts (push) Blocked by required conditions
build backend container images / backend-jobs (neutts, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-neutts, 2404) (push) Waiting to run
build backend container images / backend-jobs (opus, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-opus, 2404) (push) Waiting to run
build backend container images / backend-jobs (outetts, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-outetts, 2404) (push) Waiting to run
build backend container images / backend-jobs (outetts, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-outetts, 2404) (push) Waiting to run
build backend container images / backend-jobs (piper, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -piper, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-pocket-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-pocket-tts, 2204) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-pocket-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-qwen-tts, 2204) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (pocket-tts, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-pocket-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-qwen-asr, 2204) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-asr, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-qwen-asr, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen-tts, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-qwen-tts, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (rerankers, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-rerankers, 2404) (push) Waiting to run
build backend container images / backend-jobs (rerankers, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-rerankers, 2404) (push) Waiting to run
build backend container images / backend-jobs (rfdetr, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-rfdetr, 2404) (push) Waiting to run
build backend container images / backend-jobs (rfdetr, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-arm64-rfdetr, 2204) (push) Waiting to run
build backend container images / backend-jobs (rfdetr, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-rfdetr, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sglang, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-sglang, 2404) (push) Waiting to run
build backend container images / backend-jobs (sglang, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-sglang, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-qwen3-tts-cpp, 2204) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, rocm/dev-ubuntu-24.04:6.4.4, hipblas, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (qwen3-tts-cpp, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-qwen3-tts-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (rerankers, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-rerankers, 2404) (push) Waiting to run
build backend container images / backend-jobs (rerankers, ubuntu:24.04, cublas, ./, 12, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-rerankers, 2404) (push) Waiting to run
build backend container images / backend-jobs (rfdetr, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-rfdetr, 2404) (push) Waiting to run
build backend container images / backend-jobs (rfdetr, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-rfdetr, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-sam3-cpp, 2204) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -cpu-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sam3-cpp, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-sam3-cpp, 2404) (push) Waiting to run
build backend container images / backend-jobs (sglang, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-sglang, 2404) (push) Waiting to run
build backend container images / backend-jobs (sglang, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-nvidia-cuda-12-sglang, 2404) (push) Waiting to run
build backend container images / backend-jobs (silero-vad, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-silero-vad, 2404) (push) Waiting to run
build backend container images / backend-jobs (speaker-recognition, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-speaker-recognition, 2404) (push) Waiting to run
build backend container images / backend-jobs (speaker-recognition, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-speaker-recognition, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-stablediffusion-ggml, 2204) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (tinygrad, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -tinygrad, 2404) (push) Waiting to run
build backend container images / backend-jobs (transformers, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-transformers, 2404) (push) Waiting to run
build backend container images / backend-jobs (transformers, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-transformers, 2404) (push) Waiting to run
build backend container images / backend-jobs (transformers, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-transformers, 2404) (push) Waiting to run
build backend container images / backend-jobs (transformers, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-transformers, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.turboquant, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.turboquant, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.turboquant, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-turboquant, 2204) (push) Waiting to run
build backend container images / backend-jobs (turboquant, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.turboquant, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-turboquant, 2404) (push) Waiting to run
Tests extras backends / tests-qwen-asr (push) Blocked by required conditions
build backend container images / backend-jobs (stablediffusion-ggml, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (stablediffusion-ggml, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -cpu-stablediffusion-ggml, 2404) (push) Waiting to run
build backend container images / backend-jobs (trl, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-trl, 2404) (push) Waiting to run
build backend container images / backend-jobs (trl, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-trl, 2404) (push) Waiting to run
build backend container images / backend-jobs (trl, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-trl, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.turboquant, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.turboquant, linux/amd64,linux/arm64, bigger-runner, false, auto, -gpu-vulkan-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-vibevoice, 2204) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-vllm, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-nvidia-cuda-12-vllm, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm-omni, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-nvidia-cuda-12-vllm-omni, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxcpm, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-voxcpm, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxtral, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-voxtral, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f16, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f16-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, sycl_f32, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-intel-sycl-f32-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, ./, 12, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-whisper, 2204) (push) Waiting to run
build backend container images / backend-jobs (turboquant, ubuntu:24.04, , ./, , , ./backend/Dockerfile.turboquant, linux/amd64,linux/arm64, bigger-runner, false, auto, -cpu-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.turboquant, linux/amd64, bigger-runner, false, auto, -gpu-nvidia-cuda-12-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (turboquant, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.turboquant, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-turboquant, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vibevoice, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-vibevoice, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-vllm, 2404) (push) Waiting to run
build backend container images / backend-jobs (vllm-omni, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-vllm-omni, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxcpm, intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-intel-voxcpm, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxcpm, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.python, linux/amd64, arc-runner-set, false, auto, -gpu-rocm-hipblas-voxcpm, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxcpm, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -cpu-voxcpm, 2404) (push) Waiting to run
build backend container images / backend-jobs (voxcpm, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-voxcpm, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, ubuntu:24.04, vulkan, ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisperx, nvcr.io/nvidia/l4t-jetpack:r36.4.0, l4t, ./, 12, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-whisperx, 2204) (push) Waiting to run
build backend container images / backend-jobs (whisperx, ubuntu:24.04, , ./, , , ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, true, auto, -cpu-whisperx, 2404) (push) Waiting to run
build backend container images / backend-jobs-darwin (kitten-tts, mps, -metal-darwin-arm64-kitten-tts) (push) Waiting to run
build backend container images / backend-jobs-darwin (kokoro, mps, -metal-darwin-arm64-kokoro) (push) Waiting to run
build backend container images / backend-jobs-darwin (mlx, mps, -metal-darwin-arm64-mlx) (push) Waiting to run
build backend container images / backend-jobs (whisper, rocm/dev-ubuntu-24.04:7.2.1, hipblas, ./, , , ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-rocm-hipblas-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, ubuntu:24.04, , ./, , , ./backend/Dockerfile.golang, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -cpu-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisper, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.golang, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-whisper, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisperx, ubuntu:24.04, cublas, ./, 12, 8, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12-whisperx, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisperx, ubuntu:24.04, cublas, ./, 13, 0, ./backend/Dockerfile.python, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13-whisperx, 2404) (push) Waiting to run
build backend container images / backend-jobs (whisperx, ubuntu:24.04, l4t, ./, 13, 0, ./backend/Dockerfile.python, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-cuda-13-arm64-whisperx, 2404) (push) Waiting to run
build backend container images / backend-jobs-darwin (ace-step, mps, -metal-darwin-arm64-ace-step) (push) Waiting to run
build backend container images / backend-jobs-darwin (acestep-cpp, metal, go, -metal-darwin-arm64-acestep-cpp) (push) Waiting to run
build backend container images / backend-jobs-darwin (chatterbox, mps, -metal-darwin-arm64-chatterbox) (push) Waiting to run
build backend container images / backend-jobs-darwin (coqui, mps, -metal-darwin-arm64-coqui) (push) Waiting to run
build backend container images / backend-jobs-darwin (diffusers, mps, -metal-darwin-arm64-diffusers) (push) Waiting to run
build backend container images / backend-jobs-darwin (faster-whisper, mps, -metal-darwin-arm64-faster-whisper) (push) Waiting to run
build backend container images / backend-jobs-darwin (fish-speech, mps, -metal-darwin-arm64-fish-speech) (push) Waiting to run
build backend container images / backend-jobs-darwin (llama-cpp-quantization, mps, -metal-darwin-arm64-llama-cpp-quantization) (push) Waiting to run
build backend container images / backend-jobs-darwin (local-store, metal, go, -metal-darwin-arm64-local-store) (push) Waiting to run
build backend container images / backend-jobs-darwin (qwen-tts, mps, -metal-darwin-arm64-qwen-tts) (push) Waiting to run
build backend container images / backend-jobs-darwin (qwen3-tts-cpp, metal, go, -metal-darwin-arm64-qwen3-tts-cpp) (push) Waiting to run
build backend container images / backend-jobs-darwin (rerankers, mps, -metal-darwin-arm64-rerankers) (push) Waiting to run
build backend container images / backend-jobs-darwin (rfdetr, mps, -metal-darwin-arm64-rfdetr) (push) Waiting to run
build backend container images / backend-jobs-darwin (mlx-audio, mps, -metal-darwin-arm64-mlx-audio) (push) Waiting to run
build backend container images / backend-jobs-darwin (mlx-distributed, mps, -metal-darwin-arm64-mlx-distributed) (push) Waiting to run
build backend container images / backend-jobs-darwin (mlx-vlm, mps, -metal-darwin-arm64-mlx-vlm) (push) Waiting to run
build backend container images / backend-jobs-darwin (moonshine, mps, -metal-darwin-arm64-moonshine) (push) Waiting to run
build backend container images / backend-jobs-darwin (nemo, mps, -metal-darwin-arm64-nemo) (push) Waiting to run
build backend container images / backend-jobs-darwin (opus, metal, go, -metal-darwin-arm64-opus) (push) Waiting to run
build backend container images / backend-jobs-darwin (piper, metal, go, -metal-darwin-arm64-piper) (push) Waiting to run
build backend container images / backend-jobs-darwin (pocket-tts, mps, -metal-darwin-arm64-pocket-tts) (push) Waiting to run
build backend container images / backend-jobs-darwin (qwen-asr, mps, -metal-darwin-arm64-qwen-asr) (push) Waiting to run
build backend container images / backend-jobs-darwin (silero-vad, metal, go, -metal-darwin-arm64-silero-vad) (push) Waiting to run
build backend container images / backend-jobs-darwin (stablediffusion-ggml, metal, go, -metal-darwin-arm64-stablediffusion-ggml) (push) Waiting to run
build backend container images / backend-jobs-darwin (transformers, mps, -metal-darwin-arm64-transformers) (push) Waiting to run
build backend container images / backend-jobs-darwin (whisper, metal, go, -metal-darwin-arm64-whisper) (push) Waiting to run
build backend container images / backend-jobs-darwin (whisperx, mps, -metal-darwin-arm64-whisperx) (push) Waiting to run
build container images / core-image-build (intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, intel, ubuntu:24.04, --jobs=3 --output-sync=target, linux/amd64, ubuntu-latest, auto, -gpu-intel, noble, 2404) (push) Waiting to run
build container images / hipblas-jobs (rocm/dev-ubuntu-24.04:7.2.1, hipblas, ubuntu:24.04, --jobs=3 --output-sync=target, linux/amd64, ubuntu-latest, auto, -gpu-hipblas, noble, 2404) (push) Waiting to run
build container images / gh-runner (nvcr.io/nvidia/l4t-jetpack:r36.4.0, cublas, 12, 0, --jobs=4 --output-sync=target, linux/arm64, ubuntu-24.04-arm, true, auto, -nvidia-l4t-arm64, jammy, 2204) (push) Waiting to run
build container images / gh-runner (ubuntu:24.04, cublas, 13, 0, --jobs=4 --output-sync=target, linux/arm64, ubuntu-24.04-arm, false, auto, -nvidia-l4t-arm64-cuda-13, noble, 2404) (push) Waiting to run
Security Scan / tests (push) Waiting to run
build backend container images / backend-jobs-darwin (vibevoice, mps, -metal-darwin-arm64-vibevoice) (push) Waiting to run
build backend container images / backend-jobs-darwin (voxcpm, mps, -metal-darwin-arm64-voxcpm) (push) Waiting to run
build backend container images / backend-jobs-darwin (voxtral, metal, go, -metal-darwin-arm64-voxtral) (push) Waiting to run
build backend container images / llama-cpp-darwin (1.25.x) (push) Waiting to run
build backend container images / llama-cpp-darwin-publish (push) Blocked by required conditions
Build test / build-test (push) Waiting to run
Build test / launcher-build-darwin (push) Waiting to run
Build test / launcher-build-linux (push) Waiting to run
Explorer deployment / build-linux (push) Waiting to run
GPU tests / ubuntu-latest (1.21.x) (push) Waiting to run
generate and publish intel docker caches / generate_caches (intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04, linux/amd64, arc-runner-set) (push) Waiting to run
Deploy docs to GitHub Pages / build (push) Waiting to run
Deploy docs to GitHub Pages / deploy (push) Blocked by required conditions
build container images / core-image-build (ubuntu:22.04, cublas, 13, 0, --jobs=4 --output-sync=target, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-13, noble, 2404) (push) Waiting to run
build container images / core-image-build (ubuntu:24.04, , --jobs=4 --output-sync=target, linux/amd64,linux/arm64, ubuntu-latest, false, auto, , noble, 2404) (push) Waiting to run
build container images / core-image-build (ubuntu:24.04, cublas, 12, 8, --jobs=4 --output-sync=target, linux/amd64, ubuntu-latest, false, auto, -gpu-nvidia-cuda-12, noble, 2404) (push) Waiting to run
build container images / core-image-build (ubuntu:24.04, vulkan, --jobs=4 --output-sync=target, linux/amd64,linux/arm64, ubuntu-latest, false, auto, -gpu-vulkan, noble, 2404) (push) Waiting to run
Tests extras backends / tests-turboquant-grpc (push) Blocked by required conditions
Tests extras backends / detect-changes (push) Waiting to run
Tests extras backends / tests-transformers (push) Blocked by required conditions
Tests extras backends / tests-rerankers (push) Blocked by required conditions
Tests extras backends / tests-diffusers (push) Blocked by required conditions
Tests extras backends / tests-coqui (push) Blocked by required conditions
Tests extras backends / tests-moonshine (push) Blocked by required conditions
Tests extras backends / tests-pocket-tts (push) Blocked by required conditions
Tests extras backends / tests-nemo (push) Blocked by required conditions
Tests extras backends / tests-voxcpm (push) Blocked by required conditions
Tests extras backends / tests-llama-cpp-quantization (push) Blocked by required conditions
Tests extras backends / tests-qwen3-tts-cpp (push) Blocked by required conditions
Tests extras backends / tests-voxtral (push) Blocked by required conditions
Tests extras backends / tests-kokoros (push) Blocked by required conditions
Tests extras backends / tests-insightface-grpc (push) Blocked by required conditions
Tests extras backends / tests-speaker-recognition-grpc (push) Blocked by required conditions
tests / tests-linux (1.26.x) (push) Waiting to run
tests / tests-e2e-container (push) Waiting to run
E2E Backend Tests / tests-e2e-backend (1.25.x) (push) Waiting to run
UI E2E Tests / tests-ui-e2e (1.26.x) (push) Waiting to run
Tests extras backends / tests-llama-cpp-grpc (push) Blocked by required conditions
Tests extras backends / tests-llama-cpp-grpc-transcription (push) Blocked by required conditions
Tests extras backends / tests-ik-llama-cpp-grpc (push) Blocked by required conditions
Tests extras backends / tests-acestep-cpp (push) Blocked by required conditions
tests / tests-apple (1.26.x) (push) Waiting to run
fix(importer): emit all shards for multi-part GGUF models (#9513)
The llama-cpp HuggingFace importer iterated files one at a time and
kept overwriting `lastGGUFFile`, so sharded repos such as
`unsloth/Kimi-K2.6-GGUF` (14 `Q8_K_XL` parts) produced a gallery entry
pointing only at the final shard — useless to llama.cpp's split loader,
which needs shard 1 to discover the set.

Group shards up front via new helpers in `pkg/huggingface-api`
(`SplitShardSuffix`, `ShardGroup`, `GroupShards`). The llama-cpp
importer now picks a group (preferred quant, then last-group fallback)
and emits every shard, with `Model:` pointing at shard 1.
`FindPreferredModelFile` returns shard 1 of the first matching group so
the gallery agent's preview stays coherent for sharded repos.

Adds unit coverage for the HuggingFace branch of the importer (which
had none), plus shard-detection tests in the hfapi package.

Assisted-by: Claude:Opus-4.7 [Read] [Edit] [Bash]
2026-04-23 15:00:02 +02:00

957 lines
29 KiB
Go

package hfapi_test
import (
"fmt"
"net/http"
"net/http/httptest"
"strings"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
hfapi "github.com/mudler/LocalAI/pkg/huggingface-api"
)
var _ = Describe("HuggingFace API Client", func() {
var (
client *hfapi.Client
server *httptest.Server
)
BeforeEach(func() {
client = hfapi.NewClient()
})
AfterEach(func() {
if server != nil {
server.Close()
}
})
Context("when creating a new client", func() {
It("should initialize with correct base URL", func() {
Expect(client).ToNot(BeNil())
Expect(client.BaseURL()).To(Equal("https://huggingface.co/api/models"))
})
})
Context("when searching for models", func() {
BeforeEach(func() {
// Mock response data
mockResponse := `[
{
"modelId": "test-model-1",
"author": "test-author",
"downloads": 1000,
"lastModified": "2024-01-01T00:00:00.000Z",
"pipelineTag": "text-generation",
"private": false,
"tags": ["gguf", "llama"],
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z",
"sha": "abc123",
"config": {},
"model_index": "test-index",
"library_name": "transformers",
"mask_token": null,
"tokenizer_class": "LlamaTokenizer"
},
{
"modelId": "test-model-2",
"author": "test-author-2",
"downloads": 2000,
"lastModified": "2024-01-02T00:00:00.000Z",
"pipelineTag": "text-generation",
"private": false,
"tags": ["gguf", "mistral"],
"createdAt": "2024-01-02T00:00:00.000Z",
"updatedAt": "2024-01-02T00:00:00.000Z",
"sha": "def456",
"config": {},
"model_index": "test-index-2",
"library_name": "transformers",
"mask_token": null,
"tokenizer_class": "MistralTokenizer"
}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Verify request parameters
Expect(r.URL.Query().Get("sort")).To(Equal("lastModified"))
Expect(r.URL.Query().Get("direction")).To(Equal("-1"))
Expect(r.URL.Query().Get("limit")).To(Equal("30"))
Expect(r.URL.Query().Get("search")).To(Equal("GGUF"))
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockResponse))
}))
// Override the client's base URL to use our mock server
client.SetBaseURL(server.URL)
})
It("should successfully search for models", func() {
params := hfapi.SearchParams{
Sort: "lastModified",
Direction: -1,
Limit: 30,
Search: "GGUF",
}
models, err := client.SearchModels(params)
Expect(err).ToNot(HaveOccurred())
Expect(models).To(HaveLen(2))
// Verify first model
Expect(models[0].ModelID).To(Equal("test-model-1"))
Expect(models[0].Author).To(Equal("test-author"))
Expect(models[0].Downloads).To(Equal(1000))
Expect(models[0].PipelineTag).To(Equal("text-generation"))
Expect(models[0].Private).To(BeFalse())
Expect(models[0].Tags).To(ContainElements("gguf", "llama"))
// Verify second model
Expect(models[1].ModelID).To(Equal("test-model-2"))
Expect(models[1].Author).To(Equal("test-author-2"))
Expect(models[1].Downloads).To(Equal(2000))
Expect(models[1].Tags).To(ContainElements("gguf", "mistral"))
})
It("should handle empty search results", func() {
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte("[]"))
}))
client.SetBaseURL(server.URL)
params := hfapi.SearchParams{
Sort: "lastModified",
Direction: -1,
Limit: 30,
Search: "nonexistent",
}
models, err := client.SearchModels(params)
Expect(err).ToNot(HaveOccurred())
Expect(models).To(HaveLen(0))
})
It("should handle HTTP errors", func() {
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("Internal Server Error"))
}))
client.SetBaseURL(server.URL)
params := hfapi.SearchParams{
Sort: "lastModified",
Direction: -1,
Limit: 30,
Search: "GGUF",
}
models, err := client.SearchModels(params)
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("Status code: 500"))
Expect(models).To(BeNil())
})
It("should handle malformed JSON response", func() {
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte("invalid json"))
}))
client.SetBaseURL(server.URL)
params := hfapi.SearchParams{
Sort: "lastModified",
Direction: -1,
Limit: 30,
Search: "GGUF",
}
models, err := client.SearchModels(params)
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("failed to parse JSON response"))
Expect(models).To(BeNil())
})
})
Context("when getting latest GGUF models", func() {
BeforeEach(func() {
mockResponse := `[
{
"modelId": "latest-gguf-model",
"author": "gguf-author",
"downloads": 5000,
"lastModified": "2024-01-03T00:00:00.000Z",
"pipelineTag": "text-generation",
"private": false,
"tags": ["gguf", "latest"],
"createdAt": "2024-01-03T00:00:00.000Z",
"updatedAt": "2024-01-03T00:00:00.000Z",
"sha": "latest123",
"config": {},
"model_index": "latest-index",
"library_name": "transformers",
"mask_token": null,
"tokenizer_class": "LlamaTokenizer"
}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Verify the search parameters are correct for GGUF search
Expect(r.URL.Query().Get("search")).To(Equal("GGUF"))
Expect(r.URL.Query().Get("sort")).To(Equal("lastModified"))
Expect(r.URL.Query().Get("direction")).To(Equal("-1"))
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockResponse))
}))
client.SetBaseURL(server.URL)
})
It("should fetch latest GGUF models with correct parameters", func() {
models, err := client.GetLatest("GGUF", 10)
Expect(err).ToNot(HaveOccurred())
Expect(models).To(HaveLen(1))
Expect(models[0].ModelID).To(Equal("latest-gguf-model"))
Expect(models[0].Author).To(Equal("gguf-author"))
Expect(models[0].Downloads).To(Equal(5000))
Expect(models[0].Tags).To(ContainElements("gguf", "latest"))
})
It("should use custom search term", func() {
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
Expect(r.URL.Query().Get("search")).To(Equal("custom-search"))
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte("[]"))
}))
client.SetBaseURL(server.URL)
models, err := client.GetLatest("custom-search", 5)
Expect(err).ToNot(HaveOccurred())
Expect(models).To(HaveLen(0))
})
})
Context("when handling network errors", func() {
It("should handle connection failures gracefully", func() {
// Use an invalid URL to simulate connection failure
client.SetBaseURL("http://invalid-url-that-does-not-exist")
params := hfapi.SearchParams{
Sort: "lastModified",
Direction: -1,
Limit: 30,
Search: "GGUF",
}
models, err := client.SearchModels(params)
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("failed to make request"))
Expect(models).To(BeNil())
})
})
Context("when getting file SHA on remote model", func() {
It("should get file SHA successfully", func() {
sha, err := client.GetFileSHA(
"mudler/LocalAI-functioncall-qwen2.5-7b-v0.5-Q4_K_M-GGUF", "localai-functioncall-qwen2.5-7b-v0.5-q4_k_m.gguf")
Expect(err).ToNot(HaveOccurred())
Expect(sha).To(Equal("4e7b7fe1d54b881f1ef90799219dc6cc285d29db24f559c8998d1addb35713d4"))
})
})
Context("when listing files", func() {
BeforeEach(func() {
mockFilesResponse := `[
{
"type": "file",
"path": "model-Q4_K_M.gguf",
"size": 1000000,
"oid": "abc123",
"lfs": {
"oid": "def456789",
"size": 1000000,
"pointerSize": 135
}
},
{
"type": "file",
"path": "README.md",
"size": 5000,
"oid": "readme123"
},
{
"type": "file",
"path": "config.json",
"size": 1000,
"oid": "config123"
}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.URL.Path, "/tree/main") {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFilesResponse))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
})
It("should list files successfully", func() {
files, err := client.ListFiles("test/model")
Expect(err).ToNot(HaveOccurred())
Expect(files).To(HaveLen(3))
Expect(files[0].Path).To(Equal("model-Q4_K_M.gguf"))
Expect(files[0].Size).To(Equal(int64(1000000)))
Expect(files[0].LFS).ToNot(BeNil())
Expect(files[0].LFS.Oid).To(Equal("def456789"))
Expect(files[1].Path).To(Equal("README.md"))
Expect(files[1].Size).To(Equal(int64(5000)))
})
})
Context("when listing files with subfolders", func() {
BeforeEach(func() {
// Mock response for root directory with files and a subfolder
mockRootResponse := `[
{
"type": "file",
"path": "README.md",
"size": 5000,
"oid": "readme123"
},
{
"type": "directory",
"path": "subfolder",
"size": 0,
"oid": "dir123"
},
{
"type": "file",
"path": "config.json",
"size": 1000,
"oid": "config123"
}
]`
// Mock response for subfolder directory
mockSubfolderResponse := `[
{
"type": "file",
"path": "subfolder/file.bin",
"size": 2000000,
"oid": "filebin123",
"lfs": {
"oid": "filebin456",
"size": 2000000,
"pointerSize": 135
}
},
{
"type": "directory",
"path": "nested",
"size": 0,
"oid": "nesteddir123"
}
]`
// Mock response for nested subfolder
mockNestedResponse := `[
{
"type": "file",
"path": "subfolder/nested/nested_file.gguf",
"size": 5000000,
"oid": "nested123",
"lfs": {
"oid": "nested456",
"size": 5000000,
"pointerSize": 135
}
}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
urlPath := r.URL.Path
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
if strings.Contains(urlPath, "/tree/main/subfolder/nested") {
w.Write([]byte(mockNestedResponse))
} else if strings.Contains(urlPath, "/tree/main/subfolder") {
w.Write([]byte(mockSubfolderResponse))
} else if strings.Contains(urlPath, "/tree/main") {
w.Write([]byte(mockRootResponse))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
})
It("should recursively list all files including those in subfolders", func() {
files, err := client.ListFiles("test/model")
Expect(err).ToNot(HaveOccurred())
Expect(files).To(HaveLen(4))
// Verify root level files
readmeFile := findFileByPath(files, "README.md")
Expect(readmeFile).ToNot(BeNil())
Expect(readmeFile.Size).To(Equal(int64(5000)))
Expect(readmeFile.Oid).To(Equal("readme123"))
configFile := findFileByPath(files, "config.json")
Expect(configFile).ToNot(BeNil())
Expect(configFile.Size).To(Equal(int64(1000)))
Expect(configFile.Oid).To(Equal("config123"))
// Verify subfolder file with relative path
subfolderFile := findFileByPath(files, "subfolder/file.bin")
Expect(subfolderFile).ToNot(BeNil())
Expect(subfolderFile.Size).To(Equal(int64(2000000)))
Expect(subfolderFile.LFS).ToNot(BeNil())
Expect(subfolderFile.LFS.Oid).To(Equal("filebin456"))
// Verify nested subfolder file
nestedFile := findFileByPath(files, "subfolder/nested/nested_file.gguf")
Expect(nestedFile).ToNot(BeNil())
Expect(nestedFile.Size).To(Equal(int64(5000000)))
Expect(nestedFile.LFS).ToNot(BeNil())
Expect(nestedFile.LFS.Oid).To(Equal("nested456"))
})
It("should handle files with correct relative paths", func() {
files, err := client.ListFiles("test/model")
Expect(err).ToNot(HaveOccurred())
// Check that all paths are relative and correct
paths := make([]string, len(files))
for i, file := range files {
paths[i] = file.Path
}
Expect(paths).To(ContainElements(
"README.md",
"config.json",
"subfolder/file.bin",
"subfolder/nested/nested_file.gguf",
))
})
})
Context("when getting file SHA", func() {
BeforeEach(func() {
mockFilesResponse := `[
{
"type": "file",
"path": "model-Q4_K_M.gguf",
"size": 1000000,
"oid": "abc123",
"lfs": {
"oid": "def456789",
"size": 1000000,
"pointerSize": 135
}
}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.URL.Path, "/tree/main") {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFilesResponse))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
})
It("should get file SHA successfully", func() {
sha, err := client.GetFileSHA("test/model", "model-Q4_K_M.gguf")
Expect(err).ToNot(HaveOccurred())
Expect(sha).To(Equal("def456789"))
})
It("should handle missing SHA gracefully", func() {
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.URL.Path, "/tree/main") {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(`[
{
"type": "file",
"path": "file.txt",
"size": 100,
"oid": "file123"
}
]`))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
sha, err := client.GetFileSHA("test/model", "file.txt")
Expect(err).ToNot(HaveOccurred())
// When there's no LFS, it should return the OID
Expect(sha).To(Equal("file123"))
})
})
Context("when getting model details", func() {
BeforeEach(func() {
mockFilesResponse := `[
{
"type": "file",
"path": "model-Q4_K_M.gguf",
"size": 1000000,
"oid": "abc123",
"lfs": {
"oid": "sha256:def456",
"size": 1000000,
"pointer": "version https://git-lfs.github.com/spec/v1",
"sha256": "def456789"
}
},
{
"type": "file",
"path": "README.md",
"size": 5000,
"oid": "readme123"
}
]`
mockFileInfoResponse := `{
"path": "model-Q4_K_M.gguf",
"size": 1000000,
"oid": "abc123",
"lfs": {
"oid": "sha256:def456",
"size": 1000000,
"pointer": "version https://git-lfs.github.com/spec/v1",
"sha256": "def456789"
}
}`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.URL.Path, "/tree/main") {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFilesResponse))
} else if strings.Contains(r.URL.Path, "/paths-info") {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFileInfoResponse))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
})
It("should get model details successfully", func() {
details, err := client.GetModelDetails("test/model")
Expect(err).ToNot(HaveOccurred())
Expect(details.ModelID).To(Equal("test/model"))
Expect(details.Author).To(Equal("test"))
Expect(details.Files).To(HaveLen(2))
Expect(details.ReadmeFile).ToNot(BeNil())
Expect(details.ReadmeFile.Path).To(Equal("README.md"))
Expect(details.ReadmeFile.IsReadme).To(BeTrue())
// Verify URLs are set for all files
baseURL := strings.TrimSuffix(server.URL, "/api/models")
for _, file := range details.Files {
expectedURL := fmt.Sprintf("%s/test/model/resolve/main/%s", baseURL, file.Path)
Expect(file.URL).To(Equal(expectedURL))
}
})
})
Context("when getting README content", func() {
BeforeEach(func() {
mockReadmeContent := "# Test Model\n\nThis is a test model for demonstration purposes."
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.Contains(r.URL.Path, "/raw/main/") {
w.Header().Set("Content-Type", "text/plain")
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockReadmeContent))
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL)
})
It("should get README content successfully", func() {
content, err := client.GetReadmeContent("test/model", "README.md")
Expect(err).ToNot(HaveOccurred())
Expect(content).To(Equal("# Test Model\n\nThis is a test model for demonstration purposes."))
})
})
Context("when filtering files", func() {
It("should filter files by quantization", func() {
files := []hfapi.ModelFile{
{Path: "model-Q4_K_M.gguf"},
{Path: "model-Q3_K_M.gguf"},
{Path: "README.md", IsReadme: true},
}
filtered := hfapi.FilterFilesByQuantization(files, "Q4_K_M")
Expect(filtered).To(HaveLen(1))
Expect(filtered[0].Path).To(Equal("model-Q4_K_M.gguf"))
})
It("should find preferred model file", func() {
files := []hfapi.ModelFile{
{Path: "model-Q3_K_M.gguf"},
{Path: "model-Q4_K_M.gguf"},
{Path: "README.md", IsReadme: true},
}
preferences := []string{"Q4_K_M", "Q3_K_M"}
preferred := hfapi.FindPreferredModelFile(files, preferences)
Expect(preferred).ToNot(BeNil())
Expect(preferred.Path).To(Equal("model-Q4_K_M.gguf"))
Expect(preferred.IsReadme).To(BeFalse())
})
It("should return nil if no preferred file found", func() {
files := []hfapi.ModelFile{
{Path: "model-Q2_K.gguf"},
{Path: "README.md", IsReadme: true},
}
preferences := []string{"Q4_K_M", "Q3_K_M"}
preferred := hfapi.FindPreferredModelFile(files, preferences)
Expect(preferred).To(BeNil())
})
It("should return shard 1 when the preferred quant is multi-part", func() {
// Regression coverage for PR #9510: an unsloth-style sharded
// GGUF repo listed shards in mixed order — the old implementation
// returned whichever shard happened to come first in the slice.
// We now always return shard 1 so llama.cpp can discover the set.
files := []hfapi.ModelFile{
{Path: "Kimi-K2.6-UD-Q8_K_XL-00003-of-00014.gguf"},
{Path: "Kimi-K2.6-UD-Q8_K_XL-00001-of-00014.gguf"},
{Path: "Kimi-K2.6-UD-Q8_K_XL-00002-of-00014.gguf"},
{Path: "README.md", IsReadme: true},
}
preferred := hfapi.FindPreferredModelFile(files, []string{"Q8_K_XL"})
Expect(preferred).ToNot(BeNil())
Expect(preferred.Path).To(Equal("Kimi-K2.6-UD-Q8_K_XL-00001-of-00014.gguf"))
})
It("should honour priority order for sharded repos", func() {
// Two shard sets live in the repo (Q4_K_M and Q8_0). Callers
// pass a priority list; the first preference that has a matching
// group wins, and its shard 1 is returned.
files := []hfapi.ModelFile{
{Path: "model-Q8_0-00001-of-00002.gguf"},
{Path: "model-Q8_0-00002-of-00002.gguf"},
{Path: "model-Q4_K_M-00001-of-00002.gguf"},
{Path: "model-Q4_K_M-00002-of-00002.gguf"},
}
preferred := hfapi.FindPreferredModelFile(files, []string{"Q4_K_M", "Q8_0"})
Expect(preferred).ToNot(BeNil())
Expect(preferred.Path).To(Equal("model-Q4_K_M-00001-of-00002.gguf"))
})
})
Context("shard grouping", func() {
DescribeTable("SplitShardSuffix",
func(name, expectedBase string, expectedIdx, expectedTotal int, expectedOK bool) {
base, idx, total, ok := hfapi.SplitShardSuffix(name)
Expect(ok).To(Equal(expectedOK))
Expect(base).To(Equal(expectedBase))
Expect(idx).To(Equal(expectedIdx))
Expect(total).To(Equal(expectedTotal))
},
Entry("5-digit zero-padded (canonical)",
"Kimi-K2.6-UD-Q8_K_XL-00001-of-00014.gguf",
"Kimi-K2.6-UD-Q8_K_XL.gguf", 1, 14, true),
Entry("5-digit, last shard",
"Kimi-K2.6-UD-Q8_K_XL-00014-of-00014.gguf",
"Kimi-K2.6-UD-Q8_K_XL.gguf", 14, 14, true),
Entry("2-digit width",
"model-01-of-03.gguf",
"model.gguf", 1, 3, true),
Entry("mixed-case extension",
"model-00001-of-00002.GGUF",
"model.gguf", 1, 2, true),
Entry("single-file model returns ok=false",
"model-Q4_K_M.gguf", "", 0, 0, false),
Entry("mmproj is not a shard",
"mmproj-F16.gguf", "", 0, 0, false),
Entry("non-gguf extension is not a shard",
"model-00001-of-00002.bin", "", 0, 0, false),
Entry("naked suffix without leading dash is not matched",
"00001-of-00002.gguf", "", 0, 0, false),
// Guard against over-greedy matching: the pattern looks only at
// the suffix, so numbers earlier in the name must be ignored.
Entry("digits earlier in the name don't confuse the match",
"model-v2-Q4_K_M-00003-of-00005.gguf",
"model-v2-Q4_K_M.gguf", 3, 5, true),
)
It("groups sharded GGUF files by base and sorts by shard index", func() {
// Feed shards in unsorted order and interleaved with other
// files to exercise both the grouping and the sort.
files := []hfapi.ModelFile{
{Path: "Kimi-K2.6-UD-Q8_K_XL-00014-of-00014.gguf"},
{Path: "mmproj-F32.gguf"},
{Path: "Kimi-K2.6-UD-Q8_K_XL-00001-of-00014.gguf"},
{Path: "Kimi-K2.6-UD-Q8_K_XL-00002-of-00014.gguf"},
}
groups := hfapi.GroupShards(files)
Expect(groups).To(HaveLen(2))
// First group: the sharded Kimi set — first appearance was the
// 14-of-14 shard, so this group leads.
Expect(groups[0].Sharded).To(BeTrue())
Expect(groups[0].Base).To(Equal("Kimi-K2.6-UD-Q8_K_XL.gguf"))
Expect(groups[0].Total).To(Equal(14))
Expect(groups[0].Files).To(HaveLen(3))
Expect(groups[0].Files[0].Path).To(Equal("Kimi-K2.6-UD-Q8_K_XL-00001-of-00014.gguf"))
Expect(groups[0].Files[1].Path).To(Equal("Kimi-K2.6-UD-Q8_K_XL-00002-of-00014.gguf"))
Expect(groups[0].Files[2].Path).To(Equal("Kimi-K2.6-UD-Q8_K_XL-00014-of-00014.gguf"))
// Second group: the mmproj singleton.
Expect(groups[1].Sharded).To(BeFalse())
Expect(groups[1].Base).To(Equal("mmproj-F32.gguf"))
Expect(groups[1].Files).To(HaveLen(1))
})
It("preserves non-shard files as one-entry groups", func() {
files := []hfapi.ModelFile{
{Path: "model-Q4_K_M.gguf"},
{Path: "model-Q3_K_M.gguf"},
}
groups := hfapi.GroupShards(files)
Expect(groups).To(HaveLen(2))
Expect(groups[0].Sharded).To(BeFalse())
Expect(groups[0].Files[0].Path).To(Equal("model-Q4_K_M.gguf"))
Expect(groups[1].Sharded).To(BeFalse())
Expect(groups[1].Files[0].Path).To(Equal("model-Q3_K_M.gguf"))
})
It("groups files that live in subfolders by their basename", func() {
// HuggingFace repos often place shards in a per-quant subfolder
// (bartowski/* is a common example). The Path includes the
// folder but we must still group by basename.
files := []hfapi.ModelFile{
{Path: "Q4_K_M/model-Q4_K_M-00001-of-00002.gguf"},
{Path: "Q4_K_M/model-Q4_K_M-00002-of-00002.gguf"},
}
groups := hfapi.GroupShards(files)
Expect(groups).To(HaveLen(1))
Expect(groups[0].Sharded).To(BeTrue())
Expect(groups[0].Total).To(Equal(2))
Expect(groups[0].Files).To(HaveLen(2))
})
})
Context("integration test with real HuggingFace API", func() {
It("should recursively list all files including subfolders from real repository", func() {
// This test makes actual API calls to HuggingFace
// Skip if running in CI or if network is not available
realClient := hfapi.NewClient()
repoID := "bartowski/Qwen_Qwen3-Next-80B-A3B-Instruct-GGUF"
files, err := realClient.ListFiles(repoID)
Expect(err).ToNot(HaveOccurred())
Expect(files).ToNot(BeEmpty(), "should return at least some files")
// Verify that we get files from subfolders
// Based on the repository structure, there should be files in subfolders like:
// - Qwen_Qwen3-Next-80B-A3B-Instruct-Q4_1/...
// - Qwen_Qwen3-Next-80B-A3B-Instruct-Q5_K_L/...
// etc.
hasSubfolderFiles := false
rootLevelFiles := 0
subfolderFiles := 0
for _, file := range files {
if strings.Contains(file.Path, "/") {
hasSubfolderFiles = true
subfolderFiles++
// Verify the path format is correct (subfolder/file.gguf)
Expect(file.Path).ToNot(HavePrefix("/"), "paths should be relative, not absolute")
Expect(file.Path).ToNot(HaveSuffix("/"), "file paths should not end with /")
} else {
rootLevelFiles++
}
}
Expect(hasSubfolderFiles).To(BeTrue(), "should find files in subfolders")
Expect(rootLevelFiles).To(BeNumerically(">", 0), "should find files at root level")
Expect(subfolderFiles).To(BeNumerically(">", 0), "should find files in subfolders")
// Verify specific expected files exist
// Root level files
readmeFile := findFileByPath(files, "README.md")
Expect(readmeFile).ToNot(BeNil(), "README.md should exist at root level")
// Verify we can find files in subfolders
// Look for any file in a subfolder (the exact structure may vary, can be nested)
foundSubfolderFile := false
for _, file := range files {
if strings.Contains(file.Path, "/") && strings.HasSuffix(file.Path, ".gguf") {
foundSubfolderFile = true
// Verify the path structure: can be nested like subfolder/subfolder/file.gguf
parts := strings.Split(file.Path, "/")
Expect(len(parts)).To(BeNumerically(">=", 2), "subfolder files should have at least subfolder/file.gguf format")
// The last part should be the filename
Expect(parts[len(parts)-1]).To(HaveSuffix(".gguf"), "file in subfolder should be a .gguf file")
Expect(parts[len(parts)-1]).ToNot(BeEmpty(), "filename should not be empty")
break
}
}
Expect(foundSubfolderFile).To(BeTrue(), "should find at least one .gguf file in a subfolder")
// Verify file properties are populated
for _, file := range files {
Expect(file.Path).ToNot(BeEmpty(), "file path should not be empty")
Expect(file.Type).To(Equal("file"), "all returned items should be files, not directories")
// Size might be 0 for some files, but OID should be present
if file.LFS == nil {
Expect(file.Oid).ToNot(BeEmpty(), "file should have an OID if no LFS")
}
}
})
It("should populate PipelineTag and LibraryName on ModelDetails", func() {
// Sentence-transformers/all-MiniLM-L6-v2 is a public, stable repo:
// pipeline_tag: sentence-similarity, library_name: sentence-transformers.
// This exercises the /api/models/{repo} metadata fetch layered on top
// of ListFiles in GetModelDetails.
realClient := hfapi.NewClient()
details, err := realClient.GetModelDetails("sentence-transformers/all-MiniLM-L6-v2")
Expect(err).ToNot(HaveOccurred())
Expect(details).ToNot(BeNil())
Expect(details.PipelineTag).To(Equal("sentence-similarity"))
Expect(details.LibraryName).To(Equal("sentence-transformers"))
})
})
Context("when model metadata endpoint returns fields", func() {
It("should populate PipelineTag and LibraryName from /api/models/{repo}", func() {
// Serve both the tree listing and the single-model metadata endpoint.
mockFilesResponse := `[
{"type": "file", "path": "config.json", "size": 100, "oid": "cfg1"}
]`
mockModelResponse := `{
"modelId": "fake/model",
"pipeline_tag": "text-to-speech",
"library_name": "transformers"
}`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
switch {
case strings.Contains(r.URL.Path, "/tree/main"):
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFilesResponse))
case strings.HasSuffix(r.URL.Path, "/api/models/fake/model"):
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockModelResponse))
default:
w.WriteHeader(http.StatusNotFound)
}
}))
client.SetBaseURL(server.URL + "/api/models")
details, err := client.GetModelDetails("fake/model")
Expect(err).ToNot(HaveOccurred())
Expect(details).ToNot(BeNil())
Expect(details.PipelineTag).To(Equal("text-to-speech"))
Expect(details.LibraryName).To(Equal("transformers"))
})
It("should tolerate a failing metadata endpoint and still return file details", func() {
mockFilesResponse := `[
{"type": "file", "path": "config.json", "size": 100, "oid": "cfg1"}
]`
server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
switch {
case strings.Contains(r.URL.Path, "/tree/main"):
w.WriteHeader(http.StatusOK)
w.Write([]byte(mockFilesResponse))
default:
// Simulate metadata endpoint outage.
w.WriteHeader(http.StatusInternalServerError)
}
}))
client.SetBaseURL(server.URL + "/api/models")
details, err := client.GetModelDetails("fake/model")
Expect(err).ToNot(HaveOccurred())
Expect(details).ToNot(BeNil())
Expect(details.Files).To(HaveLen(1))
Expect(details.PipelineTag).To(BeEmpty())
Expect(details.LibraryName).To(BeEmpty())
})
})
})
// findFileByPath is a helper function to find a file by its path in a slice of FileInfo
func findFileByPath(files []hfapi.FileInfo, path string) *hfapi.FileInfo {
for i := range files {
if files[i].Path == path {
return &files[i]
}
}
return nil
}