Refresh llama.cpp upstream canary patch queue - #839
Conversation
📝 WalkthroughWalkthroughThe patch series expands the Skippy ABI, adds runtime-slice graph filtering across many model builders, and introduces new APIs for activation frames, sampling, state/KV persistence, GGUF composition, and backend device enumeration. ChangesSkippy ABI and runtime-slice evolution
ChangesSkippy ABI and runtime-slice evolution
✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch (1)
276-437:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSilent failure on payload size mismatch at end of import.
Line 436 returns the result of
src == static_cast<const char *>(input) + input_byteswithout setting an error message if bytes consumed don't match. If there's any miscalculation in the V-transposed copy loop, this silently returnsfalsewith no diagnostic.Proposed fix
- return src == static_cast<const char *>(input) + input_bytes; + if (src != static_cast<const char *>(input) + input_bytes) { + error = "native KV page import consumed unexpected number of bytes"; + return false; + } + return true;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch` around lines 276 - 437, The function llama_kv_cache::stage_import_kv_page currently returns the boolean of (src == input + input_bytes) without setting error on mismatch; change this by checking the final consumed byte count after the K/V copy loops (compare src - static_cast<const char *>(input) to input_bytes) and if they differ set a descriptive error on the error string (e.g. "imported payload size mismatch: consumed X bytes, expected Y bytes") and return false; keep the successful path returning true. Place this check just before the current return and reference the local symbols src, input, input_bytes and error, so any mismatch (including V-transposed loop mistakes) yields a clear error message instead of silent failure.third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch (1)
180-270:⚠️ Potential issue | 🟡 MinorFix missing
token_idsargument toskippy_decode_activation_framein patch 0020
0018-Support-more-runtime-slice-model-families.patchaddsconst llama_token * token_idstoskippy_decode_activation_frame(...).- In
0020-Add-staged-batched-verification-frame-ABI.patch, the decode branch callsskippy_decode_activation_frame(session, input_desc, input_payload, token_count, false, out_error)(omitstoken_ids).0025-Fix-staged-verification-activation-handoff.patchcorrects this by passingtoken_ids(..., input_payload, token_ids, token_count, false, out_error), so compilation relies on0025being applied.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch` around lines 180 - 270, In skippy_verify_tokens_frame the call to skippy_decode_activation_frame is missing the new token_ids parameter introduced earlier; update the decode branch inside skippy_verify_tokens_frame so the call passes token_ids (i.e., change skippy_decode_activation_frame(session, input_desc, input_payload, token_count, false, out_error) to include token_ids as the argument before token_count), ensuring the function signature matches the updated skippy_decode_activation_frame declaration and compilation succeeds.third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch (1)
350-353:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDefensive check should verify sufficient space for sideband data.
The condition at line 353 checks
desc->payload_bytes >= hidden_bytes, but when the RWKV7 flag is set, the sideband data spans anotherhidden_bytesafter the hidden portion. If validation is bypassed or buggy, this could allow reading beyond the payload buffer.The copy logic at lines 507-515 correctly checks
input_desc->payload_bytes < hidden_bytes * 2. For consistency and defense-in-depth, this check should also be>= hidden_bytes * 2:Suggested fix
if (desc != nullptr && payload != nullptr && (desc->flags & SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0 && - desc->payload_bytes >= hidden_bytes) { + desc->payload_bytes >= hidden_bytes * 2) {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch` around lines 350 - 353, The conditional that validates the payload for RWKV7 sideband (checking desc != nullptr, payload != nullptr, (desc->flags & SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0, and desc->payload_bytes >= hidden_bytes) is insufficient because RWKV7 includes an extra hidden_bytes of sideband data; update the check on desc->payload_bytes to require at least hidden_bytes * 2 (matching the input_desc->payload_bytes < hidden_bytes * 2 check used later) so the branch that handles RWKV7 activation-sideband cannot read past the payload buffer.third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch (1)
106-118:⚠️ Potential issue | 🟠 Major | ⚡ Quick winPosition fallback may leave uninitialized data for unusual
n_pos_per_embdvalues.When
positions == nullptrandn_pos_per_embdis neither 1 nor 4, the else branch (lines 114-117) only fillsn_tokenspositions butpos_storagewas allocated forn_tokens * n_pos_per_embdelements. This could leave uninitialized positions in the batch for models withn_pos_per_embdvalues like 2 or 3.Consider zero-initializing
pos_storageat allocation or extending the fallback logic.🛡️ Proposed fix: zero-initialize or handle all cases
- std::vector<llama_pos> pos_storage(expected_position_count); + std::vector<llama_pos> pos_storage(expected_position_count, 0);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch` around lines 106 - 118, The fallback branch that runs when positions == nullptr only fills the first n_tokens entries leaving pos_storage (allocated for n_tokens * n_pos_per_embd) partially uninitialized for n_pos_per_embd != 1 or 4; update the fallback to fully initialize all n_pos_per_embd slots by replacing the simple loop with a nested loop that for each token i and each slot k sets pos_storage[k * n_tokens + i] = session->n_past + i (or alternatively zero-initialize pos_storage at allocation with memset/{}), ensuring pos_storage, n_pos_per_embd, n_tokens and session->n_past are used to locate and fill every element when positions == nullptr.
🧹 Nitpick comments (3)
third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch (1)
69-71: 💤 Low valuePotential overflow on large GGUF files with 32-bit
long.
std::fseektakes alongoffset, which may overflow on 32-bit platforms or Windows (wherelongis 32 bits) when seeking beyond 2GB. This affects bothskippy_skip(here) andskippy_write_slice_gguf(line 426).Consider using platform-specific 64-bit seek functions (
fseeko/_fseeki64) for large file support, or document the limitation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch` around lines 69 - 71, The skippy_skip implementation (and the seek in skippy_write_slice_gguf) uses std::fseek with a cast to long which can overflow on 32-bit platforms; change these seeks to use a 64-bit seek API (fseeko on POSIX or _fseeki64 on Windows) via conditional compilation: detect _WIN32 to call _fseeki64 with a 64-bit offset type, otherwise use fseeko with off_t, and keep a fallback to std::fseek for platforms that lack 64-bit variants; update skippy_skip and the seek in skippy_write_slice_gguf to use this wrapper so large GGUF files seek correctly.third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch (1)
56-74: 💤 Low valueReturning token 0 on null logits could mask errors.
When
llama_get_logits_ithreturnsnullptr, the function returns token0which may be a valid token (BOS/padding). This could silently produce incorrect verification results if logits computation fails for a batch position.Consider returning a sentinel value like
-1(which is commonly used for invalid tokens) or propagating the error to the caller.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch` around lines 56 - 74, The helper skippy_greedy_sample_ith currently returns token 0 when llama_get_logits_ith returns nullptr which can mask errors; change the function to return a sentinel for "invalid" (e.g. use int32_t as the return type or an existing LLAMA_TOKEN_INVALID constant) and return -1 (or that constant) on nullptr from llama_get_logits_ith, and then update all callers of skippy_greedy_sample_ith to check for the sentinel and handle the error path instead of treating it as a valid token; reference skippy_greedy_sample_ith and llama_get_logits_ith when making the change.third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch (1)
182-211: 💤 Low valueSilent success on JSON parse exceptions may mask configuration errors.
When
json::parse(metadata_json)throws, the code clears chat sampling and returnsskippy_success(out_error). This silently ignores malformed metadata JSON, making it difficult for callers to diagnose why grammar sampling isn't active. Consider returning an error status or at minimum logging/reporting the parse failure.Potential fix to report parse errors
} catch (const std::exception & e) { skippy_clear_chat_sampling(session); - return skippy_success(out_error); + skippy_set_error(out_error, SKIPPY_STATUS_INVALID_ARGUMENT, + ("failed to parse chat sampling metadata: " + std::string(e.what())).c_str()); + return SKIPPY_STATUS_INVALID_ARGUMENT; } catch (...) { skippy_clear_chat_sampling(session); - return skippy_success(out_error); + skippy_set_error(out_error, SKIPPY_STATUS_INVALID_ARGUMENT, "failed to parse chat sampling metadata"); + return SKIPPY_STATUS_INVALID_ARGUMENT; }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch` around lines 182 - 211, The code currently swallows JSON parse exceptions and returns skippy_success, hiding malformed metadata; update the JSON parsing path inside skippy_init_chat_grammar_sampler (the json::parse(metadata_json) handling) to catch parse exceptions and propagate an error instead of returning success — create and set a descriptive skippy_error (or call an existing helper to populate out_error) and return false (or appropriate failure code) so callers know grammar metadata failed to parse, and include the parse exception message in the error for diagnostics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch`:
- Around line 276-437: The function llama_kv_cache::stage_import_kv_page
currently returns the boolean of (src == input + input_bytes) without setting
error on mismatch; change this by checking the final consumed byte count after
the K/V copy loops (compare src - static_cast<const char *>(input) to
input_bytes) and if they differ set a descriptive error on the error string
(e.g. "imported payload size mismatch: consumed X bytes, expected Y bytes") and
return false; keep the successful path returning true. Place this check just
before the current return and reference the local symbols src, input,
input_bytes and error, so any mismatch (including V-transposed loop mistakes)
yields a clear error message instead of silent failure.
In
`@third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch`:
- Around line 180-270: In skippy_verify_tokens_frame the call to
skippy_decode_activation_frame is missing the new token_ids parameter introduced
earlier; update the decode branch inside skippy_verify_tokens_frame so the call
passes token_ids (i.e., change skippy_decode_activation_frame(session,
input_desc, input_payload, token_count, false, out_error) to include token_ids
as the argument before token_count), ensuring the function signature matches the
updated skippy_decode_activation_frame declaration and compilation succeeds.
In `@third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch`:
- Around line 350-353: The conditional that validates the payload for RWKV7
sideband (checking desc != nullptr, payload != nullptr, (desc->flags &
SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0, and desc->payload_bytes >=
hidden_bytes) is insufficient because RWKV7 includes an extra hidden_bytes of
sideband data; update the check on desc->payload_bytes to require at least
hidden_bytes * 2 (matching the input_desc->payload_bytes < hidden_bytes * 2
check used later) so the branch that handles RWKV7 activation-sideband cannot
read past the payload buffer.
In
`@third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch`:
- Around line 106-118: The fallback branch that runs when positions == nullptr
only fills the first n_tokens entries leaving pos_storage (allocated for
n_tokens * n_pos_per_embd) partially uninitialized for n_pos_per_embd != 1 or 4;
update the fallback to fully initialize all n_pos_per_embd slots by replacing
the simple loop with a nested loop that for each token i and each slot k sets
pos_storage[k * n_tokens + i] = session->n_past + i (or alternatively
zero-initialize pos_storage at allocation with memset/{}), ensuring pos_storage,
n_pos_per_embd, n_tokens and session->n_past are used to locate and fill every
element when positions == nullptr.
---
Nitpick comments:
In `@third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch`:
- Around line 69-71: The skippy_skip implementation (and the seek in
skippy_write_slice_gguf) uses std::fseek with a cast to long which can overflow
on 32-bit platforms; change these seeks to use a 64-bit seek API (fseeko on
POSIX or _fseeki64 on Windows) via conditional compilation: detect _WIN32 to
call _fseeki64 with a 64-bit offset type, otherwise use fseeko with off_t, and
keep a fallback to std::fseek for platforms that lack 64-bit variants; update
skippy_skip and the seek in skippy_write_slice_gguf to use this wrapper so large
GGUF files seek correctly.
In `@third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch`:
- Around line 56-74: The helper skippy_greedy_sample_ith currently returns token
0 when llama_get_logits_ith returns nullptr which can mask errors; change the
function to return a sentinel for "invalid" (e.g. use int32_t as the return type
or an existing LLAMA_TOKEN_INVALID constant) and return -1 (or that constant) on
nullptr from llama_get_logits_ith, and then update all callers of
skippy_greedy_sample_ith to check for the sentinel and handle the error path
instead of treating it as a valid token; reference skippy_greedy_sample_ith and
llama_get_logits_ith when making the change.
In
`@third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch`:
- Around line 182-211: The code currently swallows JSON parse exceptions and
returns skippy_success, hiding malformed metadata; update the JSON parsing path
inside skippy_init_chat_grammar_sampler (the json::parse(metadata_json)
handling) to catch parse exceptions and propagate an error instead of returning
success — create and set a descriptive skippy_error (or call an existing helper
to populate out_error) and return false (or appropriate failure code) so callers
know grammar metadata failed to parse, and include the parse exception message
in the error for diagnostics.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: a62febfe-267a-4cfb-a27f-e2671dc7ea69
📒 Files selected for processing (83)
third_party/llama.cpp/patches/0001-Draft-skippy-ABI-header.patchthird_party/llama.cpp/patches/0002-Implement-skippy-model-info-ABI.patchthird_party/llama.cpp/patches/0003-Implement-single-stage-runtime-ABI-baseline.patchthird_party/llama.cpp/patches/0004-Implement-runtime-slice-tensor-filtering.patchthird_party/llama.cpp/patches/0005-Add-activation-frame-runtime-ABI.patchthird_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patchthird_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patchthird_party/llama.cpp/patches/0008-Add-GGUF-package-part-composer-ABI.patchthird_party/llama.cpp/patches/0009-Support-Qwen35MoE-runtime-slice-packages.patchthird_party/llama.cpp/patches/0010-Handle-Qwen35MoE-recurrent-only-runtime-slices.patchthird_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patchthird_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patchthird_party/llama.cpp/patches/0013-Expose-stage-token-EOG-ABI.patchthird_party/llama.cpp/patches/0014-Position-stage-token-batches-from-session-offset.patchthird_party/llama.cpp/patches/0015-Optimize-native-KV-page-cell-lookup.patchthird_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patchthird_party/llama.cpp/patches/0017-Expose-stage-chat-template-ABI.patchthird_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patchthird_party/llama.cpp/patches/0019-Add-stage-sampling-config-ABI.patchthird_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patchthird_party/llama.cpp/patches/0021-Add-recurrent-state-checkpoint-ABI.patchthird_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patchthird_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patchthird_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patchthird_party/llama.cpp/patches/0025-Fix-staged-verification-activation-handoff.patchthird_party/llama.cpp/patches/0026-Strip-split-metadata-from-stage-GGUF-artifacts.patchthird_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patchthird_party/llama.cpp/patches/0028-Load-stage-models-from-ordered-GGUF-parts.patchthird_party/llama.cpp/patches/0029-Support-Qwen3MoE-runtime-slice-execution.patchthird_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patchthird_party/llama.cpp/patches/0031-Expose-stage-generation-signal-ABI.patchthird_party/llama.cpp/patches/0032-Expose-selected-backend-device-ABI.patchthird_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patchthird_party/llama.cpp/patches/0034-Add-shared-execution-lanes-to-skippy-ABI.patchthird_party/llama.cpp/patches/0035-Expose-stage-batch-and-flash-attention-config.patchthird_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patchthird_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patchthird_party/llama.cpp/patches/0038-Add-resident-prefix-cache-ABI.patchthird_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patchthird_party/llama.cpp/patches/0040-Add-borrowed-resident-prefix-session-ABI.patchthird_party/llama.cpp/patches/0041-Compute-stage-generation-signals-lazily.patchthird_party/llama.cpp/patches/0042-Avoid-heap-batch-allocation-for-single-token-decode.patchthird_party/llama.cpp/patches/0043-Default-stage-threads-like-llama-server.patchthird_party/llama.cpp/patches/0044-Allow-borrowing-resident-prefix-cache-sequences.patchthird_party/llama.cpp/patches/0045-Preserve-resident-prefix-lanes.patchthird_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patchthird_party/llama.cpp/patches/0047-Support-initial-dense-runtime-slice-families.patchthird_party/llama.cpp/patches/0048-Support-additional-dense-runtime-slice-families.patchthird_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patchthird_party/llama.cpp/patches/0050-Support-more-decoder-runtime-slice-families.patchthird_party/llama.cpp/patches/0051-Support-LFM2-runtime-slice-execution.patchthird_party/llama.cpp/patches/0052-Support-Mamba-runtime-slice-execution.patchthird_party/llama.cpp/patches/0053-Support-Jamba-runtime-slice-execution.patchthird_party/llama.cpp/patches/0054-Support-RWKV6-runtime-slice-execution.patchthird_party/llama.cpp/patches/0055-Support-Qwen2MoE-runtime-slice-execution.patchthird_party/llama.cpp/patches/0056-Expose-skippy-session-native-sequence-id.patchthird_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patchthird_party/llama.cpp/patches/0058-Support-Phi2-runtime-slice-execution.patchthird_party/llama.cpp/patches/0059-Support-Granite-runtime-slice-variants.patchthird_party/llama.cpp/patches/0060-Support-Hunyuan-Dense-runtime-slice-execution.patchthird_party/llama.cpp/patches/0061-Support-Hunyuan-MoE-runtime-slice-execution.patchthird_party/llama.cpp/patches/0062-Support-PhiMoE-runtime-slice-execution.patchthird_party/llama.cpp/patches/0063-Allow-tied-output-embeddings-in-final-runtime-slices.patchthird_party/llama.cpp/patches/0064-Support-Qwen35-and-Hunyuan-VL-runtime-slices.patchthird_party/llama.cpp/patches/0065-Support-broad-llama-family-runtime-slices.patchthird_party/llama.cpp/patches/0066-Fix-BitNet-tied-output-runtime-slices.patchthird_party/llama.cpp/patches/0067-Fix-StarCoder-positional-embeddings-in-runtime-slice.patchthird_party/llama.cpp/patches/0068-Support-DeepSeek-OCR-and-Qwen3-VL-MoE-runtime-slices.patchthird_party/llama.cpp/patches/0069-Avoid-double-counting-optional-filtered-tensors.patchthird_party/llama.cpp/patches/0070-Skip-recurrent-layers-in-native-KV-page-export.patchthird_party/llama.cpp/patches/0071-Expose-external-decode-stage-filter-ABI.patchthird_party/llama.cpp/patches/0072-Support-external-media-prefill-in-staged-runtime-ABI.patchthird_party/llama.cpp/patches/0073-Expose-model-info-tensor-element-counts.patchthird_party/llama.cpp/patches/0074-Pad-activation-frame-decode-batches-to-native-input-.patchthird_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patchthird_party/llama.cpp/patches/0076-Support-Gemma3n-runtime-slices.patchthird_party/llama.cpp/patches/0077-Support-Llama4-and-Mistral4-runtime-slices.patchthird_party/llama.cpp/patches/0078-Contain-chat-grammar-sampler-exceptions.patchthird_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patchthird_party/llama.cpp/patches/0080-Expose-skippy-backend-device-enumeration-ABI.patchthird_party/llama.cpp/patches/0081-Add-min-p-sampler-to-skippy-sampling-chain.patchthird_party/llama.cpp/patches/0082-Compact-KV-cache-cells-during-optimized-memory-updates.patchthird_party/llama.cpp/upstream.txt
* origin/main: (29 commits) MoA: don't let small-model consensus pre-empt a still-running large model (#837) fix(console): render thinking traces as markdown Add bounded direct path repair (#846) Fix skippy smoke PR gate (#850) Stabilize skippy smoke chain startup (#849) fix(ci): switch back to auto-assign workflow fix(website): polish longform visual explainer (#843) fix: gemma thinking Carry GLM llama MTP patches (#840) Refresh llama.cpp canary patch queue (#839) Add transport-aware Skippy stage ordering (#814) Share Skippy stage wire byte accounting (#818) Report Skippy artifact cold-start costs (#815) fix: debug output capturing for TUI / panics (#827) fix(hero): visual corrections for iPhone SE size devices (#838) Add Skippy stage role metadata (#816) Add Skippy request cache epoch telemetry (#817) Consolidate agent skills and fix stale docs (Windows deploy, repo map, design docs) (#836) feature(version): normalize version markers for different build types (#831) fix(website): fix visual regressions (#835) ... # Conflicts: # AGENTS.md
The llama.cpp upstream canary can apply the Skippy patch queue to the current ggml-org/llama.cpp master again.
What changed
third_party/llama.cpp/upstream.txtfrome22b0de60dff987d8905ba3cd9636134efb9b672toc34b92235b2d6a07963f896085f9ca077ff400b4.n_layer/is_recrnaming and Qwen35/Qwen35MoE staged range typing.Root cause
The scheduled canary was failing in
Prepare requested llama.cpp upstreamwhile applying patch0006to newer llama.cpp. The patch queue had drifted behind upstream graph changes, sogit am --3waycould no longer apply the carried Skippy graph patches to current master.Validation
LLAMA_WORKDIR=/tmp/mesh-llm-canary-validate.4GsGPQ scripts/prepare-llama.sh latestLLAMA_WORKDIR=/tmp/mesh-llm-canary-validate.4GsGPQ scripts/build-llama.shcargo check -p skippy-ffi -p skippy-runtime -p skippy-server -p skippy-model-package -p skippy-correctness -p llama-spec-benchgit diff --checkreports whitespace inside regenerated mail-format patch files; those patch artifacts intentionally preserve upstream patch whitespace.Summary by CodeRabbit
Release Notes
New Features
Performance Improvements
Enhancements