Skip to content

Commit 560bf50

Browse files
authored
chore(Makefile): refactor common make targets (#7858)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
1 parent a7e1552 commit 560bf50

1 file changed

Lines changed: 115 additions & 161 deletions

File tree

Makefile

Lines changed: 115 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ LAUNCHER_BINARY_NAME=local-ai-launcher
66

77
CUDA_MAJOR_VERSION?=13
88
CUDA_MINOR_VERSION?=0
9+
UBUNTU_VERSION?=2204
910

1011
GORELEASER?=
1112

@@ -155,7 +156,16 @@ test: test-models/testmodel.ggml protogen-go
155156
########################################################
156157

157158
docker-build-aio:
158-
docker build --build-arg MAKEFLAGS="--jobs=5 --output-sync=target" -t local-ai:tests -f Dockerfile .
159+
docker build \
160+
--build-arg MAKEFLAGS="--jobs=5 --output-sync=target" \
161+
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
162+
--build-arg IMAGE_TYPE=$(IMAGE_TYPE) \
163+
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
164+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
165+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
166+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
167+
--build-arg GO_TAGS="$(GO_TAGS)" \
168+
-t local-ai:tests -f Dockerfile .
159169
BASE_IMAGE=local-ai:tests DOCKER_AIO_IMAGE=local-ai-aio:test $(MAKE) docker-aio
160170

161171
e2e-aio:
@@ -177,7 +187,16 @@ prepare-e2e:
177187
mkdir -p $(TEST_DIR)
178188
cp -rfv $(abspath ./tests/e2e-fixtures)/gpu.yaml $(TEST_DIR)/gpu.yaml
179189
test -e $(TEST_DIR)/ggllm-test-model.bin || wget -q https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF/resolve/main/codellama-7b-instruct.Q2_K.gguf -O $(TEST_DIR)/ggllm-test-model.bin
180-
docker build --build-arg IMAGE_TYPE=core --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg CUDA_MAJOR_VERSION=12 --build-arg CUDA_MINOR_VERSION=0 -t localai-tests .
190+
docker build \
191+
--build-arg IMAGE_TYPE=core \
192+
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
193+
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
194+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
195+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
196+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
197+
--build-arg GO_TAGS="$(GO_TAGS)" \
198+
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
199+
-t localai-tests .
181200

182201
run-e2e-image:
183202
ls -liah $(abspath ./tests/e2e-fixtures)
@@ -308,6 +327,9 @@ docker:
308327
--build-arg GO_TAGS="$(GO_TAGS)" \
309328
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
310329
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
330+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
331+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
332+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
311333
-t $(DOCKER_IMAGE) .
312334

313335
docker-cuda11:
@@ -319,13 +341,17 @@ docker-cuda11:
319341
--build-arg GO_TAGS="$(GO_TAGS)" \
320342
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
321343
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
344+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
322345
-t $(DOCKER_IMAGE)-cuda-11 .
323346

324347
docker-aio:
325348
@echo "Building AIO image with base $(BASE_IMAGE) as $(DOCKER_AIO_IMAGE)"
326349
docker build \
327350
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
328351
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
352+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
353+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
354+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
329355
-t $(DOCKER_AIO_IMAGE) -f Dockerfile.aio .
330356

331357
docker-aio-all:
@@ -338,62 +364,26 @@ docker-image-intel:
338364
--build-arg IMAGE_TYPE=$(IMAGE_TYPE) \
339365
--build-arg GO_TAGS="$(GO_TAGS)" \
340366
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
341-
--build-arg BUILD_TYPE=intel -t $(DOCKER_IMAGE) .
367+
--build-arg BUILD_TYPE=intel \
368+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
369+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
370+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
371+
-t $(DOCKER_IMAGE) .
342372

343373
########################################################
344374
## Backends
345375
########################################################
346376

377+
# Pattern rule for standard backends (docker-based)
378+
# This matches all backends that use docker-build-* and docker-save-*
379+
backends/%: docker-build-% docker-save-% build
380+
./local-ai backends install "ocifile://$(abspath ./backend-images/$*.tar)"
347381

348-
backends/diffusers: docker-build-diffusers docker-save-diffusers build
349-
./local-ai backends install "ocifile://$(abspath ./backend-images/diffusers.tar)"
350-
351-
backends/llama-cpp: docker-build-llama-cpp docker-save-llama-cpp build
352-
./local-ai backends install "ocifile://$(abspath ./backend-images/llama-cpp.tar)"
353-
354-
backends/piper: docker-build-piper docker-save-piper build
355-
./local-ai backends install "ocifile://$(abspath ./backend-images/piper.tar)"
356-
357-
backends/stablediffusion-ggml: docker-build-stablediffusion-ggml docker-save-stablediffusion-ggml build
358-
./local-ai backends install "ocifile://$(abspath ./backend-images/stablediffusion-ggml.tar)"
359-
360-
backends/whisper: docker-build-whisper docker-save-whisper build
361-
./local-ai backends install "ocifile://$(abspath ./backend-images/whisper.tar)"
362-
363-
backends/silero-vad: docker-build-silero-vad docker-save-silero-vad build
364-
./local-ai backends install "ocifile://$(abspath ./backend-images/silero-vad.tar)"
365-
366-
backends/local-store: docker-build-local-store docker-save-local-store build
367-
./local-ai backends install "ocifile://$(abspath ./backend-images/local-store.tar)"
368-
369-
backends/huggingface: docker-build-huggingface docker-save-huggingface build
370-
./local-ai backends install "ocifile://$(abspath ./backend-images/huggingface.tar)"
371-
372-
backends/rfdetr: docker-build-rfdetr docker-save-rfdetr build
373-
./local-ai backends install "ocifile://$(abspath ./backend-images/rfdetr.tar)"
374-
375-
backends/kitten-tts: docker-build-kitten-tts docker-save-kitten-tts build
376-
./local-ai backends install "ocifile://$(abspath ./backend-images/kitten-tts.tar)"
377-
378-
backends/kokoro: docker-build-kokoro docker-save-kokoro build
379-
./local-ai backends install "ocifile://$(abspath ./backend-images/kokoro.tar)"
380-
381-
backends/chatterbox: docker-build-chatterbox docker-save-chatterbox build
382-
./local-ai backends install "ocifile://$(abspath ./backend-images/chatterbox.tar)"
383-
382+
# Darwin-specific backends (keep as explicit targets since they have special build logic)
384383
backends/llama-cpp-darwin: build
385384
bash ./scripts/build/llama-cpp-darwin.sh
386385
./local-ai backends install "ocifile://$(abspath ./backend-images/llama-cpp.tar)"
387386

388-
backends/neutts: docker-build-neutts docker-save-neutts build
389-
./local-ai backends install "ocifile://$(abspath ./backend-images/neutts.tar)"
390-
391-
backends/vllm: docker-build-vllm docker-save-vllm build
392-
./local-ai backends install "ocifile://$(abspath ./backend-images/vllm.tar)"
393-
394-
backends/vibevoice: docker-build-vibevoice docker-save-vibevoice build
395-
./local-ai backends install "ocifile://$(abspath ./backend-images/vibevoice.tar)"
396-
397387
build-darwin-python-backend: build
398388
bash ./scripts/build/python-darwin.sh
399389

@@ -423,119 +413,83 @@ backends/stablediffusion-ggml-darwin:
423413
backend-images:
424414
mkdir -p backend-images
425415

426-
docker-build-llama-cpp:
427-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:llama-cpp -f backend/Dockerfile.llama-cpp .
428-
429-
docker-build-bark-cpp:
430-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:bark-cpp -f backend/Dockerfile.golang --build-arg BACKEND=bark-cpp .
431-
432-
docker-build-piper:
433-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:piper -f backend/Dockerfile.golang --build-arg BACKEND=piper .
434-
435-
docker-build-local-store:
436-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:local-store -f backend/Dockerfile.golang --build-arg BACKEND=local-store .
437-
438-
docker-build-huggingface:
439-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:huggingface -f backend/Dockerfile.golang --build-arg BACKEND=huggingface .
440-
441-
docker-build-rfdetr:
442-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:rfdetr -f backend/Dockerfile.python --build-arg BACKEND=rfdetr ./backend
443-
444-
docker-build-kitten-tts:
445-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:kitten-tts -f backend/Dockerfile.python --build-arg BACKEND=kitten-tts ./backend
446-
447-
docker-save-kitten-tts: backend-images
448-
docker save local-ai-backend:kitten-tts -o backend-images/kitten-tts.tar
449-
450-
docker-save-chatterbox: backend-images
451-
docker save local-ai-backend:chatterbox -o backend-images/chatterbox.tar
452-
453-
docker-save-vibevoice: backend-images
454-
docker save local-ai-backend:vibevoice -o backend-images/vibevoice.tar
455-
456-
docker-build-neutts:
457-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:neutts -f backend/Dockerfile.python --build-arg BACKEND=neutts ./backend
458-
459-
docker-save-neutts: backend-images
460-
docker save local-ai-backend:neutts -o backend-images/neutts.tar
461-
462-
docker-build-kokoro:
463-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:kokoro -f backend/Dockerfile.python --build-arg BACKEND=kokoro ./backend
464-
465-
docker-build-vllm:
466-
docker build --build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) --build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:vllm -f backend/Dockerfile.python --build-arg BACKEND=vllm ./backend
467-
468-
docker-save-vllm: backend-images
469-
docker save local-ai-backend:vllm -o backend-images/vllm.tar
470-
471-
docker-save-kokoro: backend-images
472-
docker save local-ai-backend:kokoro -o backend-images/kokoro.tar
473-
474-
docker-save-rfdetr: backend-images
475-
docker save local-ai-backend:rfdetr -o backend-images/rfdetr.tar
476-
477-
docker-save-huggingface: backend-images
478-
docker save local-ai-backend:huggingface -o backend-images/huggingface.tar
479-
480-
docker-save-local-store: backend-images
481-
docker save local-ai-backend:local-store -o backend-images/local-store.tar
482-
483-
docker-build-silero-vad:
484-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:silero-vad -f backend/Dockerfile.golang --build-arg BACKEND=silero-vad .
485-
486-
docker-save-silero-vad: backend-images
487-
docker save local-ai-backend:silero-vad -o backend-images/silero-vad.tar
488-
489-
docker-save-piper: backend-images
490-
docker save local-ai-backend:piper -o backend-images/piper.tar
491-
492-
docker-save-llama-cpp: backend-images
493-
docker save local-ai-backend:llama-cpp -o backend-images/llama-cpp.tar
494-
495-
docker-save-bark-cpp: backend-images
496-
docker save local-ai-backend:bark-cpp -o backend-images/bark-cpp.tar
497-
498-
docker-build-stablediffusion-ggml:
499-
docker build --progress=plain --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) --build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) -t local-ai-backend:stablediffusion-ggml -f backend/Dockerfile.golang --build-arg BACKEND=stablediffusion-ggml .
500-
501-
docker-save-stablediffusion-ggml: backend-images
502-
docker save local-ai-backend:stablediffusion-ggml -o backend-images/stablediffusion-ggml.tar
503-
504-
docker-build-rerankers:
505-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:rerankers -f backend/Dockerfile.python --build-arg BACKEND=rerankers .
506-
507-
docker-build-transformers:
508-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:transformers -f backend/Dockerfile.python --build-arg BACKEND=transformers .
509-
510-
docker-build-diffusers:
511-
docker build --progress=plain --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:diffusers -f backend/Dockerfile.python --build-arg BACKEND=diffusers ./backend
512-
513-
docker-save-diffusers: backend-images
514-
docker save local-ai-backend:diffusers -o backend-images/diffusers.tar
515-
516-
docker-build-whisper:
517-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) --build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) -t local-ai-backend:whisper -f backend/Dockerfile.golang --build-arg BACKEND=whisper .
518-
519-
docker-save-whisper: backend-images
520-
docker save local-ai-backend:whisper -o backend-images/whisper.tar
521-
522-
docker-build-faster-whisper:
523-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:faster-whisper -f backend/Dockerfile.python --build-arg BACKEND=faster-whisper .
524-
525-
docker-build-coqui:
526-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:coqui -f backend/Dockerfile.python --build-arg BACKEND=coqui .
527-
528-
docker-build-bark:
529-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:bark -f backend/Dockerfile.python --build-arg BACKEND=bark .
530-
531-
docker-build-chatterbox:
532-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:chatterbox -f backend/Dockerfile.python --build-arg BACKEND=chatterbox ./backend
533-
534-
docker-build-vibevoice:
535-
docker build --progress=plain --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:vibevoice -f backend/Dockerfile.python --build-arg BACKEND=vibevoice ./backend
536-
537-
docker-build-exllama2:
538-
docker build --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg BASE_IMAGE=$(BASE_IMAGE) -t local-ai-backend:exllama2 -f backend/Dockerfile.python --build-arg BACKEND=exllama2 .
416+
# Backend metadata: BACKEND_NAME | DOCKERFILE_TYPE | BUILD_CONTEXT | PROGRESS_FLAG | NEEDS_BACKEND_ARG
417+
# llama-cpp is special - uses llama-cpp Dockerfile and doesn't need BACKEND arg
418+
BACKEND_LLAMA_CPP = llama-cpp|llama-cpp|.|false|false
419+
420+
# Golang backends
421+
BACKEND_BARK_CPP = bark-cpp|golang|.|false|true
422+
BACKEND_PIPER = piper|golang|.|false|true
423+
BACKEND_LOCAL_STORE = local-store|golang|.|false|true
424+
BACKEND_HUGGINGFACE = huggingface|golang|.|false|true
425+
BACKEND_SILERO_VAD = silero-vad|golang|.|false|true
426+
BACKEND_STABLEDIFFUSION_GGML = stablediffusion-ggml|golang|.|--progress=plain|true
427+
BACKEND_WHISPER = whisper|golang|.|false|true
428+
429+
# Python backends with root context
430+
BACKEND_RERANKERS = rerankers|python|.|false|true
431+
BACKEND_TRANSFORMERS = transformers|python|.|false|true
432+
BACKEND_FASTER_WHISPER = faster-whisper|python|.|false|true
433+
BACKEND_COQUI = coqui|python|.|false|true
434+
BACKEND_BARK = bark|python|.|false|true
435+
BACKEND_EXLLAMA2 = exllama2|python|.|false|true
436+
437+
# Python backends with ./backend context
438+
BACKEND_RFDETR = rfdetr|python|./backend|false|true
439+
BACKEND_KITTEN_TTS = kitten-tts|python|./backend|false|true
440+
BACKEND_NEUTTS = neutts|python|./backend|false|true
441+
BACKEND_KOKORO = kokoro|python|./backend|false|true
442+
BACKEND_VLLM = vllm|python|./backend|false|true
443+
BACKEND_DIFFUSERS = diffusers|python|./backend|--progress=plain|true
444+
BACKEND_CHATTERBOX = chatterbox|python|./backend|false|true
445+
BACKEND_VIBEVOICE = vibevoice|python|./backend|--progress=plain|true
446+
447+
# Helper function to build docker image for a backend
448+
# Usage: $(call docker-build-backend,BACKEND_NAME,DOCKERFILE_TYPE,BUILD_CONTEXT,PROGRESS_FLAG,NEEDS_BACKEND_ARG)
449+
define docker-build-backend
450+
docker build $(if $(filter-out false,$(4)),$(4)) \
451+
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
452+
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
453+
--build-arg CUDA_MAJOR_VERSION=$(CUDA_MAJOR_VERSION) \
454+
--build-arg CUDA_MINOR_VERSION=$(CUDA_MINOR_VERSION) \
455+
--build-arg UBUNTU_VERSION=$(UBUNTU_VERSION) \
456+
$(if $(filter true,$(5)),--build-arg BACKEND=$(1)) \
457+
-t local-ai-backend:$(1) -f backend/Dockerfile.$(2) $(3)
458+
endef
459+
460+
# Generate docker-build targets from backend definitions
461+
define generate-docker-build-target
462+
docker-build-$(word 1,$(subst |, ,$(1))):
463+
$$(call docker-build-backend,$(word 1,$(subst |, ,$(1))),$(word 2,$(subst |, ,$(1))),$(word 3,$(subst |, ,$(1))),$(word 4,$(subst |, ,$(1))),$(word 5,$(subst |, ,$(1))))
464+
endef
465+
466+
# Generate all docker-build targets
467+
$(eval $(call generate-docker-build-target,$(BACKEND_LLAMA_CPP)))
468+
$(eval $(call generate-docker-build-target,$(BACKEND_BARK_CPP)))
469+
$(eval $(call generate-docker-build-target,$(BACKEND_PIPER)))
470+
$(eval $(call generate-docker-build-target,$(BACKEND_LOCAL_STORE)))
471+
$(eval $(call generate-docker-build-target,$(BACKEND_HUGGINGFACE)))
472+
$(eval $(call generate-docker-build-target,$(BACKEND_SILERO_VAD)))
473+
$(eval $(call generate-docker-build-target,$(BACKEND_STABLEDIFFUSION_GGML)))
474+
$(eval $(call generate-docker-build-target,$(BACKEND_WHISPER)))
475+
$(eval $(call generate-docker-build-target,$(BACKEND_RERANKERS)))
476+
$(eval $(call generate-docker-build-target,$(BACKEND_TRANSFORMERS)))
477+
$(eval $(call generate-docker-build-target,$(BACKEND_FASTER_WHISPER)))
478+
$(eval $(call generate-docker-build-target,$(BACKEND_COQUI)))
479+
$(eval $(call generate-docker-build-target,$(BACKEND_BARK)))
480+
$(eval $(call generate-docker-build-target,$(BACKEND_EXLLAMA2)))
481+
$(eval $(call generate-docker-build-target,$(BACKEND_RFDETR)))
482+
$(eval $(call generate-docker-build-target,$(BACKEND_KITTEN_TTS)))
483+
$(eval $(call generate-docker-build-target,$(BACKEND_NEUTTS)))
484+
$(eval $(call generate-docker-build-target,$(BACKEND_KOKORO)))
485+
$(eval $(call generate-docker-build-target,$(BACKEND_VLLM)))
486+
$(eval $(call generate-docker-build-target,$(BACKEND_DIFFUSERS)))
487+
$(eval $(call generate-docker-build-target,$(BACKEND_CHATTERBOX)))
488+
$(eval $(call generate-docker-build-target,$(BACKEND_VIBEVOICE)))
489+
490+
# Pattern rule for docker-save targets
491+
docker-save-%: backend-images
492+
docker save local-ai-backend:$* -o backend-images/$*.tar
539493

540494
docker-build-backends: docker-build-llama-cpp docker-build-rerankers docker-build-vllm docker-build-transformers docker-build-diffusers docker-build-kokoro docker-build-faster-whisper docker-build-coqui docker-build-bark docker-build-chatterbox docker-build-vibevoice docker-build-exllama2
541495

0 commit comments

Comments
 (0)