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
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.55.0] — 2026-09-11

A transformers-only release, same pattern as 0.54.1: no new engine version, still against
**SKaiNET engine 0.54.0**. Adds a new `asr-domain` module and extends `BackendProvider`,
generalizing plumbing that used to live downstream in one ASR cartridge family's repo.

### Added — `asr-domain` module + `BackendProvider` capabilities/options (#432)

- **New `asr-domain` module** (`sk.ainet.asr.domain`, publishes as
`skainet-transformers-asr-domain`): generic ASR task types — `Transcription`,
`TranscriptionTimings`, `StopReason`, `AsrEvent`, `DecodingOptions`, `FeatureFrames`. Moved up
from the downstream ASR cartridge ecosystem, where they lived only because that's where the
original `whisper-cli` extraction happened to put them, not because they're Whisper-specific —
both the Whisper and Moonshine cartridge families depend on these, and keeping them downstream
in one family's repo made the other structurally dependent on it for generic plumbing.
Framework-free (empty `commonMain` deps), full KMP target spread matching `llm-api`'s
convention for consumer-facing SPI modules (ios/linux/macos/jvm/js/wasm/android).
- **`BackendProvider` gains `capabilities: BackendCapabilities`** (supported dtypes, compile
support, NPU usage, max sequence length — defaulted, so existing implementers don't need to
change) **and `createContext(options: BackendOptions = BackendOptions())`** (was
parameterless). `kllama`'s `CpuBackendProvider` updated to match.
- **No second backend-registry module.** Downstream's own `backend-spi`
`ExecutionContextFactory`/`BackendRegistry` seam is *not* duplicated here — unified into this
existing `BackendProvider`/`BackendRegistry` instead, since both did the same job (select a
strategy producing a SKaiNET `ExecutionContext`). `BackendRegistry` itself is unchanged.
- Verified: `:asr-domain:build`, `:llm-core:build`, `:llm-runtime:kllama:build` and the
corresponding `allTests` all green; `apiDump` regenerated for both `llm-core` and `kllama`'s
binary-compatibility-validator baselines. Downstream (`asr-whisper-iree-cartridge`, `asr-cli`)
verified against this branch via the `useLocalSkainet`-style opt-in composite substitution
pattern before this release — full `check` green in both, including a Docker smoke test of the
shipped `asr-cli` image.

## [0.54.1] — 2026-09-07

A transformers-only release, same pattern as 0.40.2: no new engine version, still against
Expand Down
22 changes: 19 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,22 @@ Honest status — see the project-status note at the top of this README.

## Current release

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).
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).

**A new `asr-domain` module, and `BackendProvider` learns capabilities/options.** Generic ASR
task types (`Transcription`, `DecodingOptions`, `FeatureFrames`, ...) move up from the downstream
ASR cartridge ecosystem, where they lived only because that's where the original `whisper-cli`
extraction happened to put them — both the Whisper and Moonshine cartridge families depend on
these, so keeping them in one family's repo made the other structurally dependent on it for
generic plumbing. `BackendProvider` gains a `capabilities: BackendCapabilities` property and a
defaulted `createContext(options: BackendOptions = BackendOptions())` (was parameterless) —
source-compatible with every existing implementer. Downstream's own execution-backend registry
seam is *not* duplicated as a second module here; it's unified into this existing
`BackendProvider`/`BackendRegistry` instead, since both already did the same job. (#432)

It builds on **0.54.1**, which made attention heads run in parallel and stopped positional K/V
caches from copying the whole prefix per layer per token.

**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`
Expand Down Expand Up @@ -218,7 +232,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.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.0"))

// Versions resolved from the BOM:
implementation("sk.ainet.transformers:skainet-transformers-core")
Expand Down Expand Up @@ -250,6 +264,7 @@ dependencies {
| `llm-agent` | Chat templates, tool-call parsers, agent loops; Java surface. |
| `llm-apps` | CLIs: `skainet-cli` (unified), `kllama-cli`, `kbert-cli`, plus `kllama-java-sample`. |
| `llm-test/llm-test-java` | JUnit 5 end-to-end tests for the Java surface (gated on `TINYLLAMA_MODEL_PATH`). |
| `asr-domain` | Generic ASR task types (`Transcription`, `DecodingOptions`, `FeatureFrames`) — framework-free, no dependency on the rest of this repo. Consumed by downstream ASR cartridges (Whisper, Moonshine). |

## Supported targets

Expand All @@ -273,6 +288,7 @@ Which Maven artifact publishes which Kotlin target (derived from each module's
| `llm-runtime/kapertus` | ✓ | — | — | — | — | — | — | — |
| `llm-performance` | ✓ | ✓ | — | ✓ | — | ✓ | ✓ | ✓ |
| `llm-providers`, `llm-apps/*`, `llm-test/*` | ✓ | — | — | — | — | — | — | — |
| `asr-domain` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |

¹ `transformer-core` additionally publishes `androidNativeArm32`/`androidNativeArm64`.
² `moonshine` publishes `iosArm64` and `androidNativeArm64` but no simulator or Android (AGP) variant.
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.54.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.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.54.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.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.54.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.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.54.1</version>
<version>0.55.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.54.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.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.54.1"))
implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.55.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.54.1 or later.
* SKaiNET-transformers 0.55.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.54.1
VERSION_NAME=0.55.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.54.1`
- **Coordinate:** `sk.ainet.transformers:skainet-transformers-inference-gemma:0.55.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.54.1")
implementation("sk.ainet.transformers:skainet-transformers-runtime-gemma-iree:0.54.1") // on-device decode
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
}
```

Expand Down