feat!: upgrade llama.cpp from b10731 to b10797 - #413
Merged
Conversation
No project-source change was needed, and that was established rather than
assumed. The four pin files move (CMakeLists GIT_TAG, README badge, CLAUDE.md,
LlamaCppVersion) plus the CHANGELOG and the breaking-changes history.
What the range actually contains, on the surface this project links against:
* common/common.h additive (common_params::preserve_reasoning_specified)
* common/log.h additive (common_log_get_verbosity)
* ggml/include/ggml.h additive (ggml_flash_attn_ext_set_n_kv_max)
* tools/mtmd/mtmd.h additive (mtmd_input_part, mtmd_tokenize_from_parts) plus
const-widening on mtmd_tokenize / mtmd_bitmap_init_lazy
and a bitmaps parameter re-typed const T** -> const T* const*
* tools/mtmd/mtmd-helper.h const-widening only, six functions
* tools/mtmd/CMakeLists.txt +models/deepseek4v.cpp
Every one of those is additive or a widening qualification, so existing call
sites still compile. The project's only direct mtmd calls are
mtmd_helper_bitmap_init_from_file + mtmd_helper_init_opt_default (tts_engine.cpp)
and upstream's own tokenize_input_prompts (jllama.cpp); it never calls
mtmd_tokenize itself. mtmd_helper::gen_audio -- the whole TTS surface -- is
untouched in the range.
The server wire contract was checked mechanically, not by header diff: that is
the failure class behind the getMetrics() payload break (b10408/b10519) and the
repeat_last_n sentinel removal (b10273), where nothing in the signature moved.
server-schema.cpp's request-field set, its set_hard_limits bounds, and
server-task.cpp's response keys in BOTH emit forms are byte-identical between
the two tags: zero added, zero removed, zero re-bounded.
Two upstream behaviour changes worth knowing even though nothing broke:
* preserve_reasoning now defaults to ENABLED (#28174). common_params_parse_ex
sets it when the caller did not, where it previously followed the chat
template's own default. On a template advertising supports_preserve_reasoning
the full history now carries reasoning traces instead of only the last
assistant message -- better continuity, more prompt tokens. This reaches
every entry point that parses argv: NativeServer in both modes and
LlamaModel's own parameter parse. --no-reasoning-preserve restores the old
behaviour.
* data: URLs are now accepted for input_audio and input_video, not only images
(#27735).
Also picked up: a fix for Qwen3-TTS-0.6b (#28231), where an F16 ffn_down
overflowed on intermediate peaks past the 65504 ceiling and turned the residual
into NaN. That is on the TextToSpeech path this project ships.
Patches: all 8 still apply, and this was not a free pass -- 3 of their 42 target
files are in the range (common/arg.cpp and tools/mtmd/mtmd-cli.cpp for 0001,
tools/server/server-context.cpp for 0002/0003/0010), so the applier had to be
run for real. Fresh build dir, stamp written at head c5a5535e. 0010 and 0001
were additionally re-checked by hand against the rule in CLAUDE.md, because the
fail-loud applier detects "does not apply" but never "upstream already fixed
this, drop me": get_res_model_info() still emits an uncast enum for vocab_type,
and common_params_parse_main still appears nowhere in b10792's arg.h while the
_WIN32 argv override is still in arg.cpp -- upstream has not adopted #26416.
Chunking: the runbook's 100 KiB-per-step rule was deliberately NOT applied here.
The full b10731...b10792 diff is 4.19 MB, but docs/ops/Hexagon.csv alone is
19792 generated lines and the GPU backends account for most of the rest -- both
outside the review surface the rule exists to bound (ggml/src/** is on the
"safe to skip" list). Across common/, include/, tools/server/, tools/mtmd/ and
ggml/include/ the range is 35 files, +758/-175, reviewable in one pass;
chunking would have produced ~44 commits without adding a line of review. The
measured figures are recorded in the history file so the deviation is auditable
rather than silent.
Verified locally: fresh configure clean, full build with zero warnings on the
project TUs, ctest 520/520, mvn clean verify 1474 Java tests green (including
NativeLibraryLoadSmokeTest, which cross-checks the new LLAMA_CPP_VERSION against
the actually-linked build-info), and the new bytecode gate clean over
llama/target.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AnNYn8W1xuVxVJtyL34GyH
Straight bump by the runbook's own rule rather than in spite of it: the full
b10792...b10797 diff is 46 KB across 5 commits, comfortably inside the 100 KiB
threshold, so no chunking decision arises here.
The review surface is literally empty. The range touches zero files under
common/, include/, tools/server/, tools/mtmd/, ggml/include/ or the top-level
CMakeLists.txt; all 18 changed files sit in llama.cpp's own src/ model layer,
the SYCL backend, the s390x CPU quants, upstream tests and docs. The server
wire contract was re-checked anyway and is byte-identical (request fields,
response keys). None of the 42 files the eight patches touch is in the range,
so no patch context can have moved -- confirmed by running the applier for real
regardless: fresh build dir, configure clean, stamp at head 832fd6f1.
Two entries are still worth recording:
* #28332 is a big-endian correctness fix on a platform this project ships in
the DEFAULT JAR. ggml_vec_dot_q5_1_q8_1's s390x path accumulated into an
uninitialized v_acc, so Q5_1 inference on IBM Z could return garbage. The
build-linux-s390x job cross-builds and runs the C++ suite under qemu-user,
but that suite covers OUR endian-sensitive layer (tts_wav.hpp, the
JSON/token transforms), not ggml's kernels -- precisely the class of bug
that job cannot see and upstream has to fix.
* #28278 moves LLAMA_VERSION/LLAMA_COMMIT out of
target_compile_definitions(llama PRIVATE ...) into a configure_file-generated
src/llama-version.h. That is the one change in the range that could
plausibly have reached the project, since
NativeLibraryLoadSmokeTest.nativeBuildInfoMatchesPinnedVersionConstant
asserts the pin against the linked binary. It does not: jllama.cpp reads
llama_build_info() from common/build-info.cpp, a different mechanism. Checked
by running the test, not by reading the diff.
The CHANGELOG entry is folded to cover b10731 -> b10797 as one range, since
b10792 was never released; the per-range detail stays in the history file.
Verified locally: fresh configure clean, full build with zero warnings on the
project TUs, ctest 520/520, mvn clean verify 1474 Java tests green, bytecode
gate clean over llama/target.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AnNYn8W1xuVxVJtyL34GyH
bernardladenthin
had a problem deploying
to
maven-central
September 4, 2026 09:41 — with
GitHub Actions
Failure
bernardladenthin
had a problem deploying
to
maven-central
September 4, 2026 09:41 — with
GitHub Actions
Failure
Review SummaryThis is a well-executed llama.cpp version bump from b10731 to b10797 (two steps). No issues found. ✅ Verification ChecklistVersion pin consistency — all four required locations updated correctly:
Documentation quality:
Verification evidence:
Follows bump procedure per CLAUDE.md:
AnalysisThe PR demonstrates careful upgrade methodology:
Ready to merge. |
|
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Two commits,
b10731 → b10792 → b10797. No project-source change was needed — and that was established, not assumed.Headers on the priority review list. Every move in the whole range is additive or a widening const-qualification, so existing call sites still compile:
common/common.hcommon_params::preserve_reasoning_specified)common/log.hcommon_log_get_verbosity)ggml/include/ggml.hggml_flash_attn_ext_set_n_kv_max)tools/mtmd/mtmd.hmtmd_input_part,mtmd_tokenize_from_parts) + const-widening;bitmapsre-typedconst T**→const T* const*tools/mtmd/mtmd-helper.htools/mtmd/CMakeLists.txt+models/deepseek4v.cppThe project's only direct mtmd calls are
mtmd_helper_bitmap_init_from_file+mtmd_helper_init_opt_default(tts_engine.cpp) and upstream's owntokenize_input_prompts(jllama.cpp); it never callsmtmd_tokenizeitself, and that re-typed parameter would have been a legal qualification conversion anyway.mtmd_helper::gen_audio— the entire TTS surface — is untouched.The server wire contract was checked mechanically, not by header diff. That is the failure class behind the
getMetrics()payload break (b10408/b10519) and therepeat_last_nsentinel removal (b10273), where no signature moved and the build stayed green for hundreds of runs.server-schema.cpp's request-field set, itsset_hard_limitsbounds, andserver-task.cpp's response keys in both emit forms are byte-identical across the range: zero added, zero removed, zero re-bounded.Patches: all 8 still apply. For the first step this was not a free pass — 3 of their 42 target files are in
b10731…b10792(common/arg.cpp+mtmd-cli.cppfor0001,server-context.cppfor0002/0003/0010), so the applier had to run for real.0010and0001were additionally re-checked by hand against the rule inCLAUDE.md, because the fail-loud applier detects "does not apply" but never "upstream already fixed this, drop me":get_res_model_info()still emits an uncast enum forvocab_type, andcommon_params_parse_mainstill appears nowhere inarg.hwhile the#ifdef _WIN32argv override is still inarg.cpp— upstream has not adopted #26416.Upstream behaviour changes worth knowing (nothing broke)
preserve_reasoningnow defaults to enabled (#28174).common_params_parse_exsets it when the caller did not, where it previously followed the chat template's own default. On a template advertisingsupports_preserve_reasoningthe full history now carries reasoning traces instead of only the last assistant message — better continuity, more prompt tokens. This reaches every entry point that parses argv:NativeServerin both modes andLlamaModel's own parameter parse.--no-reasoning-preserverestores the old behaviour.data:URLs are now accepted forinput_audioandinput_video, not only images (#27735).ggml_vec_dot_q5_1_q8_1's s390x path accumulated into an uninitializedv_acc, soQ5_1inference on IBM Z could return garbage. Note what this says about our own coverage —build-linux-s390xruns the C++ suite underqemu-user, but that suite covers our endian-sensitive layer (tts_wav.hpp, the JSON/token transforms), not ggml's kernels. Exactly the class of bug that job cannot see.ffn_downoverflowed past the 65504 ceiling and turned the residual into NaN — on theTextToSpeechpath this project ships.One upstream build change was worth verifying rather than reading past: #28278 moves
LLAMA_VERSION/LLAMA_COMMITout oftarget_compile_definitionsinto a generatedsrc/llama-version.h. That is the one thing in the range that could plausibly have reached us, sinceNativeLibraryLoadSmokeTestasserts the pin against the linked binary. It does not —jllama.cppreadsllama_build_info()fromcommon/build-info.cpp— and the test passes at b10797.Chunking: one deviation, stated openly
The second step (
b10792 → b10797) is a straight bump by the runbook's rule: 46 KB across 5 commits, inside the 100 KiB threshold, and its review surface is literally empty — zero files undercommon/,include/,tools/server/,tools/mtmd/,ggml/include/or the top-levelCMakeLists.txt.The first step (
b10731 → b10792) deliberately did not follow the rule. Its full diff is 4.19 MB, butdocs/ops/Hexagon.csvalone is 19 792 generated lines and the GPU backends account for most of the rest — both outside the review surface the rule exists to bound (ggml/src/**is on the "safe to skip" list). Across the paths that are actually reviewed the range is 35 files, +758 / −175, reviewable in one pass; chunking would have produced ~44 commits without adding a line of review. The measured figures are recorded indocs/history/llama-cpp-breaking-changes.mdso the deviation is auditable rather than silent.Test plan
rm -rf build && cmake -B build -DBUILD_TESTING=ONat both tags — the fail-loudPATCH_COMMANDran for real; stamps athead c5a5535e(b10792) andhead 832fd6f1(b10797)ctest520/520 at both tagsmvn clean verify— 1474 Java tests, 0 failures, incl.NativeLibraryLoadSmokeTest, which cross-checks the newLLAMA_CPP_VERSIONagainst the actually-linkedgetLlamaCppBuildInfo()(cleanis required here; the constant is inlined into the test class — see the runbook gotcha).github/verify-bytecode-version.sh --max-major 52 llama/targetcleanb10731 → b10797CHANGELOG entry, and four new rows indocs/history/llama-cpp-breaking-changes.mdModel-backed Java tests were not run locally (HuggingFace is blocked in this sandbox); they self-skip here and are covered by CI.
Related issues / PRs
Follows #412. A stale remote branch
claude/llama-cpp-b10792is left over from the first step — the delete push kept failing at the proxy. Nothing tracks it; safe to delete from the GitHub UI.Checklist
CONTRIBUTING.mdandCODE_OF_CONDUCT.md🤖 Generated with Claude Code
https://claude.ai/code/session_01AnNYn8W1xuVxVJtyL34GyH
Generated by Claude Code