mirror of
https://github.com/mudler/LocalAI.git
synced 2026-06-14 11:49:33 -04:00
* feat(backend): add locate-anything-cpp backend (open-vocab detection via la_capi) A Go/purego backend wrapping locate-anything.cpp's la_capi C ABI, implementing the gRPC Detect RPC: image + open-vocabulary text prompt -> labeled boxes. Mirrors backend/go/rfdetr-cpp; static-links ggml into a per-CPU-variant .so. Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * ci(backend): register locate-anything-cpp in build matrix Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * feat(gallery): locate-anything gallery entry + model importer Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * test(backend): locate-anything-cpp Load+Detect wire test Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * feat(gallery): add locate-anything-3b model to the gallery index Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * ci(backend): register locate-anything.cpp in bump_deps auto-bump Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: mudler <mudler@localai.io> * ci(test): e2e smoke for locate-anything-cpp in test-extra (loads the 3B + image, runs Detect) Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: mudler <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Signed-off-by: mudler <mudler@localai.io> Co-authored-by: mudler <mudler@localai.io>
48 lines
2.0 KiB
Bash
Executable File
48 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
CURDIR=$(dirname "$(realpath $0)")
|
|
|
|
echo "Running locate-anything-cpp backend tests..."
|
|
|
|
# Test model from the mudler/locate-anything.cpp-gguf HuggingFace repo. This is
|
|
# the q8_0 quantization of nvidia/LocateAnything-3B (~6.3 GB), so the download
|
|
# is the slow step. It is resumed with `curl -C -` and skipped entirely if the
|
|
# file is already present.
|
|
LOCATEANYTHING_MODEL_DIR="${LOCATEANYTHING_MODEL_DIR:-$CURDIR/test-models}"
|
|
|
|
LOCATEANYTHING_MODEL_FILE="${LOCATEANYTHING_MODEL_FILE:-locate-anything-q8_0.gguf}"
|
|
LOCATEANYTHING_MODEL_URL="${LOCATEANYTHING_MODEL_URL:-https://huggingface.co/mudler/locate-anything.cpp-gguf/resolve/main/locate-anything-q8_0.gguf}"
|
|
|
|
mkdir -p "$LOCATEANYTHING_MODEL_DIR"
|
|
|
|
if [ ! -f "$LOCATEANYTHING_MODEL_DIR/$LOCATEANYTHING_MODEL_FILE" ]; then
|
|
echo "Downloading locate-anything q8_0 model (~6.3 GB, this is slow)..."
|
|
# -C - resumes a partial download so an interrupted run doesn't restart from 0.
|
|
curl -L -C - -o "$LOCATEANYTHING_MODEL_DIR/$LOCATEANYTHING_MODEL_FILE" "$LOCATEANYTHING_MODEL_URL" --progress-bar
|
|
fi
|
|
|
|
# Use a real COCO test image (people + cars) from the upstream rf-detr.cpp repo
|
|
# (~46 KB). Open-vocabulary detection needs real content to locate, so a
|
|
# synthetic image would trivially yield zero detections.
|
|
TEST_IMAGE_DIR="$CURDIR/test-data"
|
|
TEST_IMAGE_FILE="$TEST_IMAGE_DIR/test.jpg"
|
|
TEST_IMAGE_URL="${TEST_IMAGE_URL:-https://raw.githubusercontent.com/mudler/rf-detr.cpp/main/tests/fixtures/ci/test_image.jpg}"
|
|
|
|
mkdir -p "$TEST_IMAGE_DIR"
|
|
if [ ! -f "$TEST_IMAGE_FILE" ]; then
|
|
echo "Downloading COCO test image..."
|
|
curl -L -o "$TEST_IMAGE_FILE" "$TEST_IMAGE_URL" --progress-bar
|
|
fi
|
|
|
|
echo "locate-anything-cpp test setup complete."
|
|
echo " model: $LOCATEANYTHING_MODEL_DIR/$LOCATEANYTHING_MODEL_FILE"
|
|
echo " test image: $TEST_IMAGE_FILE"
|
|
|
|
# Run the Go smoke test: spawns the backend binary on a free port, calls
|
|
# LoadModel + Detect via gRPC against the downloaded GGUF + COCO image.
|
|
echo ""
|
|
echo "Running Go smoke test..."
|
|
cd "$CURDIR"
|
|
go test -v -timeout 30m ./...
|