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
24 changes: 24 additions & 0 deletions GloVeEmbeddings/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,27 @@ compose.desktop {
}
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/samples/glove/app/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.samples.glove.app
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|object BuildInfo {
| const val SKAINET_VERSION: String = "$skainetVersion"
|}
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import androidx.compose.ui.unit.dp
import sk.ainet.ui.components.LoadingIndicator
import sk.ainet.ui.theme.SKaiNETTheme
import sk.ainet.ui.theme.ThemeController
import sk.ainet.ui.components.PoweredBySKaiNET

/**
* Offline embeddings explorer: type a word to see its nearest neighbours, or run vector
Expand Down Expand Up @@ -73,6 +74,7 @@ public fun App() {
},
)
},
bottomBar = { PoweredBySKaiNET(BuildInfo.SKAINET_VERSION) },
) { padding ->
Column(Modifier.fillMaxSize().padding(padding).padding(16.dp)) {
when (val s = vm.load) {
Expand Down
9 changes: 9 additions & 0 deletions IrisDemo/webapp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"id": "irisdemo",
"name": "Iris Classifier",
"description": "Trains a small dense classifier on the Iris dataset with the SKaiNET sequential DSL, Adam and the training runner, then reports test accuracy — a JVM command-line sample.",
"platforms": [
"cli",
"jvm"
]
}
1 change: 0 additions & 1 deletion KernelRace/androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ android {
}.getProperty("HF_TOKEN") ?: ""
buildConfigField("String", "HF_TOKEN", "\"$hfToken\"")
// Shown next to the logo — always matches the dependency in the catalog.
buildConfigField("String", "SKAINET_VERSION", "\"${libs.versions.skainet.asProvider().get()}\"")
}

buildFeatures {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class MainActivity : ComponentActivity() {
setContent {
App(
viewModel = viewModel,
skainetVersion = BuildConfig.SKAINET_VERSION,
skainetVersion = SKAINET_VERSION,
kernelControls = { busy, vm, currentPrompt -> KernelRaceControls(busy, vm, currentPrompt) },
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class ScalarActivity : ComponentActivity() {
setContent {
App(
viewModel = viewModel,
skainetVersion = BuildConfig.SKAINET_VERSION,
skainetVersion = SKAINET_VERSION,
kernelControls = { busy, vm, currentPrompt -> KernelRaceControls(busy, vm, currentPrompt) },
)
}
Expand Down
22 changes: 22 additions & 0 deletions KernelRace/composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,25 @@ compose.desktop {
}
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/samples/kernelrace/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.samples.kernelrace
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|const val SKAINET_VERSION: String = "$skainetVersion"
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)

This file was deleted.

24 changes: 24 additions & 0 deletions KllamaDemo/composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,27 @@ compose.desktop {
}
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/apps/kllama/chat/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.apps.kllama.chat
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|object BuildInfo {
| const val SKAINET_VERSION: String = "$skainetVersion"
|}
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import sk.ainet.apps.kllama.chat.playground.QwenPlaygroundHost
import sk.ainet.ui.theme.SKaiNETTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import sk.ainet.ui.components.PoweredBySKaiNET

/**
* Main app composable with SKaiNET Design System theming. Renders the
Expand All @@ -23,7 +26,10 @@ fun App(
.fillMaxSize()
.background(MaterialTheme.colorScheme.background)
) {
QwenPlaygroundHost()
Column {
Box(Modifier.weight(1f)) { QwenPlaygroundHost() }
PoweredBySKaiNET(BuildInfo.SKAINET_VERSION)
}
}
}
}
18 changes: 18 additions & 0 deletions KllamaDemo/webapp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"id": "kllamademo",
"name": "Qwen3 Playground (KllamaDemo)",
"description": "Transformer explainer and chat with Qwen3-0.6B running fully in the browser on SKaiNET: the ~280 MB Q3_K_S GGUF model is bundled, so the first load is large and later loads hit the browser cache.",
"platforms": [
"android",
"ios",
"desktop",
"wasm"
],
"distDirs": [
"composeApp/build/dist/wasmJs/productionExecutable"
],
"build": {
"command": "./gradlew :composeApp:wasmJsBrowserDistribution",
"description": "Builds the wasm browser distribution, including the bundled ~280 MB Qwen3-0.6B GGUF model"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import sk.ainet.clean.BuildInfo
import sk.ainet.ui.components.PoweredBySKaiNET

/**
* Home screen with app description and mode selection
Expand Down Expand Up @@ -194,15 +195,8 @@ fun HomeScreen(
}
}

// Powered by SKaiNET
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Powered by SKaiNET ${BuildInfo.SKAINET_VERSION}",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 16.dp)
)
PoweredBySKaiNET(BuildInfo.SKAINET_VERSION, modifier = Modifier.padding(bottom = 8.dp))
}
}

Expand Down
23 changes: 23 additions & 0 deletions MNISTDemo/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,26 @@ kotlin {
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/clean/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.clean
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|object BuildInfo {
| const val SKAINET_VERSION: String = "$skainetVersion"
|}
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)

This file was deleted.

8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,14 @@ Confidence: 98.3%

📂 [`MnistJavaDemo/`](MnistJavaDemo/) · command-line · Java 21+

### 🌸 Iris Classifier

The classic Iris dataset as the smallest possible **training loop**: a two-layer dense
network from the `sequential` DSL, categorical cross-entropy, Adam and the training
runner, with a train/test split and the test accuracy printed at the end.

📂 [`IrisDemo/`](IrisDemo/) · command-line · JVM

## New here?

If this is your first SKaiNET example, start with **Sinus Approximator** — it is
Expand Down
4 changes: 2 additions & 2 deletions SemanticEmojiFilter/composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ val layaVerifier = providers.gradleProperty("layaVerifier").orNull == "true"
// The engine version the diagnostics row shows, taken from the version catalog at build time so a
// dependency bump can never leave a stale number in the UI (every target reads this constant).
val generateBuildInfo by tasks.registering {
val skainetVersion = libs.versions.skainet.asProvider()
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
Expand All @@ -26,7 +26,7 @@ val generateBuildInfo by tasks.registering {
|package sk.ainet.samples.emoji
|
|/** Generated from `skainet` in gradle/libs.versions.toml; see generateBuildInfo in composeApp/build.gradle.kts. */
|const val SKAINET_VERSION: String = "${skainetVersion.get()}"
|const val SKAINET_VERSION: String = "$skainetVersion"
|""".trimMargin(),
)
}
Expand Down
Binary file added SemanticEmojiFilter/docs/screenshots/grid.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added SemanticEmojiFilter/docs/screenshots/wasm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import sk.ainet.app.samples.sinus.BuildInfo
import kotlin.math.PI
import kotlin.math.abs
import sk.ainet.ui.components.PoweredBySKaiNET

@Composable
fun SinusSliderScreen(
Expand Down Expand Up @@ -158,14 +159,7 @@ fun SinusSliderScreen(
}
}

// Powered by SKaiNET
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Powered by SKaiNET ${BuildInfo.SKAINET_VERSION}",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 16.dp)
)
PoweredBySKaiNET(BuildInfo.SKAINET_VERSION, modifier = Modifier.padding(bottom = 8.dp))
}
}
24 changes: 24 additions & 0 deletions SinusApproximator/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,27 @@ kotlin {
}
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/app/samples/sinus/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.app.samples.sinus
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|object BuildInfo {
| const val SKAINET_VERSION: String = "$skainetVersion"
|}
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)

This file was deleted.

24 changes: 24 additions & 0 deletions TDALab/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,27 @@ compose.desktop {
}
}
}

// The engine version the UI shows ("Powered by SKaiNET …"), taken from the version catalog at
// build time so a dependency bump can never leave a stale number behind.
val generateBuildInfo by tasks.registering {
val skainetVersion = versionCatalogs.named("libs").findVersion("skainet").get().requiredVersion
val outDir = layout.buildDirectory.dir("generated/buildInfo/kotlin")
inputs.property("skainetVersion", skainetVersion)
outputs.dir(outDir)
doLast {
val file = outDir.get().file("sk/ainet/samples/tda/app/BuildInfo.kt").asFile
file.parentFile.mkdirs()
file.writeText(
"""
|package sk.ainet.samples.tda.app
|
|/** Generated from `skainet` in gradle/libs.versions.toml by generateBuildInfo; do not edit. */
|object BuildInfo {
| const val SKAINET_VERSION: String = "$skainetVersion"
|}
|""".trimMargin(),
)
}
}
kotlin.sourceSets.getByName("commonMain").kotlin.srcDir(generateBuildInfo)
Loading
Loading