Compare commits

...
Author SHA1 Message Date
Aleksander GrygierandGitHub 59549e01b6 ci : rename backend-only release jobs to windows-backend-* (#27731)
Makes it explicit in the job names that windows-backend,
windows-backend-cuda and windows-backend-sycl build only the ggml
backend library. ccache keys updated to include -backend- for
consistency.

Assisted-by: pi:Kimi-K3
2026-08-26 14:46:02 +02:00
Aleksander Grygier c185acffe9 ci : remove the ui-publish job
The prebuilt UI is distributed as a GH Releases asset, so publishing
it to the ggml-org/llama-ui HF bucket is redundant.

Remaining manual steps: delete the HF_TOKEN_UI_STATIC_OUTPUT secret
and clean up the ggml-org/llama-ui bucket.

Assisted-by: pi:Kimi-K3
2026-08-26 14:33:20 +02:00
Aleksander Grygier 25f3c82768 ui : replace HF bucket download with GH Releases assets
Make the source build fallback (priority 3 in scripts/ui-assets.cmake)
download llama-<version>-ui.tar.gz from GH Releases, verified against
the asset digest from the GitHub API (available for all releases,
including existing ones). When the exact version is not found, fall
back to the most recent bNNNN release, resolved via the API (the
releases are marked as prereleases, so /releases/latest does not match
them). GH_TOKEN/GITHUB_TOKEN can be used for authenticated downloads.

Remove LLAMA_UI_HF_BUCKET and the HF_UI_VERSION env var; the UI
version is now always derived from LLAMA_BUILD_NUMBER.

Assisted-by: pi:Kimi-K3
2026-08-26 14:32:51 +02:00
5 changed files with 161 additions and 173 deletions
+14 -24
View File
@@ -715,7 +715,8 @@ jobs:
key: release-windows-2025-vs2026-${{ matrix.arch }}-cpu
# TODO: build only the ggml-hip backend like the other windows backend jobs
# (windows-cuda, windows-sycl), then drop the ui-build dependency
# (windows-backend-cuda, windows-backend-sycl), then drop the ui-build
# dependency
windows-rocm:
needs: [check-release, ui-build]
if: ${{ needs.check-release.outputs.should_release == 'true' }}
@@ -854,7 +855,8 @@ jobs:
# note: builds only the backend library - llama-server (with the embedded UI)
# is injected from the windows-cpu zip during the release "Merge artifacts" step
windows:
windows-backend:
name: windows-backend-${{ matrix.backend }}
needs: [check-release]
if: ${{ needs.check-release.outputs.should_release == 'true' }}
@@ -948,8 +950,8 @@ jobs:
# note: builds only the ggml-cuda backend - llama-server is injected from the
# windows-cpu zip during the release "Merge artifacts" step
windows-cuda:
name: windows-cuda (${{ matrix.cuda }}, ${{ matrix.arch }})
windows-backend-cuda:
name: windows-backend-cuda-${{ matrix.cuda }}
needs: [check-release]
if: ${{ needs.check-release.outputs.should_release == 'true' }}
@@ -990,7 +992,7 @@ jobs:
- name: ccache
uses: ggml-org/ccache-action@v1.2.21
with:
key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }}
key: release-windows-2022-${{ matrix.arch }}-backend-cuda-${{ matrix.cuda }}
- name: Build
id: cmake_build
@@ -1045,11 +1047,11 @@ jobs:
- name: ccache-clear
uses: ./.github/actions/ccache-clear
with:
key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }}
key: release-windows-2022-${{ matrix.arch }}-backend-cuda-${{ matrix.cuda }}
# note: builds only the ggml-sycl backend - llama-server is injected from the
# windows-cpu zip during the release "Merge artifacts" step
windows-sycl:
windows-backend-sycl:
needs: [check-release]
if: ${{ needs.check-release.outputs.should_release == 'true' }}
@@ -1086,7 +1088,7 @@ jobs:
- name: ccache
uses: ggml-org/ccache-action@v1.2.21
with:
key: release-windows-2022-x64-sycl
key: release-windows-2022-x64-backend-sycl
- name: Build
id: cmake_build
@@ -1150,7 +1152,7 @@ jobs:
- name: ccache-clear
uses: ./.github/actions/ccache-clear
with:
key: release-windows-2022-x64-sycl
key: release-windows-2022-x64-backend-sycl
ubuntu-24-sycl:
needs: [check-release, ui-build]
@@ -1540,10 +1542,10 @@ jobs:
runs-on: ubuntu-slim
needs:
- windows
- windows-backend
- windows-cpu
- windows-cuda
- windows-sycl
- windows-backend-cuda
- windows-backend-sycl
- windows-rocm
- windows-openvino
- ubuntu-24-rocm
@@ -1731,15 +1733,3 @@ jobs:
});
}
}
ui-publish:
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
needs:
- release
uses: ./.github/workflows/ui-publish.yml
with:
version_tag: ${{ needs.release.outputs.tag_name }}
secrets:
hf_token: ${{ secrets.HF_TOKEN_UI_STATIC_OUTPUT }}
-75
View File
@@ -1,75 +0,0 @@
name: UI Publish
on:
workflow_call:
inputs:
version_tag:
description: 'Version tag to publish under (e.g., b1234)'
required: true
type: string
secrets:
hf_token:
description: 'Hugging Face token with write access'
required: true
jobs:
build:
name: Build static output
uses: ./.github/workflows/ui-build.yml
publish:
name: Publish UI Static Output
needs: build
runs-on: ubuntu-slim
permissions:
contents: read
env:
HF_BUCKET_NAME: ${{ vars.HF_BUCKET_UI_STATIC_OUTPUT }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 1
- name: Download UI build artifact
uses: actions/download-artifact@v7
with:
name: llama-ui.zip
path: tools/ui/dist/
- name: Create distribution archive
run: |
tar -czf dist.tar.gz -C tools/ui/dist .
sha256sum dist.tar.gz > dist.tar.gz.sha256
mv dist.tar.gz dist.tar.gz.sha256 tools/ui/dist/
- name: Install Hugging Face Hub CLI
run: pip install -U huggingface_hub
- name: Authenticate with Hugging Face
run: hf auth login --token ${{ secrets.hf_token }}
- name: Sync built files to Hugging Face bucket (version tag)
run: |
# Upload the built files to the Hugging Face bucket under the release version
hf buckets sync tools/ui/dist hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/${{ inputs.version_tag }} --delete --quiet
- name: Sync built files to Hugging Face bucket (latest)
run: |
# Also upload to the 'latest' directory for fallback downloads
hf buckets sync tools/ui/dist hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/latest --delete --quiet
- name: Verify upload
run: |
# List the files in the bucket to verify the upload
hf buckets list hf://buckets/ggml-org/${{ env.HF_BUCKET_NAME }}/${{ inputs.version_tag }} -R -h
- name: Clean up root-level files
run: |
# Clean up any old root-level files from previous non-versioned deployments
hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/index.html --yes 2>/dev/null || true
hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/bundle.js --yes 2>/dev/null || true
hf buckets rm ggml-org/${{ env.HF_BUCKET_NAME }}/bundle.css --yes 2>/dev/null || true
+1 -1
View File
@@ -135,7 +135,7 @@ option(LLAMA_BUILD_EXAMPLES "llama: build examples"
option(LLAMA_BUILD_SERVER "llama: build server example" ${LLAMA_STANDALONE})
option(LLAMA_BUILD_APP "llama: build the unified binary" ${LLAMA_STANDALONE})
option(LLAMA_BUILD_UI "llama: build the embedded Web UI for server" OFF)
option(LLAMA_USE_PREBUILT_UI "llama: use prebuilt UI from HF Bucket when available" ON)
option(LLAMA_USE_PREBUILT_UI "llama: download prebuilt UI from GH Releases when available" ON)
option(LLAMA_TOOLS_INSTALL "llama: install tools" ${LLAMA_TOOLS_INSTALL_DEFAULT})
option(LLAMA_TESTS_INSTALL "llama: install tests" ON)
+139 -51
View File
@@ -3,17 +3,16 @@
# Asset provisioning priority:
# 1. Pre-built assets in SRC_DIST_DIR (manually built by user)
# 2. If BUILD_UI=ON: npm build
# 3. If above did not produce assets and HF_ENABLED=ON: HF Bucket download
# of dist.tar.gz (verified against dist.tar.gz.sha256)
# 3. If above did not produce assets and PREBUILT_ENABLED=ON: GH Releases
# download of llama-<version>-ui.tar.gz (verified against the asset digest)
cmake_minimum_required(VERSION 3.18)
set(UI_SOURCE_DIR "" CACHE STRING "UI source directory (to run npm build)")
set(UI_BINARY_DIR "" CACHE STRING "UI binary directory (to store generated files)")
set(LLAMA_SOURCE_DIR "" CACHE STRING "Project source root (to resolve version from git)")
set(HF_BUCKET "" CACHE STRING "Hugging Face bucket name")
set(HF_VERSION "" CACHE STRING "Version to download (empty = resolve from git)")
set(HF_ENABLED "" CACHE STRING "Whether to allow HF Bucket download (ON/OFF)")
set(UI_VERSION "" CACHE STRING "Version to download (empty = resolve from git)")
set(PREBUILT_ENABLED "" CACHE STRING "Whether to allow GH Releases download (ON/OFF)")
set(BUILD_UI "" CACHE STRING "Build UI via npm (ON/OFF)")
set(LLAMA_UI_EMBED "" CACHE STRING "Path to llama-ui-embed helper")
set(LLAMA_UI_GZIP "" CACHE STRING "Apply gzip compress to assets to save bandwidth")
@@ -141,7 +140,7 @@ function(npm_build out_var)
message(STATUS "UI: running npm run build, output -> ${DIST_DIR}")
execute_process(
COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}" "LLAMA_UI_VERSION=${HF_VERSION}" "LLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}" "LLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
${NPM_EXECUTABLE} run build
WORKING_DIRECTORY "${WORK_DIR}"
RESULT_VARIABLE rc
@@ -164,8 +163,8 @@ function(npm_build out_var)
endfunction()
function(resolve_version out_var)
if(NOT "${HF_VERSION}" STREQUAL "")
set(${out_var} "${HF_VERSION}" PARENT_SCOPE)
if(NOT "${UI_VERSION}" STREQUAL "")
set(${out_var} "${UI_VERSION}" PARENT_SCOPE)
return()
endif()
@@ -180,68 +179,157 @@ function(resolve_version out_var)
set(${out_var} "" PARENT_SCOPE)
endfunction()
function(hf_download version out_var out_resolved)
# Resolve the most recent bNNNN release tag. The /releases/latest endpoint
# does not work here because the releases are marked as prereleases.
function(gh_latest_tag out_var)
set(${out_var} "" PARENT_SCOPE)
set(auth_headers "")
if(DEFINED ENV{GH_TOKEN} AND NOT "$ENV{GH_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GH_TOKEN}")
elseif(DEFINED ENV{GITHUB_TOKEN} AND NOT "$ENV{GITHUB_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GITHUB_TOKEN}")
endif()
set(json_file "${UI_BINARY_DIR}/gh-releases.json")
file(DOWNLOAD "https://api.github.com/repos/ggml-org/llama.cpp/releases?per_page=30" "${json_file}"
STATUS status TIMEOUT 30 ${auth_headers}
)
list(GET status 0 rc)
if(NOT rc EQUAL 0)
list(GET status 1 errmsg)
message(STATUS "UI: failed to query GH releases: ${errmsg}")
return()
endif()
file(READ "${json_file}" json)
file(REMOVE "${json_file}")
string(REGEX MATCHALL "\"tag_name\"[ \t]*:[ \t]*\"b[0-9]+\"" tags "${json}")
set(best 0)
set(best_tag "")
foreach(t ${tags})
string(REGEX MATCH "b[0-9]+" tag "${t}")
string(SUBSTRING "${tag}" 1 -1 num)
if(num GREATER best)
set(best ${num})
set(best_tag "${tag}")
endif()
endforeach()
set(${out_var} "${best_tag}" PARENT_SCOPE)
endfunction()
# Get the sha256 digest of the UI asset of a release tag via the GH API.
# Available for all assets, including ones from older releases.
function(gh_asset_digest tag out_var)
set(${out_var} "" PARENT_SCOPE)
set(auth_headers "")
if(DEFINED ENV{GH_TOKEN} AND NOT "$ENV{GH_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GH_TOKEN}")
elseif(DEFINED ENV{GITHUB_TOKEN} AND NOT "$ENV{GITHUB_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GITHUB_TOKEN}")
endif()
set(json_file "${UI_BINARY_DIR}/gh-release-${tag}.json")
file(DOWNLOAD "https://api.github.com/repos/ggml-org/llama.cpp/releases/tags/${tag}" "${json_file}"
STATUS status TIMEOUT 30 ${auth_headers}
)
list(GET status 0 rc)
if(NOT rc EQUAL 0)
list(GET status 1 errmsg)
message(STATUS "UI: failed to query release ${tag}: ${errmsg}")
file(REMOVE "${json_file}")
return()
endif()
file(READ "${json_file}" json)
file(REMOVE "${json_file}")
# the digest of an asset is the first digest after its name in the response
string(FIND "${json}" "\"llama-${tag}-ui.tar.gz\"" pos)
if(pos EQUAL -1)
message(STATUS "UI: release ${tag} has no UI asset")
return()
endif()
string(SUBSTRING "${json}" ${pos} -1 rest)
string(REGEX MATCH "\"digest\"[ \t]*:[ \t]*\"sha256:([0-9a-f]+)\"" match "${rest}")
if(NOT match)
message(STATUS "UI: no digest found for the UI asset of ${tag}")
return()
endif()
set(${out_var} "${CMAKE_MATCH_1}" PARENT_SCOPE)
endfunction()
function(gh_download version out_var out_resolved)
set(${out_var} FALSE PARENT_SCOPE)
set(${out_resolved} "" PARENT_SCOPE)
set(archive "${UI_BINARY_DIR}/dist.tar.gz")
set(archive "${UI_BINARY_DIR}/ui.tar.gz")
# Use HF_TOKEN to benefit from higher rate limits
# Use GH_TOKEN to benefit from higher rate limits
set(auth_headers "")
if(DEFINED ENV{HF_TOKEN} AND NOT "$ENV{HF_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{HF_TOKEN}")
if(DEFINED ENV{GH_TOKEN} AND NOT "$ENV{GH_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GH_TOKEN}")
elseif(DEFINED ENV{GITHUB_TOKEN} AND NOT "$ENV{GITHUB_TOKEN}" STREQUAL "")
list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{GITHUB_TOKEN}")
endif()
set(candidates "")
if(NOT "${version}" STREQUAL "")
list(APPEND candidates "${version}")
endif()
list(APPEND candidates "latest")
gh_latest_tag(latest_tag)
if(NOT "${latest_tag}" STREQUAL "")
list(APPEND candidates "${latest_tag}")
endif()
list(REMOVE_DUPLICATES candidates)
foreach(resolved ${candidates})
set(base "https://huggingface.co/buckets/${HF_BUCKET}/resolve/${resolved}")
set(base "https://github.com/ggml-org/llama.cpp/releases/download/${resolved}")
set(asset "llama-${resolved}-ui.tar.gz")
message(STATUS "UI: downloading from ${resolved}: ${base}/dist.tar.gz")
gh_asset_digest(${resolved} expected)
if("${expected}" STREQUAL "")
continue()
endif()
file(DOWNLOAD "${base}/dist.tar.gz?download=true" "${archive}"
message(STATUS "UI: downloading ${base}/${asset}")
file(DOWNLOAD "${base}/${asset}" "${archive}"
STATUS status TIMEOUT 300 ${auth_headers}
)
list(GET status 0 rc)
if(NOT rc EQUAL 0)
list(GET status 1 errmsg)
message(STATUS "UI: download dist.tar.gz from ${resolved} failed: ${errmsg}")
message(STATUS "UI: download ${asset} failed: ${errmsg}")
continue()
endif()
file(DOWNLOAD "${base}/dist.tar.gz.sha256?download=true" "${archive}.sha256"
STATUS status TIMEOUT 30 ${auth_headers}
)
list(GET status 0 rc)
if(NOT rc EQUAL 0)
list(GET status 1 errmsg)
message(STATUS "UI: download dist.tar.gz.sha256 from ${resolved} failed: ${errmsg}")
continue()
endif()
# Validate sha256 checkums
file(READ "${archive}.sha256" expected)
string(REGEX MATCH "^[0-9a-fA-F]+" expected "${expected}")
string(TOLOWER "${expected}" expected)
# Validate against the release asset digest
file(SHA256 "${archive}" actual)
if("${expected}" STREQUAL "" OR NOT "${actual}" STREQUAL "${expected}")
message(STATUS "UI: checksum mismatch for dist.tar.gz from ${resolved}")
if(NOT "${actual}" STREQUAL "${expected}")
message(STATUS "UI: checksum mismatch for ${asset}")
continue()
endif()
# The release archive wraps the assets in a llama-<tag>/ directory
set(extract_dir "${UI_BINARY_DIR}/ui-extract")
file(REMOVE_RECURSE "${extract_dir}")
file(MAKE_DIRECTORY "${extract_dir}")
file(ARCHIVE_EXTRACT INPUT "${archive}" DESTINATION "${extract_dir}")
if(NOT EXISTS "${extract_dir}/llama-${resolved}/index.html")
message(STATUS "UI: archive ${asset} is missing required assets")
continue()
endif()
# Clear DIST_DIR to remove stale files first
file(REMOVE_RECURSE "${DIST_DIR}")
file(ARCHIVE_EXTRACT INPUT "${archive}" DESTINATION "${DIST_DIR}")
if(NOT EXISTS "${DIST_DIR}/index.html")
message(STATUS "UI: archive from ${resolved} is missing required assets")
continue()
endif()
file(RENAME "${extract_dir}/llama-${resolved}" "${DIST_DIR}")
file(REMOVE_RECURSE "${extract_dir}")
message(STATUS "UI: archive verified and extracted")
set(${out_var} TRUE PARENT_SCOPE)
@@ -308,7 +396,7 @@ set(provisioned FALSE)
if(BUILD_UI)
# Resolve version from git build-info if not explicitly set
resolve_version(HF_VERSION)
resolve_version(UI_VERSION)
npm_build(NPM_OK)
if(NPM_OK)
set(provisioned TRUE)
@@ -316,9 +404,9 @@ if(BUILD_UI)
endif()
# ---------------------------------------------------------------------------
# 3. Priority 3: HF Bucket download (if npm did not produce assets and HF_ENABLED=ON)
# 3. Priority 3: GH Releases download (if npm did not produce assets and PREBUILT_ENABLED=ON)
# ---------------------------------------------------------------------------
if(NOT provisioned AND HF_ENABLED)
if(NOT provisioned AND PREBUILT_ENABLED)
resolve_version(VERSION)
set(stamp_ok FALSE)
@@ -335,16 +423,16 @@ if(NOT provisioned AND HF_ENABLED)
set(have_assets TRUE)
endif()
if(stamp_ok AND have_assets)
message(STATUS "UI: HF stamp '${stamped}' matches version, skipping HF fetch")
message(STATUS "UI: stamp '${stamped}' matches version, skipping GH Releases fetch")
set(provisioned TRUE)
else()
hf_download("${VERSION}" HF_OK HF_RESOLVED)
if(HF_OK)
file(WRITE "${STAMP_FILE}" "${HF_RESOLVED}")
message(STATUS "UI: HF download succeeded, stamp updated (${HF_RESOLVED})")
gh_download("${VERSION}" GH_OK GH_RESOLVED)
if(GH_OK)
file(WRITE "${STAMP_FILE}" "${GH_RESOLVED}")
message(STATUS "UI: GH Releases download succeeded, stamp updated (${GH_RESOLVED})")
set(provisioned TRUE)
else()
message(STATUS "UI: HF download failed")
message(STATUS "UI: GH Releases download failed")
endif()
endif()
endif()
@@ -357,7 +445,7 @@ if(NOT provisioned)
message(WARNING "UI: provisioning failed; embedding stale assets from ${DIST_DIR}")
else()
message(WARNING "UI: no assets available - building without an embedded UI. "
"In a disconnected environment, download the pre-built UI "
"In a disconnected environment, download llama-<version>-ui.tar.gz "
"from a llama.cpp release at "
"https://github.com/ggml-org/llama.cpp/releases and "
"extract to tools/ui/dist.")
+7 -22
View File
@@ -1,7 +1,6 @@
set(TARGET llama-ui)
set(LLAMA_UI_HF_BUCKET "ggml-org/llama-ui" CACHE STRING "Hugging Face bucket name for prebuilt UI assets")
set(LLAMA_UI_GZIP ON CACHE BOOL "Apply gzip compress to assets to save bandwidth")
set(LLAMA_UI_GZIP ON CACHE BOOL "Apply gzip compress to assets to save bandwidth")
# Backward compat: forward old var to new one
if(DEFINED LLAMA_BUILD_WEBUI)
@@ -12,25 +11,12 @@ if(DEFINED LLAMA_USE_PREBUILT_WEBUI)
set(LLAMA_USE_PREBUILT_UI ${LLAMA_USE_PREBUILT_WEBUI})
message(DEPRECATION "LLAMA_USE_PREBUILT_WEBUI is deprecated, use LLAMA_USE_PREBUILT_UI instead")
endif()
if(DEFINED LLAMA_WEBUI_HF_BUCKET)
set(LLAMA_UI_HF_BUCKET ${LLAMA_WEBUI_HF_BUCKET})
message(DEPRECATION "LLAMA_WEBUI_HF_BUCKET is deprecated, use LLAMA_UI_HF_BUCKET instead")
endif()
# Resolve HF asset version: explicit env var > derived from build number > unset
if(DEFINED ENV{HF_WEBUI_VERSION})
set(HF_UI_VERSION "$ENV{HF_WEBUI_VERSION}")
message(DEPRECATION "HF_WEBUI_VERSION env var is deprecated, use HF_UI_VERSION instead")
elseif(DEFINED ENV{HF_UI_VERSION})
set(HF_UI_VERSION "$ENV{HF_UI_VERSION}")
elseif(DEFINED LLAMA_BUILD_NUMBER)
set(HF_UI_VERSION "b${LLAMA_BUILD_NUMBER}")
# UI version used for the GH Releases download, derived from the build number
if(DEFINED LLAMA_BUILD_NUMBER AND NOT LLAMA_BUILD_NUMBER EQUAL 0)
set(UI_VERSION "b${LLAMA_BUILD_NUMBER}")
else()
set(HF_UI_VERSION "")
endif()
if(NOT "${HF_UI_VERSION}" STREQUAL "" AND NOT HF_UI_VERSION MATCHES "^[A-Za-z0-9._-]+$")
message(FATAL_ERROR "UI: invalid HF_UI_VERSION='${HF_UI_VERSION}' - must match ^[A-Za-z0-9._-]+$")
set(UI_VERSION "")
endif()
set(UI_CPP "${CMAKE_CURRENT_BINARY_DIR}/ui.cpp")
@@ -97,9 +83,8 @@ add_custom_target(llama-ui-assets ALL
"-DUI_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DLLAMA_SOURCE_DIR=${PROJECT_SOURCE_DIR}"
"-DLLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
"-DHF_BUCKET=${LLAMA_UI_HF_BUCKET}"
"-DHF_VERSION=${HF_UI_VERSION}"
"-DHF_ENABLED=${LLAMA_USE_PREBUILT_UI}"
"-DUI_VERSION=${UI_VERSION}"
"-DPREBUILT_ENABLED=${LLAMA_USE_PREBUILT_UI}"
"-DBUILD_UI=${LLAMA_BUILD_UI}"
"-DLLAMA_UI_EMBED=${LLAMA_UI_EMBED_EXE}"
"-DLLAMA_UI_GZIP=${LLAMA_UI_GZIP}"