From a0d2277074420b5a924a85b4b4ada6af77a64bfd Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sun, 20 Sep 2026 20:41:01 +0200 Subject: [PATCH 1/4] docs(changelog): 0.56.0 entry --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48a79c12..18e7881d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.56.0] — 2026-09-20 + +Back in lock-step with the engine: ships against **SKaiNET engine 0.56.0** (the engine skipped +0.55.0 to realign the two version lines). The engine's `scaledDotProductAttention` is now +grouped-query native, so GQA models stop tiling K/V up to the query heads — eagerly, on the tape and +in the exported StableHLO — and the compiled leg of SKEEP-005 lands here: structure at compile time, +cores at run time. + ### Added — SKEEP-005 phase 2: the compiled leg, structure at compile time, cores at run time - **GQA without head expansion on the tape**: the engine's SDPA is grouped-query native, so @@ -29,6 +37,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `SKAINET_TASK_GROUPS` too (`GEMMA_TASK_GROUPS` deprecated alias). Docs: spec "Phase 2", explanation "The compiled leg", IREE Android runtime reference "Task topology", eager-vs-compiled row. +### Changed + +- **Engine 0.56.0** (`skainet = "0.56.0"`): grouped-query-native SDPA, its StableHLO lowering with the + head groups as a batching dimension, structural schedule defaults, schedule-aware graph contexts. +- **`IreeRedecodeSession` qualifies bare function names in both create paths**: the module-qualified + name (`module.`) now feeds `nativeCreate` and `nativeCreateWithTopology` alike. +- **Convention plugins 1.1.0** (`sk.ainet.multiplatform`, `sk.ainet.npm-pins`, + `sk.ainet.transformers.bom-coverage`); `asr-domain`, `llm-core` and `transformer-core` pin + `jvmTarget = JVM_21` — 1.1.0 defaults to 17, which cannot inline the engine's JVM 21 bytecode. +- Benchmark notes describe the measurement hardware by device class; the MiniLM export harness uses + domain-neutral probe sentences. +- Dependency bumps: AGP 9.4.1, kotest 6.2.5, kotlinpoet 2.4.0, binary-compatibility-validator 0.18.2. + ## [0.55.0] — 2026-09-11 A transformers-only release, same pattern as 0.54.1: no new engine version, still against From 039c32cf1b083eff542140a207bd7615e0021164 Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sun, 20 Sep 2026 20:41:01 +0200 Subject: [PATCH 2/4] docs(readme): 0.56.0 highlights and BOM coordinate --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 281b0495..a2bb80bd 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,19 @@ Honest status — see the project-status note at the top of this README. ## Current release -The current release is **0.55.0** (against **SKaiNET 0.54.0** — a transformers-only release, same -pattern as 0.54.1: no new engine version needed). +The current release is **0.56.0**, back in lock-step with **SKaiNET 0.56.0** (the engine skipped +0.55.0 to realign the two version lines). + +**Grouped-query attention without head expansion, and the compiled leg of SKEEP-005.** The engine's +`scaledDotProductAttention` is grouped-query native, so `MultiHeadAttention` and +`HybridTransformerBlock` hand it K/V with their own head count: `repeatKVHeads` is gone from tapes, +traced graphs and StableHLO exports, which now batch attention over the head groups. The SmolLM2 +and FunctionGemma export harnesses stamp the structural schedule (`parallel_dims = [batch, heads]`, +never a core count) into the module; OPTIMIZED mode runs the compiled JVM graph under the caller's +schedule, bit-identical sequential vs. parallel; and on Android the IREE runtime takes its core +count at run time (`IreeRedecodeSession(taskTopologyGroupCount)`, `SKAINET_TASK_GROUPS`). + +It builds on **0.55.0**, a transformers-only release against SKaiNET 0.54.0. **A new `asr-domain` module, and `BackendProvider` learns capabilities/options.** Generic ASR task types (`Transcription`, `DecodingOptions`, `FeatureFrames`, ...) move up from the downstream @@ -232,7 +243,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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) // Versions resolved from the BOM: implementation("sk.ainet.transformers:skainet-transformers-core") From f3c1ab44390e56847fb8b95cfa7bc04dcffcf1c8 Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sun, 20 Sep 2026 20:41:01 +0200 Subject: [PATCH 3/4] docs: bump version references to 0.56.0 --- docs/modules/ROOT/pages/reference/moonshine-encoder.adoc | 2 +- .../ROOT/pages/tutorials/android-getting-started.adoc | 2 +- docs/modules/ROOT/pages/tutorials/getting-started-java.adoc | 4 ++-- docs/modules/ROOT/pages/tutorials/getting-started-leaf.adoc | 2 +- docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc | 2 +- .../pages/tutorials/parallel-attention-getting-started.adoc | 2 +- llm-inference/gemma/README.md | 6 +++--- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc b/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc index cbe92d8c..85352d52 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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) 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 4566e258..8d563154 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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) 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 5ab61f64..7ece806b 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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) 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.55.0 + 0.56.0 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 fb513278..f69ed9fc 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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) 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 a9ade40c..39dee205 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.55.0")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.56.0")) 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 a8202b3b..6edd36b6 100644 --- a/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc +++ b/docs/modules/ROOT/pages/tutorials/parallel-attention-getting-started.adoc @@ -10,7 +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.55.0 or later. +* SKaiNET-transformers 0.56.0 or later. == Step 1: Dependencies diff --git a/llm-inference/gemma/README.md b/llm-inference/gemma/README.md index 8a54538a..1b2be385 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.55.0` +- **Coordinate:** `sk.ainet.transformers:skainet-transformers-inference-gemma:0.56.0` - **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.55.0") - implementation("sk.ainet.transformers:skainet-transformers-runtime-gemma-iree:0.55.0") // on-device decode + implementation("sk.ainet.transformers:skainet-transformers-inference-gemma:0.56.0") + implementation("sk.ainet.transformers:skainet-transformers-runtime-gemma-iree:0.56.0") // on-device decode } ``` From 2554c03425b4a3f879acfb46818a3bb7a5a9a0a5 Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sun, 20 Sep 2026 20:41:01 +0200 Subject: [PATCH 4/4] release: prepare 0.56.0 -- lock-step with engine 0.56.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9cf5e6bd..00437628 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=sk.ainet.transformers -VERSION_NAME=0.55.0 +VERSION_NAME=0.56.0 POM_DESCRIPTION=SKaiNET-transformers