From 4f4d913a35be57ba0a46e15d21250bbfae402f04 Mon Sep 17 00:00:00 2001 From: Michal Harakal Date: Mon, 7 Sep 2026 22:53:50 +0200 Subject: [PATCH 1/4] docs(changelog): 0.54.1 entry Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PLfVvtURRYZETceamLi8kP --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb3d0142..1792f3c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.54.1] — 2026-09-07 + +A transformers-only release, same pattern as 0.40.2: no new engine version, still against +**SKaiNET engine 0.54.0**. `MultiHeadAttention` becomes the first consumer of the engine's +SKEEP-005 `Schedule`, and positional KV caches stop copying the whole prefix per layer per token. + ### Added — schedule-driven attention: parallel heads, copy-free K/V (SKaiNET SKEEP-005) - **Attention heads run in parallel** (#413): `MultiHeadAttention` maps heads (or GQA groups) onto @@ -32,7 +38,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `SKAINET_KV_CACHE=append|positional` (verified on Llama-3.2-1B, Qwen2.5-0.5B and Qwen3-1.7B Q8_0); `AttentionScheduleSpeedProfile` (opt-in) measures all four combinations. Docs: `docs/specs/attention-schedule.md`, the *Parallel Attention Heads via Schedules* explanation and the *Parallel Attention — Getting Started* tutorial. -- Requires engine **0.54.0** (published; see below). ## [0.54.0] — 2026-09-07 From 8073da8cfea5a7d0ee541d8135e86143bf998812 Mon Sep 17 00:00:00 2001 From: Michal Harakal Date: Mon, 7 Sep 2026 22:54:49 +0200 Subject: [PATCH 2/4] docs(readme): 0.54.1 highlights and BOM coordinate Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PLfVvtURRYZETceamLi8kP --- README.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 82b502ec..e57e00ce 100644 --- a/README.md +++ b/README.md @@ -109,9 +109,18 @@ Honest status — see the project-status note at the top of this README. ## Current release -The current release is **0.54.0** (against **SKaiNET 0.54.0**) — version lock-step with the engine -continues, plus two bugs fixed on real hardware and the FunctionGemma/IREE-Android chunked-KV work -closed out. +The current release is **0.54.1** (against **SKaiNET 0.54.0** — a transformers-only release, same +pattern as 0.40.2: no new engine version needed). + +**Attention heads run in parallel.** `MultiHeadAttention` is the first consumer of the engine's +SKEEP-005 `Schedule`: heads (or GQA groups) map onto cores via `AttentionSchedulePolicy` +(`Sequential` / `PerHead` / `PerKVGroup` / `Auto`), bit-identical to the sequential path. +`KVCache.updateInPlace` returns copy-free `KVBufferView`s for positional caches instead of copying +the whole prefix per layer per token, and `DecoderKVCacheKind.POSITIONAL` brings that to Llama and +Qwen. Verified on Llama-3.2-1B, Qwen2.5-0.5B and Qwen3-1.7B against mainline llama.cpp. + +It builds on **0.54.0**, which restored version lock-step with the engine, plus two bugs fixed on +real hardware and the FunctionGemma/IREE-Android chunked-KV work closed out. **A stateful Android KV session for FunctionGemma.** `IreeKvSession` / `IreeKvDecoder` (`llm-runtime/iree-android`) prefill the tool catalog once per process, snapshot the KV state, and @@ -209,7 +218,7 @@ The recommended way to consume is via the BOM. It pins every published `skainet- ```kotlin dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) // Versions resolved from the BOM: implementation("sk.ainet.transformers:skainet-transformers-core") From e1880a04f55488b73960bff2c1a0495103a26544 Mon Sep 17 00:00:00 2001 From: Michal Harakal Date: Mon, 7 Sep 2026 22:56:46 +0200 Subject: [PATCH 3/4] docs: bump version references to 0.54.1 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PLfVvtURRYZETceamLi8kP --- docs/modules/ROOT/pages/reference/moonshine-encoder.adoc | 2 +- .../ROOT/pages/tutorials/android-getting-started.adoc | 2 +- .../modules/ROOT/pages/tutorials/getting-started-java.adoc | 4 ++-- .../modules/ROOT/pages/tutorials/getting-started-leaf.adoc | 2 +- docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc | 2 +- .../tutorials/parallel-attention-getting-started.adoc | 3 +-- docs/specs/attention-schedule.md | 7 +++---- llm-inference/gemma/README.md | 6 +++--- 8 files changed, 13 insertions(+), 15 deletions(-) diff --git a/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc b/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc index e9669b71..27410bfe 100644 --- a/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc +++ b/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc @@ -24,7 +24,7 @@ a DSL decoder is future work. [source,kotlin] ---- dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) implementation("sk.ainet.transformers:skainet-transformers-inference-moonshine") } ---- diff --git a/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc b/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc index 9ef9dede..cc8a8d94 100644 --- a/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc +++ b/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc @@ -55,7 +55,7 @@ dependencies { // self-registers it on ART at process start — nothing to call. runtimeOnly("sk.ainet.core:skainet-backend-jni-cpu") - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) implementation("sk.ainet.transformers:skainet-transformers-core") implementation("sk.ainet.transformers:skainet-transformers-runtime-kllama") implementation("sk.ainet.transformers:skainet-transformers-inference-llama") diff --git a/docs/modules/ROOT/pages/tutorials/getting-started-java.adoc b/docs/modules/ROOT/pages/tutorials/getting-started-java.adoc index c0d76625..997d5868 100644 --- a/docs/modules/ROOT/pages/tutorials/getting-started-java.adoc +++ b/docs/modules/ROOT/pages/tutorials/getting-started-java.adoc @@ -25,7 +25,7 @@ In your `build.gradle.kts`: [source,kotlin] ---- dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) implementation("sk.ainet.transformers:skainet-transformers-runtime-kllama") implementation("sk.ainet.transformers:skainet-transformers-agent") @@ -41,7 +41,7 @@ Or in Maven (Maven needs the `-jvm` classifier suffix on platform artifacts): sk.ainet.transformers skainet-transformers-bom - 0.54.0 + 0.54.1 pom import diff --git a/docs/modules/ROOT/pages/tutorials/getting-started-leaf.adoc b/docs/modules/ROOT/pages/tutorials/getting-started-leaf.adoc index afe6d6d1..7a1e4463 100644 --- a/docs/modules/ROOT/pages/tutorials/getting-started-leaf.adoc +++ b/docs/modules/ROOT/pages/tutorials/getting-started-leaf.adoc @@ -34,7 +34,7 @@ encoder output to the advertised dimensionality. The runtime applies it automati [source,kotlin] ---- dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) implementation("sk.ainet.transformers:skainet-transformers-providers") } ---- diff --git a/docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc b/docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc index e0e69dd4..856d8615 100644 --- a/docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc +++ b/docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc @@ -52,7 +52,7 @@ The pieces you need live in three modules: [source,kotlin] ---- dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.54.1")) implementation("sk.ainet.transformers:skainet-transformers-runtime-kllama") implementation("sk.ainet.transformers:skainet-transformers-agent") diff --git a/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc b/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc index 46f44af3..851d5109 100644 --- a/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc +++ b/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc @@ -10,8 +10,7 @@ schedule only decides where the work runs. * JDK 21+ (the JVM is the only target with a parallel schedule; others run `Schedule.Sequential`). * A Llama 3.2 or Qwen3 GGUF, for example `Llama-3.2-1B-Instruct-Q8_0.gguf`. -* SKaiNET-transformers 0.54.0 or later, or — until that release — the `feature/attention-schedule` - branch built against the engine checkout with `-PuseLocalSkainet=true`. +* SKaiNET-transformers 0.54.1 or later. == Step 1: Dependencies diff --git a/docs/specs/attention-schedule.md b/docs/specs/attention-schedule.md index e14fa051..047ea672 100644 --- a/docs/specs/attention-schedule.md +++ b/docs/specs/attention-schedule.md @@ -4,7 +4,7 @@ **Depends on:** SKaiNET engine `Schedule` API — [SKEEP-005](https://skainet-developers.github.io/SKaiNET/skainet/skeep/005-schedules-structured-concurrency.html) (`sk.ainet.context.schedule`, `DirectCpuExecutionContext(schedule = …)`, `CoroutineSchedule`) **Issues:** transformers #412 (per-head fused attention copies the K/V prefix per layer per token), #413 (attention is single-threaded) **Labels:** enhancement, performance -**Milestone:** 0.54.0 (lock-step with engine 0.54.0) +**Milestone:** 0.54.1 (transformers-only release; engine 0.54.0) --- @@ -132,9 +132,8 @@ returns `null` (→ copied path) on segment-backed data. Every override returns | AS-8 | vectorised inner dots, growable positional cache | follow-up | Checkpoints: CP-1 engine `Schedule` API available (SKaiNET `feature/skeep-005-schedules`); -CP-2 transformer-core parity green; CP-3 golden gates green under every switch; CP-4 both -repositories released as 0.54.0 in lock-step (until then: build transformers with -`-PuseLocalSkainet=true`). +CP-2 transformer-core parity green; CP-3 golden gates green under every switch; CP-4 engine +0.54.0 published, transformers released as 0.54.1 on top of it. [transformers#412]: https://github.com/SKaiNET-developers/SKaiNET-transformers/issues/412 [transformers#413]: https://github.com/SKaiNET-developers/SKaiNET-transformers/issues/413 diff --git a/llm-inference/gemma/README.md b/llm-inference/gemma/README.md index 0f14495c..f4828453 100644 --- a/llm-inference/gemma/README.md +++ b/llm-inference/gemma/README.md @@ -4,7 +4,7 @@ Reusable **Gemma** model (incl. the FunctionGemma tool-calling fine-tune) author a portable graph producer with **no runtime/board/Torq code**. Pair it with the runtime module below to decode on-device. -- **Coordinate:** `sk.ainet.transformers:skainet-transformers-inference-gemma:0.54.0` +- **Coordinate:** `sk.ainet.transformers:skainet-transformers-inference-gemma:0.54.1` - **Targets:** `android`, `iosArm64`, `iosSimulatorArm64`, `macosArm64`, `linuxX64`, `linuxArm64` (broadly portable — mobile through server). - **Entry point:** `gemmaNetwork()` / `GemmaNetworkLoader` (loads a GGUF, builds the DSL graph, incl. the @@ -24,8 +24,8 @@ FunctionGemma has a one-liner facade in `…:skainet-transformers-runtime-kgemma ```kotlin dependencies { - implementation("sk.ainet.transformers:skainet-transformers-inference-gemma:0.54.0") - implementation("sk.ainet.transformers:skainet-transformers-runtime-gemma-iree:0.54.0") // on-device decode + implementation("sk.ainet.transformers:skainet-transformers-inference-gemma:0.54.1") + implementation("sk.ainet.transformers:skainet-transformers-runtime-gemma-iree:0.54.1") // on-device decode } ``` From c5250176db26afc24388e98270236b4114bbdf02 Mon Sep 17 00:00:00 2001 From: Michal Harakal Date: Mon, 7 Sep 2026 22:56:46 +0200 Subject: [PATCH 4/4] =?UTF-8?q?release:=20prepare=200.54.1=20=E2=80=94=20t?= =?UTF-8?q?ransformers-only,=20still=20against=20engine=200.54.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PLfVvtURRYZETceamLi8kP --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d50b8380..bc9a86b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=sk.ainet.transformers -VERSION_NAME=0.54.0 +VERSION_NAME=0.54.1 POM_DESCRIPTION=SKaiNET-transformers