Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.<fn>`) 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
Expand Down
17 changes: 14 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion docs/modules/ROOT/pages/reference/moonshine-encoder.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
----
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
4 changes: 2 additions & 2 deletions docs/modules/ROOT/pages/tutorials/getting-started-java.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -41,7 +41,7 @@ Or in Maven (Maven needs the `-jvm` classifier suffix on platform artifacts):
<dependency>
<groupId>sk.ainet.transformers</groupId>
<artifactId>skainet-transformers-bom</artifactId>
<version>0.55.0</version>
<version>0.56.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
----
Expand Down
2 changes: 1 addition & 1 deletion docs/modules/ROOT/pages/tutorials/llama3-tool-calling.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
GROUP=sk.ainet.transformers
VERSION_NAME=0.55.0
VERSION_NAME=0.56.0

POM_DESCRIPTION=SKaiNET-transformers

Expand Down
6 changes: 3 additions & 3 deletions llm-inference/gemma/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
```

Expand Down
Loading