Repository navigation
Move llama.cpp to v0.9.0 and audit its CPU ISA source pair - #175
Merged
Merged
Conversation
Add v0.9.0 rows to every validate_wrapper.yml lane and admit the reviewed v0.9.0 ggml/src + KleidiAI v1.32.0 pair with the v0.8.0 function set. Document the wrapper, carried-patch and consumer ABI delta.
This was referenced Nov 6, 2026
Merged
Conflicts in validate_wrapper.yml and test_ci_scope.py take main's LLAMADART_UPSTREAMS form; the v0.9.0 pin is added as its third row.
Patches 0001, 0002, 0005 and 0006 apply on v0.9.0 and current upstream master; 0003 and 0004 stay only for the v0.7.0 and v0.8.0 rows. Merging publishes nothing now that the stable detector is manual-only.
leehack
marked this pull request as ready for review
November 7, 2026 16:06
13 of 15 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.
Moves
third_party/llama.cppfrom upstream v0.8.0 (8642541b) to stable v0.9.0 (cd959bae, 2026-11-04, v0.8.0 + 150 commits) and audits its CPU ISA source pair.Head
ef32565, based onmainf3961b7(merged in, no rebase).Changes
validate_wrapper.yml:"v0.9.0": "cd959bae…"added toLLAMADART_UPSTREAMS. It is the pin row, so it builds the checkout as is and runs the pinned-only steps;tools/ci_scope.pyresolvesupstreams = [v0.7.0, v0.8.0, v0.9.0],pinned = v0.9.0. The v0.7.0 and v0.8.0 rows stay (maintainer decision).ggml/srcdigest bound to the unchanged KleidiAI v1.32.0kaidigest, granting exactly the v0.8.0 function set.mtmd_gen_audio_info.n_voicesand the removedmtmd_helper_gen_audio_inp.voiceare not read; Chatterbox reportsUNKNOWN/unsupported. Chatterbox and predefined voices are out of scope.docs/v090_qualification.md(wrapper, per-patch review, consumer ABI delta),docs/v090_android_isa_qualification.md(source pair, FHM re-check with 0005/0006), AGENTS.md pointers.docs/native174_f16_dot_accumulation.mdno longer says a daily detector publishes v0.9.0.Merge of
main(#177, #178).github/workflows/validate_wrapper.ymlmain'sLLAMADART_UPSTREAMSform; added the v0.9.0 row. The old per-jobv0.9.0/pinnedmatrix edits are gone with that form.tests/test_ci_scope.pymain's version; it already checks that the pin is exactly one row and that the v0.7.0/v0.8.0 rows remain.tools/validate_android_cpu_isa.py,tests/test_android_cpu_isa.py,AGENTS.md,docs/platform_backend_strategy.md+fp16fmldecoding and test sit next to this PR's v0.9.0 pair.Carried patches
Reviewed 2026-11-07 against v0.9.0 and upstream
masterf7591a6(b12190).apply --strictsucceeds on both and applies 0001, 0002, 0005 and 0006, the four thatmanifest --upstreamlists. Every patch passesgit apply --checkon both.series.jsonis unchanged.use_subgroupsunchanged onmastermaster; still no entry-point checkupstream_fix, #31086)upstream_fix,required_textabsent, #31360)float16x8_ttinyBLAS<8, float16x8_t, …>Measured: v0.7.0 manifest lists 0001–0006 but strict apply rejects 0004 (
required_textabsent), so it builds 0001–0003, 0005, 0006; v0.8.0 lists 0001, 0002, 0004–0006. Deleting 0003/0004 means dropping the v0.7.0/v0.8.0 rows — a maintainer support-policy call.ISA audit
Source review unchanged from v0.8.0 except three ggml SVE256 paths in
arch/arm/repack.cpp, behind__ARM_FEATURE_SVEand a runtime 256-bit check, so not in the non-SVE variants. The source pair still fingerprints unpatched upstream (fead7601…/fd5b9ca9…recomputed on the merged tree), so 0005/0006 do not change it.Re-check on the merged tree (0005/0006 applied):
armv8.2_2(NDK 28.2)armv8.6_1(NDK 28.2)ggml_vec_dot_f16linux_armv8.2_2/linux_armv8.6_1(ubuntu:24.04arm64, GCC 13.3,check_linux_arm64_cpu_variants.sh)fhm=10/0)validate_linux_arm64_cpu_isa.pyallowsfhmonly with FP16 on ARMv8.4+, i.e.linux_armv8.6_1, notarmv8.2_2.validate_android_cpu_isa.pyonly enforces SVE/SME containment (decodes FHM via+fp16fml) and CI/release run it onandroid_armv8.2_2only; applying the Linux family policy to both Android modules also passes, withfhmallowed only forarmv8.6_1.Local evidence (merged tree)
ci_scope.pywith the workflow tableupstreams [v0.7.0, v0.8.0, v0.9.0],pinned v0.9.0macos-arm64-full+ tests (M4 Max)llamadart_f16_dot_accumulation_test;validate_exports.py --forbid-import __cxa_atexit92 exports;check-applepasstest_*.py/*_test.py/verify_release_provenance.pywindows-11-vs2026-armlabelHosted evidence (head
ef32565)All 52 checks pass. Rows are now
v0.7.0,v0.8.0andv0.9.0(#178 dropped the older rows). Thev0.9.0rows skip "Select candidate upstream" and run the pinned-only steps (Android bundle exception runtime, Linux static-destructor check), confirming it is the pin row. Includes thev0.9.0Android ISA, emulated KleidiAI dispatch, Windows arm64 KleidiAI/Vulkan, Linux arm64 artifact contract (variant audit + QEMU), wrapper contract, macOS exit teardown (Release with the F16 conversion-path test, and ASan), and the Metal OS floor at the pin.Not covered
Follow-up (not in this PR)
tools/validate_android_cpu_isa.pystill allows the v0.4.0–v0.6.0 source pairs although noLLAMADART_UPSTREAMSrow builds them any more.Before merge
ef32565on mainf3961b7f, no blocking findings: submodule bump and merge resolution, per-patch table, v0.9.0 source pair recomputed (fail-closed; mutations of the pair, function set and upstream row all fail tests), Android ISA rebuilt (FMLAL only in armv8.6_1), exports 92,check-apple, CTest 85/85. Wording nits (AGENTS.md calls 0004 "retired"; patches README line 73 mentions the automatic release) go into the v0.4.0–v0.6.0 source-pair prune follow-up.v0.9.0, check its assets, then land #176, then the llamadart pin and bindings.