Skip to content

Commit cf5e189

Browse files
committed
core: add llama server (OpenAI compatible)
1 parent 000c185 commit cf5e189

File tree

18 files changed

+296
-3
lines changed

18 files changed

+296
-3
lines changed

app/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ android {
6464
exclude(group = "org.jetbrains", module = "annotations")
6565
}
6666
}
67+
packaging {
68+
resources.excludes.add("META-INF/INDEX.LIST")
69+
resources.excludes.add("META-INF/io.netty.versions.properties")
70+
}
6771
}
6872

6973
ksp {
@@ -84,6 +88,7 @@ dependencies {
8488

8589
implementation(project(":smollm"))
8690
implementation(project(":hf-model-hub-api"))
91+
implementation(project(":smollm-server"))
8792

8893
// Koin: dependency injection
8994
implementation(libs.koin.android)

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
<activity android:name=".ui.screens.model_download.DownloadModelActivity"/>
4444

4545
<activity android:name=".ui.screens.manage_tasks.ManageTasksActivity"/>
46+
<service
47+
android:name=".server.LlamaServerService"
48+
android:exported="false"
49+
/>
4650
</application>
4751

4852
</manifest>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.shubham0204.smollmandroid.server
2+
3+
import android.app.Service
4+
import android.content.Intent
5+
import android.os.IBinder
6+
import io.shubham0204.smollm_server.LlamaServer
7+
8+
class LlamaServerService : Service() {
9+
private val llamaServer = LlamaServer()
10+
11+
override fun onBind(intent: Intent?): IBinder? {
12+
TODO("Not yet implemented")
13+
}
14+
15+
override fun onStartCommand(
16+
intent: Intent?,
17+
flags: Int,
18+
startId: Int,
19+
): Int {
20+
llamaServer.start()
21+
return START_STICKY
22+
}
23+
24+
override fun onDestroy() {
25+
llamaServer.stop()
26+
super.onDestroy()
27+
}
28+
}

app/src/main/java/io/shubham0204/smollmandroid/ui/screens/chat/ChatActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ import androidx.navigation.compose.rememberNavController
100100
import io.shubham0204.smollmandroid.R
101101
import io.shubham0204.smollmandroid.data.Chat
102102
import io.shubham0204.smollmandroid.data.Task
103+
import io.shubham0204.smollmandroid.server.LlamaServerService
103104
import io.shubham0204.smollmandroid.ui.components.AppBarTitleText
104105
import io.shubham0204.smollmandroid.ui.components.MediumLabelText
105106
import io.shubham0204.smollmandroid.ui.screens.manage_tasks.ManageTasksActivity
@@ -143,6 +144,9 @@ class ChatActivity : ComponentActivity() {
143144
}
144145
}
145146

147+
148+
startService(Intent(this, LlamaServerService::class.java))
149+
146150
setContent {
147151
val navController = rememberNavController()
148152
NavHost(

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
alias(libs.plugins.kotlin.android) apply false
55
alias(libs.plugins.kotlin.compose) apply false
66
alias(libs.plugins.android.library) apply false
7-
id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false
7+
id("com.google.devtools.ksp") version "2.0.21-1.0.28" apply false
88
alias(libs.plugins.jetbrains.kotlin.jvm) apply false
9-
kotlin("plugin.serialization") version "2.1.0" apply false
9+
kotlin("plugin.serialization") version "2.1.10" apply false
1010
}

gradle/libs.versions.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ koin = "3.5.6"
1313
koinAnnotations = "1.3.1"
1414
jetbrainsKotlinJvm = "2.0.0"
1515
uiTextGoogleFonts = "1.7.7"
16+
appcompat = "1.7.0"
17+
material = "1.12.0"
1618

1719

1820
[libraries]
@@ -39,6 +41,8 @@ koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", versi
3941
koin-annotations = { module = "io.insert-koin:koin-annotations", version.ref = "koinAnnotations" }
4042
koin-ksp-compiler = { module = "io.insert-koin:koin-ksp-compiler", version.ref = "koinAnnotations" }
4143
androidx-ui-text-google-fonts = { group = "androidx.compose.ui", name = "ui-text-google-fonts", version.ref = "uiTextGoogleFonts" }
44+
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
45+
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
4246

4347

4448
[plugins]

hf-model-hub-api/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
plugins {
22
id("java-library")
33
alias(libs.plugins.jetbrains.kotlin.jvm)
4-
kotlin("plugin.serialization") version "2.1.0"
4+
kotlin("plugin.serialization") version "2.1.10"
55
}
66

77
val ktorVersion = "3.0.2"

settings.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import java.net.URI
22

3+
include(":smollm-server")
4+
5+
36
include(":hf-model-hub-api")
47

58

smollm-server/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

smollm-server/build.gradle.kts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
plugins {
2+
alias(libs.plugins.android.library)
3+
alias(libs.plugins.kotlin.android)
4+
kotlin("plugin.serialization") version "2.1.10"
5+
id("com.google.devtools.ksp")
6+
}
7+
8+
android {
9+
namespace = "io.shubham0204.smollm_server"
10+
compileSdk = 35
11+
12+
defaultConfig {
13+
minSdk = 24
14+
15+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
16+
consumerProguardFiles("consumer-rules.pro")
17+
}
18+
19+
buildTypes {
20+
release {
21+
isMinifyEnabled = false
22+
proguardFiles(
23+
getDefaultProguardFile("proguard-android-optimize.txt"),
24+
"proguard-rules.pro",
25+
)
26+
}
27+
}
28+
compileOptions {
29+
sourceCompatibility = JavaVersion.VERSION_21
30+
targetCompatibility = JavaVersion.VERSION_21
31+
}
32+
kotlinOptions {
33+
jvmTarget = "21"
34+
}
35+
}
36+
37+
val ktorVersion = "3.0.3"
38+
39+
dependencies {
40+
implementation(libs.androidx.core.ktx)
41+
implementation(libs.androidx.appcompat)
42+
implementation(libs.material)
43+
44+
// Ktor server
45+
implementation("io.ktor:ktor-server-core:$ktorVersion")
46+
implementation("io.ktor:ktor-server-netty:$ktorVersion")
47+
48+
// kotlinx serialization (JSON) and
49+
// content-negotiation
50+
// docs: https://ktor.io/docs/server-serialization.html
51+
implementation("io.ktor:ktor-server-content-negotiation:$ktorVersion")
52+
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
53+
54+
implementation(project(":smollm"))
55+
56+
testImplementation(libs.junit)
57+
androidTestImplementation(libs.androidx.junit)
58+
androidTestImplementation(libs.androidx.espresso.core)
59+
}

0 commit comments

Comments
 (0)