mirror of
https://github.com/mudler/LocalAI.git
synced 2026-06-04 06:44:48 -04:00
Adds a Go native gRPC backend that dlopens librfdetrcpp.so (built from
mudler/rf-detr.cpp at the pinned RFDETR_VERSION) via purego and exposes
the rfdetr.cpp inference pipeline through LocalAI's existing Detect RPC.
Supports all 5 RF-DETR detection variants (Nano/Small/Base/Medium/Large)
and 6 segmentation variants (SegNano/SegSmall/SegMedium/SegLarge/
SegXLarge/Seg2XLarge) with F32/F16/Q8_0/Q4_K quantizations. Pre-built
GGUFs ship at mudler/rfdetr-cpp-* on HuggingFace.
Detection returns Bbox + class_name + confidence; segmentation also
returns PNG-encoded per-detection masks via the rfdetr_capi accessor
functions (rfdetr_capi_get_detection_{class_id,box,score,class_name,
mask_png}).
End-to-end verified through POST /v1/detection: HTTP -> gRPC -> purego
dlopen -> rfdetr.cpp -> ggml -> response (9 detections on the detection
model, 21 detections + valid PNG masks on the seg-nano model against
the kitchen fixture).
Wiring:
- backend/go/rfdetr-cpp/{main.go,gorfdetrcpp.go,CMakeLists.txt,
Makefile,run.sh,package.sh,test.sh,.gitignore}
- Top-level Makefile: BACKEND_RFDETR_CPP, docker-build target,
.NOTPARALLEL, prepare-test-extra, test-extra
- backend/go/rfdetr-cpp/Makefile: `test` target invoked by test-extra
- .github/backend-matrix.yml: CPU + CUDA-12/13 + L4T CUDA-12/13
(arm64) + HIP + Vulkan (amd64 + arm64) + SYCL f32/f16
- backend/index.yaml: rfdetr-cpp meta anchor + latest/development
image entries for every matrix tag-suffix
- .github/workflows/bump_deps.yaml: RFDETR_VERSION pin tracking
(mudler/rf-detr.cpp branch main)
- gallery/index.yaml: 11 rfdetr-cpp-* entries (nano + 4 detection
variants + 6 seg variants), all backed by mudler/rfdetr-cpp-*
on HuggingFace with sha256 pinning on the F16 default
- core/gallery/importers/rfdetr.go: GGUF auto-routing for HF imports
(mudler/rfdetr-cpp-* repos route to rfdetr-cpp, Transformer-format
repos stay on the Python rfdetr backend; explicit preferences.backend
overrides both heuristics)
- core/gallery/importers/rfdetr_test.go: table-driven coverage of the
auto-routing + a live mudler/rfdetr-cpp-nano cross-check
scripts/changed-backends.js needs no change: the existing
Dockerfile.golang -> backend/go/${item.backend}/ branch already routes
the 9 rfdetr-cpp matrix entries to the correct backend path.
Assisted-by: Claude:claude-opus-4-7 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
129 lines
5.0 KiB
YAML
129 lines
5.0 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: "antirez/ds4"
|
|
variable: "DS4_VERSION"
|
|
branch: "main"
|
|
file: "backend/cpp/ds4/Makefile"
|
|
- repository: "ggml-org/whisper.cpp"
|
|
variable: "WHISPER_CPP_VERSION"
|
|
branch: "master"
|
|
file: "backend/go/whisper/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: "predict-woo/qwen3-tts.cpp"
|
|
variable: "QWEN3TTS_CPP_VERSION"
|
|
branch: "main"
|
|
file: "backend/go/qwen3-tts-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@v6
|
|
- 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@v6
|
|
- 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
|