mirror of
https://github.com/mudler/LocalAI.git
synced 2026-08-02 11:30:44 -04:00
feat(bonsai): add PrismML llama.cpp fork backend + Bonsai gallery models Adds a new `bonsai` backend that runs the PrismML fork of llama.cpp (github.com/PrismML-Eng/llama.cpp, `prism` branch), which ships the Q1_0 (1-bit) and Q2_0 (ternary / 1.58-bit) weight-quantization kernels used by the Bonsai and Ternary-Bonsai models. Stock llama.cpp cannot decode these quants. Modeled on the turboquant backend: reuses backend/cpp/llama-cpp/grpc-server.cpp against the fork's libllama via a thin wrapper Makefile, so the sub-2-bit models are served with the same OpenAI-compatible API. No grpc-server allow-list patch is needed (bonsai adds weight quants, transparent to the server, not KV-cache types), and the reused server compiles cleanly against the fork with no skew patches (validated locally via a CPU docker build; patches/ is present but empty for any future re-pin skew). Backend wiring: backend/cpp/bonsai/, .docker/bonsai-compile.sh, backend/Dockerfile.bonsai, top-level Makefile targets, backend-matrix.yml build rows (CPU, CUDA 12/13, L4T, SYCL f32/f16, Vulkan, ROCm/hipblas), backend/index.yaml meta-backend + per-platform images, and a nightly bump_deps entry tracking the `prism` branch. Gallery: 8 entries across 4 families - bonsai-8b-1bit, ternary-bonsai-8b (+g64, +pq2), bonsai-27b-1bit (vision), ternary-bonsai-27b (+pq2, +g64, vision). The 27B models wire the mmproj vision tower; the DSpark speculative drafter GGUFs are not wired (custom semi-autoregressive drafter, not a standard llama.cpp draft model). Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
213 lines
8.6 KiB
YAML
213 lines
8.6 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: "mudler/moss-transcribe.cpp"
|
|
variable: "MOSS_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/moss-transcribe-cpp/Makefile"
|
|
- repository: "mudler/ced.cpp"
|
|
variable: "CED_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/ced/Makefile"
|
|
- repository: "mudler/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: "mudler/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"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- name: Bump dependencies 🔧
|
|
id: bump
|
|
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
|
|
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
|
|
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
|