Team Ai
Datasetpublic

Brunobkr/llama.cpp_AlgMor24_github

ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes3.1kdownloads
ui-assets.cmake368 linesDownload Raw Back to scripts
1# Provision UI assets and generate ui.cpp/ui.h.2#3# Asset provisioning priority:4#   1. Pre-built assets in SRC_DIST_DIR (manually built by user)5#   2. If BUILD_UI=ON: npm build6#   3. If above did not produce assets and HF_ENABLED=ON: HF Bucket download7#      of dist.tar.gz (verified against dist.tar.gz.sha256)8 9cmake_minimum_required(VERSION 3.18)10 11set(UI_SOURCE_DIR     "" CACHE STRING "UI source directory (to run npm build)")12set(UI_BINARY_DIR     "" CACHE STRING "UI binary directory (to store generated files)")13set(LLAMA_SOURCE_DIR  "" CACHE STRING "Project source root (to resolve version from git)")14set(HF_BUCKET         "" CACHE STRING "Hugging Face bucket name")15set(HF_VERSION        "" CACHE STRING "Version to download (empty = resolve from git)")16set(HF_ENABLED        "" CACHE STRING "Whether to allow HF Bucket download (ON/OFF)")17set(BUILD_UI          "" CACHE STRING "Build UI via npm (ON/OFF)")18set(LLAMA_UI_EMBED    "" CACHE STRING "Path to llama-ui-embed helper")19set(LLAMA_UI_GZIP     "" CACHE STRING "Apply gzip compress to assets to save bandwidth")20 21set(DIST_DIR     "${UI_BINARY_DIR}/dist")22set(SRC_DIST_DIR "${UI_SOURCE_DIR}/dist")23set(WORK_DIR     "${UI_BINARY_DIR}/ui-src")24set(STAMP_FILE   "${UI_BINARY_DIR}/.ui-stamp")25set(UI_CPP       "${UI_BINARY_DIR}/ui.cpp")26set(UI_H         "${UI_BINARY_DIR}/ui.h")27 28function(npm_build_should_skip out_var)29    set(${out_var} FALSE PARENT_SCOPE)30 31    if(NOT EXISTS "${DIST_DIR}/index.html")32        return()33    endif()34 35    if(EXISTS "${STAMP_FILE}")36        return()37    endif()38 39    if(NOT EXISTS "${UI_SOURCE_DIR}/sources.cmake")40        return()41    endif()42    include("${UI_SOURCE_DIR}/sources.cmake")43 44    set(globs "")45    foreach(g ${UI_SOURCE_GLOBS})46        list(APPEND globs "${UI_SOURCE_DIR}/${g}")47    endforeach()48    file(GLOB_RECURSE sources ${globs})49    foreach(f ${UI_SOURCE_FILES})50        list(APPEND sources "${UI_SOURCE_DIR}/${f}")51    endforeach()52 53    file(TIMESTAMP "${DIST_DIR}/index.html" out_ts)54 55    foreach(s ${sources})56        if(NOT EXISTS "${s}")57            continue()58        endif()59        file(TIMESTAMP "${s}" s_ts)60        if(s_ts STRGREATER out_ts)61            return()62        endif()63    endforeach()64 65    set(${out_var} TRUE PARENT_SCOPE)66endfunction()67 68function(stage_sources)69    if(EXISTS "${WORK_DIR}")70        file(GLOB staged RELATIVE "${WORK_DIR}" "${WORK_DIR}/*")71        list(REMOVE_ITEM staged "node_modules")72        foreach(entry ${staged})73            file(REMOVE_RECURSE "${WORK_DIR}/${entry}")74        endforeach()75    endif()76 77    file(COPY "${UI_SOURCE_DIR}/"78        DESTINATION "${WORK_DIR}"79        NO_SOURCE_PERMISSIONS80        PATTERN "node_modules" EXCLUDE81    )82endfunction()83 84function(npm_build out_var)85    set(${out_var} FALSE PARENT_SCOPE)86 87    if(NOT EXISTS "${UI_SOURCE_DIR}/package.json")88        message(STATUS "UI: ${UI_SOURCE_DIR}/package.json not found, skipping npm")89        return()90    endif()91 92    npm_build_should_skip(skip)93    if(skip)94        message(STATUS "UI: npm output up-to-date, skipping build")95        set(${out_var} TRUE PARENT_SCOPE)96        return()97    endif()98 99    if(CMAKE_HOST_WIN32)100        find_program(NPM_EXECUTABLE NAMES npm.cmd npm.bat npm)101    else()102        find_program(NPM_EXECUTABLE npm)103    endif()104    if(NOT NPM_EXECUTABLE)105        message(STATUS "UI: npm not found, skipping npm build")106        return()107    endif()108 109    stage_sources()110 111    # npm writes node_modules/.package-lock.json on every successful install,112    # so a package-lock.json newer than this marker means node_modules is stale113    set(NPM_MARKER "${WORK_DIR}/node_modules/.package-lock.json")114    set(need_install FALSE)115    if(NOT EXISTS "${NPM_MARKER}")116        set(need_install TRUE)117    else()118        file(TIMESTAMP "${WORK_DIR}/package-lock.json" lock_ts)119        file(TIMESTAMP "${NPM_MARKER}" marker_ts)120        if(lock_ts STRGREATER marker_ts)121            set(need_install TRUE)122        endif()123    endif()124 125    if(need_install)126        message(STATUS "UI: running npm ci")127        execute_process(128            COMMAND ${NPM_EXECUTABLE} ci129            WORKING_DIRECTORY "${WORK_DIR}"130            RESULT_VARIABLE rc131            ERROR_VARIABLE  err132        )133        if(NOT rc EQUAL 0)134            message(STATUS "UI: npm ci failed (${rc})")135            message(STATUS "  stderr: ${err}")136            return()137        endif()138    endif()139 140    file(MAKE_DIRECTORY "${DIST_DIR}")141 142    message(STATUS "UI: running npm run build, output -> ${DIST_DIR}")143    execute_process(144        COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}" "LLAMA_UI_VERSION=${HF_VERSION}" "LLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"145                ${NPM_EXECUTABLE} run build146        WORKING_DIRECTORY "${WORK_DIR}"147        RESULT_VARIABLE rc148        ERROR_VARIABLE  err149    )150    if(NOT rc EQUAL 0)151        message(STATUS "UI: npm run build failed (${rc})")152        message(STATUS "  stderr: ${err}")153        return()154    endif()155 156    if(NOT EXISTS "${DIST_DIR}/index.html")157        message(STATUS "UI: npm build finished but assets missing in ${DIST_DIR}")158        return()159    endif()160 161    message(STATUS "UI: npm build succeeded")162    file(REMOVE "${STAMP_FILE}")163    set(${out_var} TRUE PARENT_SCOPE)164endfunction()165 166function(resolve_version out_var)167    if(NOT "${HF_VERSION}" STREQUAL "")168        set(${out_var} "${HF_VERSION}" PARENT_SCOPE)169        return()170    endif()171 172    if(EXISTS "${LLAMA_SOURCE_DIR}/cmake/build-info.cmake")173        include("${LLAMA_SOURCE_DIR}/cmake/build-info.cmake")174        if(NOT "${BUILD_NUMBER}" STREQUAL "" AND NOT BUILD_NUMBER EQUAL 0)175            set(${out_var} "b${BUILD_NUMBER}" PARENT_SCOPE)176            return()177        endif()178    endif()179 180    set(${out_var} "" PARENT_SCOPE)181endfunction()182 183function(hf_download version out_var out_resolved)184    set(${out_var}      FALSE PARENT_SCOPE)185    set(${out_resolved} ""    PARENT_SCOPE)186 187    set(archive "${UI_BINARY_DIR}/dist.tar.gz")188 189    # Use HF_TOKEN to benefit from higher rate limits190    set(auth_headers "")191    if(DEFINED ENV{HF_TOKEN} AND NOT "$ENV{HF_TOKEN}" STREQUAL "")192        list(APPEND auth_headers "HTTPHEADER" "Authorization: Bearer $ENV{HF_TOKEN}")193    endif()194 195    set(candidates "")196    if(NOT "${version}" STREQUAL "")197        list(APPEND candidates "${version}")198    endif()199    list(APPEND candidates "latest")200 201    foreach(resolved ${candidates})202        set(base "https://huggingface.co/buckets/${HF_BUCKET}/resolve/${resolved}")203 204        message(STATUS "UI: downloading from ${resolved}: ${base}/dist.tar.gz")205 206        file(DOWNLOAD "${base}/dist.tar.gz?download=true" "${archive}"207            STATUS status TIMEOUT 300 ${auth_headers}208        )209        list(GET status 0 rc)210        if(NOT rc EQUAL 0)211            list(GET status 1 errmsg)212            message(STATUS "UI: download dist.tar.gz from ${resolved} failed: ${errmsg}")213            continue()214        endif()215 216        file(DOWNLOAD "${base}/dist.tar.gz.sha256?download=true" "${archive}.sha256"217            STATUS status TIMEOUT 30 ${auth_headers}218        )219        list(GET status 0 rc)220        if(NOT rc EQUAL 0)221            list(GET status 1 errmsg)222            message(STATUS "UI: download dist.tar.gz.sha256 from ${resolved} failed: ${errmsg}")223            continue()224        endif()225 226        # Validate sha256 checkums227        file(READ "${archive}.sha256" expected)228        string(REGEX MATCH "^[0-9a-fA-F]+" expected "${expected}")229        string(TOLOWER "${expected}" expected)230        file(SHA256 "${archive}" actual)231        if("${expected}" STREQUAL "" OR NOT "${actual}" STREQUAL "${expected}")232            message(STATUS "UI: checksum mismatch for dist.tar.gz from ${resolved}")233            continue()234        endif()235 236        # Clear DIST_DIR to remove stale files first237        file(REMOVE_RECURSE "${DIST_DIR}")238 239        file(ARCHIVE_EXTRACT INPUT "${archive}" DESTINATION "${DIST_DIR}")240 241        if(NOT EXISTS "${DIST_DIR}/index.html")242            message(STATUS "UI: archive from ${resolved} is missing required assets")243            continue()244        endif()245 246        message(STATUS "UI: archive verified and extracted")247        set(${out_var}      TRUE          PARENT_SCOPE)248        set(${out_resolved} "${resolved}" PARENT_SCOPE)249        return()250    endforeach()251endfunction()252 253function(emit_files dist_dir)254    # If gzip is requested, compress every asset into a parallel _gzip/ tree255    # the structure stays the same; for ex: /abc/def --> /_gzip/abc/def256    # embed.cpp will check for _gzip and will pick it up257    if(LLAMA_UI_GZIP AND EXISTS "${dist_dir}/index.html")258        find_program(GZIP_EXECUTABLE gzip)259        if(NOT GZIP_EXECUTABLE)260            message(WARNING "UI: LLAMA_UI_GZIP requested but gzip not found, embedding uncompressed")261        else()262            set(gzip_dir "${dist_dir}/_gzip")263            file(REMOVE_RECURSE "${gzip_dir}")264            file(GLOB_RECURSE all_files RELATIVE "${dist_dir}" "${dist_dir}/*")265            foreach(f ${all_files})266                get_filename_component(dst_dir "${gzip_dir}/${f}" DIRECTORY)267                file(MAKE_DIRECTORY "${dst_dir}")268                execute_process(269                    COMMAND "${GZIP_EXECUTABLE}" -c "${dist_dir}/${f}"270                    OUTPUT_FILE "${gzip_dir}/${f}"271                    RESULT_VARIABLE gz_rc272                )273                if(NOT gz_rc EQUAL 0)274                    message(FATAL_ERROR "UI: gzip failed for ${f}")275                endif()276            endforeach()277            message(STATUS "UI: gzip compression applied (${gzip_dir})")278        endif()279    endif()280 281    set(args "${UI_CPP}" "${UI_H}")282    if(EXISTS "${dist_dir}/index.html")283        list(APPEND args "${dist_dir}")284    endif()285 286    execute_process(287        COMMAND "${LLAMA_UI_EMBED}" ${args}288        RESULT_VARIABLE rc289    )290    if(NOT rc EQUAL 0)291        message(FATAL_ERROR "UI: llama-ui-embed failed (${rc})")292    endif()293endfunction()294 295# ---------------------------------------------------------------------------296# 1. Priority 1: pre-built assets supplied in tools/ui/dist297# ---------------------------------------------------------------------------298if(EXISTS "${SRC_DIST_DIR}/index.html")299    message(STATUS "UI: using pre-built assets from ${SRC_DIST_DIR}")300    emit_files("${SRC_DIST_DIR}")301    return()302endif()303 304# ---------------------------------------------------------------------------305# 2. Priority 2: npm build (if BUILD_UI=ON)306# ---------------------------------------------------------------------------307set(provisioned FALSE)308 309if(BUILD_UI)310    # Resolve version from git build-info if not explicitly set311    resolve_version(HF_VERSION)312    npm_build(NPM_OK)313    if(NPM_OK)314        set(provisioned TRUE)315    endif()316endif()317 318# ---------------------------------------------------------------------------319# 3. Priority 3: HF Bucket download (if npm did not produce assets and HF_ENABLED=ON)320# ---------------------------------------------------------------------------321if(NOT provisioned AND HF_ENABLED)322    resolve_version(VERSION)323 324    set(stamp_ok FALSE)325    if(EXISTS "${STAMP_FILE}" AND NOT "${VERSION}" STREQUAL "")326        file(READ "${STAMP_FILE}" stamped)327        string(STRIP "${stamped}" stamped)328        if("${stamped}" STREQUAL "${VERSION}")329            set(stamp_ok TRUE)330        endif()331    endif()332 333    set(have_assets FALSE)334    if(EXISTS "${DIST_DIR}/index.html")335        set(have_assets TRUE)336    endif()337    if(stamp_ok AND have_assets)338        message(STATUS "UI: HF stamp '${stamped}' matches version, skipping HF fetch")339        set(provisioned TRUE)340    else()341        hf_download("${VERSION}" HF_OK HF_RESOLVED)342        if(HF_OK)343            file(WRITE "${STAMP_FILE}" "${HF_RESOLVED}")344            message(STATUS "UI: HF download succeeded, stamp updated (${HF_RESOLVED})")345            set(provisioned TRUE)346        else()347            message(STATUS "UI: HF download failed")348        endif()349    endif()350endif()351 352# ---------------------------------------------------------------------------353# 4. Fallback: warn about stale or missing assets, then emit whatever we have354# ---------------------------------------------------------------------------355if(NOT provisioned)356    if(EXISTS "${DIST_DIR}/index.html")357        message(WARNING "UI: provisioning failed; embedding stale assets from ${DIST_DIR}")358    else()359        message(WARNING "UI: no assets available - building without an embedded UI. "360                        "In a disconnected environment, download the pre-built UI "361                        "from a llama.cpp release at "362                        "https://github.com/ggml-org/llama.cpp/releases and "363                        "extract to tools/ui/dist.")364    endif()365endif()366 367emit_files("${DIST_DIR}")368 
Brunobkr/llama.cpp_AlgMor24_github · Team Ai