mirror of
https://github.com/mudler/LocalAI.git
synced 2026-08-02 19:40:11 -04:00
* feat(backend): add magpie-tts-cpp text-to-speech backend
Add a Go + purego backend wrapping the magpie-tts.cpp ggml port of NVIDIA's
Magpie TTS Multilingual 357M (encoder + autoregressive decoder over NanoCodec
tokens), producing 22.05 kHz mono audio in 5 baked voices (Aria, Jason, John,
Leo, Sofia; case-insensitive names or indices 0-4) across 9+ languages from a
single self-contained GGUF. Mirrors qwen3-tts-cpp / moss-tts-cpp: dlopen the
static-ggml shared library, bind the flat magpie_tts_capi_* C-API via purego
(no local C shim needed, the upstream .so exports it directly), and serve the
gRPC TTS + TTSStream methods behind base.SingleThread (the C context is not
reentrant across synthesize calls).
The backend CMakeLists translates the Makefile's -DGGML_{CUDA,METAL,VULKAN,HIP}
flags into upstream's MAGPIE_GGML_* toggles (upstream FORCE-overwrites the ggml
cache entries from those), pinned to magpie-tts.cpp v0.1.1
(e3f3dd1ebe22b64e7405f93b519f2d1930712568), which statically links ggml into
libmagpie-tts.so (ldd shows only system libs).
Wires the full registration: backend-matrix.yml (CPU amd64/arm64, CUDA 12/13,
Intel SYCL f16/f32, Vulkan amd64/arm64, ROCm, NVIDIA L4T + L4T CUDA 13, and
Darwin metal), backend/index.yaml metas and image entries, the root Makefile
build targets, the changed-backends backend-filter path mapping, the bump_deps
auto-bump matrix, a test-extra per-backend smoke job, the /backends/known
pref-only importer entry, the backend capabilities map (TTS + TTSStream, no
voice cloning), and the README / compatibility-table docs rows.
Verified locally: unit + e2e Ginkgo suites pass against the real q8_0 GGUF
(22.05 kHz mono WAV, RMS > 0.01), a live gRPC LoadModel + TTS round-trip
returns valid non-silent audio, and the pre-commit gates (make lint,
make test-coverage-check) pass, run manually with LOCALAI_TEST_HTTP_PORT
overriding the locally-occupied 9090.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* gallery: add magpie-tts-cpp model entries (q8_0 + f16)
Add the Magpie TTS Multilingual 357M GGUFs from mudler/magpie-tts.cpp-gguf to
the model gallery: q8_0 (~624 MB, near-lossless, fastest decode, recommended)
with an f16 (~784 MB) variant, both served by the magpie-tts-cpp backend.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* magpie-tts-cpp: bump pin to rewritten upstream v0.1.1 SHA
Upstream history was rewritten to purge accidentally committed build
artifacts; v0.1.1 now resolves to 6f7696cf.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
227 lines
9.2 KiB
YAML
227 lines
9.2 KiB
YAML
name: Bump Backend dependencies
|
|
on:
|
|
schedule:
|
|
- cron: 0 20 * * *
|
|
workflow_dispatch:
|
|
jobs:
|
|
bump-backends:
|
|
if: github.repository == 'mudler/LocalAI'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- repository: "ggml-org/llama.cpp"
|
|
variable: "LLAMA_VERSION"
|
|
branch: "master"
|
|
file: "backend/cpp/llama-cpp/Makefile"
|
|
- repository: "ikawrakow/ik_llama.cpp"
|
|
variable: "IK_LLAMA_VERSION"
|
|
branch: "main"
|
|
file: "backend/cpp/ik-llama-cpp/Makefile"
|
|
- repository: "TheTom/llama-cpp-turboquant"
|
|
variable: "TURBOQUANT_VERSION"
|
|
branch: "feature/turboquant-kv-cache"
|
|
file: "backend/cpp/turboquant/Makefile"
|
|
- repository: "PrismML-Eng/llama.cpp"
|
|
variable: "BONSAI_VERSION"
|
|
branch: "prism"
|
|
file: "backend/cpp/bonsai/Makefile"
|
|
- repository: "antirez/ds4"
|
|
variable: "DS4_VERSION"
|
|
branch: "main"
|
|
file: "backend/cpp/ds4/Makefile"
|
|
- repository: "meituan-longcat/LongCat-Video"
|
|
variable: "LONGCAT_VIDEO_VERSION"
|
|
branch: "main"
|
|
file: "backend/python/longcat-video/Makefile"
|
|
- repository: "localai-org/privacy-filter.cpp"
|
|
variable: "PRIVACY_FILTER_VERSION"
|
|
branch: "master"
|
|
file: "backend/cpp/privacy-filter/Makefile"
|
|
- repository: "ggml-org/whisper.cpp"
|
|
variable: "WHISPER_CPP_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/whisper/Makefile"
|
|
- repository: "CrispStrobe/CrispASR"
|
|
variable: "CRISPASR_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/crispasr/Makefile"
|
|
- repository: "mudler/parakeet.cpp"
|
|
variable: "PARAKEET_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/parakeet-cpp/Makefile"
|
|
- repository: "localai-org/moss-transcribe.cpp"
|
|
variable: "MOSS_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/moss-transcribe-cpp/Makefile"
|
|
- repository: "localai-org/ced.cpp"
|
|
variable: "CED_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/ced/Makefile"
|
|
- repository: "localai-org/voice-detect.cpp"
|
|
variable: "VOICEDETECT_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/voice-detect/Makefile"
|
|
- repository: "mudler/face-detect.cpp"
|
|
variable: "FACEDETECT_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/face-detect/Makefile"
|
|
- repository: "mudler/depth-anything.cpp"
|
|
variable: "DEPTHANYTHING_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/depth-anything-cpp/Makefile"
|
|
- repository: "leejet/stable-diffusion.cpp"
|
|
variable: "STABLEDIFFUSION_GGML_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/stablediffusion-ggml/Makefile"
|
|
- repository: "mudler/go-piper"
|
|
variable: "PIPER_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/piper/Makefile"
|
|
- repository: "antirez/voxtral.c"
|
|
variable: "VOXTRAL_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/voxtral/Makefile"
|
|
- repository: "ace-step/acestep.cpp"
|
|
variable: "ACESTEP_CPP_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/acestep-cpp/Makefile"
|
|
- repository: "PABannier/sam3.cpp"
|
|
variable: "SAM3_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/sam3-cpp/Makefile"
|
|
- repository: "localai-org/rf-detr.cpp"
|
|
variable: "RFDETR_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/rfdetr-cpp/Makefile"
|
|
- repository: "mudler/locate-anything.cpp"
|
|
variable: "LOCATEANYTHING_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/locate-anything-cpp/Makefile"
|
|
- repository: "ServeurpersoCom/qwentts.cpp"
|
|
variable: "QWEN3TTS_CPP_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/qwen3-tts-cpp/Makefile"
|
|
- repository: "ServeurpersoCom/omnivoice.cpp"
|
|
variable: "OMNIVOICE_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/omnivoice-cpp/Makefile"
|
|
- repository: "localai-org/vibevoice.cpp"
|
|
variable: "VIBEVOICE_CPP_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/vibevoice-cpp/Makefile"
|
|
- repository: "mudler/magpie-tts.cpp"
|
|
variable: "MAGPIETTS_CPP_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/magpie-tts-cpp/Makefile"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- name: Bump dependencies 🔧
|
|
id: bump
|
|
env:
|
|
# This job fans out to ~25 parallel matrix entries, all querying
|
|
# api.github.com from runner IPs that share the 60/hour anonymous
|
|
# rate limit. Authenticating raises it to 1000/hour, which is what
|
|
# kept a random handful of these red every night.
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
bash .github/bump_deps.sh ${{ matrix.repository }} ${{ matrix.branch }} ${{ matrix.variable }} ${{ matrix.file }}
|
|
{
|
|
echo 'message<<EOF'
|
|
cat "${{ matrix.variable }}_message.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
{
|
|
echo 'commit<<EOF'
|
|
cat "${{ matrix.variable }}_commit.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
rm -rfv ${{ matrix.variable }}_message.txt
|
|
rm -rfv ${{ matrix.variable }}_commit.txt
|
|
- name: Create Pull Request
|
|
uses: peter-evans/create-pull-request@v8
|
|
with:
|
|
token: ${{ secrets.UPDATE_BOT_TOKEN }}
|
|
push-to-fork: ci-forks/LocalAI
|
|
commit-message: ':arrow_up: Update ${{ matrix.repository }}'
|
|
title: 'chore: :arrow_up: Update ${{ matrix.repository }} to `${{ steps.bump.outputs.commit }}`'
|
|
branch: "update/${{ matrix.variable }}"
|
|
body: ${{ steps.bump.outputs.message }}
|
|
signoff: true
|
|
|
|
bump-vllm-wheel:
|
|
# vLLM's cu130 wheel comes from a per-tag index URL (no /latest/ alias),
|
|
# so the cublas13 requirements file pins both a URL segment and a version
|
|
# constraint. bump_deps.sh handles git-sha-in-Makefile only — this job
|
|
# rewrites both values atomically when a new vLLM stable tag ships.
|
|
if: github.repository == 'mudler/LocalAI'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- name: Bump vLLM cu130 wheel pin 🔧
|
|
id: bump
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
bash .github/bump_vllm_wheel.sh vllm-project/vllm backend/python/vllm/requirements-cublas13-after.txt VLLM_VERSION
|
|
{
|
|
echo 'message<<EOF'
|
|
cat "VLLM_VERSION_message.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
{
|
|
echo 'commit<<EOF'
|
|
cat "VLLM_VERSION_commit.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
rm -rfv VLLM_VERSION_message.txt VLLM_VERSION_commit.txt
|
|
- name: Create Pull Request
|
|
uses: peter-evans/create-pull-request@v8
|
|
with:
|
|
token: ${{ secrets.UPDATE_BOT_TOKEN }}
|
|
push-to-fork: ci-forks/LocalAI
|
|
commit-message: ':arrow_up: Update vllm-project/vllm cu130 wheel'
|
|
title: 'chore: :arrow_up: Update vllm-project/vllm cu130 wheel to `${{ steps.bump.outputs.commit }}`'
|
|
branch: "update/VLLM_VERSION"
|
|
body: ${{ steps.bump.outputs.message }}
|
|
signoff: true
|
|
|
|
bump-vllm-metal:
|
|
# The darwin (Apple Silicon) vLLM build installs vllm-metal, which is locked
|
|
# to a specific vLLM source release. install.sh pins both VLLM_METAL_VERSION
|
|
# (the wheel release) and VLLM_VERSION (the vLLM it builds against); this job
|
|
# tracks vllm-project/vllm-metal and rewrites both atomically. Separate from
|
|
# bump-vllm-wheel because darwin follows vllm-metal, not vllm/vllm latest.
|
|
if: github.repository == 'mudler/LocalAI'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- name: Bump vllm-metal pin 🔧
|
|
id: bump
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
bash .github/bump_vllm_metal.sh vllm-project/vllm-metal backend/python/vllm/install.sh VLLM_METAL_VERSION
|
|
{
|
|
echo 'message<<EOF'
|
|
cat "VLLM_METAL_VERSION_message.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
{
|
|
echo 'commit<<EOF'
|
|
cat "VLLM_METAL_VERSION_commit.txt"
|
|
echo EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
rm -rfv VLLM_METAL_VERSION_message.txt VLLM_METAL_VERSION_commit.txt
|
|
- name: Create Pull Request
|
|
uses: peter-evans/create-pull-request@v8
|
|
with:
|
|
token: ${{ secrets.UPDATE_BOT_TOKEN }}
|
|
push-to-fork: ci-forks/LocalAI
|
|
commit-message: ':arrow_up: Update vllm-project/vllm-metal (darwin)'
|
|
title: 'chore: :arrow_up: Update vllm-metal (darwin) to `${{ steps.bump.outputs.commit }}`'
|
|
branch: "update/VLLM_METAL_VERSION"
|
|
body: ${{ steps.bump.outputs.message }}
|
|
signoff: true
|