From 8af86a5c1c04cf5dda9be3bc2564d9f9e218959f Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sat, 24 Oct 2026 18:38:05 +0200 Subject: [PATCH 1/2] chore: SKaiNET 0.62.2 for the seven engine-only samples Pins, the settings and catalog comments, and the MnistJavaDemo README mention. Verified locally against Maven Central: IrisDemo and MnistJavaDemo build; the library jvmTest, the wasm compiles and the desktop compile of GloVeEmbeddings, TDALab, SinusApproximator, TinyTransformer and MNISTDemo; MNISTDemo :cli:test. --- GloVeEmbeddings/gradle/libs.versions.toml | 4 ++-- GloVeEmbeddings/settings.gradle.kts | 2 +- IrisDemo/gradle/libs.versions.toml | 2 +- MNISTDemo/gradle/libs.versions.toml | 2 +- MnistJavaDemo/README.md | 2 +- MnistJavaDemo/gradle/libs.versions.toml | 2 +- SinusApproximator/gradle/libs.versions.toml | 2 +- TDALab/gradle/libs.versions.toml | 4 ++-- TDALab/settings.gradle.kts | 2 +- TinyTransformer/gradle/libs.versions.toml | 4 ++-- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/GloVeEmbeddings/gradle/libs.versions.toml b/GloVeEmbeddings/gradle/libs.versions.toml index 805a988..4dd98b6 100644 --- a/GloVeEmbeddings/gradle/libs.versions.toml +++ b/GloVeEmbeddings/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] -# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.1 ships +# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.2 ships # klibs compiled with Kotlin 2.4.21 (readable by 2.4.10); an older compiler line cannot read them # (JS/wasm fail with "Symbol for Any not found"). kotlin = "2.4.10" # SKaiNET BOM version — published to Maven Central. The BOM pins every # sk.ainet.core:* artifact so individual libraries are declared without versions. -skainet = "0.62.1" +skainet = "0.62.2" # Compose Multiplatform + Android. Must match the shared :skainet-ui design # system (included build) exactly: a mismatched Compose pulls two Skiko diff --git a/GloVeEmbeddings/settings.gradle.kts b/GloVeEmbeddings/settings.gradle.kts index 3d1ad28..2a8b984 100644 --- a/GloVeEmbeddings/settings.gradle.kts +++ b/GloVeEmbeddings/settings.gradle.kts @@ -17,7 +17,7 @@ pluginManagement { dependencyResolutionManagement { repositories { - // Resolve everything from Maven Central (SKaiNET 0.62.1 is published there). + // Resolve everything from Maven Central (SKaiNET 0.62.2 is published there). // No mavenLocal: an unrestricted mavenLocal is consulted first and can contain // a partial kotlin-stdlib (JVM jar + POM, no klib variants) that shadows // Central's variant-aware metadata, breaking JS/wasm with "Missing stdlib class". diff --git a/IrisDemo/gradle/libs.versions.toml b/IrisDemo/gradle/libs.versions.toml index dc9c753..eb6c7b1 100644 --- a/IrisDemo/gradle/libs.versions.toml +++ b/IrisDemo/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -skainet = "0.62.1" +skainet = "0.62.2" kotlin = "2.4.10" kotlinx-coroutines = "1.10.2" kotlinx-io = "0.8.2" diff --git a/MNISTDemo/gradle/libs.versions.toml b/MNISTDemo/gradle/libs.versions.toml index c0b5d3e..739a624 100644 --- a/MNISTDemo/gradle/libs.versions.toml +++ b/MNISTDemo/gradle/libs.versions.toml @@ -19,7 +19,7 @@ kotlin = "2.4.10" kotlinx-coroutines = "1.10.2" ktor = "3.1.3" logback = "1.5.18" -skainet = "0.62.1" +skainet = "0.62.2" kotlinxIo = "0.8.2" ktorClientCore = "3.3.3" ktorClientPlugins = "3.1.1" diff --git a/MnistJavaDemo/README.md b/MnistJavaDemo/README.md index 212b35c..9f2134a 100644 --- a/MnistJavaDemo/README.md +++ b/MnistJavaDemo/README.md @@ -5,7 +5,7 @@ A CLI MNIST digit detector written in Java 21, demonstrating JVM interoperabilit ## Prerequisites - **Java 21+** (with preview features) -- **SKaiNET 0.62.1** -- resolved directly from Maven Central, no local publish needed +- **SKaiNET 0.62.2** -- resolved directly from Maven Central, no local publish needed - **GGUF model file** -- a trained MNIST CNN model in GGUF format ## Usage diff --git a/MnistJavaDemo/gradle/libs.versions.toml b/MnistJavaDemo/gradle/libs.versions.toml index 68d0f4b..6096fcd 100644 --- a/MnistJavaDemo/gradle/libs.versions.toml +++ b/MnistJavaDemo/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -skainet = "0.62.1" +skainet = "0.62.2" kotlin = "2.4.10" kotlinx-coroutines = "1.10.2" kotlinx-io = "0.8.2" diff --git a/SinusApproximator/gradle/libs.versions.toml b/SinusApproximator/gradle/libs.versions.toml index a7354d4..8425070 100644 --- a/SinusApproximator/gradle/libs.versions.toml +++ b/SinusApproximator/gradle/libs.versions.toml @@ -24,7 +24,7 @@ kotlin = "2.4.10" kotlinx-coroutines = "1.10.2" ktor = "3.1.3" logback = "1.5.18" -skainet = "0.62.1" +skainet = "0.62.2" kotlinxIo = "0.8.2" [libraries] diff --git a/TDALab/gradle/libs.versions.toml b/TDALab/gradle/libs.versions.toml index 805a988..4dd98b6 100644 --- a/TDALab/gradle/libs.versions.toml +++ b/TDALab/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] -# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.1 ships +# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.2 ships # klibs compiled with Kotlin 2.4.21 (readable by 2.4.10); an older compiler line cannot read them # (JS/wasm fail with "Symbol for Any not found"). kotlin = "2.4.10" # SKaiNET BOM version — published to Maven Central. The BOM pins every # sk.ainet.core:* artifact so individual libraries are declared without versions. -skainet = "0.62.1" +skainet = "0.62.2" # Compose Multiplatform + Android. Must match the shared :skainet-ui design # system (included build) exactly: a mismatched Compose pulls two Skiko diff --git a/TDALab/settings.gradle.kts b/TDALab/settings.gradle.kts index 4dda8f7..56f3d21 100644 --- a/TDALab/settings.gradle.kts +++ b/TDALab/settings.gradle.kts @@ -17,7 +17,7 @@ pluginManagement { dependencyResolutionManagement { repositories { - // Resolve everything from Maven Central (SKaiNET 0.62.1 is published there). + // Resolve everything from Maven Central (SKaiNET 0.62.2 is published there). // No mavenLocal: an unrestricted mavenLocal is consulted first and can contain // a partial kotlin-stdlib (JVM jar + POM, no klib variants) that shadows // Central's variant-aware metadata, breaking JS/wasm with "Missing stdlib class". diff --git a/TinyTransformer/gradle/libs.versions.toml b/TinyTransformer/gradle/libs.versions.toml index d41feb5..0bf058c 100644 --- a/TinyTransformer/gradle/libs.versions.toml +++ b/TinyTransformer/gradle/libs.versions.toml @@ -13,13 +13,13 @@ composeHotReload = "1.0.0" # render on macOS/Metal. AGP must also match skainet-ui's — Gradle composite # builds reject mixed AGP versions. composeMultiplatform = "1.11.1" -# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.1 ships +# Keep in step with the Kotlin version SKaiNET is built with: SKaiNET 0.62.2 ships # klibs compiled with Kotlin 2.4.21 (readable by 2.4.10); an older compiler line cannot read them. kotlin = "2.4.10" kotlinx-coroutines = "1.10.2" # SKaiNET BOM version — published to Maven Central. The BOM pins every # sk.ainet.core:* artifact so individual libraries are declared without versions. -skainet = "0.62.1" +skainet = "0.62.2" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } From 6dfa143070e8cc6be9bdba0421c99a37ca959390 Mon Sep 17 00:00:00 2001 From: michalharakal Date: Sat, 24 Oct 2026 18:38:05 +0200 Subject: [PATCH 2/2] chore: SKaiNET 0.62.2 for the transformers samples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SemanticEmojiFilter, KernelRace, KllamaDemo and LayaMoE move to engine 0.62.2; SKaiNET-transformers stays 0.63.0, which works with 0.62.2 unchanged. Pins and catalog comments; the LayaMoE README notes the pin and the measured FP32 request on 0.62.2 (13.0 s → 6.5 s, same routing and answers). Verified locally against Maven Central with each sample's CI task list, LayaMoE's followed by cli bench. --- KernelRace/gradle/libs.versions.toml | 5 +++-- KllamaDemo/gradle/libs.versions.toml | 2 +- LayaMoE/README.md | 9 +++++++-- LayaMoE/gradle/libs.versions.toml | 5 +++-- SemanticEmojiFilter/gradle/libs.versions.toml | 4 ++-- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/KernelRace/gradle/libs.versions.toml b/KernelRace/gradle/libs.versions.toml index 36031f2..e18acd2 100644 --- a/KernelRace/gradle/libs.versions.toml +++ b/KernelRace/gradle/libs.versions.toml @@ -19,9 +19,10 @@ kotlinxIo = "0.9.1" # its jvmMain), so the iOS download path talks to Ktor's Darwin engine on its own. ktorClientCore = "3.5.2" # SKaiNET-transformers 0.63.0 is built against engine 0.62.x (0.62.1 fixes the native packed-kernel -# bindings the Q8_0 lane uses on the desktop JVM); keep the two pins +# bindings the Q8_0 lane uses on the desktop JVM, 0.62.2 runs the dense FP32 kernel on every core and +# on AVX2); keep the two pins # moving together (the transformers release notes name the engine version). -skainet = "0.62.1" +skainet = "0.62.2" skainet-transformers = "0.63.0" [libraries] diff --git a/KllamaDemo/gradle/libs.versions.toml b/KllamaDemo/gradle/libs.versions.toml index baa3827..9eba51f 100644 --- a/KllamaDemo/gradle/libs.versions.toml +++ b/KllamaDemo/gradle/libs.versions.toml @@ -20,7 +20,7 @@ kotlinxIo = "0.9.0" ktor = "3.4.0" logback = "1.5.29" material3 = "1.10.0-alpha05" -skainet = "0.62.1" +skainet = "0.62.2" skainet-transformers = "0.63.0" [libraries] diff --git a/LayaMoE/README.md b/LayaMoE/README.md index 4b49bd6..41783b4 100644 --- a/LayaMoE/README.md +++ b/LayaMoE/README.md @@ -43,7 +43,7 @@ The first run downloads about 1.05 GB (the base checkpoint, 843 MB F16, and two LAYAMOE_LANE=q8 ./gradlew :composeApp:run # packed Q8_0 lane, less memory, same answers to within quantization noise ``` -> The Q8_0 lane on the desktop JVM needs SKaiNET 0.62.1 (the pin here): on 0.62.0 the native FFM bindings +> The Q8_0 lane on the desktop JVM needs SKaiNET 0.62.1 or later (the pin here is 0.62.2): on 0.62.0 the native FFM bindings > of the Q8_0 / Q4_0 / Q5_0 / Q5_1 kernels zeroed every row but the last of a multi-row product, so a Laya > request on that lane answered every question with uniform probabilities. Found while building this > example, fixed in SKaiNET 0.62.1 (PR #1436). The FP32 lane was unaffected, and so was the browser's @@ -126,6 +126,11 @@ about 1 min 50 s after "Load model" on a cached visit and about 3 min 30 s on th answers exactly like the desktop within quantization noise: destructive 67.2 % (FP32: 65.1 %), needs_human 21.7 % (23.3 %), risk 2.12 (2.11), routed to `safety` at 0.746 on `agent_action`. +**Desktop, FP32 lane on SKaiNET 0.62.2** (same machine, 2026-10-24): the same preset answers in 6.5 s per request +(three questions plus the router, 370 tokens; 6495 / 6469 / 6424 ms over three repetitions after a warm-up) against +13.0 s on 0.62.1. The engine's dense FP32 `x · Wᵀ` kernel, two thirds of a request, now runs on every core and, on +x86-64, on AVX2/FMA; routing and answers are unchanged. + **Desktop, Q8_0 lane** (same machine, SKaiNET 0.62.1): the "drop a production table" preset answers like the FP32 lane within quantization noise (destructive 67.2 %, needs_human 21.7 %, risk 2.12 — the browser's Q8_0 figures to the digit) but takes 25.3 s per request against 13.0 s on FP32: on the eager @@ -154,7 +159,7 @@ LayaMoE/ └── THIRD_PARTY_LICENSES/ ``` -Library pieces this example rests on (SKaiNET-transformers 0.63.0, SKaiNET 0.62.1): +Library pieces this example rests on (SKaiNET-transformers 0.63.0, SKaiNET 0.62.2): `LayaModelLoader` (common, any `RandomAccessSource`), `LayaExpertLoader` / `LayaExpert`, `LayaRouterSpec`, `LayaMixtureAgent`, `LayaMixtureDecisionAdapter` for the typed decision runtime, `LayaWeightForms.q8_0For` for the packed lane, `JsBlobRandomAccessSource.openSync` diff --git a/LayaMoE/gradle/libs.versions.toml b/LayaMoE/gradle/libs.versions.toml index 5de79d6..f9cf794 100644 --- a/LayaMoE/gradle/libs.versions.toml +++ b/LayaMoE/gradle/libs.versions.toml @@ -16,10 +16,11 @@ kotlinx-coroutines = "1.11.0" kotlinxIo = "0.9.1" kotlinxSerialization = "1.11.0" kotlinxBrowser = "0.5.0" -# Engine 0.62.1 (0.62.0 + the native packed-kernel binding fix): Blob sources with worker-side blocking reads, PlannerProfile.BROWSER, the fused +# Engine 0.62.2 (0.62.1 + the dense FP32 x·Wᵀ kernel on every core and, on x86-64, on AVX2/FMA; 0.62.1 fixed the +# native packed-kernel bindings): Blob sources with worker-side blocking reads, PlannerProfile.BROWSER, the fused # SIMD128 / FFM kernels and skainet-data-source on the web. Transformers 0.63.0: Laya expert heads, # the prompted router and the mixture adapter (LayaExpertLoader, LayaMixtureAgent). -skainet = "0.62.1" +skainet = "0.62.2" skainet-transformers = "0.63.0" [libraries] diff --git a/SemanticEmojiFilter/gradle/libs.versions.toml b/SemanticEmojiFilter/gradle/libs.versions.toml index b6ec3a3..eeead64 100644 --- a/SemanticEmojiFilter/gradle/libs.versions.toml +++ b/SemanticEmojiFilter/gradle/libs.versions.toml @@ -10,7 +10,7 @@ androidx-lifecycle = "2.11.0" # UnsatisfiedLinkError (getAdapterMaxTextureSize) at first render on macOS/Metal. composeMultiplatform = "1.11.1" # At least the engine's Kotlin: the SIMD128 sidecar uses kotlin.wasm.unsafe.wasmMemory and an older -# Kotlin/Wasm linker fails on it (engine 0.62.1 is built with 2.4.21). +# Kotlin/Wasm linker fails on it (engine 0.62.2 is built with 2.4.21). kotlin = "2.4.21" kotlinx-coroutines = "1.11.0" kotlinxIo = "0.9.1" @@ -23,7 +23,7 @@ kotlinxSerialization = "1.11.0" # 0.61.0 makes the Laya loader common code and adds the packed Q8_0 lane, opt-in; 0.63.0 on engine # 0.62.x adds Laya expert heads and routing, unused here, and rides on the fused SIMD128 kernels the # web verifier runs on). -skainet = "0.62.1" +skainet = "0.62.2" skainet-transformers = "0.63.0" [libraries]