From 62b14fd6354acf931f83b0f4655e32a9d57321ef Mon Sep 17 00:00:00 2001 From: "LocalAI [bot]" <139863280+localai-bot@users.noreply.github.com> Date: Wed, 24 Jun 2026 23:16:27 +0200 Subject: [PATCH] feat(backends): add darwin/metal build for liquid-audio (#10486) * feat(backends): add darwin/metal build for liquid-audio Wire the already-MPS-ready liquid-audio backend (it ships requirements-mps.txt) into the darwin CI matrix and the gallery so metal-darwin-arm64 images are built and selectable. Signed-off-by: Ettore Di Giacinto Assisted-by: Claude:opus-4.8 [Claude Code] * ci(liquid-audio): trigger darwin build via requirements-mps note The changed-backends path filter only builds a backend when a file under its directory changes. The metal wiring lived in index.yaml + the matrix, so the darwin job was skipped. Add a documenting comment to the MPS requirements so CI actually exercises the darwin build. Signed-off-by: Ettore Di Giacinto Assisted-by: Claude:opus-4.8 [Claude Code] * fix(liquid-audio): guard uv-only --index-strategy for the pip/darwin path Same fix as trl: the darwin/MPS build installs with pip (USE_PIP=true), which rejects the uv-only --index-strategy flag and failed the darwin backend build. Add it only on the uv path; Linux/CUDA resolution is unchanged. Signed-off-by: Ettore Di Giacinto Assisted-by: Claude:opus-4.8 [Claude Code] --------- Signed-off-by: Ettore Di Giacinto Co-authored-by: Ettore Di Giacinto --- .github/backend-matrix.yml | 3 +++ backend/index.yaml | 12 ++++++++++++ backend/python/liquid-audio/install.sh | 8 +++++++- backend/python/liquid-audio/requirements-mps.txt | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/backend-matrix.yml b/.github/backend-matrix.yml index 4cfc937ac..17d436cc1 100644 --- a/.github/backend-matrix.yml +++ b/.github/backend-matrix.yml @@ -4974,6 +4974,9 @@ includeDarwin: - backend: "kitten-tts" tag-suffix: "-metal-darwin-arm64-kitten-tts" build-type: "mps" + - backend: "liquid-audio" + tag-suffix: "-metal-darwin-arm64-liquid-audio" + build-type: "mps" - backend: "piper" tag-suffix: "-metal-darwin-arm64-piper" build-type: "metal" diff --git a/backend/index.yaml b/backend/index.yaml index 592c8fd6b..f3a2b892d 100644 --- a/backend/index.yaml +++ b/backend/index.yaml @@ -1284,6 +1284,7 @@ nvidia-cuda-13: "cuda13-liquid-audio" nvidia-cuda-12: "cuda12-liquid-audio" nvidia-l4t-cuda-13: "cuda13-nvidia-l4t-arm64-liquid-audio" + metal: "metal-liquid-audio" icon: https://cdn-avatars.huggingface.co/v1/production/uploads/61b8e2ba285851687028d395/7_6D7rWrLxp2hb6OHSV1p.png - &qwen-tts urls: @@ -4613,6 +4614,7 @@ nvidia-cuda-13: "cuda13-liquid-audio-development" nvidia-cuda-12: "cuda12-liquid-audio-development" nvidia-l4t-cuda-13: "cuda13-nvidia-l4t-arm64-liquid-audio-development" + metal: "metal-liquid-audio-development" - !!merge <<: *liquid-audio name: "cpu-liquid-audio" uri: "quay.io/go-skynet/local-ai-backends:latest-cpu-liquid-audio" @@ -4623,6 +4625,16 @@ uri: "quay.io/go-skynet/local-ai-backends:master-cpu-liquid-audio" mirrors: - localai/localai-backends:master-cpu-liquid-audio +- !!merge <<: *liquid-audio + name: "metal-liquid-audio" + uri: "quay.io/go-skynet/local-ai-backends:latest-metal-darwin-arm64-liquid-audio" + mirrors: + - localai/localai-backends:latest-metal-darwin-arm64-liquid-audio +- !!merge <<: *liquid-audio + name: "metal-liquid-audio-development" + uri: "quay.io/go-skynet/local-ai-backends:master-metal-darwin-arm64-liquid-audio" + mirrors: + - localai/localai-backends:master-metal-darwin-arm64-liquid-audio - !!merge <<: *liquid-audio name: "cuda12-liquid-audio" uri: "quay.io/go-skynet/local-ai-backends:latest-gpu-nvidia-cuda-12-liquid-audio" diff --git a/backend/python/liquid-audio/install.sh b/backend/python/liquid-audio/install.sh index c7ed8eaa8..fe0f9caad 100755 --- a/backend/python/liquid-audio/install.sh +++ b/backend/python/liquid-audio/install.sh @@ -14,5 +14,11 @@ else fi # liquid-audio's torch wheels are large; allow upgrades to satisfy transitive pins -EXTRA_PIP_INSTALL_FLAGS+=" --upgrade --index-strategy=unsafe-first-match" +EXTRA_PIP_INSTALL_FLAGS+=" --upgrade" +# --index-strategy is a uv-only flag. The darwin/MPS build installs with pip +# (USE_PIP=true in scripts/build/python-darwin.sh), which rejects it. Only add +# it on the uv path; Linux/CUDA resolution is unchanged. +if [ "x${USE_PIP:-}" != "xtrue" ]; then + EXTRA_PIP_INSTALL_FLAGS+=" --index-strategy=unsafe-first-match" +fi installRequirements diff --git a/backend/python/liquid-audio/requirements-mps.txt b/backend/python/liquid-audio/requirements-mps.txt index f57687f29..3c9c36cca 100644 --- a/backend/python/liquid-audio/requirements-mps.txt +++ b/backend/python/liquid-audio/requirements-mps.txt @@ -1,3 +1,4 @@ +# MPS (Apple Silicon / Metal) build profile - installed by the darwin CI job. torch>=2.8.0 torchaudio>=2.8.0 torchcodec>=0.9.1