Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
632ceed
Merge pull request #1 from ggml-org/master
Raman-Raje Jun 21, 2026
07e3a0c
Merge pull request #3 from ggml-org/master
Raman-Raje Jun 22, 2026
aa04c94
Merge pull request #4 from ggml-org/master
Raman-Raje Jul 6, 2026
64ce165
Merge pull request #6 from ggml-org/master
Raman-Raje Jul 11, 2026
29b94bb
Merge pull request #7 from ggml-org/master
Raman-Raje Aug 1, 2026
da88cb4
Merge pull request #8 from ggml-org/master
Raman-Raje Aug 2, 2026
af3bee6
Merge pull request #9 from ggml-org/master
Raman-Raje Aug 7, 2026
b769c2d
Merge pull request #10 from ggml-org/master
Raman-Raje Sep 23, 2026
bf55079
Merge pull request #11 from ggml-org/master
Raman-Raje Oct 14, 2026
1d88cb0
ui: hide the native clear button in SearchInput (#30719)
aiqubits Oct 20, 2026
dd002b9
sycl: fix compiler warnings - missing prototypes, dead code, extra se…
mctylr-gh Oct 20, 2026
8466395
hexagon: update to snapdragon-toolchain v0.8 and enable hexagon v85 (…
max-krasnyansky Oct 20, 2026
7879491
tests : make MoE router selection independent of the backend noise (#…
ggerganov Oct 20, 2026
d8d9297
vocab : add \p{M} to lookaheads in Tekken and GPT-4o pre-tokenizer re…
tkran2 Oct 20, 2026
707616f
ci: Fix --strict mode for API check (#30623)
ckastner Oct 20, 2026
704366d
metal : fix missing MoE kernel variant for 9 experts per token (#3061…
Caladrel65 Oct 20, 2026
d806193
server : pass id_slot through the Anthropic /v1/messages conversion (…
pcvelz Oct 20, 2026
13786fb
CUDA: Clear CUDA graphs after legacy memory pool flush (#26771)
bokrosbalint Oct 20, 2026
83c2d01
spec : save the dynamic ngram cache file (#22055)
petersid2022 Oct 20, 2026
522f2b6
ggml-zdnn: introduce flash attention op (#30512)
taronaeo Oct 20, 2026
b684498
HIP/CUDA: Fix reduction in mmf getting tile widths not devisiable by …
IMbackK Oct 20, 2026
119f68d
ggml-cpu : select the NEON fp32->fp16 conversion (#30505)
bernardladenthin Oct 20, 2026
8115b4c
sycl : replace memset due to not always ordered (#30812)
arthw Oct 20, 2026
a01ce9f
opencl: add several gemm variants for small batches and some fixes (#…
lhez Oct 20, 2026
b38960f
ci : remove superfluous webgpu jobs (#30868)
CISC Oct 20, 2026
9df0b73
model : drop the redundant precision overrides in the Kolibri-1 route…
ggerganov Oct 20, 2026
df11702
metal : optimize argmax and pool_1d (#30862)
ggerganov Oct 20, 2026
36140db
mtmd : read LFM2 tiling params from GGUF metadata (#30840)
tdakhran Oct 20, 2026
1ba568c
server: fix missing output_index in Responses API SSE events for comp…
Renzishi Oct 20, 2026
4e20138
server: Router wasn't propagating the client disconnects fully to the…
Me42019 Oct 20, 2026
39da130
ggml-cuda : support ssm_conv kernel size 7 (#30873)
tdakhran Oct 20, 2026
5a9a34d
server : avoid repeated mmproj memory margin addition on sleep/resume…
TANGBUDU Oct 20, 2026
5ba3b9f
mtmd: fix gemma 4 ffn act (#30882)
ngxson Oct 20, 2026
7e3eeee
model : add H2O-Lightning-4B decision model (#30361)
pseudotensor Oct 20, 2026
4a45de4
mtmd : lfm2 tiles and layout match transformers (#30261)
ykhrustalev Oct 20, 2026
b684b49
hexagon: fix VTCM size query on images that need layout out-params (#…
tdakhran Oct 20, 2026
ead9f32
server: Support logprobs with speculative decoding (#27196)
pnb Oct 20, 2026
839a572
qwen: reshape output to 2d instead of 3d (#30823)
am17an Oct 20, 2026
52ffa02
model : support Nemotron-3(.5)-Embed (#30877)
tokinasin Oct 20, 2026
84e66d0
refactor : move LFM2 shortconv and FFN blocks into a shared LFM base …
tdakhran Oct 20, 2026
1242be6
server: add realtime transcription API (#30636)
ngxson Oct 20, 2026
5c0b49a
server : add POST /tts endpoint for TTS models (#26603)
ngxson Oct 20, 2026
9a3b91c
server : fix usage.completion_tokens undercount with n > 1 (#29486)
unbug Oct 20, 2026
339f324
opencl: fix rope program build error with newer Clang (#30893)
bashbaug Oct 21, 2026
493253f
Sycl iq3 crash fix (#30604)
anantshri Oct 21, 2026
8baabd5
llama : scale moe down projection per expert token (#30861)
ggerganov Oct 21, 2026
479a527
ggml-cpu : compute f32 gelu_quick and geglu_quick without the fp16 ta…
boshjerns Oct 21, 2026
96caa80
sycl: collapse duplicate need_check launch bodies in mmq (#30739)
Titaniumtown Oct 21, 2026
74b115c
sycl : fix fa crash for Query head dimension mismatch (neq0 != HSK / …
arthw Oct 21, 2026
b531e4c
opencl: add dp4a GEMM variants to vector load activation (#30753)
lhez Oct 21, 2026
0efe8e4
hexagon: neon-vectorized and threaded repack (tiling) (#30901)
max-krasnyansky Oct 21, 2026
ea9e344
metal : fix memory leaks and cleanup logic in GPU capture path (#30890)
nikwen Oct 21, 2026
eb182d8
llama : place d2t by its set_rows use so it can stay on the GPU (#30912)
am17an Oct 21, 2026
824eaec
llama : optimize vocabulary loading (#30679)
mykhailen Oct 21, 2026
f849095
vendor: update BoringSSL to 0.20261020.0 (#30889)
cabelo Oct 21, 2026
261700b
server : forward llama.cpp sampling params on /v1/messages (#30856)
Dgarc359 Oct 21, 2026
0a1ef30
mtmd: add state object for mtmd_gen (#30902)
ngxson Oct 21, 2026
9b56ccf
ggml-opencl : add IM2COL_3D support (#30895)
kurquhar Oct 21, 2026
9febe63
jinja: support hexadecimal string escapes (#30929)
alexey-rsi Oct 21, 2026
0756e83
sycl: q8 fast dequant (#30775)
92es Oct 21, 2026
d454a20
llama: create new fused op for QSA mask (#30640)
am17an Oct 21, 2026
7775ffb
model: Add support for SenseNova U1 model (#28919)
Maphist0 Oct 21, 2026
99fb997
jinja : fix namespace attributes shadowed by dict methods (#30941)
tdakhran Oct 21, 2026
a37cc46
models : add Flint model (FlintForCausalLM) (#30928)
alexey-rsi Oct 21, 2026
c7fc509
opencl: add F32-to-I32 ARGMAX (#30897)
kurquhar Oct 22, 2026
a6b83d4
ui : key draft sidecar badges by model instead of repo (#30919)
allozaur Oct 22, 2026
0682a57
lora : support prism.hadamard folded weights (#30910)
vieduy Oct 22, 2026
84746c5
ui: Add "Show tool call in progress" setting (#30681)
allozaur Oct 22, 2026
4912ac2
dflash : load optional FC input scale (#30945)
hthadicherla Oct 22, 2026
0b1281a
webgpu : add Q2_0 support (#30914)
teddygood Oct 22, 2026
e3797b1
sycl: merge the fp16 and fp32 dequant switches (#30740)
Titaniumtown Oct 22, 2026
dfeea52
kleidiai : add Q8_0 SVE dotprod GEMV and SVE i8mm GEMM kernels (#30808)
chaxu01 Oct 22, 2026
bf039c8
models : Record layer inputs for all granite models (#30957)
gabe-l-hart Oct 22, 2026
e197cef
vocab : use Tekken pre-tokenizer for pixtral rather than the Llama 3 …
tkran2 Oct 22, 2026
d88040c
vocab : add clean_spaces GGUF key (#30940)
tkran2 Oct 22, 2026
7170cad
sycl: fix CONV_2D wrong results for non-contiguous input (#30363)
mctylr-gh Oct 22, 2026
d930d94
Merge pull request #12 from ggml-org/master
Raman-Raje Oct 22, 2026
ff98cfb
qcom_tilek_change 1
Raman-Raje Oct 22, 2026
02ee9ce
Tilek version 1
Raman-Raje Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test-snapdragon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
android-ndk-snapdragon:
runs-on: ubuntu-24.04 # previously ubuntu-latest
container:
image: 'ghcr.io/snapdragon-toolchain/arm64-android:v0.7'
image: 'ghcr.io/snapdragon-toolchain/arm64-android:v0.8'
defaults:
run:
shell: bash
Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
linux-iot-snapdragon:
runs-on: ubuntu-24.04 # previously ubuntu-latest
container:
image: 'ghcr.io/snapdragon-toolchain/arm64-linux:v0.7'
image: 'ghcr.io/snapdragon-toolchain/arm64-linux:v0.8'
defaults:
run:
shell: bash
Expand Down
142 changes: 1 addition & 141 deletions .github/workflows/build-webgpu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,7 @@ on:
- master
paths: [
'.github/workflows/build-webgpu.yml',
'**/CMakeLists.txt',
'**/.cmake',
'**/*.h',
'**/*.hpp',
'**/*.c',
'**/*.cpp',
'**/*.wgsl',
'**/*.tmpl',
'ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py'
'ggml/src/ggml-webgpu/**'
]

pull_request:
Expand Down Expand Up @@ -63,135 +55,3 @@ jobs:
-type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.h' \) \
-print0 |
xargs -0 clang-format-22 --dry-run --Werror
macos:
runs-on: macos-latest

steps:
- name: Clone
id: checkout
uses: actions/checkout@v6

- name: ccache
uses: ggml-org/ccache-action@v1.2.24
with:
restore: false
save: false

- name: Dawn Dependency
id: dawn-depends
run: |
DAWN_VERSION="v20260908.214631"
DAWN_OWNER="google"
DAWN_REPO="dawn"
DAWN_ASSET_NAME="Dawn-94c3c9cc0d5fb2e85aebb370fa8d37b71aa34655-macos-latest-Release"
echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
curl -L -o artifact.tar.gz \
"https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
mkdir dawn
tar -xvf artifact.tar.gz -C dawn --strip-components=1
- name: ccache-buckets-restore
uses: ./.github/actions/ccache-buckets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN_CI }}
with:
key: webgpu-macos-latest
folder: llama.cpp
hf_bucket: ggml-org/cache

- name: Build
id: cmake_build
run: |
export CMAKE_PREFIX_PATH=dawn
cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DGGML_WEBGPU=ON -DGGML_METAL=OFF -DGGML_BLAS=OFF
time cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
- name: ccache-buckets-save
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: ./.github/actions/ccache-buckets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN_CACHE_OUTPUT }}
with:
key: webgpu-macos-latest
folder: llama.cpp
evict-old-files: 1d
hf_bucket: ggml-org/cache
save: true

- name: Test
id: cmake_test
run: |
cd build
ctest -L main --verbose --timeout 900
ubuntu:
runs-on: ubuntu-24.04

steps:
- name: Clone
id: checkout
uses: actions/checkout@v6

- name: ccache
uses: ggml-org/ccache-action@v1.2.24
with:
restore: false
save: false

- name: Dependencies
id: depends
run: |
sudo add-apt-repository -y ppa:kisak/kisak-mesa
sudo apt-get update -y
sudo apt-get install -y build-essential mesa-vulkan-drivers \
libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev libssl-dev
- name: Dawn Dependency
id: dawn-depends
run: |
sudo apt-get install -y libxrandr-dev libxinerama-dev libxcursor-dev mesa-common-dev libx11-xcb-dev libxi-dev
DAWN_VERSION="v20260908.214631"
DAWN_OWNER="google"
DAWN_REPO="dawn"
DAWN_ASSET_NAME="Dawn-94c3c9cc0d5fb2e85aebb370fa8d37b71aa34655-ubuntu-latest-Release"
echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
curl -L -o artifact.tar.gz \
"https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
mkdir dawn
tar -xvf artifact.tar.gz -C dawn --strip-components=1
- name: ccache-buckets-restore
uses: ./.github/actions/ccache-buckets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN_CI }}
with:
key: webgpu-ubuntu-24.04
folder: llama.cpp
hf_bucket: ggml-org/cache

- name: Build
id: cmake_build
run: |
export Dawn_DIR=dawn/lib64/cmake/Dawn
cmake -B build \
-DGGML_WEBGPU=ON
time cmake --build build --config Release -j $(nproc)
- name: ccache-buckets-save
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: ./.github/actions/ccache-buckets
env:
HF_TOKEN: ${{ secrets.HF_TOKEN_CACHE_OUTPUT }}
with:
key: webgpu-ubuntu-24.04
folder: llama.cpp
evict-old-files: 1d
hf_bucket: ggml-org/cache
save: true

- name: Test
id: cmake_test
run: |
cd build
ctest -L main --verbose --timeout 900
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ jobs:
if: ${{ needs.check-release.outputs.should_release == 'true' }}

runs-on: ubuntu-latest
container: 'ghcr.io/snapdragon-toolchain/arm64-android:v0.7'
container: 'ghcr.io/snapdragon-toolchain/arm64-android:v0.8'

defaults:
run:
Expand Down Expand Up @@ -600,7 +600,7 @@ jobs:
if: ${{ needs.check-release.outputs.should_release == 'true' }}

runs-on: ubuntu-latest
container: 'ghcr.io/snapdragon-toolchain/arm64-linux:v0.7'
container: 'ghcr.io/snapdragon-toolchain/arm64-linux:v0.8'

defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion cmake/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include("ggml/cmake/common.cmake")

function(llama_add_compile_flags)
if (LLAMA_FATAL_WARNINGS)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
list(APPEND C_FLAGS -Werror)
list(APPEND CXX_FLAGS -Werror)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
Expand Down
4 changes: 4 additions & 0 deletions common/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,7 @@ static const std::map<common_decision_type, std::string> COMMON_DECISION_TYPE_NA
{ COMMON_DECISION_TYPE_LFM2_D1, "lfm2-d1" },
{ COMMON_DECISION_TYPE_LFM2_D1_OMNI, "lfm2-d1-omni" },
{ COMMON_DECISION_TYPE_GRANITE_SWITCH, "granite-switch"},
{ COMMON_DECISION_TYPE_H2O_LIGHTNING, "h2o-lightning" },
// for future models, ALWAYS add org name prefix to avoid name collisions, e.g. "orgname-modelname"
};

Expand Down Expand Up @@ -1234,6 +1235,9 @@ common_gguf_info common_get_gguf_info(const std::string & fname) {
info.n_ctx_train = gguf_get_val_u32(gguf_ctx.get(), ctx_id);
}

// same key as llama_model_chat_template(model, nullptr)
info.has_chat_tmpl = gguf_find_key(gguf_ctx.get(), "tokenizer.chat_template") >= 0;

return info;
}

Expand Down
2 changes: 2 additions & 0 deletions common/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -975,6 +975,7 @@ enum common_decision_type {
COMMON_DECISION_TYPE_LFM2_D1, // same as openjev, the labels depend on the question type
COMMON_DECISION_TYPE_LFM2_D1_OMNI, // same as laya, other prompt layout
COMMON_DECISION_TYPE_GRANITE_SWITCH, // same as openjev, run by the decision aLoRA of granite switch
COMMON_DECISION_TYPE_H2O_LIGHTNING, // same as openjev, the labels are read after an answer prefill
COMMON_DECISION_TYPE_UNKNOWN, // a decision model of a type that is not supported
};

Expand All @@ -984,6 +985,7 @@ common_decision_type common_get_decision_type(const struct llama_model * model);
struct common_gguf_info {
common_decision_type decision_type = COMMON_DECISION_TYPE_UNKNOWN; // UNKNOWN if the file is missing, unreadable, or invalid
uint32_t n_ctx_train = 0; // 0 if unknown
bool has_chat_tmpl = false; // has the default tokenizer.chat_template
};

common_gguf_info common_get_gguf_info(const std::string & fname);
Expand Down
20 changes: 20 additions & 0 deletions common/jinja/lexer.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "lexer.h"
#include "runtime.h"
#include "unicode.h"

#include <cctype>
#include <charconv>
#include <functional>
#include <map>
#include <string>
Expand Down Expand Up @@ -75,6 +77,24 @@ lexer_result lexer::tokenize(const std::string & source) {
}
// add escaped char
char escaped_char = src[pos++];
if (escaped_char == 'x') {
if (pos + 1 >= src.size()) {
throw lexer_exception("incomplete hexadecimal escape", source, pos);
}

unsigned int value = 0;
const char * first = &src[pos];
const char * last = first + 2;

auto [ptr, ec] = std::from_chars(first, last, value, 16);
if (ec != std::errc{} || ptr != last) {
throw lexer_exception("invalid hexadecimal escape", source, pos);
}

str += common_unicode_cpt_to_utf8(value);
pos += 2;
continue;
}
if (escape_chars.find(escaped_char) == escape_chars.end()) {
throw lexer_exception(std::string("unknown escape character \\") + escaped_char, source, pos);
}
Expand Down
7 changes: 6 additions & 1 deletion common/jinja/value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,12 @@ const func_builtins & global_builtins() {
throw raised_exception("Jinja Exception: " + msg);
}},
{"dict", toobject},
{"namespace", toobject},
{"namespace", [](const func_args & args) -> value {
// unlike a dict, a namespace has no methods: ns.items is the attribute, as in jinja2
value out = toobject(args);
cast_val<value_object>(out)->has_builtins = false;
return out;
}},
{"strftime_now", [](const func_args & args) -> value {
args.ensure_vals<value_string>();
std::string format = args.get_pos(0)->as_string().str();
Expand Down
Loading
Loading