diff --git a/CHANGELOG.md b/CHANGELOG.md index 307091a6..56aa80ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.62.2] — 2026-10-18 + +Against engine **0.61.0**, a transformers-only fix: the Android runtime's streaming Moonshine libraries +(`libskainet_moonshine_stream.so`, both ABIs) are rebuilt with the utterance-start fix. The source fix was +merged after 0.62.1 and the prebuilt libraries were not rebuilt with it, so the 0.62.0 and 0.62.1 AARs carry the old +code. Nothing else changes; the BOM re-exports `skainet-bom:0.61.0`. + +### Fixed + +- **Moonshine streaming: no zero-audio context at the utterance start** (`moonshine_stream_jni.c`). The first + encoder window fed the frontend four frames of zero samples as left context; past the first convolution's bias those + are non-zero features where the model zero-pads, which corrupted the first memory rows and, through attention, whole + transcripts (an empty final for "Fail again, fail better."). The window at frame 0 now starts at sample 0 and keeps + its first 64 frontend frames. Finals on the test clips match the reference model. (#500) + ## [0.62.1] — 2026-10-17 Against engine **0.61.0**, a transformers-only fix: the JVM Laya loader overload is a member again @@ -112,14 +127,6 @@ aliases errors; the transformers SKEEP-006 schedule moves by one more minor (see tests here that still imported `sk.ainet.io.tokenizer.SentencePieceTokenizer` use the `sk.ainet.frontend.tokenizer` home. -### Fixed - -- **Moonshine streaming: no zero-audio context at the utterance start** (`moonshine_stream_jni.c`). The first - encoder window fed the frontend four frames of zero samples as left context; past the first convolution's bias those - are non-zero features where the model zero-pads, which corrupted the first memory rows and, through attention, whole - transcripts (an empty final for "Fail again, fail better."). The window at frame 0 now starts at sample 0 and keeps - its first 64 frontend frames. Finals on the test clips match the reference model. - ## [0.60.0] — 2026-10-15 **Exact GELU from the engine.** Against engine **0.59.0**, which makes `erf` a first-class op and diff --git a/README.md b/README.md index 839fadd6..f590450e 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ Honest status — see the project-status note at the top of this README. ## Current release -The current release is **0.62.1**, against **SKaiNET 0.61.0**: a transformers-only fix on 0.62.0, whose JVM `LayaModelLoader.load(directory, …)` had become an extension function that existing callers did not import; it is a member again (`@JvmOverloads`, so Java callers keep the 0.61 signature). +The current release is **0.62.2**, against **SKaiNET 0.61.0**: a transformers-only fix, the Android runtime's streaming Moonshine libraries are rebuilt with the utterance-start fix (#500; 0.62.0 and 0.62.1 packed the old build, which garbles transcripts on device). It builds on **0.62.1**, a transformers-only fix on 0.62.0, whose JVM `LayaModelLoader.load(directory, …)` had become an extension function that existing callers did not import; it is a member again (`@JvmOverloads`, so Java callers keep the 0.61 signature). It builds on **0.62.0**, against **SKaiNET 0.61.0**: @@ -301,7 +301,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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) // Versions resolved from the BOM: implementation("sk.ainet.transformers:skainet-transformers-core") diff --git a/docs/modules/ROOT/pages/how-to/export-moonshine-v2-streaming.adoc b/docs/modules/ROOT/pages/how-to/export-moonshine-v2-streaming.adoc index 2f95a63b..649baf05 100644 --- a/docs/modules/ROOT/pages/how-to/export-moonshine-v2-streaming.adoc +++ b/docs/modules/ROOT/pages/how-to/export-moonshine-v2-streaming.adoc @@ -32,7 +32,7 @@ From your own build, resolve the published module and run its main class: ---- val exportTool by configurations.creating dependencies { - exportTool(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.1")) + exportTool(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) exportTool("sk.ainet.transformers:skainet-transformers-inference-moonshine") } tasks.register("exportMoonshine") { diff --git a/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc b/docs/modules/ROOT/pages/reference/moonshine-encoder.adoc index 981434e5..4e5f2373 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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) implementation("sk.ainet.transformers:skainet-transformers-inference-moonshine") } ---- diff --git a/docs/modules/ROOT/pages/reference/typed-decisions.adoc b/docs/modules/ROOT/pages/reference/typed-decisions.adoc index 03f6a747..d94893d6 100644 --- a/docs/modules/ROOT/pages/reference/typed-decisions.adoc +++ b/docs/modules/ROOT/pages/reference/typed-decisions.adoc @@ -12,7 +12,7 @@ below put that on the JVM path with the same contract for every model. [source,kotlin] ---- dependencies { - implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) implementation("sk.ainet.transformers:skainet-transformers-decisions-api") // the contract, no engine dependency implementation("sk.ainet.transformers:skainet-transformers-decisions-runtime") // validation + acceptance policy implementation("sk.ainet.transformers:skainet-transformers-inference-laya") // Laya as a DecisionAdapter diff --git a/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc b/docs/modules/ROOT/pages/tutorials/android-getting-started.adoc index 6165333f..298aa380 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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) 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 6548b711..ed5f9b52 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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) 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.62.1 + 0.62.2 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 620ff365..fc8505f3 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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) 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 0e4a9c6b..dae36972 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.62.1")) + implementation(platform("sk.ainet.transformers:skainet-transformers-bom:0.62.2")) implementation("sk.ainet.transformers:skainet-transformers-runtime-kllama") implementation("sk.ainet.transformers:skainet-transformers-agent") diff --git a/gradle.properties b/gradle.properties index a602afa5..d50475d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=sk.ainet.transformers -VERSION_NAME=0.62.1 +VERSION_NAME=0.62.2 POM_DESCRIPTION=SKaiNET-transformers diff --git a/llm-runtime/iree-android/src/main/jniLibs/arm64-v8a/libskainet_moonshine_stream.so b/llm-runtime/iree-android/src/main/jniLibs/arm64-v8a/libskainet_moonshine_stream.so index f7ec20a4..2b705ff0 100755 Binary files a/llm-runtime/iree-android/src/main/jniLibs/arm64-v8a/libskainet_moonshine_stream.so and b/llm-runtime/iree-android/src/main/jniLibs/arm64-v8a/libskainet_moonshine_stream.so differ diff --git a/llm-runtime/iree-android/src/main/jniLibs/armeabi-v7a/libskainet_moonshine_stream.so b/llm-runtime/iree-android/src/main/jniLibs/armeabi-v7a/libskainet_moonshine_stream.so index 84972415..c0791e82 100755 Binary files a/llm-runtime/iree-android/src/main/jniLibs/armeabi-v7a/libskainet_moonshine_stream.so and b/llm-runtime/iree-android/src/main/jniLibs/armeabi-v7a/libskainet_moonshine_stream.so differ