Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions inference-engine/llamacpp/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# syntax=docker/dockerfile:1

FROM scratch
ARG TARGETOS
ARG TARGETARCH
ARG ACCEL
COPY --from=release-artifacts /com.docker.llama-server.native.$TARGETOS.$ACCEL.$TARGETARCH /com.docker.llama-server.native.$TARGETOS.$ACCEL.$TARGETARCH
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The destination path for the COPY command is the same as the source directory name. This will result in a deeply nested and cumbersome path for the executables inside the final image (e.g., /com.docker.llama-server.native.linux.cpu.amd64/bin/com.docker.llama-server). It's generally better to copy the contents of the artifact directory into a standard location like / to make the binaries easier to locate and execute. Adding a trailing slash to the source path will copy the directory's contents.

COPY --from=release-artifacts /com.docker.llama-server.native.$TARGETOS.$ACCEL.$TARGETARCH/ /

90 changes: 90 additions & 0 deletions inference-engine/llamacpp/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
DETECTED_OS := Linux
endif
ifeq ($(UNAME_S),Darwin)
DETECTED_OS := macOS
endif
endif

BUILD_DIR := build
INSTALL_DIR := install
NATIVE_DIR := native

.PHONY: build clean install-deps install-dir

build: install-deps
ifeq ($(DETECTED_OS),macOS)
@echo "Building for macOS..."
@echo "Configuring CMake..."
cmake -B $(BUILD_DIR) \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_DEPLOYMENT_TARGET=13.3 \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Hardcoding CMAKE_OSX_DEPLOYMENT_TARGET to 13.3 might be too restrictive for developers on older macOS versions. Consider lowering this value to support a wider range of development environments, or making it a configurable variable, unless this specific version is a strict requirement.

-DCMAKE_MACOSX_RPATH=ON \
-DCMAKE_INSTALL_RPATH='@executable_path/../lib' \
-DGGML_NATIVE=OFF \
-DGGML_OPENMP=OFF \
-DLLAMA_CURL=OFF \
-GNinja \
-S $(NATIVE_DIR)
@echo "Building..."
cmake --build $(BUILD_DIR) --config Release
@echo "Installing..."
cmake --install $(BUILD_DIR) \
--config Release \
--prefix $(INSTALL_DIR)
@echo "Cleaning install directory..."
rm -rf $(INSTALL_DIR)/lib/cmake
rm -rf $(INSTALL_DIR)/lib/pkgconfig
rm -rf $(INSTALL_DIR)/include
@echo "Build complete! Binaries are in $(INSTALL_DIR)"
else ifeq ($(DETECTED_OS),Linux)
@echo "Linux build not implemented yet"
@exit 1
else ifeq ($(DETECTED_OS),Windows)
@echo "Windows build not implemented yet"
@exit 1
else
@echo "Unsupported OS: $(DETECTED_OS)"
@exit 1
endif

install-deps:
ifeq ($(DETECTED_OS),macOS)
@echo "Installing build dependencies for macOS..."
@if ! command -v ninja >/dev/null 2>&1; then \
echo "Installing Ninja..."; \
brew install ninja; \
else \
echo "Ninja already installed"; \
fi
else ifeq ($(DETECTED_OS),Linux)
@echo "Linux dependency installation not implemented yet"
@exit 1
else ifeq ($(DETECTED_OS),Windows)
@echo "Windows dependency installation not implemented yet"
@exit 1
else
@echo "Unsupported OS: $(DETECTED_OS)"
@exit 1
endif

clean:
rm -rf $(BUILD_DIR)
rm -rf $(INSTALL_DIR)

install-dir:
@echo "$(INSTALL_DIR)"

help:
@echo "Available targets:"
@echo " build - Build llama.cpp (macOS only for now)"
@echo " install-deps - Install build dependencies"
@echo " install-dir - Print install directory path"
@echo " clean - Clean build artifacts"
@echo " help - Show this help"
6 changes: 6 additions & 0 deletions inference-engine/llamacpp/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# llama.cpp inference runtime

This repo contains implementations of the llama.cpp inference runtime.

* native/ - contains an implementaion based on `llama.cpp`'s native server
Copy link

Copilot AI Oct 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected spelling of 'implementaion' to 'implementation'.

Suggested change
* native/ - contains an implementaion based on `llama.cpp`'s native server
* native/ - contains an implementation based on `llama.cpp`'s native server

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (typo): Typo: 'implementaion' should be 'implementation'.

Change 'implementaion' to 'implementation' in the directory description.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There is a typo in "implementaion".

Suggested change
* native/ - contains an implementaion based on `llama.cpp`'s native server
* native/ - contains an implementation based on `llama.cpp`'s native server

implementation
1 change: 1 addition & 0 deletions inference-engine/llamacpp/native/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/
25 changes: 25 additions & 0 deletions inference-engine/llamacpp/native/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
cmake_minimum_required(VERSION 3.13)

project(
com.docker.llama-server.native
DESCRIPTION "DD inference server, based on llama.cpp native server"
LANGUAGES C CXX
)

option(DDLLAMA_BUILD_SERVER "Build the DD llama.cpp server executable" ON)
option(DDLLAMA_BUILD_UTILS "Build utilities, e.g. nv-gpu-info" OFF)
set(DDLLAMA_PATCH_COMMAND "patch" CACHE STRING "patch command")

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

if (DDLLAMA_BUILD_SERVER)
set(LLAMA_BUILD_COMMON ON)
add_subdirectory(vendor/llama.cpp)
add_subdirectory(vendor/llama.cpp/tools/mtmd)
add_subdirectory(src/server)
endif()

if (WIN32 AND DDLLAMA_BUILD_UTILS)
add_subdirectory(src/nv-gpu-info)
endif()
10 changes: 10 additions & 0 deletions inference-engine/llamacpp/native/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Native llama-server for DD

## Building

cmake -B build
cmake --build build --parallel 8 --config Release

## Running

DD_INF_UDS=<socket path> ./build/bin/com.docker.llama-server --model <path to model>
53 changes: 53 additions & 0 deletions inference-engine/llamacpp/native/cuda.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# syntax=docker/dockerfile:1

ARG CUDA_VERSION=12.9.0
ARG CUDA_IMAGE_VARIANT=ubuntu24.04

FROM nvidia/cuda:${CUDA_VERSION}-devel-${CUDA_IMAGE_VARIANT} AS builder

ARG TARGETARCH
ARG CUDA_IMAGE_VARIANT

COPY native/install-clang.sh .
RUN ./install-clang.sh "${CUDA_IMAGE_VARIANT}"

WORKDIR /llama-server

COPY .git .git
COPY native/CMakeLists.txt .
COPY native/src src
COPY native/vendor vendor

# Fix submodule .git file to point to correct location in container
RUN echo "gitdir: ../../.git/modules/native/vendor/llama.cpp" > vendor/llama.cpp/.git && \
sed -i 's|worktree = ../../../../../native/vendor/llama.cpp|worktree = /llama-server/vendor/llama.cpp|' .git/modules/native/vendor/llama.cpp/config

ENV CC=/usr/bin/clang-20
ENV CXX=/usr/bin/clang++-20
RUN echo "-B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DGGML_BACKEND_DL=ON \
-DGGML_CPU_ALL_VARIANTS=ON \
-DGGML_NATIVE=OFF \
-DGGML_OPENMP=OFF \
-DGGML_CUDA=ON \
-DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \
-DLLAMA_CURL=OFF \
-GNinja \
-S ." > cmake-flags
RUN cmake $(cat cmake-flags)
RUN cmake --build build --config Release
RUN cmake --install build --config Release --prefix install
Comment on lines +27 to +41
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To optimize the Docker image by reducing the number of layers, you can combine the cmake configuration, build, and install steps into a single RUN instruction. This also removes the need for the temporary cmake-flags file.

RUN cmake -B build \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DGGML_BACKEND_DL=ON \
    -DGGML_CPU_ALL_VARIANTS=ON \
    -DGGML_NATIVE=OFF \
    -DGGML_OPENMP=OFF \
    -DGGML_CUDA=ON \
    -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \
    -DLLAMA_CURL=OFF \
    -GNinja \
    -S . && \
    cmake --build build --config Release && \
    cmake --install build --config Release --prefix install


RUN rm install/bin/*.py
RUN rm -r install/lib/cmake
RUN rm -r install/lib/pkgconfig
RUN rm -r install/include
Comment on lines +43 to +46
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

These rm commands can be combined into a single RUN layer to reduce the image size.

RUN rm install/bin/*.py && rm -rf install/lib/cmake install/lib/pkgconfig install/include


FROM scratch AS final

ARG TARGETARCH
ARG CUDA_VERSION

COPY --from=builder /llama-server/install /com.docker.llama-server.native.linux.cuda$CUDA_VERSION.$TARGETARCH
62 changes: 62 additions & 0 deletions inference-engine/llamacpp/native/generic.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# syntax=docker/dockerfile:1

ARG BASE_IMAGE=ubuntu:25.10

FROM ${BASE_IMAGE} AS builder

ARG TARGETARCH

RUN apt-get update && apt-get install -y cmake ninja-build git build-essential curl
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (performance): No cleanup of apt cache after installation.

Add 'rm -rf /var/lib/apt/lists/*' after installing packages to minimize image size and prevent outdated package lists.

Suggested change
RUN apt-get update && apt-get install -y cmake ninja-build git build-essential curl
RUN apt-get update && apt-get install -y cmake ninja-build git build-essential curl && rm -rf /var/lib/apt/lists/*


COPY native/install-vulkan.sh .
RUN ./install-vulkan.sh

ENV VULKAN_SDK=/opt/vulkan
ENV PATH=$VULKAN_SDK/bin:$PATH
ENV LD_LIBRARY_PATH=$VULKAN_SDK/lib
ENV CMAKE_PREFIX_PATH=$VULKAN_SDK
ENV PKG_CONFIG_PATH=$VULKAN_SDK/lib/pkgconfig

WORKDIR /llama-server

COPY .git .git
COPY native/CMakeLists.txt .
COPY native/src src
COPY native/vendor vendor

# Fix submodule .git file to point to correct location in container
RUN echo "gitdir: ../../.git/modules/native/vendor/llama.cpp" > vendor/llama.cpp/.git && \
sed -i 's|worktree = ../../../../../native/vendor/llama.cpp|worktree = /llama-server/vendor/llama.cpp|' .git/modules/native/vendor/llama.cpp/config

RUN echo "-B build \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_NATIVE=OFF \
-DGGML_OPENMP=OFF \
-DLLAMA_CURL=OFF \
-DGGML_VULKAN=ON \
-GNinja \
-S ." > cmake-flags
RUN if [ "${TARGETARCH}" = "amd64" ]; then \
echo " -DBUILD_SHARED_LIBS=ON \
-DGGML_BACKEND_DL=ON \
-DGGML_CPU_ALL_VARIANTS=ON" >> cmake-flags; \
elif [ "${TARGETARCH}" = "arm64" ]; then \
echo " -DBUILD_SHARED_LIBS=OFF" >> cmake-flags; \
else \
echo "${TARGETARCH} is not supported"; \
exit 1; \
fi
RUN cmake $(cat cmake-flags)
RUN cmake --build build --config Release -j 4
RUN cmake --install build --config Release --prefix install
Comment on lines +31 to +51
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To optimize the Docker image by reducing layers, the logic for setting CMake flags, configuring, building, and installing can be combined into a single RUN instruction. This avoids creating multiple layers and temporary files like cmake-flags.

RUN CMAKE_FLAGS="-B build -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DLLAMA_CURL=OFF -DGGML_VULKAN=ON -GNinja -S ." && \
    if [ "${TARGETARCH}" = "amd64" ]; then \
      CMAKE_FLAGS="$CMAKE_FLAGS -DBUILD_SHARED_LIBS=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON"; \
    elif [ "${TARGETARCH}" = "arm64" ]; then \
      CMAKE_FLAGS="$CMAKE_FLAGS -DBUILD_SHARED_LIBS=OFF"; \
    else \
      echo "${TARGETARCH} is not supported"; \
      exit 1; \
    fi && \
    cmake $CMAKE_FLAGS && \
    cmake --build build --config Release -j 4 && \
    cmake --install build --config Release --prefix install


RUN rm install/bin/*.py
RUN rm -r install/lib/cmake
RUN rm -r install/lib/pkgconfig
RUN rm -r install/include
Comment on lines +53 to +56
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

These rm commands can be combined into a single RUN layer to reduce the image size.

RUN rm install/bin/*.py && rm -rf install/lib/cmake install/lib/pkgconfig install/include


FROM scratch AS final

ARG TARGETARCH

COPY --from=builder /llama-server/install /com.docker.llama-server.native.linux.cpu.$TARGETARCH
24 changes: 24 additions & 0 deletions inference-engine/llamacpp/native/install-clang.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

main() {
set -eux -o pipefail

apt-get update && apt-get install -y cmake ninja-build git wget gnupg2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Missing noninteractive flags may cause issues in CI environments.

Add DEBIAN_FRONTEND=noninteractive to apt-get install to prevent prompts during automated builds.

Suggested change
apt-get update && apt-get install -y cmake ninja-build git wget gnupg2
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y cmake ninja-build git wget gnupg2

wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The tee command writes the GPG key to the specified file but also to standard output, which is not necessary here. You can redirect the standard output of tee to /dev/null to keep the build logs cleaner.

Suggested change
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc > /dev/null


if [ "$1" = "ubuntu22.04" ]; then
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" >> /etc/apt/sources.list
echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" >> /etc/apt/sources.list
elif [ "$1" = "ubuntu24.04" ]; then
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main" >> /etc/apt/sources.list
echo "deb-src http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main" >> /etc/apt/sources.list
else
echo "distro variant not supported yet"
exit 1
fi

apt-get update && apt-get install -y clang-20 lldb-20 lld-20
}

main "$@"

10 changes: 10 additions & 0 deletions inference-engine/llamacpp/native/install-vulkan.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

main() {
set -eux -o pipefail

apt-get install -y glslc libvulkan-dev
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Missing apt-get update before install may cause package issues.

Add 'apt-get update' before installing packages to avoid outdated package lists.

Suggested change
apt-get install -y glslc libvulkan-dev
apt-get update
apt-get install -y glslc libvulkan-dev

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

It's a best practice to run apt-get update before apt-get install to ensure you are getting the latest package lists. While the calling Dockerfile might do this, making the script self-contained improves robustness and prevents potential build failures due to stale package lists.

Suggested change
apt-get install -y glslc libvulkan-dev
apt-get update && apt-get install -y glslc libvulkan-dev

}

main "$@"

12 changes: 12 additions & 0 deletions inference-engine/llamacpp/native/src/nv-gpu-info/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
set(TARGET com.docker.nv-gpu-info)

add_library(nvapi STATIC IMPORTED)
set_target_properties(nvapi PROPERTIES
IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/vendor/nvapi/amd64/nvapi64.lib"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The path to nvapi64.lib is hardcoded for the amd64 architecture. This will cause build failures on other architectures like arm64, which is a supported target for this project on Windows. The path should be constructed dynamically based on the target architecture.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@p1-0tr @ekcasey does this mean there is a bug on arm64 Nvidia platforms at the moment?

INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/vendor/nvapi"
)

add_executable(${TARGET} nv-gpu-info.c)
install(TARGETS ${TARGET} RUNTIME)

target_link_libraries(${TARGET} nvapi)
75 changes: 75 additions & 0 deletions inference-engine/llamacpp/native/src/nv-gpu-info/nv-gpu-info.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#include <stdio.h>
#include "nvapi.h"

#pragma comment(lib, "nvapi64.lib")
int main() {
NvAPI_Status status = NVAPI_OK;
NvAPI_ShortString error_str = { 0 };

status = NvAPI_Initialize();
if (status != NVAPI_OK) {
NvAPI_GetErrorMessage(status, error_str);
printf("Failed to initialise NVAPI: %s\n", error_str);
Copy link

Copilot AI Oct 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected spelling of 'initialise' to 'initialize'.

Suggested change
printf("Failed to initialise NVAPI: %s\n", error_str);
printf("Failed to initialize NVAPI: %s\n", error_str);

Copilot uses AI. Check for mistakes.
return -1;
}

NvU32 driver_version;
NvAPI_ShortString build_branch;

status = NvAPI_SYS_GetDriverAndBranchVersion(&driver_version, build_branch);
if (status != NVAPI_OK) {
NvAPI_GetErrorMessage(status, error_str);
printf("Failed to retrieve driver info: %s\n", error_str);
return -1;
}
Comment on lines +9 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The pattern for checking NvAPI_Status and printing an error message is repeated multiple times throughout the file. To improve code maintainability and reduce duplication, consider extracting this logic into a helper function. For example:

bool check_nvapi_status(NvAPI_Status status, const char* message) {
    if (status != NVAPI_OK) {
        NvAPI_ShortString error_str = { 0 };
        NvAPI_GetErrorMessage(status, error_str);
        printf("%s: %s\n", message, error_str);
        return false;
    }
    return true;
}


printf("driver version: %u\n", driver_version);
printf("build branch string: %s\n", build_branch);

NV_PHYSICAL_GPUS_V1 nvPhysicalGPUs = { 0 };
nvPhysicalGPUs.version = NV_PHYSICAL_GPUS_VER1;

status = NvAPI_SYS_GetPhysicalGPUs(&nvPhysicalGPUs);
if (status != NVAPI_OK) {
NvAPI_GetErrorMessage(status, error_str);
printf("Failed to retrieve physical GPU descriptors: %s\n", error_str);
return -1;
}

for (NvU32 i = 0; i < nvPhysicalGPUs.gpuHandleCount; i++) {
NvPhysicalGpuHandle gpu = nvPhysicalGPUs.gpuHandleData[i].hPhysicalGpu;

NvAPI_ShortString gpu_name = { 0 };
status = NvAPI_GPU_GetFullName(gpu, gpu_name);
if (status == NVAPI_OK) {
printf("GPU[%d]: full name: %s\n", i, gpu_name);
} else {
printf("GPU[%d]: full name: error\n", i);
}

NvU32 devid;
NvU32 subsysid;
NvU32 revid;
NvU32 extid;
status = NvAPI_GPU_GetPCIIdentifiers(gpu, &devid, &subsysid, &revid, &extid);
if (status == NVAPI_OK) {
printf("GPU[%d]: pci ids: device_id: 0x%04x; subsystem_id: 0x%04x; revision_id: 0x%04x; ext_device_id: 0x%04x\n",
i, devid, subsysid, revid, extid);
} else {
printf("GPU[%d]: pci ids: error\n", i);
}

NV_GPU_MEMORY_INFO_EX_V1 nvMemoryInfo = { 0 };
nvMemoryInfo.version = NV_GPU_MEMORY_INFO_EX_VER_1;

status = NvAPI_GPU_GetMemoryInfoEx(gpu, &nvMemoryInfo);
if (status == NVAPI_OK) {
printf("GPU[%d]: dedicated memory: %lld\n",
i, nvMemoryInfo.dedicatedVideoMemory);
} else {
printf("GPU[%d]: dedicated memory: error\n", i);
}
}

return 0;
}
5 changes: 5 additions & 0 deletions inference-engine/llamacpp/promote-rc.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# syntax=docker/dockerfile:1

ARG BASE_IMAGE

FROM ${BASE_IMAGE}