import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.compose.internal.de.undercouch.gradle.tasks.download.Download import org.gradle.internal.os.OperatingSystem plugins { kotlin("jvm") kotlin("plugin.serialization") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") } group = "xyz.r0r5chach" version = "1.0-SNAPSHOT" repositories { mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") google() } dependencies { // Core implementation(compose.desktop.currentOs) // ConstrainLayout implementation("tech.annexflow.compose:constraintlayout-compose-multiplatform:0.4.0") // Material Design implementation(compose.materialIconsExtended) //Java Native Access val jnaVersion = "5.15.0" implementation("net.java.dev.jna:jna:$jnaVersion") implementation("net.java.dev.jna:jna-platform:$jnaVersion") //Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0") // Voyager val voyagerVersion = "1.1.0-beta02" implementation("cafe.adriel.voyager:voyager-navigator:$voyagerVersion") implementation("cafe.adriel.voyager:voyager-screenmodel:$voyagerVersion") implementation("cafe.adriel.voyager:voyager-bottom-sheet-navigator:$voyagerVersion") implementation("cafe.adriel.voyager:voyager-tab-navigator:$voyagerVersion") implementation("cafe.adriel.voyager:voyager-transitions:$voyagerVersion") // Speech to Text implementation("com.alphacephei:vosk:0.3.45") // Deep Java Library val djlVersion = "0.30.0" implementation("ai.djl:api:$djlVersion") implementation("ai.djl.huggingface:tokenizers:$djlVersion") implementation("ai.djl.pytorch:pytorch-engine:$djlVersion") implementation("ai.djl.pytorch:pytorch-jni:2.4.0-$djlVersion") // Semantic Kernel implementation("com.microsoft.semantic-kernel:semantickernel-api:1.3.0") // Logging implementation("io.github.oshai:kotlin-logging-jvm:7.0.0") implementation("ch.qos.logback:logback-classic:1.5.11") // Json val serializationVersion = "1.5.1" implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion") //FileKit val fileKitVersion = "0.8.7" implementation("io.github.vinceglb:filekit-core:$fileKitVersion") implementation("io.github.vinceglb:filekit-compose:$fileKitVersion") } val currentOs = OperatingSystem.current() compose.desktop { application { mainClass = "MainKt" nativeDistributions { linux { modules("jdk.security.auth") } targetFormats( *listOf( TargetFormat.Dmg.takeIf { currentOs.isMacOsX }, TargetFormat.Msi.takeIf { currentOs.isWindows }, TargetFormat.Deb.takeIf { currentOs.isLinux } ).filterNotNull().toTypedArray() ) packageName = "mia" packageVersion = "1.0.0" } } } tasks.register("packageLiteInstaller") { group = "package project" description = "Build program with the small vosk STT model" dependsOn("prepareLiteResources", "package") } tasks.register("packageFullInstaller") { group = "package project" description = "Build program with the large vosk STT model" dependsOn("prepareFullResources", "package") } tasks.register("generateSemanticModel") { group = "package project" description = "Run DJL to generate Semantic model from HuggingFace (all-roberta-large-v1)" val modelName = "sentence-transformers/all-roberta-large-v1" val djlOutputDir = project.file("src/main/resources/Semantic-model") doFirst { djlOutputDir.deleteRecursively() } doLast { val os = System.getProperty("os.name") val executable = when { currentOs.isWindows -> project.file("djl/windows.exe") currentOs.isMacOsX -> project.file("djl/mac") currentOs.isLinux -> project.file("djl/linux") else -> throw GradleException("Unsupported OS: $os") } exec { commandLine = listOf(executable.absolutePath, modelName, djlOutputDir.absolutePath) } } } val sttOutputDir = project.file("src/main/resources/STT-model") val modelUrl = "https://alphacephei.com/vosk/models" val zipFile = layout.buildDirectory.file("STT-model.zip") tasks.register("prepareLiteResources") { group = "package project" description = "Download small vosk model to resources" val modelName = "vosk-model-small-en-us-0.15" doFirst { sttOutputDir.deleteRecursively() dependsOn("generateSemanticModel") } src("$modelUrl/$modelName.zip") dest(zipFile) doLast { project.copy { from(project.zipTree(zipFile)) into(sttOutputDir) } } } tasks.register("prepareFullResources") { group = "package project" description = "Download large vosk model to resources" val modelName = "vosk-model-en-us-0.22" doFirst { sttOutputDir.deleteRecursively() dependsOn("generateSemanticModel") } src("$modelUrl/$modelName.zip") dest(zipFile) doLast { project.copy { from(project.zipTree(zipFile)) into(sttOutputDir) } } }