plugins { alias(libs.plugins.kotlin.multiplatform) } kotlin { jvmToolchain(21) // Vector-бэкенд JVM-only: JVector не публикует KMP-таргеты, но его Java 11 // base jar работает на Android ART через scalar fallback. Для desktop JVM // HotSpot 21+ автоматически подхватывается Panama Vector API (multirelease). jvm() sourceSets { commonMain.dependencies { api(project(":memory-api")) implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.serialization.json) } commonTest.dependencies { implementation(kotlin("test")) implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.coroutines.test) } jvmMain.dependencies { implementation(libs.jvector) implementation(libs.sqldelight.sqlite.driver) // text-embedding-kmp — on-device SigLIP2 через ONNX Runtime. // Сигнатура `embed(String): TextEmbedding` (blocking), оборачиваем // наш `suspend fun embed(text)` через Mutex. api-вариант экспортируем // (`api`), потому что SiglipEmbeddingProvider реализует `embed()` // через тип TextEmbeddingExtractor, который виден потребителю // только если он сам подтянет api-jvm — проще пробросить. // // WORKAROUND: upstream `siglip-jvm/*.module` ссылается на `api` // БЕЗ -jvm суффикса. Поскольку в mavenLocal есть только `api-jvm`, // требуется дополнительный stub-jar `pw.binom.ai.embeddingtext:api` // с тем же содержимым. Создаётся так: // mkdir -p ~/.m2/repository/pw.binom.ai.embeddingtext/api/3.0.0-SNAPSHOT // cp ~/.m2/repository/.../api-jvm/3.0.0-SNAPSHOT/api-jvm-*.{jar,sources.jar} \ // ~/.m2/repository/.../api/3.0.0-SNAPSHOT/api-*.{jar,sources.jar} // Когда upstream починит module-metadata — эту инструкцию можно убрать. api(libs.text.embedding.api) implementation(libs.text.embedding.siglip) } jvmTest.dependencies { implementation(kotlin("test")) } } }