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
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Changelog

## [0.17.0] - 2026-03-25

### Added
- **Core Engine Focus**: Refactored the repository to focus on the core `ComputeGraph` framework, compiler, and backends.
- **Standalone Ecosystem**: Extracted high-level LLM and transformer implementations to dedicated repositories ([SKaiNET-LLM](https://github.com/SKaiNET-developers/SKaiNET-LLM) and [SKaiNET-transformers](https://github.com/SKaiNET-developers/SKaiNET-transformers)).
- **LLM-as-DSL**: High-level DSL for defining and running LLM architectures within the core `ComputeGraph` framework.
- **ComputeGraphExecutor**: New optimized executor with support for fusion passes and trace-to-DAG bridging.
- **SDPA & Gather**: Implementation of Scaled Dot-Product Attention (SDPA) and `gather`/`indexSelect` ops across backends.
- **EmbeddingAdapter**: Streamlined embedding layer integration for transformer models.

### Changed
- **Optimized LLM execution**: Integrated fusion passes for faster inference on supported backends.
- **Improved Tensor API**: Refined `Tensor` interface and updated `ComputeGraphExecutor` for better type safety and performance.
- **Dependency Cleanups**: Removed stale references to LLM and transformer code already moved to the standalone `skainet-transformers` repository.

### Fixed
- **Embedding Padding**: Fixed `paddingIdx` handling in embedding layers.
- **Concatenation**: Resolved rank-specific issues in tensor concatenation (rank > 1).
- **Compilation**: Fixed various build and compilation errors after module migrations.

## [0.16.0] - 2026-03-08

### Added
Expand Down
72 changes: 43 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ Add the core dependencies (Gradle Kotlin DSL):

```kotlin
dependencies {
implementation("sk.ainet.core:SKaiNET-lang-core:0.16.0")
implementation("sk.ainet.core:SKaiNET-backend-cpu:0.16.0")
implementation("sk.ainet.core:SKaiNET-lang-core:0.17.0")
implementation("sk.ainet.core:SKaiNET-backend-cpu:0.17.0")
}
```

Expand All @@ -37,31 +37,49 @@ val model = nn {
}
```

### Hello LLM
### Core Tensor Ops

```kotlin
val ctx = DirectCpuExecutionContext()
val ingestion = LlamaIngestion(ctx)
val weights = ingestion.load { SystemFileSystem.source(Path("model.gguf")).buffered() }
val tokenizer = GGUFTokenizer.fromSource(SystemFileSystem.source(Path("model.gguf")).buffered())

val runtime = LlamaRuntime(ctx, weights)
runtime.generate(tokenizer.encode("Once upon a time"), steps = 64) { token ->
print(tokenizer.decode(token))
}
val a = tensor(shape(2, 2)) { float(1f, 2f, 3f, 4f) }
val b = tensor(shape(2, 2)) { float(5f, 6f, 7f, 8f) }

val c = a matMul b
val d = c.relu()
```

### GGUF Model Loading

```kotlin
val source = SystemFileSystem.source(Path("model.gguf")).buffered()
val reader = GGUFReader(source)

val tensor = reader.tensors.first { it.name == "token_embd.weight" }
val weights = reader.materialize(tensor)
```

> **More examples:** [SKaiNET-examples](https://github.com/SKaiNET-developers/SKaiNET-examples) | [SKaiNET-notebook](https://github.com/SKaiNET-developers/SKaiNET-notebook)

---

## Ecosystem

SKaiNET is a modular ecosystem. While this repository contains the core engine, specialized high-level libraries are maintained in standalone repositories:

| Project | Description |
|---|---|
| [SKaiNET-LLM](https://github.com/SKaiNET-developers/SKaiNET-LLM) | Llama, Gemma, and BERT inference runtimes |
| [SKaiNET-transformers](https://github.com/SKaiNET-developers/SKaiNET-transformers) | Pre-built transformer architectures and layers |
| [SKaiNET-examples](https://github.com/SKaiNET-developers/SKaiNET-examples) | Sample projects and integration demos |

---

## Explore

| Goal | Start here |
|---|---|
| Examples and sample projects | [SKaiNET-examples](https://github.com/SKaiNET-developers/SKaiNET-examples) |
| Interactive notebooks | [SKaiNET-notebook](https://github.com/SKaiNET-developers/SKaiNET-notebook) |
| LLM inference (Llama, Gemma) | [docs/kllama-getting-started.md](docs/kllama-getting-started.md) |
| LLM inference (Llama, Gemma) | [SKaiNET-LLM](https://github.com/SKaiNET-developers/SKaiNET-LLM) |
| Java 21+ integration | [docs/java-getting-started.md](docs/java-getting-started.md) |
| Data loading and transforms | [docs/io-readers-guide.md](docs/io-readers-guide.md) |
| Graph DSL (ResNet, YOLO) | [docs/graph-dsl.md](docs/graph-dsl.md) |
Expand All @@ -79,18 +97,15 @@ runtime.generate(tokenizer.encode("Once upon a time"), steps = 64) { token ->
- Targets: JVM, macOS (Native), JS, WASM (Browser + WasmWasi)
- Single codebase shared across all platforms via Kotlin Multiplatform

### LLM Inference
### Optimized Execution

- **KLlama**: Llama-family models from GGUF files with streaming generation
- **KGemma**: Gemma 3n models from SafeTensors with HuggingFace tokenizer
- **KBert**: BERT and Sentence-Transformers for embeddings
- JVM acceleration via MemorySegment tensors, SIMD GEMM, paged KV cache
- **ComputeGraphExecutor**: Optimized engine with fusion passes and trace-to-DAG bridging.
- **SDPA & Gather**: High-performance Scaled Dot-Product Attention and indexing operations.

### Agentic AI
### Agentic AI Infrastructure

- Function / tool calling via `skainet-kllama-agent`
- `AgentLoop` for multi-turn tool-use conversations
- Java facade: `JavaAgentLoop`
- **ComputeGraph**: Unified framework for defining agentic workflows and tool-calling loops.
- Java facade: `JavaAgentLoop` (in `skainet-lang-java`)

### Neural Network DSL

Expand All @@ -109,9 +124,8 @@ runtime.generate(tokenizer.encode("Once upon a time"), steps = 64) { token ->
### Java 21+ Support

- `SKaiNET` entry point, `TensorJavaOps`, builder-pattern model definition
- `KLlamaJava` / `KBertJava` facades for blocking and async inference
- Maven BOM (`sk.ainet:skainet-bom`) for one-line version management
- Docs: [Getting Started](docs/java-getting-started.md) | [LLM Inference](docs/java-llm-inference.md) | [Model Training](docs/java-model-training.md)
- Docs: [Getting Started](docs/java-getting-started.md) | [Model Training](docs/java-model-training.md)

### Edge AI: Arduino / C99 Export

Expand All @@ -128,12 +142,12 @@ runtime.generate(tokenizer.encode("Once upon a time"), steps = 64) { token ->

---

## What's New in 0.16.0

- **Unified LLM core** — deduplicated and optimized implementation of `KvCache`, `softmax`, `RoPE`, and `sampling`
- **Infrastructure cleanup** — extracted core LLM and transformer code to standalone repositories `SKaiNET-transformers`) to streamline the core project
- **Consistent BOM** — refactored `skainet-bom` to use local `project()` references for reliable builds
## What's New in 0.17.0

- **Core Engine Focus** — Refactored the repository to focus on the core `ComputeGraph` framework, compiler, and backends. Extracted high-level LLM and transformer implementations to standalone repositories.
- **LLM-as-DSL** — New high-level DSL for defining and running LLM architectures within the core framework.
- **Optimized ComputeGraphExecutor** — New executor with support for fusion passes and trace-to-DAG bridging for faster inference.
- **SDPA & Gather** — Implemented Scaled Dot-Product Attention and `gather`/`indexSelect` ops for improved performance.

See [CHANGELOG.md](CHANGELOG.md) for the full release history.

Expand Down
8 changes: 8 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ subprojects {
tasks.withType<Test>().configureEach {
maxHeapSize = "8192m"
}

apply(plugin = "org.jetbrains.kotlinx.kover")
}

kover {
Expand All @@ -70,6 +72,12 @@ kover {
}
}

dependencies {
subprojects.forEach {
kover(it)
}
}

// Custom task to generate operator documentation
tasks.register("generateOperatorDocs") {
group = "documentation"
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.core
VERSION_NAME=0.17.0-SNAPSHOT
VERSION_NAME=0.17.0

POM_DESCRIPTION=SKaiNET

Expand Down
1 change: 0 additions & 1 deletion skainet-backends/skainet-backend-cpu/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-compile/skainet-compile-c/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-compile/skainet-compile-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-compile/skainet-compile-dag/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-compile/skainet-compile-hlo/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-compile/skainet-compile-opt/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
}

Expand Down
1 change: 0 additions & 1 deletion skainet-data/skainet-data-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
id("sk.ainet.dokka")
}

Expand Down
1 change: 0 additions & 1 deletion skainet-data/skainet-data-media/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.kover)
id("sk.ainet.dokka")
}

Expand Down
1 change: 0 additions & 1 deletion skainet-data/skainet-data-simple/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
id("sk.ainet.dokka")
}

Expand Down
1 change: 0 additions & 1 deletion skainet-data/skainet-data-transform/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
id("sk.ainet.dokka")
}

Expand Down
1 change: 0 additions & 1 deletion skainet-lang/skainet-lang-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
alias(libs.plugins.ksp)
id("sk.ainet.dokka")
Expand Down
1 change: 0 additions & 1 deletion skainet-lang/skainet-lang-dag/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
alias(libs.plugins.ksp)
id("sk.ainet.dokka")
Expand Down
1 change: 0 additions & 1 deletion skainet-lang/skainet-lang-models/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-models/skainet-model-yolo/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)
id("sk.ainet.dokka")
}
Expand Down
1 change: 0 additions & 1 deletion skainet-pipeline/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidMultiplatformLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
alias(libs.plugins.kover)
alias(libs.plugins.binary.compatibility.validator)

id("sk.ainet.dokka")
Expand Down
Loading