From 25ae3a9b331fffea50ff8d07a5cad34c33f1276f Mon Sep 17 00:00:00 2001 From: ynankani Date: Tue, 18 Aug 2026 04:15:53 +0000 Subject: [PATCH 01/29] CUDA: MMVQ nwarps=8 for bs=1 for dense models on DGX Spark (#26843) * CUDA: MMVQ nwarps=8 for bs=1 for dense models on DGX Spark Signed-off-by: ynankani * skip moe experts and allow others based on k geometry (allow only small idle tail) Signed-off-by: ynankani * rename MMVQ DGX Spark params to GB10 and fix MSVC constexpr lambda capture Signed-off-by: ynankani --------- Signed-off-by: ynankani --- ggml/src/ggml-cuda/mmvq.cu | 122 +++++++++++++++++++++++++++---------- 1 file changed, 91 insertions(+), 31 deletions(-) diff --git a/ggml/src/ggml-cuda/mmvq.cu b/ggml/src/ggml-cuda/mmvq.cu index 0589e65bdf..c999238045 100644 --- a/ggml/src/ggml-cuda/mmvq.cu +++ b/ggml/src/ggml-cuda/mmvq.cu @@ -4,6 +4,7 @@ #include "vecdotq.cuh" #include +#include typedef float (*vec_dot_q_cuda_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs); @@ -69,7 +70,8 @@ enum mmvq_parameter_table_id { MMVQ_PARAMETERS_GCN, MMVQ_PARAMETERS_RDNA2, MMVQ_PARAMETERS_RDNA3_0, - MMVQ_PARAMETERS_RDNA4 + MMVQ_PARAMETERS_RDNA4, + MMVQ_PARAMETERS_GB10 }; static constexpr __device__ mmvq_parameter_table_id get_device_table_id() { @@ -83,6 +85,8 @@ static constexpr __device__ mmvq_parameter_table_id get_device_table_id() { return MMVQ_PARAMETERS_GCN; #elif defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= GGML_CUDA_CC_TURING && __CUDA_ARCH__ < GGML_CUDA_CC_AMPERE return MMVQ_PARAMETERS_TURING; +#elif defined(__CUDA_ARCH__) && __CUDA_ARCH__ == GGML_CUDA_CC_DGX_SPARK + return MMVQ_PARAMETERS_GB10; #else return MMVQ_PARAMETERS_GENERIC; #endif @@ -104,6 +108,9 @@ static __host__ mmvq_parameter_table_id get_device_table_id(int cc) { if (GGML_CUDA_CC_IS_NVIDIA(cc) && ggml_cuda_highest_compiled_arch(cc) >= GGML_CUDA_CC_TURING && ggml_cuda_highest_compiled_arch(cc) < GGML_CUDA_CC_AMPERE) { return MMVQ_PARAMETERS_TURING; } + if (GGML_CUDA_CC_IS_NVIDIA(cc) && ggml_cuda_highest_compiled_arch(cc) == GGML_CUDA_CC_DGX_SPARK) { + return MMVQ_PARAMETERS_GB10; + } return MMVQ_PARAMETERS_GENERIC; } @@ -351,7 +358,7 @@ static constexpr __device__ int get_mmvq_mmid_max_batch_for_device() { #endif } -static constexpr __host__ __device__ int calc_nwarps(ggml_type type, int ncols_dst, mmvq_parameter_table_id table_id) { +static constexpr __host__ __device__ int calc_nwarps(ggml_type type, int ncols_dst, mmvq_parameter_table_id table_id, bool small_k = false, bool halve_iters = false) { if (table_id == MMVQ_PARAMETERS_GENERIC) { switch (ncols_dst) { case 1: @@ -454,11 +461,32 @@ static constexpr __host__ __device__ int calc_nwarps(ggml_type type, int ncols_d return 1; } } + if (table_id == MMVQ_PARAMETERS_GB10) { + const int generic = calc_nwarps(type, ncols_dst, MMVQ_PARAMETERS_GENERIC); + // Only worth the wider block when it actually retires the K loop in half the trips (Observation) + if (ncols_dst == 1 && !small_k && halve_iters) { + switch (type) { + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q4_K: + case GGML_TYPE_Q5_K: + case GGML_TYPE_Q6_K: + case GGML_TYPE_IQ4_NL: + return 2 * generic; + default: + break; + } + } + return generic; + } return 1; } static constexpr __host__ __device__ int calc_rows_per_block(int ncols_dst, int table_id, bool small_k = false, int nwarps = 1) { - if (table_id == MMVQ_PARAMETERS_GENERIC || table_id == MMVQ_PARAMETERS_GCN || table_id == MMVQ_PARAMETERS_TURING) { + if (table_id == MMVQ_PARAMETERS_GENERIC || table_id == MMVQ_PARAMETERS_GCN || table_id == MMVQ_PARAMETERS_TURING || table_id == MMVQ_PARAMETERS_GB10) { switch (ncols_dst) { case 1: return small_k ? nwarps : 1; @@ -477,8 +505,8 @@ static constexpr __host__ __device__ int calc_rows_per_block(int ncols_dst, int return 1; } -template -__launch_bounds__(calc_nwarps(type, ncols_dst, get_device_table_id())*ggml_cuda_get_physical_warp_size(), 1) +template +__launch_bounds__(calc_nwarps(type, ncols_dst, get_device_table_id(), small_k, halve_iters)*ggml_cuda_get_physical_warp_size(), 1) static __global__ void mul_mat_vec_q( const void * vx_ptr, const void * vy_ptr, const int32_t * ids_ptr, const ggml_cuda_mm_fusion_args_device fusion, float * dst_ptr, const uint32_t ncols_x, const uint3 nchannels_y, const uint32_t stride_row_x, const uint32_t stride_col_y, @@ -495,7 +523,7 @@ static __global__ void mul_mat_vec_q( constexpr int qi = ggml_cuda_type_traits::qi; constexpr int vdr = get_vdr_mmvq(type); constexpr mmvq_parameter_table_id table_id = get_device_table_id(); - constexpr int nwarps = calc_nwarps(type, ncols_dst, table_id); + constexpr int nwarps = calc_nwarps(type, ncols_dst, table_id, small_k, halve_iters); constexpr int rows_per_cuda_block = calc_rows_per_block(ncols_dst, table_id, small_k, nwarps); constexpr int warp_size = ggml_cuda_get_physical_warp_size(); @@ -773,8 +801,8 @@ static __global__ void mul_mat_vec_q_moe( template static std::pair calc_launch_params( const int ncols_dst, const int nrows_x, const int nchannels_dst, const int nsamples_or_ntokens, - const int warp_size, const mmvq_parameter_table_id table_id, const bool small_k = false) { - const int nwarps = calc_nwarps(type, ncols_dst, table_id); + const int warp_size, const mmvq_parameter_table_id table_id, const bool small_k = false, const bool halve_iters = false) { + const int nwarps = calc_nwarps(type, ncols_dst, table_id, small_k, halve_iters); const int rpb = calc_rows_per_block(ncols_dst, table_id, small_k, nwarps); const int64_t nblocks = (nrows_x + rpb - 1) / rpb; const dim3 block_nums(nblocks, nchannels_dst, nsamples_or_ntokens); @@ -782,7 +810,7 @@ static std::pair calc_launch_params( return {block_nums, block_dims}; } -template +template static void mul_mat_vec_q_switch_fusion( const void * vx, const void * vy, const int32_t * ids, const ggml_cuda_mm_fusion_args_device fusion, float * dst, const uint32_t ncols_x, const uint3 nchannels_y, const uint32_t stride_row_x, const uint32_t stride_col_y, @@ -797,7 +825,7 @@ static void mul_mat_vec_q_switch_fusion( if constexpr (c_ncols_dst == 1) { if (has_fusion) { const ggml_cuda_kernel_launch_params launch_params = ggml_cuda_kernel_launch_params(block_nums, block_dims, nbytes_shared, stream); - ggml_cuda_kernel_launch(mul_mat_vec_q, launch_params, + ggml_cuda_kernel_launch(mul_mat_vec_q, launch_params, vx, vy, ids, fusion, dst, ncols_x, nchannels_y, stride_row_x, stride_col_y, stride_col_dst, channel_ratio, stride_channel_x, stride_channel_y, stride_channel_dst, sample_ratio, stride_sample_x, stride_sample_y, stride_sample_dst, ids_stride); @@ -808,7 +836,7 @@ static void mul_mat_vec_q_switch_fusion( GGML_ASSERT(!has_fusion && "fusion only supported for ncols_dst=1"); const ggml_cuda_kernel_launch_params launch_params = ggml_cuda_kernel_launch_params(block_nums, block_dims, nbytes_shared, stream); - ggml_cuda_kernel_launch(mul_mat_vec_q, launch_params, + ggml_cuda_kernel_launch(mul_mat_vec_q, launch_params, vx, vy, ids, fusion, dst, ncols_x, nchannels_y, stride_row_x, stride_col_y, stride_col_dst, channel_ratio, stride_channel_x, stride_channel_y, stride_channel_dst, sample_ratio, stride_sample_x, stride_sample_y, stride_sample_dst, ids_stride); @@ -860,16 +888,18 @@ static void mul_mat_vec_q_switch_ncols_dst( const bool has_ids = ids != nullptr; + // How the K loop divides up at the baseline block width, both decisions below use these. + constexpr int qk = ggml_cuda_type_traits::qk; + constexpr int qi = ggml_cuda_type_traits::qi; + constexpr int vdr = get_vdr_mmvq(type); + const int blocks_per_row_x = ncols_x / qk; + const int blocks_per_iter_1warp = vdr * warp_size / qi; + const auto should_use_small_k = [&](int c_ncols_dst) { // When K is small, increase rows_per_block to match nwarps so each warp has more work to do // Trigger when the full thread block covers all K blocks in a single loop iteration and few threads remain idle. - constexpr int qk = ggml_cuda_type_traits::qk; - constexpr int qi = ggml_cuda_type_traits::qi; - constexpr int vdr = get_vdr_mmvq(type); - const int blocks_per_row_x = ncols_x / qk; - const int blocks_per_iter_1warp = vdr * warp_size / qi; - const int nwarps = calc_nwarps(type, c_ncols_dst, table_id); - bool use = nwarps > 1 && blocks_per_row_x < nwarps * blocks_per_iter_1warp; + const int nwarps = calc_nwarps(type, c_ncols_dst, table_id); + bool use = nwarps > 1 && blocks_per_row_x < nwarps * blocks_per_iter_1warp; constexpr std::array iq_slow_turing = { GGML_TYPE_IQ3_XXS, @@ -902,6 +932,28 @@ static void mul_mat_vec_q_switch_ncols_dst( return use; }; + // Whether doubling nwarps pays off on the ncols_dst == 1 path, where K sets the K loop trip count. + const auto should_halve_iters = [&] { + if (table_id != MMVQ_PARAMETERS_GB10) { + return false; + } + + // Expert rows are gathered per token, so a wider block adds reduction work without reuse. + if (has_ids) { + return false; + } + + const int blocks_per_iter = calc_nwarps(type, 1, table_id) * blocks_per_iter_1warp; + const int iters = (blocks_per_row_x + blocks_per_iter - 1) / blocks_per_iter; + const int iters_wide = (blocks_per_row_x + blocks_per_iter * 2 - 1) / (blocks_per_iter * 2); + + // An odd trip count leaves half the wider block idle for its last iteration, that tail is + // only affordable once the loop is long enough to dilute it to an eighth of the work (observation). + const int idle = iters_wide * 2 - iters; + + return idle * 8 <= iters_wide * 2; + }; + if (has_ids && ncols_dst > 1) { // Multi-token MUL_MAT_ID path - dedicated MoE kernel mul_mat_vec_q_moe_launch( @@ -914,26 +966,34 @@ static void mul_mat_vec_q_switch_ncols_dst( switch (ncols_dst) { case 1: { - constexpr int c_ncols_dst = 1; + // static, else MSVC lambda capture breaks the constexpr uses below + static constexpr int c_ncols_dst = 1; - bool use_small_k = should_use_small_k(c_ncols_dst); + // Tag types keep the flags compile-time, so __launch_bounds__ matches what is launched. + const auto launch = [&](auto small_k_tag, auto halve_iters_tag) { + constexpr bool c_small_k = decltype(small_k_tag)::value; + // Types the table does not promote would compile a second, identical kernel. + constexpr bool c_promoted = + calc_nwarps(type, c_ncols_dst, MMVQ_PARAMETERS_GB10, false, true) != + calc_nwarps(type, c_ncols_dst, MMVQ_PARAMETERS_GB10, false, false); - if (use_small_k) { - std::pair dims = calc_launch_params(c_ncols_dst, nrows_x, nchannels_dst, - nsamples_dst, warp_size, table_id, true); - mul_mat_vec_q_switch_fusion( + constexpr bool c_halve_iters = decltype(halve_iters_tag)::value && c_promoted; + + const std::pair dims = calc_launch_params(c_ncols_dst, nrows_x, nchannels_dst, + nsamples_dst, warp_size, table_id, c_small_k, c_halve_iters); + mul_mat_vec_q_switch_fusion( vx, vy, ids, fusion, dst, ncols_x, nchannels_y_fd, stride_row_x, stride_col_y, stride_col_dst, channel_ratio_fd, stride_channel_x, stride_channel_y, stride_channel_dst, sample_ratio_fd, stride_sample_x, stride_sample_y, stride_sample_dst, dims.first, dims.second, 0, ids_stride, stream); + }; + + if (should_use_small_k(c_ncols_dst)) { + launch(std::true_type{}, std::false_type{}); + } else if (should_halve_iters()) { + launch(std::false_type{}, std::true_type{}); } else { - std::pair dims = calc_launch_params(c_ncols_dst, nrows_x, nchannels_dst, - nsamples_dst, warp_size, table_id); - mul_mat_vec_q_switch_fusion( - vx, vy, ids, fusion, dst, ncols_x, nchannels_y_fd, stride_row_x, stride_col_y, stride_col_dst, - channel_ratio_fd, stride_channel_x, stride_channel_y, stride_channel_dst, sample_ratio_fd, - stride_sample_x, stride_sample_y, stride_sample_dst, dims.first, dims.second, 0, ids_stride, - stream); + launch(std::false_type{}, std::false_type{}); } } break; case 2: { From 8b86400975fbbe29fca7f196ee208ab246a7c29f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 18 Aug 2026 10:14:41 +0300 Subject: [PATCH 02/29] ci : create pre-release with change log and nightly link in make-release (#27302) * ci : create pre-release with change log and nightly link in make-release After pushing the tag, create a pre-release using ggml-org/action-create-release. The release description is generated by scripts/make-release-desc.sh: the change log between the current and previous version (one line per commit), a link to the corresponding nightly build when it exists, and a note that semantic versioning is still work in progress. Assisted-by: pi:llama.cpp/Qwen3.8-27B * cmake : bump version to 0.1.2 Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : find the nightly tag by commit in make-release-desc.sh The nightly release is guaranteed by the release checks to point at HEAD, so instead of reconstructing its name (commit count, branch, hash) just pick the b* tag pointing at HEAD. This also drops the RELEASE_BRANCH env var from the workflow. Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : resolve the release commit from the version tag in make-release-desc.sh The change log and nightly lookup now use the commit the version tag points at (HEAD when the tag does not exist), instead of always HEAD. This makes the script usable locally for older versions, e.g. ./scripts/make-release-desc.sh v0.1.1. The tag is resolved to a SHA first, since --points-at does not peel annotated tags. Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : normalize the version argument in make-release-desc.sh Accept the version with or without the leading v (0.1.1 == v0.1.1) and reject anything else, instead of silently treating a bare version as a non-existent tag name. Assisted-by: pi:llama.cpp/Qwen3.8-27B * cont : clean-up --- .github/workflows/make-release.yml | 27 ++++++++++ CMakeLists.txt | 2 +- scripts/make-release-desc.sh | 87 ++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100755 scripts/make-release-desc.sh diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index 9bf289a8c2..78d7caa7ae 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -49,6 +49,33 @@ jobs: git push origin "${VERSION}" echo "Created and pushed tag ${VERSION}" + - name: Generate release description + id: desc + run: bash scripts/make-release-desc.sh "${{ steps.checks.outputs.version }}" + env: + GITHUB_REPOSITORY: ${{ github.repository }} + + - name: Create release + if: ${{ github.event.inputs.dry_run == 'false' }} + uses: ggml-org/action-create-release@v1 + env: + GITHUB_TOKEN: ${{ github.token }} + with: + tag_name: ${{ steps.checks.outputs.version }} + # TODO: remove the prerelease flag once the semantic versioning workflow is ready + # ref: https://github.com/ggml-org/ggml/discussions/1579 + prerelease: true + body: | + > [!NOTE] + > Semantic versioning is still work in progress. + > More info can be found in https://github.com/ggml-org/ggml/discussions/1579 + + ${{ steps.desc.outputs.nightly }} + + ## ${{ steps.desc.outputs.changelog_title }} + + ${{ steps.desc.outputs.changelog }} + - name: Dry run summary if: ${{ github.event.inputs.dry_run == 'true' }} run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 19f14e0d18..5c443c0dd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ include(CheckIncludeFileCXX) ### llama.cpp version set(LLAMA_VERSION_MAJOR 0) set(LLAMA_VERSION_MINOR 1) -set(LLAMA_VERSION_PATCH 1) +set(LLAMA_VERSION_PATCH 2) set(LLAMA_VERSION_BASE "${LLAMA_VERSION_MAJOR}.${LLAMA_VERSION_MINOR}.${LLAMA_VERSION_PATCH}") # whether this is a development/nightly build diff --git a/scripts/make-release-desc.sh b/scripts/make-release-desc.sh new file mode 100755 index 0000000000..100f855b35 --- /dev/null +++ b/scripts/make-release-desc.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# Generate the description of a release: the previous release version, the +# change log and the link to the nightly release corresponding to the commit being released. +# +# Usage: make-release-desc.sh +# : current release version (v.., the leading v is optional) +# +# The previous version is the highest plain semver tag (v..) +# strictly below . The change log lists all commits between the +# previous version tag and the release commit, one line per commit. +# +# The release commit is the commit points at when the tag exists, +# HEAD otherwise. The nightly release is the b* tag pointing at that commit +# (release.yml tags the same commit); the link is only generated when that +# tag exists. +# +# Env (when running in GitHub Actions): +# GITHUB_OUTPUT: previous_tag, changelog_title, changelog and nightly are written here +# GITHUB_REPOSITORY: owner/repo, used to build the nightly release URL (skipped when unset) +set -euo pipefail + +if [[ $# -ne 1 ]]; then + echo "Usage: $(basename "$0") " + exit 1 +fi +VERSION="$1" + +# Accept the version with or without the leading v, reject anything else +if [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + VERSION="v${VERSION}" +elif [[ ! "${VERSION}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Error: invalid version '${VERSION}' (expected v..)" + exit 1 +fi + +# Make sure all remote tags are available locally (skipped on local runs without origin) +if ! git fetch --tags origin 2>/dev/null; then + echo "Warning: could not fetch tags from origin (local run?)" +fi + +# Release commit: the commit points at when the tag exists, HEAD otherwise. +if ! RELEASE_COMMIT="$(git rev-parse -q --verify "refs/tags/${VERSION}^{commit}" 2>/dev/null)"; then + RELEASE_COMMIT="$(git rev-parse HEAD)" +fi + +echo "Release commit: $(git rev-parse --short "${RELEASE_COMMIT}")" + +PREV="$( { git tag --list; echo "${VERSION}"; } \ + | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \ + | sort -V \ + | awk -v cur="${VERSION}" '$0 == cur { exit } { prev = $0 } END { print prev }')" + +if [[ -n "${PREV}" ]]; then + CHANGELOG="$(git log --oneline "${PREV}..${RELEASE_COMMIT}")" + CHANGELOG_TITLE="Change log since ${PREV}" +else + CHANGELOG="(no previous release tag found)" + CHANGELOG_TITLE="Change log" +fi + +# Nightly release: the b* tag pointing at the release commit (|| true: no match is not an error) +NIGHTLY_TAG="$(git tag --points-at "${RELEASE_COMMIT}" | grep -E '(^|-)b[0-9]+(-[0-9a-f]{7})?$' | head -n 1 || true)" + +NIGHTLY="" +if [[ -n "${NIGHTLY_TAG}" ]]; then + if [[ -n "${GITHUB_REPOSITORY:-}" ]]; then + NIGHTLY_URL="https://github.com/${GITHUB_REPOSITORY}/releases/tag/${NIGHTLY_TAG}" + NIGHTLY="**Nightly build:** [${NIGHTLY_TAG}](${NIGHTLY_URL})" + echo "Nightly release: ${NIGHTLY_URL}" + fi +else + echo "No nightly release found for commit $(git rev-parse --short "${RELEASE_COMMIT}")" +fi + +echo "Previous version: ${PREV:-none}" +echo "${CHANGELOG}" + +if [[ -n "${GITHUB_OUTPUT:-}" ]]; then + { + echo "previous_tag=${PREV}" + echo "changelog_title=${CHANGELOG_TITLE}" + echo "nightly=${NIGHTLY}" + echo "changelog<> "${GITHUB_OUTPUT}" +fi From 27e345b574dd8c8838e2c06e47699a3135f16ec9 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 18 Aug 2026 11:16:51 +0300 Subject: [PATCH 03/29] build : fix xcframework + cmake clean-up (#27304) * xcframework : fix build * mtmd : remove unused include path * vendor : use vendor::hash alias target in cmake CMake reserves "::" in target names for imported/alias targets, so the real target keeps the name vendor-hash and a vendor::hash ALIAS target is added. Consumers (mtmd, llama-gguf-hash) now link against the namespaced alias. Assisted-by: pi:llama.cpp/Qwen3.8-27B * vendor : add cmake targets for all vendored libs with vendor:: aliases Add INTERFACE targets for the header-only vendor libs (miniaudio, nlohmann, sheredom, stb) and ALIAS targets named vendor:: for all of them, including cpp-httplib and hash. Each exposes the vendor/ root so includes are namespaced, e.g. . Consolidate the per-lib add_subdirectory calls into a single add_subdirectory(vendor), keeping the cpp-httplib gate on LLAMA_BUILD_COMMON. Consumers (llama-common, mtmd) now link the aliases instead of relying on raw vendor/ include paths. hash: consumers now include via "hash/hash.h"; the vendor/hash dir is kept as a PRIVATE include so the synced upstream sources compile unmodified. Assisted-by: pi:llama.cpp/Qwen3.8-27B * readme : use foo/bar names in acknowledgements Assisted-by: pi:llama.cpp/Qwen3.8-27B * ocd : fix valign --- CMakeLists.txt | 4 +--- README.md | 6 +++--- build-xcframework.sh | 1 + common/CMakeLists.txt | 3 ++- examples/gguf-hash/CMakeLists.txt | 2 +- examples/gguf-hash/gguf-hash.cpp | 6 +++--- tools/mtmd/CMakeLists.txt | 4 +--- tools/mtmd/mtmd-helper.cpp | 2 +- vendor/CMakeLists.txt | 11 +++++++++++ vendor/cpp-httplib/CMakeLists.txt | 2 ++ vendor/hash/CMakeLists.txt | 9 +++++++-- vendor/miniaudio/CMakeLists.txt | 6 ++++++ vendor/nlohmann/CMakeLists.txt | 6 ++++++ vendor/sheredom/CMakeLists.txt | 6 ++++++ vendor/stb/CMakeLists.txt | 6 ++++++ 15 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 vendor/CMakeLists.txt create mode 100644 vendor/miniaudio/CMakeLists.txt create mode 100644 vendor/nlohmann/CMakeLists.txt create mode 100644 vendor/sheredom/CMakeLists.txt create mode 100644 vendor/stb/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c443c0dd0..8da08ac5a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,12 +224,10 @@ add_subdirectory(src) # utils, programs, examples and tests # -# mtmd needs this even when common is not built -add_subdirectory(vendor/hash) +add_subdirectory(vendor) if (LLAMA_BUILD_COMMON) add_subdirectory(common) - add_subdirectory(vendor/cpp-httplib) endif() if (LLAMA_BUILD_COMMON AND LLAMA_BUILD_TESTS AND NOT CMAKE_JS_VERSION) diff --git a/README.md b/README.md index 1b341e7fbc..5960ef6843 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ The `llama.cpp` project is build on top of the [ggml](https://github.com/ggml-or ## Acknowledgements - [yhirose/cpp-httplib](https://github.com/yhirose/cpp-httplib) - Single-header HTTP server, used by `llama-server` - MIT license -- [stb-image](https://github.com/nothings/stb) - Single-header image format decoder, used by multimodal subsystem - Public domain +- [nothings/stb](https://github.com/nothings/stb) - Single-header image format decoder, used by multimodal subsystem - Public domain - [nlohmann/json](https://github.com/nlohmann/json) - Single-header JSON library, used by various tools/examples - MIT License -- [miniaudio.h](https://github.com/mackron/miniaudio) - Single-header audio format decoder, used by multimodal subsystem - Public domain -- [subprocess.h](https://github.com/sheredom/subprocess.h) - Single-header process launching solution for C and C++ - Public domain +- [mackron/miniaudio](https://github.com/mackron/miniaudio) - Single-header audio format decoder, used by multimodal subsystem - Public domain +- [sheredom/subprocess.h](https://github.com/sheredom/subprocess.h) - Single-header process launching solution for C and C++ - Public domain diff --git a/build-xcframework.sh b/build-xcframework.sh index e8b7247f4f..e405a1c0f6 100755 --- a/build-xcframework.sh +++ b/build-xcframework.sh @@ -290,6 +290,7 @@ combine_static_libraries() { "${base_dir}/${build_dir}/ggml/src/ggml-metal/${release_dir}/libggml-metal.a" "${base_dir}/${build_dir}/ggml/src/ggml-blas/${release_dir}/libggml-blas.a" "${base_dir}/${build_dir}/tools/mtmd/${release_dir}/libmtmd.a" + "${base_dir}/${build_dir}/vendor/hash/${release_dir}/libvendor-hash.a" ) # Create temporary directory for processing diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index d6cfc9a008..54691da3f4 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -126,7 +126,8 @@ set_target_properties(${TARGET} PROPERTIES MACHO_CURRENT_VERSION 0 # keep macOS linker from seeing oversized version number ) -target_include_directories(${TARGET} PUBLIC . ../vendor) +target_include_directories(${TARGET} PUBLIC .) +target_link_libraries (${TARGET} PUBLIC vendor::nlohmann vendor::sheredom) target_compile_features (${TARGET} PUBLIC cxx_std_17) if (LLAMA_SUBPROCESS) diff --git a/examples/gguf-hash/CMakeLists.txt b/examples/gguf-hash/CMakeLists.txt index 2542074fbc..f0fb8232a6 100644 --- a/examples/gguf-hash/CMakeLists.txt +++ b/examples/gguf-hash/CMakeLists.txt @@ -2,5 +2,5 @@ set(TARGET llama-gguf-hash) add_executable(${TARGET} gguf-hash.cpp) install(TARGETS ${TARGET} RUNTIME) -target_link_libraries(${TARGET} PRIVATE vendor-hash ggml ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE vendor::hash ggml ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_17) diff --git a/examples/gguf-hash/gguf-hash.cpp b/examples/gguf-hash/gguf-hash.cpp index 43de6300d9..317a5e342a 100644 --- a/examples/gguf-hash/gguf-hash.cpp +++ b/examples/gguf-hash/gguf-hash.cpp @@ -17,15 +17,15 @@ extern "C" { #endif -#include "xxhash/xxhash.h" -#include "sha256/sha256.h" +#include "hash/xxhash/xxhash.h" +#include "hash/sha256/sha256.h" #ifdef __cplusplus } #endif // sha1 is compiled as C++ and lives in a namespace, see scripts/sync_vendor.py -#include "sha1/sha1.h" +#include "hash/sha1/sha1.h" using namespace vendor_hash; diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index db758395ff..95aa853eaf 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -78,10 +78,8 @@ set_target_properties(mtmd PROPERTIES ) target_link_libraries (mtmd PUBLIC ggml llama) -target_link_libraries (mtmd PRIVATE Threads::Threads vendor-hash) +target_link_libraries (mtmd PRIVATE Threads::Threads vendor::hash vendor::miniaudio vendor::stb vendor::sheredom) target_include_directories(mtmd PUBLIC .) -target_include_directories(mtmd PRIVATE ../..) -target_include_directories(mtmd PRIVATE ../../vendor) target_compile_features (mtmd PRIVATE cxx_std_17) if (MTMD_VIDEO) diff --git a/tools/mtmd/mtmd-helper.cpp b/tools/mtmd/mtmd-helper.cpp index bce8e38cc3..cc966b93cf 100644 --- a/tools/mtmd/mtmd-helper.cpp +++ b/tools/mtmd/mtmd-helper.cpp @@ -12,7 +12,7 @@ #include "mtmd-helper-common.h" #include "llama.h" -#include "hash.h" +#include "hash/hash.h" #include #include diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt new file mode 100644 index 0000000000..4479dafcad --- /dev/null +++ b/vendor/CMakeLists.txt @@ -0,0 +1,11 @@ +# mtmd needs these even when common is not built +add_subdirectory(hash) +add_subdirectory(miniaudio) +add_subdirectory(nlohmann) +add_subdirectory(sheredom) +add_subdirectory(stb) + +# only used by common +if (LLAMA_BUILD_COMMON) + add_subdirectory(cpp-httplib) +endif() diff --git a/vendor/cpp-httplib/CMakeLists.txt b/vendor/cpp-httplib/CMakeLists.txt index 6a6eefed12..30ae8b47ed 100644 --- a/vendor/cpp-httplib/CMakeLists.txt +++ b/vendor/cpp-httplib/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_library(${TARGET} STATIC httplib.cpp httplib.h) +add_library(vendor::cpp-httplib ALIAS ${TARGET}) + # disable warnings in 3rd party code if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") target_compile_options(${TARGET} PRIVATE /w) diff --git a/vendor/hash/CMakeLists.txt b/vendor/hash/CMakeLists.txt index efdf58e63f..1654eb1850 100644 --- a/vendor/hash/CMakeLists.txt +++ b/vendor/hash/CMakeLists.txt @@ -16,6 +16,8 @@ add_library(${TARGET} STATIC ${VENDOR_SRCS} ) +add_library(vendor::hash ALIAS ${TARGET}) + target_compile_features(${TARGET} PRIVATE cxx_std_17) # disable warnings in 3rd party code, but keep them for hash.cpp @@ -29,5 +31,8 @@ set_source_files_properties(${VENDOR_SRCS} PROPERTIES COMPILE_OPTIONS ${NO_WARN_ # sha1 lives in a namespace to avoid a clash with boringssl, see scripts/sync_vendor.py set_source_files_properties(sha1/sha1.c PROPERTIES LANGUAGE CXX) -# sha256.c includes "rotate-bits/rotate-bits.h", so consumers get this dir too -target_include_directories(${TARGET} PUBLIC .) +# expose the vendor/ root so consumers can include via "hash/hash.h" +target_include_directories(${TARGET} PUBLIC ..) + +# internal includes of the vendored sources, e.g. sha256.c -> "rotate-bits/rotate-bits.h" +target_include_directories(${TARGET} PRIVATE .) diff --git a/vendor/miniaudio/CMakeLists.txt b/vendor/miniaudio/CMakeLists.txt new file mode 100644 index 0000000000..8c706b62fa --- /dev/null +++ b/vendor/miniaudio/CMakeLists.txt @@ -0,0 +1,6 @@ +# header-only: interface target exposing the vendor/ root so consumers +# can include via +add_library(miniaudio INTERFACE) +add_library(vendor::miniaudio ALIAS miniaudio) + +target_include_directories(miniaudio INTERFACE ..) diff --git a/vendor/nlohmann/CMakeLists.txt b/vendor/nlohmann/CMakeLists.txt new file mode 100644 index 0000000000..630b3748ac --- /dev/null +++ b/vendor/nlohmann/CMakeLists.txt @@ -0,0 +1,6 @@ +# header-only: interface target exposing the vendor/ root so consumers +# can include via +add_library(nlohmann INTERFACE) +add_library(vendor::nlohmann ALIAS nlohmann) + +target_include_directories(nlohmann INTERFACE ..) diff --git a/vendor/sheredom/CMakeLists.txt b/vendor/sheredom/CMakeLists.txt new file mode 100644 index 0000000000..f0c148500d --- /dev/null +++ b/vendor/sheredom/CMakeLists.txt @@ -0,0 +1,6 @@ +# header-only: interface target exposing the vendor/ root so consumers +# can include via +add_library(sheredom INTERFACE) +add_library(vendor::sheredom ALIAS sheredom) + +target_include_directories(sheredom INTERFACE ..) diff --git a/vendor/stb/CMakeLists.txt b/vendor/stb/CMakeLists.txt new file mode 100644 index 0000000000..14ea2f9e05 --- /dev/null +++ b/vendor/stb/CMakeLists.txt @@ -0,0 +1,6 @@ +# header-only: interface target exposing the vendor/ root so consumers +# can include via +add_library(stb INTERFACE) +add_library(vendor::stb ALIAS stb) + +target_include_directories(stb INTERFACE ..) From da786dc23e2bc060856c015dadc53400ff29ecfd Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 18 Aug 2026 11:28:01 +0300 Subject: [PATCH 04/29] ggml : bump version to 0.20.2 (ggml/1589) --- ggml/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index b4d627320c..b7110fa12b 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -5,7 +5,7 @@ project("ggml" C CXX ASM) ### GGML Version set(GGML_VERSION_MAJOR 0) set(GGML_VERSION_MINOR 20) -set(GGML_VERSION_PATCH 1) +set(GGML_VERSION_PATCH 2) set(GGML_VERSION_BASE "${GGML_VERSION_MAJOR}.${GGML_VERSION_MINOR}.${GGML_VERSION_PATCH}") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") From 1511ce3bc3f087376c8526b4ad07100bfabb277f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 18 Aug 2026 11:29:14 +0300 Subject: [PATCH 05/29] sync : ggml --- scripts/sync-ggml.last | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync-ggml.last b/scripts/sync-ggml.last index c001bae1eb..8a978f87b3 100644 --- a/scripts/sync-ggml.last +++ b/scripts/sync-ggml.last @@ -1 +1 @@ -3834fd814e74e8af277939dabd69ecc780affd21 +8c63e70982c95ceb862e3a1073a2c1beef75d60a From 7acdbb1f191d869bad8c5da9d4a2121defa340af Mon Sep 17 00:00:00 2001 From: BlackFoil <127078112+BlackFoil@users.noreply.github.com> Date: Tue, 18 Aug 2026 18:11:19 +0900 Subject: [PATCH 06/29] mtmd: fix LFM2 image tiling threshold (#27057) * mtmd: fix LFM2 image tiling threshold * refactor testing * fix * fix on windows --------- Co-authored-by: Xuan Son Nguyen --- tests/CMakeLists.txt | 3 ++ tests/test-mtmd-impl.cpp | 88 +++++++++++++++++++++++++++++++++++++++ tools/mtmd/CMakeLists.txt | 3 ++ tools/mtmd/clip-impl.h | 4 ++ tools/mtmd/mtmd-image.cpp | 21 +++++++++- tools/mtmd/mtmd-image.h | 2 + 6 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 tests/test-mtmd-impl.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 08c6f5a479..3ee51b5191 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -310,6 +310,9 @@ llama_build_and_test(test-mtmd-c-api.c) target_link_libraries(${LLAMA_TEST_NAME} PRIVATE mtmd) unset(LLAMA_TEST_NAME) +llama_build_and_test(test-mtmd-impl.cpp) +target_link_libraries(test-mtmd-impl PRIVATE mtmd) + # GGUF model data fetcher library for tests that need real model metadata # Only compile when cpp-httplib has SSL support (CPPHTTPLIB_OPENSSL_SUPPORT) if (TARGET cpp-httplib) diff --git a/tests/test-mtmd-impl.cpp b/tests/test-mtmd-impl.cpp new file mode 100644 index 0000000000..41cb53237e --- /dev/null +++ b/tests/test-mtmd-impl.cpp @@ -0,0 +1,88 @@ +#include "testing.h" + +#include "mtmd-image.h" + +#include +#include +#include +#include + +// this test file contains: +// 1. test cases for mtmd helpers +// 2. test cases for internal mtmd components +// internal headers can be included here + +struct test_registry { + using fn_t = void (*)(testing &); + + struct entry { + std::string name; + fn_t fn; + }; + + static std::vector & all() { + static std::vector entries; + return entries; + } + + test_registry(const char * name, fn_t fn) { + all().push_back({ name, fn }); + } +}; + +#define MAKE_TEST(name) \ + static void name(testing & t); \ + static const test_registry test_registry_ ## name(#name, &name); \ + static void name(testing & t) + + +// +// mtmd_image +// + +MAKE_TEST(test_image_preprocessor_lfm2) { + clip_hparams hparams; + hparams.patch_size = 16; + hparams.n_merge = 2; + hparams.set_limit_image_tokens(64, 256); + + // { image size, expected tiling } + const std::vector> cases = { + { { 704, 704 }, false }, + // 720 / (patch_size * n_merge) is exactly 22.5, so this only matches HF + // if round_by_factor rounds half to even (22) instead of away from zero (23) + { { 720, 720 }, false }, + { { 736, 736 }, true }, + { { 1024, 977 }, true }, + { { 1056, 384 }, false }, + }; + + for (const auto & [size, expected] : cases) { + const bool actual = mtmd_image_preprocessor_lfm2::should_tile(hparams, size); + + t.assert_equal( + "tiling for " + std::to_string(size.width) + "x" + std::to_string(size.height), + std::string(expected ? "tiled" : "single"), + std::string(actual ? "tiled" : "single")); + } +} + +// +// main +// + +int main(int argc, char ** argv) { + testing t(std::cout); + t.verbose = true; + + // usage: test-mtmd-impl [filter_regex] + for (int i = 1; i < argc; i++) { + t.set_filter(argv[i]); + } + + for (const auto & e : test_registry::all()) { + t.test(e.name, e.fn); + } + + return t.summary(); +} diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index 95aa853eaf..aa97c768a0 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -90,6 +90,9 @@ if (BUILD_SHARED_LIBS) set_target_properties (mtmd PROPERTIES POSITION_INDEPENDENT_CODE ON) target_compile_definitions(mtmd PRIVATE LLAMA_BUILD) target_compile_definitions(mtmd PUBLIC LLAMA_SHARED) + + # export all symbols so that internal components can be tested by test-mtmd-impl + set_target_properties (mtmd PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() set(MTMD_PUBLIC_HEADERS diff --git a/tools/mtmd/clip-impl.h b/tools/mtmd/clip-impl.h index 2c9ea499ce..ea85497760 100644 --- a/tools/mtmd/clip-impl.h +++ b/tools/mtmd/clip-impl.h @@ -858,6 +858,9 @@ static std::ifstream open_ifstream_binary(const std::string & fname) { } #endif +// in test-mtmd-impl, we include woth common.h and this file, and these functions are duplicated +// this is a quick fix to avoid compilation errors +#ifndef DIRECTORY_SEPARATOR static std::string string_format(const char * fmt, ...) { va_list ap; va_list ap2; @@ -915,6 +918,7 @@ inline bool string_ends_with(std::string_view str, std::string_view suffix) { return str.size() >= suffix.size() && str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; } +#endif // // gguf utils diff --git a/tools/mtmd/mtmd-image.cpp b/tools/mtmd/mtmd-image.cpp index 769b6efe61..0d9db4f622 100644 --- a/tools/mtmd/mtmd-image.cpp +++ b/tools/mtmd/mtmd-image.cpp @@ -1013,14 +1013,31 @@ mtmd_image_preproc_out mtmd_image_preprocessor_lfm2::preprocess(const clip_image return output; } +bool mtmd_image_preprocessor_lfm2::should_tile( + const clip_hparams & hparams, + const clip_image_size & original_size) { + const int align_size = hparams.patch_size * hparams.n_merge; + + const auto round_by_factor = [align_size](float x) { + // see https://github.com/ggml-org/llama.cpp/pull/27057#discussion_r3796264887 + return static_cast(std::nearbyint(static_cast(x) / align_size)) * align_size; + }; + + const int h_bar = std::max(hparams.patch_size, round_by_factor(original_size.height)); + const int w_bar = std::max(hparams.patch_size, round_by_factor(original_size.width)); + + return static_cast(h_bar) * static_cast(w_bar) > + static_cast(hparams.image_max_pixels) * max_pixels_tolerance; +} + mtmd_image_preprocessor_llava_uhd::slice_instructions mtmd_image_preprocessor_lfm2::get_slice_instructions(const clip_image_size & original_size) { mtmd_image_preprocessor_llava_uhd::slice_instructions inst; const int align_size = hparams.patch_size * hparams.n_merge; inst.overview_size = img_tool::calc_size_preserved_ratio( original_size, { align_size, hparams.image_min_pixels, hparams.image_max_pixels, 0 }); - // tile if either dimension exceeds tile_size with tolerance - const bool needs_tiling = original_size.width > tile_size * max_pixels_tolerance || original_size.height > tile_size * max_pixels_tolerance; + + const bool needs_tiling = should_tile(hparams, original_size); if (!needs_tiling) { inst.refined_size = clip_image_size{0, 0}; diff --git a/tools/mtmd/mtmd-image.h b/tools/mtmd/mtmd-image.h index 40dfea7eb4..732e27379d 100644 --- a/tools/mtmd/mtmd-image.h +++ b/tools/mtmd/mtmd-image.h @@ -148,6 +148,8 @@ struct mtmd_image_preprocessor_lfm2 : mtmd_image_preprocessor_llava_uhd { mtmd_image_preproc_out preprocess(const clip_image_u8 & img) override; slice_instructions get_slice_instructions(const clip_image_size & original_size) override; + static bool should_tile(const clip_hparams & hparams, const clip_image_size & original_size); + private: clip_image_size find_closest_aspect_ratio( float aspect_ratio, From c0296022f361beaab4c6ecf5def391d2fc598dae Mon Sep 17 00:00:00 2001 From: shivamkumard-ctrl Date: Tue, 18 Aug 2026 15:25:45 +0530 Subject: [PATCH 07/29] ci: add Windows ARM64 CUDA support to the manual workflow (#27300) - Add a CUDA 13.4 ARM64 matrix entry. - Build only ggml-cuda for x64 and ARM64. --- .github/actions/windows-setup-cuda/action.yml | 3 +- .github/workflows/build-cuda-windows.yml | 32 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/.github/actions/windows-setup-cuda/action.yml b/.github/actions/windows-setup-cuda/action.yml index 31250eda1b..917513b85e 100644 --- a/.github/actions/windows-setup-cuda/action.yml +++ b/.github/actions/windows-setup-cuda/action.yml @@ -6,8 +6,7 @@ inputs: required: true cuda_arch: description: "CUDA target architecture" - required: false - default: "x64" + required: true runs: using: "composite" diff --git a/.github/workflows/build-cuda-windows.yml b/.github/workflows/build-cuda-windows.yml index 8b59f3975c..95843946f5 100644 --- a/.github/workflows/build-cuda-windows.yml +++ b/.github/workflows/build-cuda-windows.yml @@ -22,6 +22,7 @@ env: jobs: cuda: + name: windows-cuda (${{ matrix.cuda }}, ${{ matrix.arch }}) runs-on: windows-2022 permissions: @@ -29,7 +30,16 @@ jobs: strategy: matrix: - cuda: ['12.4', '13.3'] + include: + - cuda: '12.4' + arch: x64 + defines: '-DGGML_CUDA_CUB_3DOT2=ON' + - cuda: '13.3' + arch: x64 + defines: '' + - cuda: '13.4' + arch: arm64 + defines: '-DCMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-msvc-cuda.cmake' steps: - name: Clone @@ -39,12 +49,13 @@ jobs: - name: ccache uses: ggml-org/ccache-action@v1.2.21 with: - key: release-windows-2022-x64-cuda-${{ matrix.cuda }} + key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }} - name: Install Cuda Toolkit uses: ./.github/actions/windows-setup-cuda with: cuda_version: ${{ matrix.cuda }} + cuda_arch: ${{ matrix.arch }} - name: Install Ninja id: install_ninja @@ -54,26 +65,21 @@ jobs: - name: Build id: cmake_build shell: cmd - # TODO: Remove GGML_CUDA_CUB_3DOT2 flag once CCCL 3.2 is bundled within CTK and that CTK version is used in this project run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch == 'x64' && 'x64' || 'amd64_arm64' }} cmake -S . -B build -G "Ninja Multi-Config" ^ - -DLLAMA_BUILD_SERVER=ON ^ - -DLLAMA_BUILD_BORINGSSL=ON ^ - -DGGML_NATIVE=OFF ^ -DGGML_BACKEND_DL=ON ^ - -DGGML_CPU_ALL_VARIANTS=ON ^ + -DGGML_NATIVE=OFF ^ + -DGGML_CPU=OFF ^ -DGGML_CUDA=ON ^ - -DGGML_RPC=ON ^ - -DGGML_CUDA_CUB_3DOT2=ON + -DLLAMA_BUILD_BORINGSSL=ON ${{ matrix.defines }} set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1 - cmake --build build --config Release -j %NINJA_JOBS% -t ggml - cmake --build build --config Release + cmake --build build --config Release -j %NINJA_JOBS% --target ggml-cuda - name: ccache-clear uses: ./.github/actions/ccache-clear with: - key: release-windows-2022-x64-cuda-${{ matrix.cuda }} + key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }} hip: runs-on: windows-2022 From 9d77fa17254e1dee4b9e92504c91611a60b1359f Mon Sep 17 00:00:00 2001 From: Zijun Yu Date: Tue, 18 Aug 2026 18:02:22 +0800 Subject: [PATCH 08/29] ci : Update OpenVINO to 2026.3, skip nemotron-h rollback test (#27292) * update to ov-2026.3, update device drivers * ci: skip nemotron-h rollback test on OpenVINO The OpenVINO backend does not support SSM_SCAN, so the Nemotron-H recurrent state rollback graph is split and cannot preserve the recurrent cache output shape. Keep the test enabled for other backends and retain the qwen35 OpenVINO rollback coverage. --------- Co-authored-by: ravi9 --- .devops/openvino.Dockerfile | 20 ++++++++++---------- .github/workflows/build-cache.yml | 10 +++++----- .github/workflows/build-openvino.yml | 14 +++++++------- .github/workflows/build-self-hosted.yml | 4 ++-- .github/workflows/release.yml | 8 ++++---- ci/run.sh | 2 +- docs/backend/OPENVINO.md | 12 ++++++------ 7 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.devops/openvino.Dockerfile b/.devops/openvino.Dockerfile index 9b2784b664..7b0249da97 100644 --- a/.devops/openvino.Dockerfile +++ b/.devops/openvino.Dockerfile @@ -1,18 +1,18 @@ -ARG OPENVINO_VERSION_MAJOR=2026.2.1 -ARG OPENVINO_VERSION_FULL=2026.2.1.21919.ede283a88e3 +ARG OPENVINO_VERSION_MAJOR=2026.3 +ARG OPENVINO_VERSION_FULL=2026.3.0.22451.bd8d6542e3c ARG UBUNTU_VERSION=24.04 # Intel GPU driver versions. https://github.com/intel/compute-runtime/releases -ARG IGC_VERSION=v2.36.3 -ARG IGC_VERSION_FULL=2_2.36.3+21719 -ARG COMPUTE_RUNTIME_VERSION=26.22.38646.4 -ARG COMPUTE_RUNTIME_VERSION_FULL=26.22.38646.4-0 +ARG IGC_VERSION=v2.38.2 +ARG IGC_VERSION_FULL=2_2.38.2+22051 +ARG COMPUTE_RUNTIME_VERSION=26.27.39122.11 +ARG COMPUTE_RUNTIME_VERSION_FULL=26.27.39122.11-0 ARG IGDGMM_VERSION=22.10.0 # Intel NPU driver versions. https://github.com/intel/linux-npu-driver/releases -ARG NPU_DRIVER_VERSION=v1.33.0 -ARG NPU_DRIVER_FULL=v1.33.0.20260529-26625960453 -ARG LIBZE1_VERSION=1.27.0-1~24.04~ppa2 +ARG NPU_DRIVER_VERSION=v1.35.0 +ARG NPU_DRIVER_FULL=v1.35.0.20260722-29947505341 +ARG LIBZE1_VERSION=1.28.2-1~24.04~ppa1 # Optional proxy build arguments ARG http_proxy= @@ -170,7 +170,7 @@ RUN --mount=type=cache,target=/var/cache/intel-npu,sharing=locked \ fi; \ DEB=/var/cache/intel-npu/libze1_${LIBZE1_VERSION}_amd64.deb; \ if [ ! -f "$DEB" ]; then \ - wget -q -O "$DEB" https://snapshot.ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu/20260324T100000Z/pool/main/l/level-zero-loader/libze1_${LIBZE1_VERSION}_amd64.deb; \ + wget -q -O "$DEB" https://snapshot.ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu/20260606T100000Z/pool/main/l/level-zero-loader/libze1_${LIBZE1_VERSION}_amd64.deb; \ fi; \ mkdir /tmp/npu/ && cd /tmp/npu/ && tar -xf "$TGZ" && cp "$DEB" .; \ apt-get update; \ diff --git a/.github/workflows/build-cache.yml b/.github/workflows/build-cache.yml index 604f842410..187427a8d4 100644 --- a/.github/workflows/build-cache.yml +++ b/.github/workflows/build-cache.yml @@ -40,9 +40,9 @@ jobs: runs-on: ubuntu-24.04 env: - # Sync versions in build.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + # Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Clone @@ -69,8 +69,8 @@ jobs: env: # Sync versions in build.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Clone diff --git a/.github/workflows/build-openvino.yml b/.github/workflows/build-openvino.yml index 938cde3f20..ee4268f970 100644 --- a/.github/workflows/build-openvino.yml +++ b/.github/workflows/build-openvino.yml @@ -39,8 +39,8 @@ jobs: env: # Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Clone @@ -81,7 +81,7 @@ jobs: # TODO: fix and re-enable the `test-llama-archs` test below run: | cd ${{ github.workspace }} - ctest --test-dir build/ReleaseOV -L main -E "test-llama-archs" --verbose --timeout 2000 + ctest --test-dir build/ReleaseOV -L main -E "test-llama-archs|test-recurrent-state-rollback-nemotron-h" --verbose --timeout 2000 - name: Test (GPU) id: cmake_test_gpu @@ -89,15 +89,15 @@ jobs: run: | cd ${{ github.workspace }} export GGML_OPENVINO_DEVICE=GPU - ctest --test-dir build/ReleaseOV -L main -E "test-llama-archs" --verbose --timeout 3000 + ctest --test-dir build/ReleaseOV -L main -E "test-llama-archs|test-recurrent-state-rollback-nemotron-h" --verbose --timeout 3000 openvino-windows-2022: runs-on: windows-2022 env: # Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Clone @@ -166,4 +166,4 @@ jobs: call "%OPENVINO_ROOT%\setupvars.bat" cd build - ctest --test-dir ReleaseOV -L main -E "test-llama-archs" -C Release --verbose --timeout 3000 + ctest --test-dir ReleaseOV -L main -E "test-llama-archs|test-recurrent-state-rollback-nemotron-h" -C Release --verbose --timeout 3000 diff --git a/.github/workflows/build-self-hosted.yml b/.github/workflows/build-self-hosted.yml index 0ef202193c..fe2ab81547 100644 --- a/.github/workflows/build-self-hosted.yml +++ b/.github/workflows/build-self-hosted.yml @@ -288,8 +288,8 @@ jobs: env: # Sync versions in build.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Clone diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eba2bd87b5..9de593b9c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -446,8 +446,8 @@ jobs: env: # Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Set OpenVINO version output @@ -562,8 +562,8 @@ jobs: env: # Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile - OPENVINO_VERSION_MAJOR: "2026.2.1" - OPENVINO_VERSION_FULL: "2026.2.1.21919.ede283a88e3" + OPENVINO_VERSION_MAJOR: "2026.3" + OPENVINO_VERSION_FULL: "2026.3.0.22451.bd8d6542e3c" steps: - name: Set OpenVINO version output diff --git a/ci/run.sh b/ci/run.sh index 8046df2551..3d1d75b5b5 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -190,7 +190,7 @@ if [ ! -z ${GG_BUILD_OPENVINO} ]; then CMAKE_EXTRA="${CMAKE_EXTRA} -DGGML_OPENVINO=ON" # TODO: fix and re-enable the `test-llama-archs` test below - CTEST_EXTRA="-E test-llama-archs" + CTEST_EXTRA="-E test-llama-archs|test-recurrent-state-rollback-nemotron-h" fi ## helpers diff --git a/docs/backend/OPENVINO.md b/docs/backend/OPENVINO.md index 68b960a413..3cdf631ceb 100644 --- a/docs/backend/OPENVINO.md +++ b/docs/backend/OPENVINO.md @@ -237,8 +237,8 @@ chmod +x ubuntu-llamacpp-ov-install.sh # ============================================ set -euo pipefail -OPENVINO_VERSION_MAJOR="2026.2.1" -OPENVINO_VERSION_FULL="2026.2.1.21919.ede283a88e3" +OPENVINO_VERSION_MAJOR="2026.3" +OPENVINO_VERSION_FULL="2026.3.0.22451.bd8d6542e3c" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" OPENVINO_INSTALL_DIR="/opt/intel/openvino_${OPENVINO_VERSION_MAJOR}" @@ -334,7 +334,7 @@ echo " ./build/ReleaseOV/bin/llama-cli -m model.gguf" ``` > [!NOTE] -> The script pins OpenVINO `2026.2.1` via the `OPENVINO_VERSION_MAJOR` / `OPENVINO_VERSION_FULL` variables at the top — edit them to track a different release. +> The script pins OpenVINO `2026.3` via the `OPENVINO_VERSION_MAJOR` / `OPENVINO_VERSION_FULL` variables at the top — edit them to track a different release. @@ -364,8 +364,8 @@ REM ============================================ REM llama.cpp OpenVINO Build Script (Ninja) REM ============================================ -set "OPENVINO_VERSION_MAJOR=2026.2.1" -set "OPENVINO_VERSION_FULL=2026.2.1.21919.ede283a88e3" +set "OPENVINO_VERSION_MAJOR=2026.3" +set "OPENVINO_VERSION_FULL=2026.3.0.22451.bd8d6542e3c" set "SCRIPT_DIR=%~dp0" set "VCPKG_DIR=C:\vcpkg" @@ -547,7 +547,7 @@ endlocal ``` > [!NOTE] -> The script pins OpenVINO `2026.2.1` via the `OPENVINO_VERSION_MAJOR` / `OPENVINO_VERSION_FULL` variables at the top — edit them to track a different release. From any new shell, source the matching `setupvars` script via the junction — `call "C:\Intel\openvino\setupvars.bat"` from `cmd`, or `& "C:\Intel\openvino\setupvars.ps1"` from PowerShell. If `winget` cannot register Visual Studio Build Tools on first run, install them once manually and re-run the script from an elevated **Developer Command Prompt for VS 2022**. +> The script pins OpenVINO `2026.3` via the `OPENVINO_VERSION_MAJOR` / `OPENVINO_VERSION_FULL` variables at the top — edit them to track a different release. From any new shell, source the matching `setupvars` script via the junction — `call "C:\Intel\openvino\setupvars.bat"` from `cmd`, or `& "C:\Intel\openvino\setupvars.ps1"` from PowerShell. If `winget` cannot register Visual Studio Build Tools on first run, install them once manually and re-run the script from an elevated **Developer Command Prompt for VS 2022**. From 169e4a7ff201e666c2325bcd35afb64573e39d09 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 18 Aug 2026 14:35:04 +0300 Subject: [PATCH 09/29] readme : update status badges + regen AUTHORS (#27317) * readme : update status badges * authors : regen --- AUTHORS | 463 +++++++++++++++++++++++++++++++++++++++++++++++++++++- README.md | 7 +- 2 files changed, 466 insertions(+), 4 deletions(-) diff --git a/AUTHORS b/AUTHORS index c297f3c217..41c6672ca6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,8 +1,9 @@ -# date: Mon Feb 2 08:45:04 EET 2026 +# date: Tue Aug 18 14:32:43 EEST 2026 # this file is auto-generated by scripts/gen-authors.sh Нияз Гарифзянов <112617865+garrnizon@users.noreply.github.com> 杨朱 · Kiki +王金旭 <105263726+wjinxu@users.noreply.github.com> エシュナヴァリシア <148695646+eternaphia@users.noreply.github.com> 吴小白 <296015668@qq.com> 源文雨 <41315874+fumiama@users.noreply.github.com> @@ -10,47 +11,70 @@ 도로로도로또 <60079918+dororodoroddo@users.noreply.github.com> 손희준 谢乃闻 +0 <1939455790@qq.com> +0 <56664264+Yunzez@users.noreply.github.com> 0cc4m 0Marble <85058989+0Marble@users.noreply.github.com> 0xspringtime <110655352+0xspringtime@users.noreply.github.com> 20kdc 2114L3 <2114L3@users.noreply.github.com> 2f38b454 +3 a l i <58257628+alielfilali01@users.noreply.github.com> 3ooabkhxtn <31479382+3ooabkhxtn@users.noreply.github.com> 44670 <44670@users.noreply.github.com> 4onen <11580688+4onen@users.noreply.github.com> 65a <10104049+65a@users.noreply.github.com> 708-145 <40387547+708-145@users.noreply.github.com> +A B +a-huk <56552991+a-huk@users.noreply.github.com> a-n-n-a-l-e-e <150648636+a-n-n-a-l-e-e@users.noreply.github.com> +a3894281 a3sh <38979186+A3shTnT@users.noreply.github.com> aa956 Aadeshveer Singh <24b0926@iitb.ac.in> Aadeshveer Singh +aafsmarak <92150196+aafsmarak@users.noreply.github.com> +Aarnav Pai <52203828+arnu515@users.noreply.github.com> Aarni Koskela Aaron Miller Aaron Teo <57927438+taronaeo@users.noreply.github.com> Aaron Teo Aaryaman Vasishta Abheek Gulati +abhijain1204fujitsu <139222713+abhijain1204fujitsu@users.noreply.github.com> +Abhijit Ramesh +abhijitb11 <113058133+abhijitb11@users.noreply.github.com> Abhilash Majumder <30946547+abhilash1910@users.noreply.github.com> +Abhinay Krishna Abhishek Gopinath K <31348521+overtunned@users.noreply.github.com> +abotsis +Abraham Gonzalez Acly Adam +adavyas <121313528+adavyas@users.noreply.github.com> adel boussaken +adgup-qti Adithya Balaji AdithyanI +Aditya Singh <60082699+adityasingh2400@users.noreply.github.com> +Adrian <40185566+adrianisk@users.noreply.github.com> Adrian Adrian Hesketh Adrian Kretz Adrian Lundberg <47256989+alundb@users.noreply.github.com> +Adrien Adrien Gallouët Adrien Gallouët +AesSedai <7980540+AesSedai@users.noreply.github.com> afrideva <95653597+afrideva@users.noreply.github.com> ag2s20150909 <19373730+ag2s20150909@users.noreply.github.com> +agent-enemy-2 +AgoraPete agray3 Ahmad Tameem <113388789+Tameem-10xE@users.noreply.github.com> Ahmet Zeer ai-fonsi +aic0d3r <168572732+aic0d3r@users.noreply.github.com> Aidan <99101158+gSUz92nc@users.noreply.github.com> AidanBeltonS <87009434+AidanBeltonS@users.noreply.github.com> AidanBeltonS @@ -59,6 +83,8 @@ Akarshan Biswas Akarshan Biswas Akarshan Biswas akawrykow <142945436+akawrykow@users.noreply.github.com> +akleine +Al G Al Mochkin <14274697+amochkin@users.noreply.github.com> Alan Gray Alawode Oluwandabira @@ -70,9 +96,13 @@ Alberto Cabrera Pérez Alberto Cabrera Pérez Aldehir Rojas alek3y <44779186+alek3y@users.noreply.github.com> +Aleksander Grygier Aleksander Grygier +Aleksander Grygier Aleksei Nikiforov <103434461+AlekseiNikiforovIBM@users.noreply.github.com> +Alessandro de Oliveira Faria (A.K.A.CABELO) Alessandro98-git <61804547+Alessandro98-git@users.noreply.github.com> +Alex <18387287+wadealexc@users.noreply.github.com> Alex Alex Azarov Alex Azarov @@ -89,6 +119,10 @@ Alex Tuddenham <61622354+AlexsCode@users.noreply.github.com> Alex von Gluck IV Alex Wu alex-spacemit +Alexander Batischev +Alexander Heisler <126129661+heislera763@users.noreply.github.com> +Alexey Dubrov +Alexey Kopytko Alexey Parfenov Alexis Williams alexpinel <93524949+alexpinel@users.noreply.github.com> @@ -108,16 +142,24 @@ amd-lalithnc Amir amirai21 <89905406+amirai21@users.noreply.github.com> AmirAli Mirian <37371367+amiralimi@users.noreply.github.com> +Amos Wong <8733840+amoshydra@users.noreply.github.com> amritahs-ibm +An Long AN Long +Anand Patil <126432639+AnandPatil1@users.noreply.github.com> Ananta Bastola Anas Ahouzi <112881240+aahouzi@users.noreply.github.com> Anav Prasad anavp-nvidia +anchortense Andika Wasisto András Salamon +Andrea Arcangeli +Andrea Richiardi Andreas (Andi) Kunar Andreas Kieslinger <47689530+aendk@users.noreply.github.com> +Andreas Krebbel +Andreas Obersteiner Andrei Andrew Aladjev Andrew Canis @@ -126,9 +168,13 @@ Andrew Duffy Andrew Godfrey Andrew Marshall Andrew Minh Nguyen <40281306+amqdn@users.noreply.github.com> +Andrew Smith andrijdavid Andy Salerno Andy Tai +Andy Williams <8692+sobakasu@users.noreply.github.com> +andyluo7 <43718156+andyluo7@users.noreply.github.com> +Angel Galindo <131726962+AngelGalindo7@users.noreply.github.com> Ankur Verma <31362771+ankurvdev@users.noreply.github.com> anon998 <131767832+anon998@users.noreply.github.com> Anri Lombard @@ -140,7 +186,10 @@ Anton Mitkov Anton Mitkov Antonis Makropoulos Anudit Nagar +Anuj Attri anzz1 +Aparna M P +Aparna M P apaz apcameron <37645737+apcameron@users.noreply.github.com> arch-btw <57669023+arch-btw@users.noreply.github.com> @@ -149,11 +198,13 @@ ardfork <134447697+ardfork@users.noreply.github.com> Arik Poznanski arlo-phoenix <140345165+arlo-phoenix@users.noreply.github.com> Armen Kaleshian +Arsen Arutunan <58118221+limloop@users.noreply.github.com> Artem Artem Zinnatullin Artyom Lebedev aryantandon01 <80969509+aryantandon01@users.noreply.github.com> Asbjørn Olling +asf0 Ásgeir Bjarni Ingvarsson Asghar Ghorbani Ashish <1856117+ashishdatta@users.noreply.github.com> @@ -162,10 +213,12 @@ Ashraful Islam AT at8u <129688334+at8u@users.noreply.github.com> Atharva Dubey +Atomic-Germ <97569476+Atomic-Germ@users.noreply.github.com> Atsushi Tatsuma aubreyli Austin <77757836+teleprint-me@users.noreply.github.com> AustinMroz +AUTOMATIC1111 <16777216c@gmail.com> automaticcat awatuna <23447591+awatuna@users.noreply.github.com> b4b4o @@ -174,6 +227,7 @@ BADR bagheera <59658056+bghira@users.noreply.github.com> Bailey Chittle <39804642+bachittle@users.noreply.github.com> bandoti <141645996+bandoti@users.noreply.github.com> +Bar Haim BarfingLemurs <128182951+BarfingLemurs@users.noreply.github.com> Bart Louwers Bartowski <3266127+bartowski1182@users.noreply.github.com> @@ -184,24 +238,35 @@ BB-fat <45072480+BB-fat@users.noreply.github.com> Behnam M <58621210+ibehnam@users.noreply.github.com> beiller Beinsezii <39478211+Beinsezii@users.noreply.github.com> +Belem Zhang Ben Ashbaugh Ben Chen Ben Garney +Ben Guidarelli +Ben Racicot <1815385+BenRacicot@users.noreply.github.com> Ben Siraphob Ben Williams Benjamin Findley <39356821+Kartoffelsaft@users.noreply.github.com> Benjamin Lecaillon <84293038+blecaillon@users.noreply.github.com> Benni <73313922+BenjaminBruenau@users.noreply.github.com> Benson Wong +Berk Idem <55372926+berkidem@users.noreply.github.com> +Bernard Ladenthin Bernat Vadell Bernhard M. Wiedemann Bert Wagner +Bertay Eren <39909689+bertaye@users.noreply.github.com> +Bhavik Sharda <10757940+BLSharda@users.noreply.github.com> bhubbb <79117352+bhubbb@users.noreply.github.com> +Bill Sideris Billel Mokeddem Bingan <70050083+binganao@users.noreply.github.com> +Bipin Yadav <83943505+bipinyadav3175@users.noreply.github.com> Bizhao Shi <37729561+shibizhao@users.noreply.github.com> Bjarke Viksøe <164612031+bviksoe@users.noreply.github.com> Björn Ganster +BlackFoil <127078112+BlackFoil@users.noreply.github.com> +BlueMöhre bmwl Bo Zheng <368586905@qq.com> bobqianic <129547291+bobqianic@users.noreply.github.com> @@ -223,6 +288,7 @@ bryanSwk <93190252+bryanSwk@users.noreply.github.com> bsilvereagle bssrdf byte-6174 <88070277+byte-6174@users.noreply.github.com> +Caleb DeLeeuw <143902425+SolshineCode@users.noreply.github.com> Calvin Laurenson Cameron Cameron Kaiser @@ -238,6 +304,7 @@ cduk <19917266+cduk@users.noreply.github.com> cebtenzzre Cebtenzzre CentricStorm +Cetarthoriphros Chad Brewbaker Chad Voegele chaihahaha @@ -248,15 +315,20 @@ characharm <123120856+characharm@users.noreply.github.com> Charles Duffy Charles Xu <63788048+chaxu01@users.noreply.github.com> Charles Xu +Chedrian07 <108463785+Chedrian07@users.noreply.github.com> chen fan <350211548@qq.com> Chen Xi Chen Xi +Chen Yuan +Chen Yuan Cheng Shao Chenguang Li <757486878@qq.com> Chenguang Li <87689256+noemotiovon@users.noreply.github.com> +Chipmunk <101038159+CHIPMUNK-T0T@users.noreply.github.com> chiranko <96988916+chiranko@users.noreply.github.com> Chris Elrod Chris Kuehl +Chris Lee Chris Peterson Chris Rohlf Chris Thompson @@ -264,11 +336,16 @@ Christian Demsar Christian Demsar Christian Falch <875252+chrfalch@users.noreply.github.com> Christian Fillion +Christian Hoener zu Siederdissen Christian Kastner Christian Kögler Christian Köhnenkamp +Christian Schmitz Christian Zhou-Zheng <59622928+christianazinn@users.noreply.github.com> +Christopher Albert +Christopher Maher Christopher Nielsen <62156882+mascguy@users.noreply.github.com> +Chyan <163109379+chyan8@users.noreply.github.com> City <125218114+city96@users.noreply.github.com> CJ Pais Clark Saben <76020733+csaben@users.noreply.github.com> @@ -288,12 +365,15 @@ Congcong Cai Conrad Kramer Copilot <198982749+Copilot@users.noreply.github.com> Corentin REGAL +cphlipot <9103367+cphlipot@users.noreply.github.com> cpumaxx <163466046+cpumaxx@users.noreply.github.com> crasm crasm crat0z <11581854+crat0z@users.noreply.github.com> CRD716 CrispStrobe <154636388+CrispStrobe@users.noreply.github.com> +Cristiano Pinto <140563307+crowmoed@users.noreply.github.com> +crsawyer <7572190+crsawyer@users.noreply.github.com> Csaba Kecskemeti Cuong Trinh Manh daboe01 @@ -301,6 +381,7 @@ daghanerdonmez <44506702+daghanerdonmez@users.noreply.github.com> Damian Stewart daminho <37615795+daminho@users.noreply.github.com> DAN™ +Dan Hoffman <43101339+thedanhoffman@users.noreply.github.com> Dan Johansson <164997844+eddnjjn@users.noreply.github.com> Dan Johansson Dane Madsen @@ -308,6 +389,7 @@ DaniAndTheWeb <57776841+DaniAndTheWeb@users.noreply.github.com> Daniel Benjaminsson Daniel Bevenius Daniel Drake +Daniel Elliott Daniel Han Daniel Hiltgen Daniel Illescas Romero @@ -324,9 +406,11 @@ Dave Dave Airlie Dave Airlie Dave Della Costa +Davi Henrique Linhares <38295327+WizardlyBump17@users.noreply.github.com> David Chiu David Friehs David Huang <1969802+hjc4869@users.noreply.github.com> +David Huggins-Daines David Kennedy David Lima David Pflug @@ -334,10 +418,13 @@ david raistrick David Renshaw David Ribeiro Alves David Sommers <12738+databyte@users.noreply.github.com> +David Spruill <62445444+Spruill-1@users.noreply.github.com> David Yang David Zhao <90013954+Your-Cheese@users.noreply.github.com> +David366AI <86212041+David366AI@users.noreply.github.com> davidef DavidKorczynski +davidrhodus Dawid Potocki Dawid Wysocki <62249621+TortillaZHawaii@users.noreply.github.com> ddh0 @@ -345,11 +432,16 @@ ddh0 ddpasa <112642920+ddpasa@users.noreply.github.com> DDXDB <38449595+DDXDB@users.noreply.github.com> Dean +decahedron1 deepdiffuser <112834445+deepdiffuser@users.noreply.github.com> deepsek <166548550+deepsek@users.noreply.github.com> Deins Denis Spasyuk <34203011+dspasyuk@users.noreply.github.com> Derrick T. Woolworth +Dev-iL <6509619+Dev-iL@users.noreply.github.com> +Dev-X25874 <283057883+Dev-X25874@users.noreply.github.com> +Devedse <2350015+devedse@users.noreply.github.com> +Developer-Ecosystem-Engineering <65677710+Developer-Ecosystem-Engineering@users.noreply.github.com> Deven Mistry <31466137+deven367@users.noreply.github.com> devojony <61173062+devojony@users.noreply.github.com> diannao <55k@outlook.com> @@ -365,7 +457,9 @@ Djip007 <3705339+Djip007@users.noreply.github.com> Djip007 dm4 dm4 +Dmitry Atamanov Dmytro Minochkin +Dmytro Romanov Dobri Danchev <12420863+danchev@users.noreply.github.com> DocShotgun <126566557+DocShotgun@users.noreply.github.com> Doctor Shotgun <126566557+DocShotgun@users.noreply.github.com> @@ -375,6 +469,7 @@ Donghyeon Jeong <54725479+djeong20@users.noreply.github.com> Dongliang Wei <121270393+wdl339@users.noreply.github.com> Doomsdayrs <38189170+Doomsdayrs@users.noreply.github.com> DooWoong Lee (David) +DorianRudolph Dorin-Andrei Geman dotpy314 <33351922+dotpy314@users.noreply.github.com> Dou Xinpeng <15529241576@163.com> @@ -383,7 +478,9 @@ Douglas Hanley Dowon Dr. Tom Murphy VII Ph.D <499244+tom7@users.noreply.github.com> drbh +drrros <52050875+drrros@users.noreply.github.com> ds5t5 <145942675+ds5t5@users.noreply.github.com> +dskwe duduta dylan eastriver @@ -395,11 +492,14 @@ Ed Addario <29247825+EAddario@users.noreply.github.com> Ed Lee Ed Lepedus Eddie-Wang +eduardopessin <100053075+eduardopessin@users.noreply.github.com> Edward Taylor eiery <19350831+eiery@users.noreply.github.com> Elaine Elbios <141279586+Elbios@users.noreply.github.com> Elton Kola +Emanuil Rusev +Emil Askerov <56842174+EmilAskerov@users.noreply.github.com> Emmanuel Ferdman Emreerdog <34742675+Emreerdog@users.noreply.github.com> Engininja2 <139037756+Engininja2@users.noreply.github.com> @@ -407,6 +507,8 @@ Equim Eric Curtin Eric Curtin Eric Curtin +Eric Hartford +Eric Hsieh Eric Sommerlade Eric Zhang <34133756+EZForever@users.noreply.github.com> eric8607242 @@ -414,8 +516,10 @@ Erik Garrison Erik Scholz Ervin Áron Tasnádi Esko Toivonen +Ethan Turner Ettore Di Giacinto EugeoSynthesisThirtyTwo +Evan Huus Evan Jones Evan Miller Eve <139727413+netrunnereve@users.noreply.github.com> @@ -434,21 +538,29 @@ Fan Shupei FantasyGmm <16450052+FantasyGmm@users.noreply.github.com> fanyang Farbod Bijary <110523279+farbodbj@users.noreply.github.com> +Fathi Boudra Fattire <528174+fat-tire@users.noreply.github.com> +felix Felix fengerhu1 <2748250768@qq.com> fidoriel <49869342+fidoriel@users.noreply.github.com> +fiesh Finn Voorhees Firat FirstTimeEZ <179362031+FirstTimeEZ@users.noreply.github.com> fj-y-saito <85871716+fj-y-saito@users.noreply.github.com> FK +fl0rianr <226492742+fl0rianr@users.noreply.github.com> +fl0rianr Florent BENOIT Florian Badie Folko-Ven <71110216+Folko-Ven@users.noreply.github.com> +forforever73 <63285796+forforever73@users.noreply.github.com> Foul-Tarnished <107711110+Foul-Tarnished@users.noreply.github.com> Francisco Herrera Francisco Melo <43780565+francis2tm@users.noreply.github.com> +Francois Dugast +franitel Frank Mai FrankHB Frankie Robertson @@ -456,7 +568,10 @@ fraxy-v <65565042+fraxy-v@users.noreply.github.com> Fred Douglas <43351173+fredlas@users.noreply.github.com> Frederik Vogel Fredrik Hultin +fredzillman frob +Frosty40 +Funtowicz Morgan fxzjshm <11426482+fxzjshm@users.noreply.github.com> g2mt <166577174+g2mt@users.noreply.github.com> Gabe Goodhart @@ -468,13 +583,24 @@ GainLee Galunid Gary Linscott Gary Mulder +Gaspard Petit gatbontonpc Gaurav Garg <52341457+gaugarg-nv@users.noreply.github.com> Gaurav Garg +Gautam0507 <110854761+Gautam0507@users.noreply.github.com> Gavin Zhao Genkagaku.GPT +Geo Maciolek +George <35490284+noctrex@users.noreply.github.com> Georgi Gerganov +Geramy Loveless +Gerard Guillemas Martos +Gerard Martinez +Gerben van V +Gezahegne +ghleg Gian-Carlo Pascutto +GiantPrince <90118823+GiantPrince@users.noreply.github.com> GideonSerf Gilad S Gilad S. <7817232+giladgd@users.noreply.github.com> @@ -491,6 +617,10 @@ grahameth <96447521+grahameth@users.noreply.github.com> Gregor Jasny Grzegorz Grasza gtygo +Guanhuai Zhang <67999475+BiReRa@users.noreply.github.com> +Guido Imperiale +Guido Imperiale +Guilherme Quintino Guillaume "Vermeille" Sanchez Guillaume Wenzek Guoliang Hua <32868157+nbcsm@users.noreply.github.com> @@ -499,6 +629,7 @@ Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Gustavo Rocha Dias <91472747+gustrd@users.noreply.github.com> Guus Waals <_@guusw.nl> Guy Goldenberg +guyfischman <138163913+guyfischman@users.noreply.github.com> gwjr <502526+gwjr@users.noreply.github.com> h-h-h-h <13482553+h-h-h-h@users.noreply.github.com> Haggai Nuchi @@ -506,21 +637,31 @@ Haiyue Wang Halalaluyafail3 <55773281+Halalaluyafail3@users.noreply.github.com> Hale Chan Hamdoud Hakem <90524568+hamdoudhakem@users.noreply.github.com> +Hamish M. Blair Han Qingzhe <95479277+hNSBQZ@users.noreply.github.com> Han Yin HanishKVC hankcs +Hans Florian +Hao-Chen2337 <2113996104@qq.com> Haohui Mai +HaoJun ZHANG haopeng <657407891@qq.com> Haowei Wu Haoxiang Fei Harald Fernengel +Harapan Rachman +Harkirat Gill +HarrisonSec Hatsune Miku <129688334+at8u@users.noreply.github.com> HatsuneMikuUwU33 <173229399+HatsuneMikuUwU33@users.noreply.github.com> Haus1 +hcl Héctor Estrada Moreno +helanfxz <126638465+helanfxz@users.noreply.github.com> HelloKS Helton Reis <47722840+HRKings@users.noreply.github.com> +Hemanth Battu <56206750+hbattu73@users.noreply.github.com> Hendrik Erz Henk Poley Henri Vasserman @@ -534,20 +675,30 @@ Hesen Peng HighDoping HimariO hipudding +Hitesh Chopra <34310832+hiteshchopra11@users.noreply.github.com> hksdpc255 <43977088+hksdpc255@users.noreply.github.com> +hmscider <201289679+hmscider@users.noreply.github.com> Hoang Nguyen hoangmit +hogeheer499-commits +hokanosekai <69720899+hokanosekai@users.noreply.github.com> +Holger Voormann HonestQiao Hong Bo PENG hongbo.mo <352280764@qq.com> +Hongqiang Wang <66336067+wanghqc@users.noreply.github.com> +Hongqiang Wang Hongyu Ouyang <96765450+casavaca@users.noreply.github.com> hopkins385 <98618192+hopkins385@users.noreply.github.com> +hourhl <67227355+hourhl@users.noreply.github.com> Howard Su howlger howlger +hrushitfujitsu Hua Jiang Huang Qi Huawei Lin +Hugo Hugo Roussel Huifeng Ou <79071290+ho2103@users.noreply.github.com> hutli <6594598+hutli@users.noreply.github.com> @@ -555,9 +706,11 @@ hutli hutli hxer7963 hydai +iacopPBK iacore <74560659+iacore@users.noreply.github.com> Ian Bull Ian Bull +Ian Faust Ian Scrivener ibrahim khadraoui <132432132+ibrahimkhadraoui@users.noreply.github.com> Icecream95 @@ -568,13 +721,19 @@ igardev <49397134+igardev@users.noreply.github.com> igarnier IgnacioFDM Igor Okulist +Igor Rudenko Igor Smirnov Ihar Hrachyshka Ihar Hrachyshka +ihb2032 <40718643+ihb2032@users.noreply.github.com> Ikko Eltociear Ashimine Ilia Ilmer +Ilya Ilya Kurdyukov <59548320+ilyakurdyukov@users.noreply.github.com> Imad Saddik <79410781+ImadSaddik@users.noreply.github.com> +iMil +Incarnas <119618389+bit-incarnas@users.noreply.github.com> +Intel AI Get-to Market Customer Success and Solutions intelmatt <61025942+intelmatt@users.noreply.github.com> iohub Ionoclast Laboratories @@ -583,8 +742,10 @@ Isaac McFadyen IsaacDynamo <61521674+IsaacDynamo@users.noreply.github.com> Ishaan Gandhi iSma +Ismail <115064057+AlrIsmail@users.noreply.github.com> issixx <46835150+issixx@users.noreply.github.com> Ivan +Ivan Chikish Ivan Filipov <159561759+vanaka11@users.noreply.github.com> Ivan Komarov Ivan Stepanov @@ -596,6 +757,7 @@ Jack Mousseau Jack Mousseau JackJollimore <130917767+JackJollimore@users.noreply.github.com> jacobi petrucciani <8117202+jpetrucciani@users.noreply.github.com> +Jaden_Mach <88880593+jadenmach2@users.noreply.github.com> Jaeden Amero Jaemin Son Jafar Uruç @@ -604,11 +766,15 @@ jaime-m-p <167997752+jaime-m-p@users.noreply.github.com> Jake Karnes Jakkala Mahesh <155058658+MaheshJakkala@users.noreply.github.com> Jakub N +JamePeng James A Capozzoli <157492257+jac-jim@users.noreply.github.com> +James O'Leary <65884233+jpohhhh@users.noreply.github.com> James Reynolds jameswu2014 <545426914@qq.com> Jan Boon Jan Boon +Jan Ekström +Jan Patrick Lehr Jan Ploski Jannis Schönleber Jared Tweed @@ -620,8 +786,10 @@ Jason McCartney Jason Ni Jason Stillerman jason_w +Jassieluo <130133492+Jassieluo@users.noreply.github.com> Jay Jay Zenith <162098309+JayZenith@users.noreply.github.com> +Jayant Lohia JC <43374599+MrSMlT@users.noreply.github.com> jdomke <28772296+jdomke@users.noreply.github.com> Jean-Christophe Hoelt @@ -633,10 +801,14 @@ Jeffrey Quesnelle Jeremy Demeule Jeremy Rand <244188+JeremyRand@users.noreply.github.com> Jeroen Mostert +jeromew Jesse Jesse Gross Jesse Ikonen Jesse Jojo Johnson +Jesse LaRose +Jesse Posner +Jesus Talavera <145992175+jesus-talavera-ibm@users.noreply.github.com> Jett Janiak Jeximo JFLFY2255 @@ -646,22 +818,28 @@ Jiacheng (Jason) Chen <76919340+jiachengjason@users.noreply.github.com> Jiahao Li jiahao su Jian Liao +Jiang, Fish JidongZhang-THU <1119708529@qq.com> Jie Fu (傅杰) Jie Fu (傅杰) jiez <373447296@qq.com> +Jillis ter Hove +Jim Wu Jinwoo Jeong <33892306+williamjeong2@users.noreply.github.com> Jinyang He +jinzihao Jiří Podivín <66251151+jpodivin@users.noreply.github.com> Jiří Sejkora JJJYmmm <92386084+JJJYmmm@users.noreply.github.com> jklincn <985765408@qq.com> jklincn +JM Robles jneem Joan Fontanals Joan Fontanals João Dinis Ferreira Joe Eli McIlvain +Joe Rowell Joe Todd joecryptotoo <80373433+joecryptotoo@users.noreply.github.com> Johan @@ -670,16 +848,22 @@ Johannes Rudolph John <78893154+cmp-nct@users.noreply.github.com> John Balis John Bean <113509988+johnbean393@users.noreply.github.com> +John Eismeier <42679190+jeis4wpi@users.noreply.github.com> John Smith <67539080+kingsidelee@users.noreply.github.com> +Johnathan Craig Maudlin <13183098+jcmdln@users.noreply.github.com> JohnnyB johnson442 <56517414+johnson442@users.noreply.github.com> jojorne jon-chuang <9093549+jon-chuang@users.noreply.github.com> +Jonas Jankaitis <111707981+John-194@users.noreply.github.com> Jonas Wunderlich <32615971+jonas-w@users.noreply.github.com> +Jonathan <47618606+jbuchananr@users.noreply.github.com> +Jonathan Clohessy Jonathan Graehl <99024+graehl@users.noreply.github.com> Jorge A <161275481+jorgealias@users.noreply.github.com> Jose Maldonado <63384398+yukiteruamano@users.noreply.github.com> Joseph Stahl <1269177+josephst@users.noreply.github.com> +Josh Leverette Josh Ramer Joshua Cogliati Joyce @@ -689,7 +873,10 @@ Judd <4046440+foldl@users.noreply.github.com> Judd Juk Armstrong <69222624+jukofyork@users.noreply.github.com> jukofyork <69222624+jukofyork@users.noreply.github.com> +Julian Pscheid +Julien Chaumond Julien Denize <40604584+juliendenize@users.noreply.github.com> +Julien Jerphanion Julius Arkenberg Julius Tischbein Julius Tischbein @@ -698,9 +885,13 @@ Jun Jie <71215065+junnjiee16@users.noreply.github.com> junchao-loongson <68935141+junchao-loongson@users.noreply.github.com> junchao-zhao <68935141+junchao-loongson@users.noreply.github.com> Junil Kim +Junmo Kim Junwon Hwang Junyang Lin Juraj Bednar +Jürgen Schmied +JusteLeo +Justin Bradford Justin Parker Justin Santa Barbara Justin Suess @@ -709,63 +900,97 @@ Justine Tunney Justine Tunney Juuso Alasuutari Juyoung Suk +JvM jwj7140 <32943891+jwj7140@users.noreply.github.com> k.h.lai +k4ss4n <128936199+k4ss4n@users.noreply.github.com> +Kaben Nanlohy +Kabir Potdar +Kabir08 <62639358+Kabir08@users.noreply.github.com> Kai Pastor kaizau +Kakaru <97896816+KakaruHayate@users.noreply.github.com> kallewoof kallewoof kalomaze <66376113+kalomaze@users.noreply.github.com> +Kamalesh VS <76260512+kkjjkamal123@users.noreply.github.com> Kamil Tomšík kang +Kangjia Gao <145212963+kkkzbh@users.noreply.github.com> Kante Yin +karavayev <192749314+karavayev@users.noreply.github.com> Karol Kontny <82021046+kkontny@users.noreply.github.com> Karsten Weiss Karthick Karthik Kumar Viswanathan <195178+guilt@users.noreply.github.com> Karthik Sethuraman +Kartik Sirohi <99896785+sirohikartik@users.noreply.github.com> +Kashif Rasul KASR Kasumi <90275229+kasumi-1@users.noreply.github.com> +Katostrofik katsu560 <118887472+katsu560@users.noreply.github.com> Kawrakow <48489457+ikawrakow@users.noreply.github.com> kchro3 <62481661+kchro3@users.noreply.github.com> +kdkd <2569413+kdkd@users.noreply.github.com> Keiichi Tabata Keke Han Kenvix ⭐ Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Kevin Gibbons +Kevin Hannon Kevin Ji <1146876+kevinji@users.noreply.github.com> Kevin Kwok +Kevin Liu <4396kevinliu@gmail.com> Kevin Lo Kevin Pouget Kevin Wang +Khashayar Ghafouri <43180261+khashayarghafouri@users.noreply.github.com> khimaros +Kilian Hu <90606809+kilian-hu@users.noreply.github.com> +Kilian Krampf kiltyj Kim S. kimminsu <80271594+kimminsu38oo@users.noreply.github.com> +KITAITI Makoto kiwi <122582483+kiwi142857@users.noreply.github.com> klosax <131523366+klosax@users.noreply.github.com> +KokerZhou <111279477+KokerZhou@users.noreply.github.com> Kolen Cheung +kononnable +Konrad Moren +konradmb Konstantin Herud Konstantin Zhuravlyov +Krishna Sridhar <99914379+srikris-sridhar@users.noreply.github.com> krystiancha +kubawoo +kumaal <44551860+kumaal@users.noreply.github.com> kunal-vaishnavi <115581922+kunal-vaishnavi@users.noreply.github.com> kunnis Kunshang Ji kuronekosaiko +Kusha Gharahi <3326002+kushagharahi@users.noreply.github.com> kustaaya <58045274+kustaaya@users.noreply.github.com> kuvaus <22169537+kuvaus@users.noreply.github.com> +kvc0 <3454741+kvc0@users.noreply.github.com> +Kwa Jie Hao <31984694+kwajiehao@users.noreply.github.com> kwin1412 <42286931+kwin1412@users.noreply.github.com> Kyle Bruene Kyle Liang Kyle Mistele +KyleHagy <59183061+KyleHagy@users.noreply.github.com> Kylin <56434533+KyL0N@users.noreply.github.com> l-austenfeld <53152202+l-austenfeld@users.noreply.github.com> l3utterfly +l8bloom LaffeyNyaa <112215776+LaffeyNyaa@users.noreply.github.com> laik +lainon1 <271530700+lainon1@users.noreply.github.com> Lars Grammel Lars Sonchocky-Helldorf +las7 <98077186+las7@users.noreply.github.com> +Lasse Lauwerys <65569591+Iemand005@users.noreply.github.com> Laura Law Po Ying <30721578+yingying0906@users.noreply.github.com> lcy @@ -779,6 +1004,7 @@ Lennart Austenfeld <53152202+l-austenfeld@users.noreply.github.com> leo-pony Leon Knauer Leonard Mosescu +leonardHONG <2695316095@qq.com> Leonardo Neumann LeonEricsson <70749762+LeonEricsson@users.noreply.github.com> levkropp @@ -788,6 +1014,7 @@ lhez lhez Li Pengzhan <151381994+Lpzhan931@users.noreply.github.com> Li Tan +liminfei-amd <91481003+liminfei-amd@users.noreply.github.com> limitedAtonement Linwei Wang Liu Jia <109258120+Septa2112@users.noreply.github.com> @@ -795,6 +1022,7 @@ Liu Jia liuwei-git <14815172+liuwei-git@users.noreply.github.com> lixing-star <104126818+lixing-star@users.noreply.github.com> lksj92hs <134250687+lksj92hs@users.noreply.github.com> +lnigam LoganDark Loïc Carrère lon <114724657+longregen@users.noreply.github.com> @@ -806,6 +1034,9 @@ ltoniazzi <61414566+ltoniazzi@users.noreply.github.com> Luca Stefani Lucas Moura Belo Luciano +lucy <154630366+lucyknada@users.noreply.github.com> +Ludovic Henry +Ludovic Henry Lukas Straub Łukasz Ślusarczyk <112692748+lslusarczyk@users.noreply.github.com> Luo Tian @@ -815,22 +1046,29 @@ Lyle Dean M-A M. Mediouni M. Yusuf Sarıgöz +M1DNYT3 <42499082+M1DNYT3@users.noreply.github.com> +m1el m3ndax Ma Mingfei Maarten ter Huurne +Maciej Lisowski <39798354+MaciejDromin@users.noreply.github.com> Mack Straight maddes8cht <55592906+maddes8cht@users.noreply.github.com> Maël Kerbiriou MaggotHATE +MagicExists <106458387+gugugiyu@users.noreply.github.com> magicse +Mahdiou Diallo <104755555+mahdiou@users.noreply.github.com> Mahekk Shaikh <118063190+Mahekk357@users.noreply.github.com> Mahesh Madhav <67384846+heshpdx@users.noreply.github.com> mahorozte <41834471+mahorozte@users.noreply.github.com> makomk +manayang manikbhandari Manuel <44313466+makuche@users.noreply.github.com> maor-ps <154728172+maor-ps@users.noreply.github.com> Marc Köhlbrugge +Marcel Petrick Marcello Seri Marco Matthies <71844+marcom@users.noreply.github.com> Marcos Del Sol Vives @@ -838,21 +1076,30 @@ marcoStocchi Marcus Dunn <51931484+MarcusDunn@users.noreply.github.com> Marek Hradil jr. Marian Cepok +Mario <191101255+wariuccio@users.noreply.github.com> +Mario Limonciello +Mario Limonciello Marius Gerdes <141485318+mglambda@users.noreply.github.com> Mariusz Woloszyn Mark Fairbairn Mark Zhuang Marko Tasic +Markus Ebner Markus Tavenrath +Martin Andersson +Martin Chang Martin Delille +Martin Klacer Martin Krasser Martin Schwaighofer Marvin Gießing +Marxist-Leninist <31905382+Marxist-Leninist@users.noreply.github.com> Masashi Yoshimura Masato Nakasaka Masato Nakasaka Masaya, Kato <62578291+msy-kato@users.noreply.github.com> mashdragon <122402293+mashdragon@users.noreply.github.com> +Mason Milburn MasterYi1024 <39848311+MasterYi1024@users.noreply.github.com> Mateusz Charytoniuk Matheus C. França @@ -863,9 +1110,13 @@ Mathieu Nayrolles Mathijs de Bruin Mathijs Henquet matiaslin <45382001+matiaslin@users.noreply.github.com> +Matt Matt Clayton <156335168+mattjcly@users.noreply.github.com> +Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> +Matt Jallo Matt Pulver Matt Stephenson +Matt Thompson <111157855+boondocklabs@users.noreply.github.com> matt23654 <193348153+matt23654@users.noreply.github.com> matt23654 matteo @@ -875,7 +1126,9 @@ Matteo Mortari Mattheus Chediak Matthew Michel Matthew Tejo +Matthias Straka <59084281+matthiasstraka@users.noreply.github.com> Matthieu Coudron <886074+teto@users.noreply.github.com> +Matti4 Mattt Matvey Soloviev Max Krasnyansky @@ -883,12 +1136,18 @@ Max Krasnyansky Max Krasnyansky Maxim Evtush <154841002+maximevtush@users.noreply.github.com> Maxime <672982+maximegmd@users.noreply.github.com> +Maximilian Werk Maximilian Winter mdrokz +meatposes MeeMin <74113151+Meet91721@users.noreply.github.com> +megemini +Mendy Berger <12537668+MendyBerger@users.noreply.github.com> Meng Zhang Meng, Hengyu Mengqing Cao +Mengsheng Wu +Mengsheng Wu Merrick Christensen mgroeber9110 <45620825+mgroeber9110@users.noreply.github.com> Miaoqian Lin @@ -898,41 +1157,56 @@ Michaël de Vries Michael Engel Michael Francis Michael Giba +Michael Grau +Michael Huang <15768500+tehsiuhuang@users.noreply.github.com> Michael Hueschen Michael Kesper Michael Klimenko +Michael Lamothe Michael Podvitskiy Michael Potter Michael Wand +michaeltrabalka-tech Michał Moskal +Michał Piszczek Michał Tuszyński Michelle Tan <41475767+MichelleTanPY@users.noreply.github.com> +Mickael Desgranges midnight Mihai Mike Mike Abbott Mike Abbott +Mikhail Podvitskii Mikko Juola +Mikolaj Kucharski Min-Hua <136287195+Min-Hua@users.noreply.github.com> minarchist Minsoo Cheong <54794500+mscheong01@users.noreply.github.com> Minsoo Cheong Mirko185 Mirror Azure <54669636+MirrorAzure@users.noreply.github.com> +Mishusha <55416420+Mishusha@users.noreply.github.com> MistApproach <98988043+MistApproach@users.noreply.github.com> Miwa / Ensan <63481257+ensan-hcl@users.noreply.github.com> +miyan <1138989048@qq.com> mj-shifu <77107165+mj-shifu@users.noreply.github.com> +mkoker <132301062+mkoker@users.noreply.github.com> mmyjona mnehete32 <33429707+mnehete32@users.noreply.github.com> +Mohammad Athar <157023731+m-atharkhan@users.noreply.github.com> Mohammadreza Hendiani Mohammadreza Hendiani Molly Sophia momonga <115213907+mmnga@users.noreply.github.com> momonga <146910567+mmngays@users.noreply.github.com> MoonRide303 <130458190+MoonRide303@users.noreply.github.com> +MoonShadow MorganRO8 <47795945+MorganRO8@users.noreply.github.com> moritzbrantner <31051084+moritzbrantner@users.noreply.github.com> +mtmcp <141645996+mtmcp@users.noreply.github.com> muggle-stack +Muhammad Salem Murilo Santana Musab Gultekin musoles <135031143+musoles@users.noreply.github.com> @@ -945,6 +1219,8 @@ Natsu Nauful Shaikh NawafAlansari <72708095+NawafAlansari@users.noreply.github.com> Nebula +Nechama Krashinski +neha-ha <137219201+neha-ha@users.noreply.github.com> Neo Zhang <14088817+arthw@users.noreply.github.com> Neo Zhang Neo Zhang Jianyu @@ -959,18 +1235,26 @@ Niall Coates <1349685+Niall-@users.noreply.github.com> niansa/tuxifan niansa/tuxifan Nicholai Tukanov +Nicholas Sparks <157740354+nisparks@users.noreply.github.com> Nick <0x0b4ac@gmail.com> nick huang +Nick Lafleur <55208706+nicklafleur@users.noreply.github.com> +Nick Towle nickp27 +Nicky Mouha +Nico Nico Bosshard Nicolai Weitkemper Nicolas B. Pierron +Nicolas Mowen Nicolás Pérez Nicolò Scipione Nigel Bosch Nikhil Jain Nikita Sarychev <42014488+sARY77@users.noreply.github.com> Niklas Korz +Niklas Sheth +Niklas Wenzel NikolaiLyssogor <59844691+NikolaiLyssogor@users.noreply.github.com> Nikolaos Pothitos Nikolas <127742645+nneubacher@users.noreply.github.com> @@ -982,39 +1266,53 @@ nold nopperl <54780682+nopperl@users.noreply.github.com> nullname Nuno +nuri nusu-github <29514220+nusu-github@users.noreply.github.com> nwyin o7si <32285332+o7si@users.noreply.github.com> +Oğuzhan Akkaya Oleksandr Kuvshynov <661042+okuvshynov@users.noreply.github.com> Oleksandr Nikitin Oleksii Maryshchenko Olexandr88 olexiyb +Oliver Simons Oliver Simons Oliver Simons Oliver Walsh Olivier Chafik Olivier Chafik omahs <73983677+omahs@users.noreply.github.com> +Omer Ozarslan +Omid Azizi Ondřej Čertík oobabooga <112222186+oobabooga@users.noreply.github.com> oobabooga opparco +Ori Pekelman Oscar Barenys OSecret <135510162+OLSecret@users.noreply.github.com> ostix360 <55257054+ostix360@users.noreply.github.com> Ouadie EL FAROUKI +Ozymandias_EBON <112784549+johnkarlhill@users.noreply.github.com> PAB Pablo Duboue Pádraic Slattery +parabelboi Pascal Pascal Patry pascal-lc <49066376+pascal-lc@users.noreply.github.com> +Pasha Khosravi Patrice Ferlet +Patrick Buckley Patrick Peng Patryk Kaminski +Paul Dubs +Paul Flynn Paul Tsochantaris +Pavan Shinde Pavel Zloi +Pavel Zloi Pavels Zaicenkovs Pavol Rusnak Paweł Wodnicki <151604+32bitmicro@users.noreply.github.com> @@ -1028,6 +1326,7 @@ Percy Piper Perry Naseck <4472083+DaAwesomeP@users.noreply.github.com> perserk Peter +Peter Sideris Peter Sugihara Peter0x44 petterreinholdtsen @@ -1037,23 +1336,33 @@ philip-essential <169196560+philip-essential@users.noreply.github.com> Phillip Kravtsov Phylliida Dev piDack <104877312+piDack@users.noreply.github.com> +Piero Evangelista Pierre Alexandre SCHEMBRI Pierrick Hymbert Pieter Ouwerkerk +PikaPikachu Piotr Piotr Jasiukajtis Piotr Kubaj Piotr Wilkin (ilintar) pl752 Plamen Minev +pmaybank <113125070+pmaybank@users.noreply.github.com> pmysl +PMZFX pockers21 <134406831+pockers21@users.noreply.github.com> +Pop Flamingo postmasters Pouya pqnet <119850+pqnet@users.noreply.github.com> Prabod Prajwal B Mehendarkar +Pranav Dhinakar +Pranav Dhinakar +Pranav Uttarkar <122235768+PranavUttarkar@users.noreply.github.com> +Pranesh Gonegandla Prashant Vithule <119530321+Vithulep@users.noreply.github.com> +ProgenyAlpha Przemysław Pawełczyk psocolovsky <50770545+psocolovsky@users.noreply.github.com> pudepiedj @@ -1064,10 +1373,14 @@ Qin Yue Chen <71813199+chenqiny@users.noreply.github.com> qingfengfenga <41416092+qingfengfenga@users.noreply.github.com> qingy1337 Qingyou Meng +qiurui144 <39214303+qiurui144@users.noreply.github.com> qouoq Qu Zongfu <43257352+yancaoweidaode@users.noreply.github.com> +quei <56998528+quei4r@users.noreply.github.com> Quentin Bramas +QuintinShaw qunash +quyentonndbs R R R0CKSTAR @@ -1076,22 +1389,40 @@ rabidcopy RachelMantel Radoslav Gerganov Radosław Gryta +Rafail Giavrimis <47496212+grafail@users.noreply.github.com> Rafal Lewczuk +ragz4125 <65285549+ragz4125@users.noreply.github.com> Rahul Sathe <150351592+rrsathe@users.noreply.github.com> Rahul Vivek Nair <68507071+RahulVivekNair@users.noreply.github.com> +Rail Chabdarov rainred <107027757+gryffindor-rr@users.noreply.github.com> Raj Hammeer Singh Hada +Rajendra Matcha Ralph Soika +Raman Shinde Rand Xie Randall Fitzgerald Random Fly +rankaiyx rankaiyx +RapidMark <32768622+RapidMark@users.noreply.github.com> +Rares Vernica +Rashid Ul Islam <33536561+Ra5hidIslam@users.noreply.github.com> Raul Torres <138264735+rauletorresc@users.noreply.github.com> +ravel7524 <58877666+ravel7524@users.noreply.github.com> +Ravi Panchumarthy +Ray Xu <22774575+RayXu14@users.noreply.github.com> +RealOrko <45273739+RealOrko@users.noreply.github.com> redbeard +redfox <59549776+yaohengxu@users.noreply.github.com> Reese Levine +Reguna +rehan-10xengineer Reinforce-II +Rémy Mathieu Rémy O Rémy Oudompheng +ren <189031187+lathrys-at@users.noreply.github.com> Ren Xuancheng Renat Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com> @@ -1105,8 +1436,10 @@ Riccardo Orlando Riceball LEE Rich Dougherty Richard +Richard Davison Richard Kiss Richard Roberson +RichardScottOZ Rick G <26732651+TheFlipbook@users.noreply.github.com> Rickard Edén Rickard Hallerbäck @@ -1115,21 +1448,28 @@ Riley Stewart rimoliga <53384203+rimoliga@users.noreply.github.com> Rinne Rinne +Rithik Sharma RJ Adriaansen rmatif <66360289+rmatif@users.noreply.github.com> rmatif rmatif Robert Brisita <986796+rbrisita@users.noreply.github.com> Robert Collins +Robert Esclapez Robert Ormandi <52251610+ormandi@users.noreply.github.com> Robert Sung-wook Shin +robertomeroni <150194833+robertomeroni@users.noreply.github.com> Robey Holderith Robin Davidsson <40024429+R-Dson@users.noreply.github.com> Robyn Rőczey Barnabás <31726601+An0nie@users.noreply.github.com> RodriMora +Roger Chen Roger Meier +Rohan Jain <343499+crodjer@users.noreply.github.com> Rohanjames1997 +Rohit Mahesh <74331568+rohitmahesh1@users.noreply.github.com> +Roj234 <82699138+roj234@users.noreply.github.com> Roland <14355895+rbur0425@users.noreply.github.com> Romain Biessy Romain D <90720+Artefact2@users.noreply.github.com> @@ -1146,17 +1486,20 @@ Rowan Hart rspOverflow <217881046+rspOverflow@users.noreply.github.com> rtaluyev Ruan <47767371+ruanych@users.noreply.github.com> +ruanslv Ruben Ortlam Ruben Ortlam Ruchira Hasaranga Rudi Servo Ruikai Peng +Ruixiang Wang Ruixin Huang <18860020911@163.com> Rune <43761327+Rune-AI@users.noreply.github.com> runfuture RunningLeon RunningLeon Russyyds <161207317+Russyyds@users.noreply.github.com> +Ryan Goulden Ryan Landay Ryan Mangeno <160974989+ryan-mangeno@users.noreply.github.com> Ryder Wishart @@ -1164,7 +1507,9 @@ Ryuei s-goto-11 <206795233+s-goto-11@users.noreply.github.com> s8322 Saba Fallah <10401143+sfallah@users.noreply.github.com> +Saba Fallah Sachin Desai +Sachin Sharma safranowith SakuraUmi Salvador E. Tropea @@ -1173,18 +1518,31 @@ Sam Sam Malayek <12037535+SamMalayek@users.noreply.github.com> Sam Spilsbury Sam/Samuel <57896620+cern1710@users.noreply.github.com> +Samanvya Tripathi +SamareshSingh <97642706+ssam18@users.noreply.github.com> SAMI Sami Farin <3876865+Safari77@users.noreply.github.com> +Sami Kama Samuel Maynard +samuraieng <89817709+samuraieng@users.noreply.github.com> Sandro Hanea <40202887+sandrohanea@users.noreply.github.com> sandyiscool Sang-Kil Park +Sanjay Ahari Sascha Rogmann <59577610+srogmann@users.noreply.github.com> sasha0552 +Satinder Grewal +Satinder Grewal +SATISH K C <157192662+satishkc7@users.noreply.github.com> +Saurabh Dash <111897126+saurabhdash2512@users.noreply.github.com> SavicStefan <50296686+SavicStefan@users.noreply.github.com> Scott Fudally +ScrewTSW +scutler-nv Seb C <47074056+Sebby37@users.noreply.github.com> Sebastián A +Sebastian Dröge +Sebastian Dröge SebastianApel <13675545+SebastianApel@users.noreply.github.com> semidark Senemu <10880819+Senemu@users.noreply.github.com> @@ -1193,17 +1551,25 @@ Sergei Vorobyov Sergey Alirzaev Sergey Alirzaev Sergey Fedorov +Sergey Malinin Sergio López Sergio López +Sergiu <8598216+mzsergiu@users.noreply.github.com> serhii-nakon <57632032+serhii-nakon@users.noreply.github.com> Sertaç Özercan <852750+sozercan@users.noreply.github.com> +seryogakovalyov +Seungmin Kim <8457324+ehfd@users.noreply.github.com> SeungWon Jeong <65549245+redlion0929@users.noreply.github.com> +Seyoung Jeong ShadovvBeast Shagun Bera <141054835+notV3NOM@users.noreply.github.com> +Shahir BIn Zulfiker <119410932+aorko01@users.noreply.github.com> Shakhar Dasgupta +Shakhnazar Sailaukan <101112128+Sailaukan@users.noreply.github.com> Shakil Ahmed <44522075+ahmedshakill@users.noreply.github.com> shalinib-ibm Shane A +Shane Tran Whitmire <64436119+dogunbound@users.noreply.github.com> Shangning Xu <32517059+xushangning@users.noreply.github.com> shani-f Shankar @@ -1211,6 +1577,7 @@ Shanshan Shen <467638484@qq.com> shaofeiqi <109865877+shaofeiqi@users.noreply.github.com> shaofeiqi sharpHL <132747147+sharpHL@users.noreply.github.com> +Shaw Nguyen <49144872+mrshaw01@users.noreply.github.com> Shawn Gu Shawn yang <137684499+Yangxiaoz@users.noreply.github.com> Shelby Jenkins <47464908+ShelbyJenkins@users.noreply.github.com> @@ -1219,15 +1586,24 @@ shibe2 Shijie <821898965@qq.com> Shin-myoung-serp Shintarou Okada +shivamkumard-ctrl Shouyu <65317431+joeldushouyu@users.noreply.github.com> Shouzheng Liu <61452103+lshzh-ww@users.noreply.github.com> Shouzheng Liu +Shreya Jain +Shreya Jain +Shrivas Shankar <86219405+shrivasshankar@users.noreply.github.com> SHUAI YANG Shuichi Tsutsumi shun095 <8069181+shun095@users.noreply.github.com> Shunta Saito Shupei Fan Si1w <139008732+Si1w@users.noreply.github.com> +Sid Mohan <61345237+sidmohan0@users.noreply.github.com> +Sid Shaytay <2595088+SidShaytay@users.noreply.github.com> +Sigbjørn Skjæret <1629204+CISC@users.noreply.github.com> +Sigbjørn Skjæret +Sigbjørn Skjæret Sigbjørn Skjæret simevo Simon Redman @@ -1235,6 +1611,7 @@ Simon Willison simon886212 <37953122+simon886212@users.noreply.github.com> Simranjeet Singh <105192966+simrnsingh@users.noreply.github.com> singularity <12184989+singularity-s0@users.noreply.github.com> +Sirui He <143699303+SiruiHe@users.noreply.github.com> sirus20x6 Siwen Yu sjinzh @@ -1248,17 +1625,25 @@ Slava Primenko Slobodan Josic <127323561+slojosic-amd@users.noreply.github.com> Small Grass Forest SmartestWashingMachine +smugman-dot SnA1lGo <44647694+skrandy@users.noreply.github.com> snadampal <87143774+snadampal@users.noreply.github.com> SoftwareRenderer <138734813+SoftwareRenderer@users.noreply.github.com> Someone Someone Serge someone13574 <81528246+someone13574@users.noreply.github.com> +someoneinjd +Son H. Nguyen <33925625+nhs000@users.noreply.github.com> +Song Li +Sophon +Sou-ly <79574807+Sou-ly@users.noreply.github.com> Sourab Mangrulkar <13534540+pacman100@users.noreply.github.com> Spencer Sutton +sprayandwipe SRHMorris <69468379+SRHMorris@users.noreply.github.com> Srihari-mcw <96763064+Srihari-mcw@users.noreply.github.com> Srinivas Billa +srkizer ssweens <1149151+ssweens@users.noreply.github.com> standby24x7 staviq @@ -1267,9 +1652,11 @@ Stefan Sydow Ștefan-Gabriel Muscalu Steffen Röcker Stephan Walter +Stephen Cox Stephen Nichols Steve Bonds Steve Grubb +Steve Lhomme Steven Prichard Steven Roussey stevenkuang @@ -1279,6 +1666,8 @@ strawberrymelonpanda <152940198+strawberrymelonpanda@users.noreply.github.com> Suaj Carrot <72162667+SuajCarrot@users.noreply.github.com> sudhiarm Sukriti Sharma +Sumit Chatterjee <51856136+sumitchatterjee13@users.noreply.github.com> +Sundaram krishnan <104441812+sundaram123krishnan@users.noreply.github.com> SuperUserNameMan Sutou Kouhei Svetlozar Georgiev <55534064+sgeor255@users.noreply.github.com> @@ -1292,6 +1681,9 @@ takasurazeem takov751 <40316768+takov751@users.noreply.github.com> takuya kodama takuya kodama +Talha Adnan +Talha Can Havadar +Tamar tamarPal Tameem <113388789+AhmadTameem@users.noreply.github.com> Tamotsu Takahashi @@ -1304,56 +1696,79 @@ Taylor tc-mb <157115220+tc-mb@users.noreply.github.com> TecJesh Tei Home +Tekin Ertekin tempstudio <49735574+tempstudio@users.noreply.github.com> teo +texasich <101962694+texasich@users.noreply.github.com> texmex76 <40733439+texmex76@users.noreply.github.com> +tha80 <7176001+tha80@users.noreply.github.com> Thái Hoàng Tâm <75922889+RoyalHeart@users.noreply.github.com> Thammachart Chinvarapon <1731496+Thammachart@users.noreply.github.com> Thatcher Chamberlin +thecaptain789 <257642323+thecaptain789@users.noreply.github.com> Theia Vogel thement <40525767+thement@users.noreply.github.com> theo77186 theraininsky <76763719+theraininsky@users.noreply.github.com> +therealkenc Thérence <13496987+Royalphax@users.noreply.github.com> thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> +Thiago Padilha Thibault Terrasson thom-dev-fr <161708450+thom-dev-fr@users.noreply.github.com> Thomas Germer <99991@users.noreply.github.com> Thomas Jarosch Thomas Klausner +Thomas LECONTE <161708450+thom-dev-fr@users.noreply.github.com> Thore Koritzius Thorsten Sommer TianHao324 <854531745@qq.com> TianHao324 Tianyue-Zhao +Tillerino Tim Miller Tim Neumann +Tim Neumann Tim Wang +timkhronos Timmy Knight Timothy Cronin <40186632+4imothy@users.noreply.github.com> Ting Lou Ting Lou Ting Sun +Titaniumtown tjohnman Tobias Lütke +Toby <25832191+aetherbird@users.noreply.github.com> +Todd Malsbary Todor Boinovski Tom C +Tom Hillbrunner Tom Jobbins <784313+TheBloke@users.noreply.github.com> +Tom Overlund +Tom Tan <29201606+intel00000@users.noreply.github.com> +Tom Vaucourt <34662901+T0mSIlver@users.noreply.github.com> Tomas Tomáš Pazdiora +Tomeamis Tony Wasserka <4840017+neobrain@users.noreply.github.com> toyer <2042519524@qq.com> TrevorS +TriDefender triplenom <79777178+triplenom@users.noreply.github.com> Tristan Druyen Tristan Ross Trivikram Kamat <16024985+trivikr@users.noreply.github.com> +Trivikram Reddy <127072883+trivikram-reddy1@users.noreply.github.com> +Ts-sound <44093942+Ts-sound@users.noreply.github.com> tslmy tt <291400568@qq.com> +Tunahan <115956684+tnhnyzc@users.noreply.github.com> Tungsten842 <886724vf@anonaddy.me> Tungsten842 Tushar tv1wnd <55383215+tv1wnd@users.noreply.github.com> +tyronecai ubergarm ubik2 UEXTM.com <84163508+uextm@users.noreply.github.com> @@ -1363,27 +1778,34 @@ uint256_t Ujjawal Panchal <31011628+Ujjawal-K-Panchal@users.noreply.github.com> Ulrich Drepper unbounded +unraido <127105806+unraido@users.noreply.github.com> uvos uvos uvos Uzo Nweke Vaibhav Srivastav Val Kharitonov +ValdikSS Valentin Konovalov Valentin Mamedov <45292985+Inf1delis@users.noreply.github.com> Valentyn Bezshapkin <61702053+valentynbez@users.noreply.github.com> +Valeriy Dubov Vali Malinoiu <0x4139@gmail.com> valiray <133289098+valiray@users.noreply.github.com> vb Vedran Miletić +Vexxie Victor <194116445+dodekapod@users.noreply.github.com> Victor Nogueira +Victor Villar Victor Z. Peng Viet-Anh NGUYEN (Andrew) +viggy <70774793+vignesh191@users.noreply.github.com> vik Ville Vesilehto Vineel Abhinav <131174187+vineelabhinav@users.noreply.github.com> Vinesh Janarthanan <36610342+VJHack@users.noreply.github.com> +Vinicios Lugli Vinkal virajwad <84867530+virajwad@users.noreply.github.com> viric @@ -1396,6 +1818,7 @@ Vladimir Vladimir Malyutin Vladimir Vuksanovic <109677816+vvuksanovic@users.noreply.github.com> Vladimir Zorin +Vladislav Vladislav Sayapin <70110788+v-sayapin@users.noreply.github.com> vmobilis <75476228+vmobilis@users.noreply.github.com> vodkaslime <646329483@qq.com> @@ -1404,26 +1827,34 @@ Volodymyr Vitvitskyi <72226+signalpillar@users.noreply.github.com> vvhg1 <94630311+vvhg1@users.noreply.github.com> vxiiduu <73044267+vxiiduu@users.noreply.github.com> Wagner Bruna +Wallentri Wang Qin <37098874+wangqin0@users.noreply.github.com> Wang Ran (汪然) Wang Weixuan +Wang Zhiyu WangHaoranRobin <56047610+WangHaoranRobin@users.noreply.github.com> wangshuai09 <391746016@qq.com> wbpxre150 <100937007+wbpxre150@users.noreply.github.com> wbtek <171302111+wbtek@users.noreply.github.com> +Wei Wang Weird Constructor Weizhao Ouyang Weizhao Ouyang Welby Seely welix +wencan +wendadawen <130649302+wendadawen@users.noreply.github.com> Wentai Zhang whoreson <139810751+whoreson@users.noreply.github.com> Wilken Gottwalt <12194808+wgottwalt@users.noreply.github.com> +will-lms WillCorticesAI <150854901+WillCorticesAI@users.noreply.github.com> william pan <61359596+wp4032@users.noreply.github.com> William Tambellini William Tambellini +willjoha Willy Tarreau +Winston Ma woachk <24752637+woachk@users.noreply.github.com> wonjun Jang woodx <124784234+woodx9@users.noreply.github.com> @@ -1435,6 +1866,7 @@ wsbagnsv1 Wu Jian Ping Wu Jian Ping wwoodsTM <104587230+wwoodsTM@users.noreply.github.com> +Wyatt Caldwell <218154709+Detensable@users.noreply.github.com> wzy <32936898+Freed-Wu@users.noreply.github.com> xaedes xaedes @@ -1453,27 +1885,43 @@ Xingchen Song(宋星辰) Xinpeng Dou <15529241576@163.com> Xinpeng Dou <81913537+Dou-Git@users.noreply.github.com> xloem <0xloem@gmail.com> +xris99 <79798089+xris99@users.noreply.github.com> Xuan Son Nguyen Xuan-Son Nguyen Xuan-Son Nguyen +y198 <90976397+y198nt@users.noreply.github.com> yael-works <106673277+yael-works@users.noreply.github.com> YaelGitAccount <38328157276@mby.co.il> YaelLogic Yaiko +Yakine Tahtah <96926916+ReinforcedKnowledge@users.noreply.github.com> YangLe yangli2 Yann Follet <131855179+YannFollet@users.noreply.github.com> +Yanzhao Wang +Yarden Tal +YardenTal44 Yaroslav +Yash Raj Pandey <55940078+devYRPauli@users.noreply.github.com> Yavor Ivanov Yazan Agha-Schrader Ycros <18012+ycros@users.noreply.github.com> YehuditE +Yes You Can Have Your Own <188969017+yychyo@users.noreply.github.com> +yggdrasil75 Yibo Cai Yibo Cai +YiChen Lv <63285796+forforever73@users.noreply.github.com> yifant-code +Yihao Wang <42559837+AgainstEntropy@users.noreply.github.com> +yikechayedan <2935171085@qq.com> Yiming Cui Yishuo Wang +Yiwei Shao <44545837+njsyw1997@users.noreply.github.com> ymcki <84055651+ymcki@users.noreply.github.com> +ynankani +Yongmin Yoo 유용민 +Yongyue Sun Yoshi Suhara Yoshi Suhara Yoshi_likes_e4 <104140648+pt13762104@users.noreply.github.com> @@ -1494,19 +1942,27 @@ yuri@FreeBSD Yusuf Kağan Hanoğlu Yuval Peled <31162840+Yuval-Peled@users.noreply.github.com> Yuxuan Zhang <2448370773@qq.com> +yzyyzyhhh <96101183+happyyzy@users.noreply.github.com> Z +Zach Winter +Zack Li <39573601+zhiyuan8@users.noreply.github.com> Zagaj zakkor Zane Shannon Zay <95888118+isaiahbjork@users.noreply.github.com> +zduford Zenix +ZeroV0LT Zhang Peiyuan zhangkaihuo +zhangrunda +zhangtao2-1 <478679312@qq.com> ZHAOKAI WANG Zheng.Deng <32841220+dengzheng-cloud@users.noreply.github.com> zhentaoyu Zhenwei Jin <109658203+kylo5aby@users.noreply.github.com> Zheyuan Chen +Zhihao "Zephyr" Yao Zhiyong Wang <85110830+ravenouse@users.noreply.github.com> Zhiyuan Li Zhiyuan Li @@ -1515,5 +1971,10 @@ zhouwg ZhouYuChen Ziad Ben Hadj-Alouane Ziang Wu <97337387+ZiangWu-77@users.noreply.github.com> +ZihaoMu +Zijun Yu +Zijun Yu +zql <37731799+zqlcode@users.noreply.github.com> zrm Zsapi +zzzzwc diff --git a/README.md b/README.md index 5960ef6843..85726c8c08 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,11 @@ LLM inference in C/C++ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) -[![Release](https://img.shields.io/github/v/release/ggml-org/llama.cpp)](https://github.com/ggml-org/llama.cpp/releases) +[![Release](https://img.shields.io/github/v/release/ggml-org/llama.cpp?filter=v*)](https://github.com/ggml-org/llama.cpp/releases?q=tag:v0) +[![Nightly](https://img.shields.io/github/v/release/ggml-org/llama.cpp?label=nightly)](https://github.com/ggml-org/llama.cpp/releases) [![Server](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml/badge.svg)](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml) -[![Docker](https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml/badge.svg)](https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml) -[![Winget](https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml/badge.svg)](https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml) +[![Docker](https://img.shields.io/github/actions/workflow/status/ggml-org/llama.cpp/docker.yml?label=Docker)](https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml) +[![Winget](https://img.shields.io/github/actions/workflow/status/ggml-org/llama.cpp/winget.yml?label=Winget)](https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml) [manifesto](https://github.com/ggml-org/llama.cpp/discussions/205) / [ggml](https://github.com/ggml-org/ggml) / [ops](https://github.com/ggml-org/llama.cpp/blob/master/docs/ops.md) / [maintainer PRs](https://github.com/ggml-org/llama.cpp/issues?q=is%3Apr%20is%3Aopen%20draft%3AFalse%20(author%3Argerganov%20OR%20author%3AKitaitiMakoto%20OR%20author%3Adanbev%20OR%20author%3Aaldehir%20OR%20author%3Amax-krasnyansky%20OR%20author%3ACISC%20OR%20author%3Aggerganov%20OR%20author%3Aam17an%20OR%20author%3Abartowski1182%20OR%20author%3Ahipudding%20OR%20author%3AServeurpersoCom%20OR%20author%3Apwilkin%20OR%20author%3Areeselevine%20OR%20author%3Angxson%20OR%20author%3Ajeffbolznv%20OR%20author%3A0cc4m%20OR%20author%3Aangt%20OR%20author%3AIMbackK%20OR%20author%3Aarthw%20OR%20author%3AJohannesGaessler%20OR%20author%3AORippler%20OR%20author%3Aruixiang63%20OR%20author%3Axctan%20OR%20author%3Aallozaur%20OR%20author%3Ayomaytk%20OR%20author%3Aaendk%20OR%20author%3Agaugarg-nv%20OR%20author%3Ataronaeo%20OR%20author%3Aforforever73%20OR%20author%3Alhez%20OR%20author%3Anetrunnereve%20OR%20author%3Afairydreaming)%20sort%3Aupdated-desc) / [compile times](https://github.com/ggml-org/llama.cpp-dev/blob/master/README-compile-times.md) / [lib llama API](https://github.com/ggml-org/llama.cpp/issues/9289) / [llama-server REST API](https://github.com/ggml-org/llama.cpp/issues/9291) From afd439df1f081ce0f6bc76965aa0a0ed762ecc91 Mon Sep 17 00:00:00 2001 From: Thiago Padilha Date: Tue, 18 Aug 2026 10:15:22 -0300 Subject: [PATCH 10/29] unicode : include '~' in collapsed symbol class (#26972) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The collapsed \p{S} class was missing '~', which split " ~" into separate pre-tokens and prevented the Ġ~ BPE merge used by DeepSeek V4. This caused re-tokenized prompts to diverge from sampled tokens and broke KV cache reuse. Assisted-by: Codex --- src/unicode.cpp | 2 +- tests/CMakeLists.txt | 2 ++ tests/test-unicode.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/test-unicode.cpp diff --git a/src/unicode.cpp b/src/unicode.cpp index b02ecdc930..93996f9dd5 100644 --- a/src/unicode.cpp +++ b/src/unicode.cpp @@ -1241,7 +1241,7 @@ std::vector unicode_regex_split(const std::string & text, const std { unicode_cpt_flags::LETTER, "\x41-\x5A\x61-\x7A" }, // A-Za-z { unicode_cpt_flags::PUNCTUATION, "\x21-\x23\x25-\x2A\x2C-\x2F\x3A-\x3B\x3F-\x40\\\x5B-\\\x5D\x5F\\\x7B\\\x7D" }, // !-#%-*,-/:-;?-@\[-\]_\{\} { unicode_cpt_flags::ACCENT_MARK, "" }, // no sub-128 codepoints - { unicode_cpt_flags::SYMBOL, "\\\x24\\\x2B\x3C-\x3E\x5E\x60\\\x7C" }, // $+<=>^`| + { unicode_cpt_flags::SYMBOL, "\\\x24\\\x2B\x3C-\x3E\x5E\x60\\\x7C\\\x7E" }, // $+<=>^`|~ }; // compute collapsed codepoints only if needed by at least one regex diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3ee51b5191..0db7fd9ef3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -116,6 +116,8 @@ function(llama_build_and_test source) set_property(TEST ${TEST_TARGET} PROPERTY LABELS ${LLAMA_TEST_LABEL}) endfunction() +llama_build_and_test(test-unicode.cpp) + # build test-tokenizer-0 target once and add many tests llama_build(test-tokenizer-0.cpp) diff --git a/tests/test-unicode.cpp b/tests/test-unicode.cpp new file mode 100644 index 0000000000..2347d9000a --- /dev/null +++ b/tests/test-unicode.cpp @@ -0,0 +1,24 @@ +#include "../src/unicode.h" + +#include +#include +#include + +int main() { + const std::vector regex_exprs = { + "[~][A-Za-z]+| ?[\\p{S}]+|\\s+", + }; + const std::vector expected = { " ~", "foo" }; + const auto actual = unicode_regex_split(" ~foo", regex_exprs, false); + + if (actual != expected) { + fprintf(stderr, "unexpected split:"); + for (const auto & piece : actual) { + fprintf(stderr, " [%s]", piece.c_str()); + } + fprintf(stderr, "\n"); + return 1; + } + + return 0; +} From 0882c7bc89074017c6a2a3149eae46929cb32ab3 Mon Sep 17 00:00:00 2001 From: Titaniumtown Date: Tue, 18 Aug 2026 06:21:25 -0700 Subject: [PATCH 11/29] sycl: honor GGML_HINT_SRC0_IS_HADAMARD (#27298) Kernel is a port of `ggml-cuda/fwht.cu` (us/run, median): ``` m x n x k GEMM FWHT speedup 64 x 1 x 64 10.20 2.93 3.48x 64 x 2048 x 64 10.75 2.71 3.97x 128 x 1 x 128 10.33 2.88 3.59x 128 x 32 x 128 9.20 2.77 3.33x 128 x 2048 x 128 16.46 2.76 5.95x 256 x 1 x 256 10.19 2.77 3.68x 256 x 2048 x 256 16.69 3.41 4.89x 512 x 2048 x 512 54.16 12.89 4.20x ``` --- ggml/src/ggml-sycl/fwht.cpp | 119 +++++++++++++++++++++++++++++++ ggml/src/ggml-sycl/fwht.hpp | 12 ++++ ggml/src/ggml-sycl/ggml-sycl.cpp | 13 ++++ 3 files changed, 144 insertions(+) create mode 100644 ggml/src/ggml-sycl/fwht.cpp create mode 100644 ggml/src/ggml-sycl/fwht.hpp diff --git a/ggml/src/ggml-sycl/fwht.cpp b/ggml/src/ggml-sycl/fwht.cpp new file mode 100644 index 0000000000..2312b3d131 --- /dev/null +++ b/ggml/src/ggml-sycl/fwht.cpp @@ -0,0 +1,119 @@ +#include "fwht.hpp" + +#include + +template +static void fwht_kernel(const float * __restrict__ src, float * __restrict__ dst, const int64_t n_rows, + const float scale, const sycl::nd_item<2> & item) { + const sycl::sub_group sg = item.get_sub_group(); + + const int64_t r = item.get_global_id(0); + if (r >= n_rows) { + return; + } + + src += r * N; + dst += r * N; + + constexpr int el_w = N / WARP_SIZE; + static_assert(el_w >= 1 && N % WARP_SIZE == 0, "row must be a whole number of sub-group widths"); + + float reg[el_w]; + const int lane = sg.get_local_linear_id(); + +#pragma unroll + for (int i = 0; i < el_w; ++i) { + reg[i] = src[i * WARP_SIZE + lane] * scale; + } + + // Butterflies inside the sub-group. The partner of a lane with bit h clear is the + // lower index of the pair, so it takes the sum and the upper takes lower - upper. +#pragma unroll + for (int h = 1; h < WARP_SIZE; h *= 2) { +#pragma unroll + for (int j = 0; j < el_w; ++j) { + const float val = reg[j]; + const float val2 = dpct::permute_sub_group_by_xor(sg, val, h, WARP_SIZE); + + reg[j] = (lane & h) == 0 ? val + val2 : val2 - val; + } + } + + // Butterflies across registers: h is a multiple of WARP_SIZE, so the partner of + // element i*WARP_SIZE + lane lives in reg[i + h/WARP_SIZE] on the same lane. +#pragma unroll + for (int h = WARP_SIZE; h < N; h *= 2) { + const int step = h / WARP_SIZE; +#pragma unroll + for (int j = 0; j < el_w; j += 2 * step) { +#pragma unroll + for (int k = 0; k < step; ++k) { + const float x = reg[j + k]; + const float y = reg[j + k + step]; + + reg[j + k] = x + y; + reg[j + k + step] = x - y; + } + } + } + +#pragma unroll + for (int i = 0; i < el_w; ++i) { + dst[i * WARP_SIZE + lane] = reg[i]; + } +} + +template +static void launch_fwht(const float * src, float * dst, const int64_t n_rows, const float scale, + dpct::queue_ptr stream) { + constexpr int rows_per_block = 4; + + const int64_t num_blocks = (n_rows + rows_per_block - 1) / rows_per_block; + + // dim 1 is the fastest-varying, so a sub-group is exactly one row's WARP_SIZE lanes. + const sycl::range<2> global(num_blocks * rows_per_block, WARP_SIZE); + const sycl::range<2> local(rows_per_block, WARP_SIZE); + + stream->parallel_for(sycl::nd_range<2>(global, local), + [=](sycl::nd_item<2> item) [[sycl::reqd_sub_group_size(WARP_SIZE)]] { + fwht_kernel(src, dst, n_rows, scale, item); + }); +} + +bool ggml_sycl_op_fwht(ggml_backend_sycl_context & ctx, const ggml_tensor * src, ggml_tensor * dst) { + if (src->type != GGML_TYPE_F32 || dst->type != GGML_TYPE_F32) { + return false; + } + if (!ggml_are_same_shape(src, dst)) { + return false; + } + if (!ggml_is_contiguous(src) || !ggml_is_contiguous(dst)) { + return false; + } + + const int n = (int) src->ne[0]; + const int64_t rows = ggml_nrows(src); + + const float * src_d = (const float *) src->data; + float * dst_d = (float *) dst->data; + dpct::queue_ptr stream = ctx.stream(); + + const float scale = 1.0f / std::sqrt((float) n); + + switch (n) { + case 64: + launch_fwht<64>(src_d, dst_d, rows, scale, stream); + return true; + case 128: + launch_fwht<128>(src_d, dst_d, rows, scale, stream); + return true; + case 256: + launch_fwht<256>(src_d, dst_d, rows, scale, stream); + return true; + case 512: + launch_fwht<512>(src_d, dst_d, rows, scale, stream); + return true; + default: + return false; + } +} diff --git a/ggml/src/ggml-sycl/fwht.hpp b/ggml/src/ggml-sycl/fwht.hpp new file mode 100644 index 0000000000..cd238cfaf3 --- /dev/null +++ b/ggml/src/ggml-sycl/fwht.hpp @@ -0,0 +1,12 @@ +#ifndef GGML_SYCL_FWHT_HPP +#define GGML_SYCL_FWHT_HPP + +#include "common.hpp" + +// Fast Walsh-Hadamard transform, the fast path for a MUL_MAT whose src0 ggml has +// tagged GGML_HINT_SRC0_IS_HADAMARD. src0 is not read at all. Returns false if the +// shape is not one this can serve, in which case the caller must fall through to the +// ordinary mat-mul dispatch. +bool ggml_sycl_op_fwht(ggml_backend_sycl_context & ctx, const ggml_tensor * src, ggml_tensor * dst); + +#endif // GGML_SYCL_FWHT_HPP diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index 5416d4f0f4..d31df611a4 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -58,6 +58,7 @@ #include "ggml-sycl/backend.hpp" #include "ggml-sycl/common.hpp" #include "ggml-sycl/element_wise.hpp" +#include "ggml-sycl/fwht.hpp" #include "ggml-sycl/gemm.hpp" #include "ggml-sycl/getrows.hpp" #include "ggml-sycl/norm.hpp" @@ -4473,6 +4474,18 @@ static bool can_use_mul_mat_vec_q(const ggml_tensor * src0, const ggml_tensor * static void ggml_sycl_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { scope_op_debug_print scope_dbg_print(__func__, dst, /*num_src=*/2); + + // Handle HADAMARAD hint given from further up the pipeline and pass it to the correct + // kernel. + // + // The op check is not redundant: this backend also routes MUL_MAT_ID through here with a + // stack copy of dst, which carries MUL_MAT_ID's own op_params. ggml_mul_mat_set_hint() + // asserts GGML_OP_MUL_MAT for the same reason. + if (dst->op == GGML_OP_MUL_MAT && ggml_get_op_params_i32(dst, 1) == GGML_HINT_SRC0_IS_HADAMARD && + ggml_sycl_op_fwht(ctx, src1, dst)) { + return; + } + const bool split = ggml_backend_buffer_is_sycl_split(src0->buffer); int64_t min_compute_capability = INT_MAX; From 0596704284bffe8350eef4a9510316258ed6b87a Mon Sep 17 00:00:00 2001 From: Ed Addario <29247825+EAddario@users.noreply.github.com> Date: Tue, 18 Aug 2026 15:22:32 +0100 Subject: [PATCH 12/29] quant : Optimise memory usage by evicting weights after processing each layer (#22877) * Evict weights from memory after processing each layer * Revert changes * Move unmap to libllama * Unmap weights offloaded to backend * Change member's constness * Remove unmap weights offloaded to backend --- src/llama-model-loader.cpp | 5 +++++ src/llama-model-loader.h | 3 +++ src/llama-quant.cpp | 6 +++++- tools/perplexity/perplexity.cpp | 1 - 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/llama-model-loader.cpp b/src/llama-model-loader.cpp index 1ca698704b..9b22cb05f2 100644 --- a/src/llama-model-loader.cpp +++ b/src/llama-model-loader.cpp @@ -1395,6 +1395,11 @@ void llama_model_loader::get_mapping_range(size_t * first, size_t * last, void * } } +void llama_model_loader::unmap_weight(const llama_tensor_weight & w) const { + if (!use_mmap) { return; } + mappings.at(w.idx)->unmap_fragment(w.offs, w.offs + ggml_nbytes(w.tensor)); +} + void llama_model_loader::load_data_for(struct ggml_tensor * cur) const { const auto & w = require_weight(ggml_get_name(cur)); diff --git a/src/llama-model-loader.h b/src/llama-model-loader.h index d6b31c2311..e9fe3592d4 100644 --- a/src/llama-model-loader.h +++ b/src/llama-model-loader.h @@ -194,6 +194,9 @@ struct llama_model_loader { void get_mapping_range(size_t * first, size_t * last, void ** addr, int idx, ggml_context * ctx) const; + // release a weight's mmap pages + void unmap_weight(const llama_tensor_weight & w) const; + // for backwards compatibility, does not support ggml-backend void load_data_for(struct ggml_tensor * cur) const; diff --git a/src/llama-quant.cpp b/src/llama-quant.cpp index 7f99e96bc3..20252815d5 100644 --- a/src/llama-quant.cpp +++ b/src/llama-quant.cpp @@ -1270,7 +1270,7 @@ static void llama_model_quantize_impl(const std::string & fname_inp, const std:: total_size_org += tensor_size; total_size_new += new_size; - // update the gguf meta data as we go + // update the gguf metadata as we go gguf_set_tensor_type(ctx_outs[cur_split].get(), metadata[i].name.c_str(), new_type); GGML_ASSERT(gguf_get_tensor_size(ctx_outs[cur_split].get(), gguf_find_tensor(ctx_outs[cur_split].get(), metadata[i].name.c_str())) == new_size); gguf_set_tensor_data(ctx_outs[cur_split].get(), metadata[i].name.c_str(), new_data); @@ -1278,6 +1278,10 @@ static void llama_model_quantize_impl(const std::string & fname_inp, const std:: // write tensor data + padding fout.write((const char *) new_data, new_size); zeros(fout, GGML_PAD(new_size, align) - new_size); + + // unmap the tensor to free memory + if (ml.use_mmap) { ml.unmap_weight(weight); } + } // no --dry-run } // main loop diff --git a/tools/perplexity/perplexity.cpp b/tools/perplexity/perplexity.cpp index 92f88306c7..ba41287d8e 100644 --- a/tools/perplexity/perplexity.cpp +++ b/tools/perplexity/perplexity.cpp @@ -2023,7 +2023,6 @@ int llama_perplexity(int argc, char ** argv) { } const int32_t n_ctx = params.n_ctx; - if (n_ctx <= 0) { LOG_ERR("%s: perplexity tool requires '--ctx-size' > 0\n", __func__); return 1; From 04b569142da23d91beca090a99098d592d3f3c80 Mon Sep 17 00:00:00 2001 From: Niklas Wenzel Date: Tue, 18 Aug 2026 16:23:43 +0200 Subject: [PATCH 13/29] common: share thread pools when `n_threads` differ (#27138) --- common/common.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/common/common.cpp b/common/common.cpp index cea6d3f5cc..0f2f01ad0e 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -1750,6 +1750,18 @@ struct ggml_threadpool_params ggml_threadpool_params_from_cpu_params(const commo return tpp; } +namespace { + +bool can_share_threadpool(const ggml_threadpool_params & tpp1, const ggml_threadpool_params & tpp2) { + // n_threads does not matter -> we'll use what's larger + ggml_threadpool_params tpp_comparison = tpp1; + tpp_comparison.n_threads = tpp2.n_threads; + + return ggml_threadpool_params_match(&tpp_comparison, &tpp2); +} + +} // namespace + common_threadpools::~common_threadpools() { if (!free_fn) { return; @@ -1778,7 +1790,9 @@ void common_threadpools::init(llama_context * ctx, const common_params & params) struct ggml_threadpool_params tpp = ggml_threadpool_params_from_cpu_params(params.cpuparams); - if (!ggml_threadpool_params_match(&tpp, &tpp_batch)) { + if (can_share_threadpool(tpp, tpp_batch)) { + tpp.n_threads = std::max(tpp.n_threads, tpp_batch.n_threads); + } else { threadpool_batch = ggml_threadpool_new_fn(&tpp_batch); if (!threadpool_batch) { COM_WRN("batch threadpool create failed : n_threads %d\n", tpp_batch.n_threads); From fdf4c6460477e2761faac4527fc6266e48a893f0 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Tue, 18 Aug 2026 16:37:26 +0200 Subject: [PATCH 14/29] ui: Stores consolidation refactor (#27238) * ui: Remove dead code from stores - persisted() helper was exported but never used - messageUpdateCallback / registerMessageUpdateCallback were never wired up - conversationsStore.initialize() alias, single caller moved to init() * ui: Merge device, theme and viewport into a single deviceStore All three are reactive browser-environment signals, now exposed as one class store: deviceStore.isMobile, deviceStore.isIOSDevice / isIOSSafari / isWKWebView / isStandalone and deviceStore.systemTheme.isDark. The systemTheme name disambiguates the OS preference from the user theme preference in settingsStore. Drops the unused viewport export (only isMobile was consumed). * ui: Merge build info into version store One VersionStore class with build (llama.cpp build number from build.json) and frontend (PWA version from _app/version.json), matching the class pattern of the other stores. * ui: Colocate context gauge popup state with its components The gauge popup state is local UI state shared only by the ChatFormContextGauge subtree, so it lives next to its consumers instead of the app-scope stores barrel. --- .../ChatFormActionsAdd.svelte | 4 +- .../ChatFormActionModels.svelte | 10 +- .../ChatFormContextGauge.svelte | 7 +- .../ContextGaugeDetails.svelte | 2 +- .../ContextGaugePopup.svelte | 7 +- .../gauge-popup.svelte.ts} | 0 .../ChatFormInput/ChatFormInputBasic.svelte | 4 +- .../ChatFormInput/ChatFormInputRich.svelte | 6 +- .../ChatFormPickerMention.svelte | 4 +- .../ChatMessage/ChatMessage.svelte | 4 +- .../app/chat/ChatScreen/ChatScreen.svelte | 30 ++--- .../app/chat/ChatScreen/ChatScreenForm.svelte | 6 +- .../SidebarNavigation.svelte | 22 ++-- .../SidebarNavigationActions.svelte | 8 +- tools/ui/src/lib/hooks/use-pwa.svelte.ts | 2 +- tools/ui/src/lib/stores/build-info.svelte.ts | 45 -------- tools/ui/src/lib/stores/chat.svelte.ts | 3 - .../ui/src/lib/stores/conversations.svelte.ts | 25 ---- tools/ui/src/lib/stores/device.svelte.ts | 107 +++++++++++------- tools/ui/src/lib/stores/index.ts | 22 +--- tools/ui/src/lib/stores/persisted.svelte.ts | 51 --------- tools/ui/src/lib/stores/settings.svelte.ts | 4 +- tools/ui/src/lib/stores/theme.svelte.ts | 14 --- tools/ui/src/lib/stores/version.svelte.ts | 67 +++++++---- tools/ui/src/lib/stores/viewport.svelte.ts | 9 -- tools/ui/src/routes/(chat)/+page.svelte | 2 +- tools/ui/src/routes/+layout.svelte | 15 ++- tools/ui/src/routes/search/+page.svelte | 4 +- 28 files changed, 181 insertions(+), 303 deletions(-) rename tools/ui/src/lib/{stores/context-gauge-popup.svelte.ts => components/app/chat/ChatForm/ChatFormContextGauge/gauge-popup.svelte.ts} (100%) delete mode 100644 tools/ui/src/lib/stores/build-info.svelte.ts delete mode 100644 tools/ui/src/lib/stores/persisted.svelte.ts delete mode 100644 tools/ui/src/lib/stores/theme.svelte.ts delete mode 100644 tools/ui/src/lib/stores/viewport.svelte.ts diff --git a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAdd/ChatFormActionsAdd.svelte b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAdd/ChatFormActionsAdd.svelte index 47bdb47a47..b2581f11ee 100644 --- a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAdd/ChatFormActionsAdd.svelte +++ b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAdd/ChatFormActionsAdd.svelte @@ -2,10 +2,10 @@ import ChatFormActionAddButton from './ChatFormActionAddButton.svelte'; import ChatFormActionAddDropdown from './ChatFormActionAddDropdown.svelte'; import ChatFormActionAddSheet from './ChatFormActionAddSheet.svelte'; - import { isMobile } from '$lib/stores'; + import { deviceStore } from '$lib/stores'; -{#if isMobile.current} +{#if deviceStore.isMobile} {#snippet trigger({ disabled, onclick })} diff --git a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionModels.svelte b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionModels.svelte index fad223a98b..689ef8c3a3 100644 --- a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionModels.svelte +++ b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionModels.svelte @@ -1,6 +1,12 @@ -{#if isMobile.current} +{#if deviceStore.isMobile} import ContextGaugeDial from './ContextGaugeDial.svelte'; - import { useContextGauge } from '$lib/hooks/use-context-gauge.svelte'; import { - chatStore, - conversationsStore, gaugeTriggerClick, gaugeTriggerEnter, gaugeTriggerKeydown, gaugeTriggerLeave, gaugeTriggerPointerDown - } from '$lib/stores'; + } from './gauge-popup.svelte'; + import { useContextGauge } from '$lib/hooks/use-context-gauge.svelte'; + import { chatStore, conversationsStore } from '$lib/stores'; import { untrack } from 'svelte'; const gauge = useContextGauge(); diff --git a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormContextGauge/ContextGaugeDetails.svelte b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormContextGauge/ContextGaugeDetails.svelte index eaaba69de6..1153c70fdd 100644 --- a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormContextGauge/ContextGaugeDetails.svelte +++ b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormContextGauge/ContextGaugeDetails.svelte @@ -1,9 +1,9 @@