misc: reorg the pkg structure

This commit is contained in:
Han Yin 2025-06-26 13:06:48 -07:00
parent b59c59e5c3
commit 72822f0236
68 changed files with 259 additions and 785 deletions

View File

@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".revamp.KleidiLlamaApplication"
android:name=".KleidiLlamaApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
@ -17,16 +17,7 @@
>
<activity
android:name=".legacy.LegacyActivity"
android:exported="true"
android:theme="@style/Theme.LlamaAndroid">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".revamp.MainActivity"
android:name=".MainActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@style/Theme.LlamaAndroid">

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp
package com.example.llama
import android.app.Application
import dagger.hilt.android.HiltAndroidApp

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp
package com.example.llama
import android.app.Activity
import android.content.ActivityNotFoundException
@ -32,31 +32,31 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.revamp.navigation.AppDestinations
import com.example.llama.revamp.navigation.NavigationActions
import com.example.llama.revamp.ui.scaffold.AnimatedNavHost
import com.example.llama.revamp.ui.scaffold.AppNavigationDrawer
import com.example.llama.revamp.ui.scaffold.AppScaffold
import com.example.llama.revamp.ui.scaffold.ScaffoldConfig
import com.example.llama.revamp.ui.scaffold.ScaffoldEvent
import com.example.llama.revamp.ui.scaffold.bottombar.BottomBarConfig
import com.example.llama.revamp.ui.scaffold.topbar.NavigationIcon
import com.example.llama.revamp.ui.scaffold.topbar.TopBarConfig
import com.example.llama.revamp.ui.screens.BenchmarkScreen
import com.example.llama.revamp.ui.screens.ConversationScreen
import com.example.llama.revamp.ui.screens.ModelLoadingScreen
import com.example.llama.revamp.ui.screens.ModelSelectionScreen
import com.example.llama.revamp.ui.screens.ModelsManagementScreen
import com.example.llama.revamp.ui.screens.SettingsGeneralScreen
import com.example.llama.revamp.ui.theme.LlamaTheme
import com.example.llama.revamp.viewmodel.BenchmarkViewModel
import com.example.llama.revamp.viewmodel.ConversationViewModel
import com.example.llama.revamp.viewmodel.MainViewModel
import com.example.llama.revamp.viewmodel.ModelLoadingViewModel
import com.example.llama.revamp.viewmodel.ModelSelectionViewModel
import com.example.llama.revamp.viewmodel.ModelsManagementViewModel
import com.example.llama.revamp.viewmodel.SettingsViewModel
import com.example.llama.engine.ModelLoadingMetrics
import com.example.llama.navigation.AppDestinations
import com.example.llama.navigation.NavigationActions
import com.example.llama.ui.scaffold.AnimatedNavHost
import com.example.llama.ui.scaffold.AppNavigationDrawer
import com.example.llama.ui.scaffold.AppScaffold
import com.example.llama.ui.scaffold.ScaffoldConfig
import com.example.llama.ui.scaffold.ScaffoldEvent
import com.example.llama.ui.scaffold.bottombar.BottomBarConfig
import com.example.llama.ui.scaffold.topbar.NavigationIcon
import com.example.llama.ui.scaffold.topbar.TopBarConfig
import com.example.llama.ui.screens.BenchmarkScreen
import com.example.llama.ui.screens.ConversationScreen
import com.example.llama.ui.screens.ModelLoadingScreen
import com.example.llama.ui.screens.ModelSelectionScreen
import com.example.llama.ui.screens.ModelsManagementScreen
import com.example.llama.ui.screens.SettingsGeneralScreen
import com.example.llama.ui.theme.LlamaTheme
import com.example.llama.viewmodel.BenchmarkViewModel
import com.example.llama.viewmodel.ConversationViewModel
import com.example.llama.viewmodel.MainViewModel
import com.example.llama.viewmodel.ModelLoadingViewModel
import com.example.llama.viewmodel.ModelSelectionViewModel
import com.example.llama.viewmodel.ModelsManagementViewModel
import com.example.llama.viewmodel.SettingsViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch

View File

@ -1,13 +1,13 @@
package com.example.llama.revamp.data.local
package com.example.llama.data.local
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.llama.revamp.data.local.dao.ModelDao
import com.example.llama.revamp.data.local.dao.SystemPromptDao
import com.example.llama.revamp.data.local.entity.ModelEntity
import com.example.llama.revamp.data.local.entity.SystemPromptEntity
import com.example.llama.data.local.dao.ModelDao
import com.example.llama.data.local.dao.SystemPromptDao
import com.example.llama.data.local.entity.ModelEntity
import com.example.llama.data.local.entity.SystemPromptEntity
import javax.inject.Singleton
/**

View File

@ -1,7 +1,7 @@
package com.example.llama.revamp.data.local.converter
package com.example.llama.data.local.converter
import androidx.room.TypeConverter
import com.example.llama.revamp.util.GgufMetadata
import com.example.llama.util.GgufMetadata
import kotlinx.serialization.json.Json
class GgufMetadataConverters {

View File

@ -1,11 +1,11 @@
package com.example.llama.revamp.data.local.dao
package com.example.llama.data.local.dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.example.llama.revamp.data.local.entity.ModelEntity
import com.example.llama.data.local.entity.ModelEntity
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,11 +1,11 @@
package com.example.llama.revamp.data.local.dao
package com.example.llama.data.local.dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.example.llama.revamp.data.local.entity.SystemPromptEntity
import com.example.llama.data.local.entity.SystemPromptEntity
import kotlinx.coroutines.flow.Flow
/**

View File

@ -1,11 +1,11 @@
package com.example.llama.revamp.data.local.entity
package com.example.llama.data.local.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverters
import com.example.llama.revamp.data.local.converter.GgufMetadataConverters
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.util.GgufMetadata
import com.example.llama.data.local.converter.GgufMetadataConverters
import com.example.llama.data.model.ModelInfo
import com.example.llama.util.GgufMetadata
@Entity(tableName = "models")

View File

@ -1,8 +1,8 @@
package com.example.llama.revamp.data.local.entity
package com.example.llama.data.local.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.example.llama.revamp.data.model.SystemPrompt
import com.example.llama.data.model.SystemPrompt
/**
* Database entity for storing system prompts.

View File

@ -1,9 +1,9 @@
package com.example.llama.revamp.data.model
package com.example.llama.data.model
import com.example.llama.revamp.util.FileType
import com.example.llama.revamp.util.GgufMetadata
import com.example.llama.revamp.util.formatContextLength
import com.example.llama.revamp.util.formatFileByteSize
import com.example.llama.util.FileType
import com.example.llama.util.GgufMetadata
import com.example.llama.util.formatContextLength
import com.example.llama.util.formatFileByteSize
/**

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.data.model
package com.example.llama.data.model
import java.text.SimpleDateFormat
import java.util.Date

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.data.preferences
package com.example.llama.data.preferences
import android.content.Context
import androidx.datastore.core.DataStore

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.data.remote
package com.example.llama.data.remote
import okhttp3.ResponseBody
import retrofit2.http.GET

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.data.remote
package com.example.llama.data.remote
data class HuggingFaceModel(
val id: String,

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.data.remote
package com.example.llama.data.remote
import android.util.Log
import kotlinx.coroutines.Dispatchers

View File

@ -1,23 +1,23 @@
package com.example.llama.revamp.data.repository
package com.example.llama.data.repository
import android.content.Context
import android.net.Uri
import android.os.StatFs
import android.util.Log
import com.example.llama.revamp.data.local.dao.ModelDao
import com.example.llama.revamp.data.local.entity.ModelEntity
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.data.remote.HuggingFaceModel
import com.example.llama.revamp.data.remote.HuggingFaceRemoteDataSource
import com.example.llama.revamp.data.repository.ModelRepository.ImportProgressTracker
import com.example.llama.revamp.monitoring.StorageMetrics
import com.example.llama.revamp.util.GgufMetadata
import com.example.llama.revamp.util.GgufMetadataReader
import com.example.llama.revamp.util.copyWithBuffer
import com.example.llama.revamp.util.copyWithChannels
import com.example.llama.revamp.util.formatFileByteSize
import com.example.llama.revamp.util.getFileNameFromUri
import com.example.llama.revamp.util.getFileSizeFromUri
import com.example.llama.data.local.dao.ModelDao
import com.example.llama.data.local.entity.ModelEntity
import com.example.llama.data.model.ModelInfo
import com.example.llama.data.remote.HuggingFaceModel
import com.example.llama.data.remote.HuggingFaceRemoteDataSource
import com.example.llama.data.repository.ModelRepository.ImportProgressTracker
import com.example.llama.monitoring.StorageMetrics
import com.example.llama.util.GgufMetadata
import com.example.llama.util.GgufMetadataReader
import com.example.llama.util.copyWithBuffer
import com.example.llama.util.copyWithChannels
import com.example.llama.util.formatFileByteSize
import com.example.llama.util.getFileNameFromUri
import com.example.llama.util.getFileSizeFromUri
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers

View File

@ -1,10 +1,11 @@
package com.example.llama.revamp.data.repository
package com.example.llama.data.repository
import com.example.llama.revamp.data.local.dao.SystemPromptDao
import com.example.llama.revamp.data.local.entity.SystemPromptEntity
import com.example.llama.revamp.data.model.SystemPrompt
import com.example.llama.data.local.dao.SystemPromptDao
import com.example.llama.data.local.entity.SystemPromptEntity
import com.example.llama.data.model.SystemPrompt
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import java.util.UUID
import javax.inject.Inject
@ -29,11 +30,10 @@ class SystemPromptRepositoryImpl @Inject constructor(
/**
* Get all preset prompts.
*
* For now, we'll just return the static list since we don't store presets in the database
*/
override fun getPresetPrompts(): Flow<List<SystemPrompt>> {
// For now, we'll just return the static list since we don't store presets in the database
return kotlinx.coroutines.flow.flowOf(SystemPrompt.STUB_PRESETS)
}
override fun getPresetPrompts(): Flow<List<SystemPrompt>> = flowOf(SystemPrompt.STUB_PRESETS)
/**
* Get recent prompts from the database.

View File

@ -1,23 +1,23 @@
package com.example.llama.revamp.di
package com.example.llama.di
import android.content.Context
import android.llama.cpp.InferenceEngine
import android.llama.cpp.LLamaLibraryLoader
import com.example.llama.revamp.data.local.AppDatabase
import com.example.llama.revamp.data.remote.HuggingFaceApiService
import com.example.llama.revamp.data.remote.HuggingFaceRemoteDataSource
import com.example.llama.revamp.data.remote.HuggingFaceRemoteDataSourceImpl
import com.example.llama.revamp.data.repository.ModelRepository
import com.example.llama.revamp.data.repository.ModelRepositoryImpl
import com.example.llama.revamp.data.repository.SystemPromptRepository
import com.example.llama.revamp.data.repository.SystemPromptRepositoryImpl
import com.example.llama.revamp.engine.BenchmarkService
import com.example.llama.revamp.engine.ConversationService
import com.example.llama.revamp.engine.InferenceService
import com.example.llama.revamp.engine.InferenceServiceImpl
import com.example.llama.revamp.engine.ModelLoadingService
import com.example.llama.revamp.engine.StubInferenceEngine
import com.example.llama.revamp.monitoring.PerformanceMonitor
import com.example.llama.data.local.AppDatabase
import com.example.llama.data.remote.HuggingFaceApiService
import com.example.llama.data.remote.HuggingFaceRemoteDataSource
import com.example.llama.data.remote.HuggingFaceRemoteDataSourceImpl
import com.example.llama.data.repository.ModelRepository
import com.example.llama.data.repository.ModelRepositoryImpl
import com.example.llama.data.repository.SystemPromptRepository
import com.example.llama.data.repository.SystemPromptRepositoryImpl
import com.example.llama.engine.BenchmarkService
import com.example.llama.engine.ConversationService
import com.example.llama.engine.InferenceService
import com.example.llama.engine.InferenceServiceImpl
import com.example.llama.engine.ModelLoadingService
import com.example.llama.engine.StubInferenceEngine
import com.example.llama.monitoring.PerformanceMonitor
import dagger.Binds
import dagger.Module
import dagger.Provides

View File

@ -1,9 +1,9 @@
package com.example.llama.revamp.engine
package com.example.llama.engine
import android.llama.cpp.InferenceEngine
import android.llama.cpp.InferenceEngine.State
import android.util.Log
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.data.model.ModelInfo
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow

View File

@ -1,9 +1,9 @@
package com.example.llama.revamp.engine
package com.example.llama.engine
import android.llama.cpp.InferenceEngine
import android.llama.cpp.InferenceEngine.State
import android.util.Log
import com.example.llama.revamp.APP_NAME
import com.example.llama.APP_NAME
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

View File

@ -1,119 +0,0 @@
package com.example.llama.legacy
import android.app.DownloadManager
import android.net.Uri
import android.util.Log
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableDoubleStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.core.database.getLongOrNull
import androidx.core.net.toUri
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File
data class Downloadable(val name: String, val source: Uri, val destination: File) {
companion object {
@JvmStatic
private val tag: String? = this::class.qualifiedName
sealed interface State
data object Ready: State
data class Downloading(val id: Long): State
data class Downloaded(val downloadable: Downloadable): State
data class Error(val message: String): State
@JvmStatic
@Composable
fun Button(viewModel: LegacyViewModel, dm: DownloadManager, item: Downloadable) {
var status: State by remember {
mutableStateOf(
if (item.destination.exists()) Downloaded(item)
else Ready
)
}
var progress by remember { mutableDoubleStateOf(0.0) }
val coroutineScope = rememberCoroutineScope()
suspend fun waitForDownload(result: Downloading, item: Downloadable): State {
while (true) {
val cursor = dm.query(DownloadManager.Query().setFilterById(result.id))
if (cursor == null) {
Log.e(tag, "dm.query() returned null")
return Error("dm.query() returned null")
}
if (!cursor.moveToFirst() || cursor.count < 1) {
cursor.close()
Log.i(tag, "cursor.moveToFirst() returned false or cursor.count < 1, download canceled?")
return Ready
}
val pix = cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)
val tix = cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)
val sofar = cursor.getLongOrNull(pix) ?: 0
val total = cursor.getLongOrNull(tix) ?: 1
cursor.close()
if (sofar == total) {
return Downloaded(item)
}
progress = (sofar * 1.0) / total
delay(1000L)
}
}
fun onClick() {
when (val s = status) {
is Downloaded -> {
viewModel.load(item.destination.path)
}
is Downloading -> {
coroutineScope.launch {
status = waitForDownload(s, item)
}
}
else -> {
item.destination.delete()
val request = DownloadManager.Request(item.source).apply {
setTitle("Downloading model")
setDescription("Downloading model: ${item.name}")
setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
setDestinationUri(item.destination.toUri())
}
viewModel.log("Saving ${item.name} to ${item.destination.path}")
Log.i(tag, "Saving ${item.name} to ${item.destination.path}")
val id = dm.enqueue(request)
status = Downloading(id)
onClick()
}
}
}
Button(onClick = { onClick() }, enabled = status !is Downloading) {
when (status) {
is Downloading -> Text(text = "Downloading ${(progress * 100).toInt()}%")
is Downloaded -> Text("Load ${item.name}")
is Ready -> Text("Download ${item.name}")
is Error -> Text("Download ${item.name}")
}
}
}
}
}

View File

@ -1,162 +0,0 @@
package com.example.llama.legacy
import android.app.ActivityManager
import android.app.DownloadManager
import android.content.ClipData
import android.content.ClipboardManager
import android.net.Uri
import android.os.Bundle
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.text.format.Formatter
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Button
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.core.content.getSystemService
import com.example.llama.legacy.theme.LlamaAndroidTheme
import java.io.File
class LegacyActivity(
activityManager: ActivityManager? = null,
downloadManager: DownloadManager? = null,
clipboardManager: ClipboardManager? = null,
) : ComponentActivity() {
private val TAG: String? = this::class.simpleName
private val activityManager by lazy { activityManager ?: getSystemService<ActivityManager>()!! }
private val downloadManager by lazy { downloadManager ?: getSystemService<DownloadManager>()!! }
private val clipboardManager by lazy {
clipboardManager ?: getSystemService<ClipboardManager>()!!
}
private val viewModel: LegacyViewModel by viewModels()
// Get a MemoryInfo object for the device's current memory status.
private fun availableMemory(): ActivityManager.MemoryInfo {
return ActivityManager.MemoryInfo().also { memoryInfo ->
activityManager.getMemoryInfo(memoryInfo)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
StrictMode.setVmPolicy(
VmPolicy.Builder(StrictMode.getVmPolicy())
.detectLeakedClosableObjects()
.build()
)
val free = Formatter.formatFileSize(this, availableMemory().availMem)
val total = Formatter.formatFileSize(this, availableMemory().totalMem)
viewModel.log("Current memory: $free / $total")
viewModel.log("Downloads directory: ${getExternalFilesDir(null)}")
val extFilesDir = getExternalFilesDir(null)
val models = listOf(
Downloadable(
"Phi-2 7B (Q4_0, 1.6 GiB)",
Uri.parse("https://huggingface.co/ggml-org/models/resolve/main/phi-2/ggml-model-q4_0.gguf?download=true"),
File(extFilesDir, "phi-2-q4_0.gguf"),
),
Downloadable(
"TinyLlama 1.1B (f16, 2.2 GiB)",
Uri.parse("https://huggingface.co/ggml-org/models/resolve/main/tinyllama-1.1b/ggml-model-f16.gguf?download=true"),
File(extFilesDir, "tinyllama-1.1-f16.gguf"),
),
Downloadable(
"Phi 2 DPO (Q3_K_M, 1.48 GiB)",
Uri.parse("https://huggingface.co/TheBloke/phi-2-dpo-GGUF/resolve/main/phi-2-dpo.Q3_K_M.gguf?download=true"),
File(extFilesDir, "phi-2-dpo.Q3_K_M.gguf")
),
Downloadable(
"Phi 4 mini instruct (Q4_0, 2.33 GiB)",
Uri.parse("https://huggingface.co/bartowski/microsoft_Phi-4-mini-instruct-GGUF/resolve/main/microsoft_Phi-4-mini-instruct-Q4_0.gguf?download=true"),
File(extFilesDir, "microsoft_Phi-4-mini-instruct-Q4_0.gguf")
),
)
setContent {
LlamaAndroidTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
MainCompose(
viewModel,
clipboardManager,
downloadManager,
models,
)
}
}
}
}
}
@Composable
fun MainCompose(
viewModel: LegacyViewModel,
clipboard: ClipboardManager,
dm: DownloadManager,
models: List<Downloadable>
) {
Column {
val scrollState = rememberLazyListState()
Box(modifier = Modifier.weight(1f)) {
LazyColumn(state = scrollState) {
items(viewModel.messages) {
Text(
it,
style = MaterialTheme.typography.bodyLarge.copy(color = LocalContentColor.current),
modifier = Modifier.padding(16.dp)
)
}
}
}
OutlinedTextField(
value = viewModel.message,
onValueChange = { viewModel.updateMessage(it) },
label = { Text("Message") },
)
Row {
Button({ viewModel.send() }) { Text("Send") }
Button({ viewModel.bench(8, 4, 1) }) { Text("Bench") }
Button({ viewModel.clear() }) { Text("Clear") }
Button({
viewModel.messages.joinToString("\n").let {
clipboard.setPrimaryClip(ClipData.newPlainText("", it))
}
}) { Text("Copy") }
Button({ viewModel.unload() }) { Text("Unload") }
}
models.forEach {
Downloadable.Button(viewModel, dm, it)
}
}
}

View File

@ -1,121 +0,0 @@
package com.example.llama.legacy
import android.content.Context
import android.llama.cpp.LLamaAndroid
import android.llama.cpp.LLamaLibraryLoader
import android.util.Log
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.launch
class LegacyViewModel(context: Context): ViewModel() {
companion object {
private val tag = LegacyViewModel::class.java.simpleName
@JvmStatic
private val NanosPerSecond = 1_000_000_000.0
}
val llamaAndroid: LLamaAndroid = LLamaLibraryLoader.createInstance(context)
?: throw InstantiationException("Cannot instantiate LlamaAndroid!")
var messages by mutableStateOf(listOf("Initializing..."))
private set
var message by mutableStateOf("")
private set
override fun onCleared() {
super.onCleared()
viewModelScope.launch {
try {
llamaAndroid.destroy()
} catch (exc: IllegalStateException) {
messages += exc.message!!
}
}
}
fun send() {
val text = message
message = ""
// Add to messages console.
messages += text
messages += ""
viewModelScope.launch {
// TODO-hyin: implement format message
llamaAndroid.sendUserPrompt(message = text)
.catch {
Log.e(tag, "send() failed", it)
messages += it.message!!
}
.collect { messages = messages.dropLast(1) + (messages.last() + it) }
}
}
fun bench(pp: Int, tg: Int, pl: Int, nr: Int = 1) {
viewModelScope.launch {
try {
val start = System.nanoTime()
val warmupResult = llamaAndroid.bench(pp, tg, pl, nr)
val end = System.nanoTime()
messages += warmupResult
val warmup = (end - start).toDouble() / NanosPerSecond
messages += "Warm up time: $warmup seconds, please wait..."
if (warmup > 5.0) {
messages += "Warm up took too long, aborting benchmark"
return@launch
}
messages += llamaAndroid.bench(512, 128, 1, 3)
} catch (exc: IllegalStateException) {
Log.e(tag, "bench() failed", exc)
messages += exc.message!!
}
}
}
fun load(pathToModel: String) {
viewModelScope.launch {
try {
llamaAndroid.loadModel(pathToModel)
messages += "Loaded $pathToModel"
} catch (exc: IllegalStateException) {
Log.e(tag, "load() failed", exc)
messages += exc.message!!
}
}
}
fun updateMessage(newMessage: String) {
message = newMessage
}
fun clear() {
messages = listOf()
}
fun log(message: String) {
messages += message
}
fun unload() =
viewModelScope.launch {
try {
llamaAndroid.unloadModel()
} catch (exc: IllegalStateException) {
Log.e(tag, "unload() failed", exc)
messages += exc.message!!
}
}
}

View File

@ -1,11 +0,0 @@
package com.example.llama.legacy.theme
import androidx.compose.ui.graphics.Color
val Purple80 = Color(0xFFD0BCFF)
val PurpleGrey80 = Color(0xFFCCC2DC)
val Pink80 = Color(0xFFEFB8C8)
val Purple40 = Color(0xFF6650a4)
val PurpleGrey40 = Color(0xFF625b71)
val Pink40 = Color(0xFF7D5260)

View File

@ -1,70 +0,0 @@
package com.example.llama.legacy.theme
import android.app.Activity
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
private val DarkColorScheme = darkColorScheme(
primary = Purple80,
secondary = PurpleGrey80,
tertiary = Pink80
)
private val LightColorScheme = lightColorScheme(
primary = Purple40,
secondary = PurpleGrey40,
tertiary = Pink40
/* Other default colors to override
background = Color(0xFFFFFBFE),
surface = Color(0xFFFFFBFE),
onPrimary = Color.White,
onSecondary = Color.White,
onTertiary = Color.White,
onBackground = Color(0xFF1C1B1F),
onSurface = Color(0xFF1C1B1F),
*/
)
@Composable
fun LlamaAndroidTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
// Dynamic color is available on Android 12+
dynamicColor: Boolean = true,
content: @Composable () -> Unit
) {
val colorScheme = when {
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val context = LocalContext.current
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
}
darkTheme -> DarkColorScheme
else -> LightColorScheme
}
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
window.statusBarColor = colorScheme.primary.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
}
}
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
content = content
)
}

View File

@ -1,34 +0,0 @@
package com.example.llama.legacy.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
// Set of Material typography styles to start with
val Typography = Typography(
bodyLarge = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 16.sp,
lineHeight = 24.sp,
letterSpacing = 0.5.sp
)
/* Other default text styles to override
titleLarge = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 22.sp,
lineHeight = 28.sp,
letterSpacing = 0.sp
),
labelSmall = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Medium,
fontSize = 11.sp,
lineHeight = 16.sp,
letterSpacing = 0.5.sp
)
*/
)

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.monitoring
package com.example.llama.monitoring
import android.app.ActivityManager
import android.content.Context

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.monitoring
package com.example.llama.monitoring
/**
* Data class containing battery information.

View File

@ -1,7 +1,7 @@
package com.example.llama.revamp.navigation
package com.example.llama.navigation
import androidx.navigation.NavController
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.engine.ModelLoadingMetrics
/**
* Navigation destinations for the app

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.components
package com.example.llama.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.components
package com.example.llama.ui.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically
@ -39,8 +39,8 @@ import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.util.languageCodeToFlagEmoji
import com.example.llama.data.model.ModelInfo
import com.example.llama.util.languageCodeToFlagEmoji
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.components
package com.example.llama.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -17,7 +17,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.viewmodel.UnloadModelState
import com.example.llama.viewmodel.UnloadModelState
/**
* Reusable component for handling model unloading dialogs

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold
package com.example.llama.ui.scaffold
import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.core.LinearOutSlowInEasing

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold
package com.example.llama.ui.scaffold
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material3.Scaffold
@ -7,16 +7,16 @@ import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import com.example.llama.revamp.ui.scaffold.bottombar.BenchmarkBottomBar
import com.example.llama.revamp.ui.scaffold.bottombar.BottomBarConfig
import com.example.llama.revamp.ui.scaffold.bottombar.ConversationBottomBar
import com.example.llama.revamp.ui.scaffold.bottombar.ModelSelectionBottomBar
import com.example.llama.revamp.ui.scaffold.bottombar.ModelsManagementBottomBar
import com.example.llama.revamp.ui.scaffold.topbar.DefaultTopBar
import com.example.llama.revamp.ui.scaffold.topbar.NavigationIcon
import com.example.llama.revamp.ui.scaffold.topbar.PerformanceTopBar
import com.example.llama.revamp.ui.scaffold.topbar.StorageTopBar
import com.example.llama.revamp.ui.scaffold.topbar.TopBarConfig
import com.example.llama.ui.scaffold.bottombar.BenchmarkBottomBar
import com.example.llama.ui.scaffold.bottombar.BottomBarConfig
import com.example.llama.ui.scaffold.bottombar.ConversationBottomBar
import com.example.llama.ui.scaffold.bottombar.ModelSelectionBottomBar
import com.example.llama.ui.scaffold.bottombar.ModelsManagementBottomBar
import com.example.llama.ui.scaffold.topbar.DefaultTopBar
import com.example.llama.ui.scaffold.topbar.NavigationIcon
import com.example.llama.ui.scaffold.topbar.PerformanceTopBar
import com.example.llama.ui.scaffold.topbar.StorageTopBar
import com.example.llama.ui.scaffold.topbar.TopBarConfig
/**
* Configuration of both [TopBarConfig] and [BottomBarConfig]

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold
package com.example.llama.ui.scaffold
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.clickable
@ -32,9 +32,9 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.APP_NAME
import com.example.llama.revamp.navigation.AppDestinations
import com.example.llama.revamp.navigation.NavigationActions
import com.example.llama.APP_NAME
import com.example.llama.navigation.AppDestinations
import com.example.llama.navigation.NavigationActions
import kotlinx.coroutines.launch
/**

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.bottombar
package com.example.llama.ui.scaffold.bottombar
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn

View File

@ -1,9 +1,9 @@
package com.example.llama.revamp.ui.scaffold.bottombar
package com.example.llama.ui.scaffold.bottombar
import androidx.compose.foundation.text.input.TextFieldState
import com.example.llama.revamp.data.model.ModelFilter
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.data.model.ModelSortOrder
import com.example.llama.data.model.ModelFilter
import com.example.llama.data.model.ModelInfo
import com.example.llama.data.model.ModelSortOrder
/**
* [BottomAppBar] configurations

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.bottombar
package com.example.llama.ui.scaffold.bottombar
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@ -32,7 +32,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.APP_NAME
import com.example.llama.APP_NAME
@Composable
fun ConversationBottomBar(

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.bottombar
package com.example.llama.ui.scaffold.bottombar
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
@ -30,7 +30,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.data.model.ModelSortOrder
import com.example.llama.data.model.ModelSortOrder
@Composable
fun ModelSelectionBottomBar(

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.bottombar
package com.example.llama.ui.scaffold.bottombar
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@ -31,7 +31,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.example.llama.R
import com.example.llama.revamp.data.model.ModelSortOrder
import com.example.llama.data.model.ModelSortOrder
@Composable
fun ModelsManagementBottomBar(

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.topbar
package com.example.llama.ui.scaffold.topbar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.topbar
package com.example.llama.ui.scaffold.topbar
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@ -21,9 +21,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.monitoring.MemoryMetrics
import com.example.llama.revamp.monitoring.TemperatureMetrics
import com.example.llama.revamp.monitoring.TemperatureWarningLevel
import com.example.llama.monitoring.MemoryMetrics
import com.example.llama.monitoring.TemperatureMetrics
import com.example.llama.monitoring.TemperatureWarningLevel
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.scaffold.topbar
package com.example.llama.ui.scaffold.topbar
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@ -18,7 +18,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.monitoring.StorageMetrics
import com.example.llama.monitoring.StorageMetrics
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)

View File

@ -1,8 +1,8 @@
package com.example.llama.revamp.ui.scaffold.topbar
package com.example.llama.ui.scaffold.topbar
import com.example.llama.revamp.monitoring.MemoryMetrics
import com.example.llama.revamp.monitoring.StorageMetrics
import com.example.llama.revamp.monitoring.TemperatureMetrics
import com.example.llama.monitoring.MemoryMetrics
import com.example.llama.monitoring.StorageMetrics
import com.example.llama.monitoring.TemperatureMetrics
/**
* [TopAppBar] configurations

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import android.llama.cpp.InferenceEngine.State
import androidx.activity.compose.BackHandler
@ -34,16 +34,16 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.revamp.ui.components.ModelCardContentArchitectureRow
import com.example.llama.revamp.ui.components.ModelCardContentContextRow
import com.example.llama.revamp.ui.components.ModelCardContentField
import com.example.llama.revamp.ui.components.ModelCardCoreExpandable
import com.example.llama.revamp.ui.components.ModelUnloadDialogHandler
import com.example.llama.revamp.ui.theme.MonospacedTextStyle
import com.example.llama.revamp.util.formatMilliSeconds
import com.example.llama.revamp.viewmodel.BenchmarkViewModel
import com.example.llama.data.model.ModelInfo
import com.example.llama.engine.ModelLoadingMetrics
import com.example.llama.ui.components.ModelCardContentArchitectureRow
import com.example.llama.ui.components.ModelCardContentContextRow
import com.example.llama.ui.components.ModelCardContentField
import com.example.llama.ui.components.ModelCardCoreExpandable
import com.example.llama.ui.components.ModelUnloadDialogHandler
import com.example.llama.ui.theme.MonospacedTextStyle
import com.example.llama.util.formatMilliSeconds
import com.example.llama.viewmodel.BenchmarkViewModel
@Composable
fun BenchmarkScreen(

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import android.llama.cpp.InferenceEngine.State
import androidx.activity.compose.BackHandler
@ -51,16 +51,16 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.revamp.ui.components.ModelCardContentArchitectureRow
import com.example.llama.revamp.ui.components.ModelCardContentContextRow
import com.example.llama.revamp.ui.components.ModelCardContentField
import com.example.llama.revamp.ui.components.ModelCardCoreExpandable
import com.example.llama.revamp.ui.components.ModelUnloadDialogHandler
import com.example.llama.revamp.util.formatMilliSeconds
import com.example.llama.revamp.viewmodel.ConversationViewModel
import com.example.llama.revamp.viewmodel.Message
import com.example.llama.data.model.ModelInfo
import com.example.llama.engine.ModelLoadingMetrics
import com.example.llama.ui.components.ModelCardContentArchitectureRow
import com.example.llama.ui.components.ModelCardContentContextRow
import com.example.llama.ui.components.ModelCardContentField
import com.example.llama.ui.components.ModelCardCoreExpandable
import com.example.llama.ui.components.ModelUnloadDialogHandler
import com.example.llama.util.formatMilliSeconds
import com.example.llama.viewmodel.ConversationViewModel
import com.example.llama.viewmodel.Message
import kotlinx.coroutines.launch
/**

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -21,11 +21,11 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.ui.components.ModelCardContentArchitectureRow
import com.example.llama.revamp.ui.components.ModelCardContentContextRow
import com.example.llama.revamp.ui.components.ModelCardContentTitleRow
import com.example.llama.revamp.util.FileType
import com.example.llama.data.model.ModelInfo
import com.example.llama.ui.components.ModelCardContentArchitectureRow
import com.example.llama.ui.components.ModelCardContentContextRow
import com.example.llama.ui.components.ModelCardContentTitleRow
import com.example.llama.util.FileType
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import android.llama.cpp.InferenceEngine.State
import androidx.activity.compose.BackHandler
@ -48,12 +48,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.data.model.SystemPrompt
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.revamp.ui.components.ModelCardCoreExpandable
import com.example.llama.revamp.ui.components.ModelUnloadDialogHandler
import com.example.llama.revamp.ui.scaffold.ScaffoldEvent
import com.example.llama.revamp.viewmodel.ModelLoadingViewModel
import com.example.llama.data.model.SystemPrompt
import com.example.llama.engine.ModelLoadingMetrics
import com.example.llama.ui.components.ModelCardCoreExpandable
import com.example.llama.ui.components.ModelUnloadDialogHandler
import com.example.llama.ui.scaffold.ScaffoldEvent
import com.example.llama.viewmodel.ModelLoadingViewModel
enum class Mode {

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Arrangement
@ -40,10 +40,10 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.ui.components.InfoAction
import com.example.llama.revamp.ui.components.InfoView
import com.example.llama.revamp.ui.components.ModelCardFullExpandable
import com.example.llama.revamp.viewmodel.ModelSelectionViewModel
import com.example.llama.ui.components.InfoAction
import com.example.llama.ui.components.InfoView
import com.example.llama.ui.components.ModelCardFullExpandable
import com.example.llama.viewmodel.ModelSelectionViewModel
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Arrangement
@ -38,15 +38,15 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.DialogProperties
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.ui.components.InfoView
import com.example.llama.revamp.ui.components.ModelCardFullExpandable
import com.example.llama.revamp.ui.scaffold.ScaffoldEvent
import com.example.llama.revamp.util.formatFileByteSize
import com.example.llama.revamp.viewmodel.ModelManagementState
import com.example.llama.revamp.viewmodel.ModelManagementState.Deletion
import com.example.llama.revamp.viewmodel.ModelManagementState.Importation
import com.example.llama.revamp.viewmodel.ModelsManagementViewModel
import com.example.llama.data.model.ModelInfo
import com.example.llama.ui.components.InfoView
import com.example.llama.ui.components.ModelCardFullExpandable
import com.example.llama.ui.scaffold.ScaffoldEvent
import com.example.llama.util.formatFileByteSize
import com.example.llama.viewmodel.ModelManagementState
import com.example.llama.viewmodel.ModelManagementState.Deletion
import com.example.llama.viewmodel.ModelManagementState.Importation
import com.example.llama.viewmodel.ModelsManagementViewModel
/**
* Screen for managing LLM models (view, download, delete)

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.screens
package com.example.llama.ui.screens
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@ -23,9 +23,9 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.llama.revamp.APP_NAME
import com.example.llama.revamp.data.preferences.UserPreferences
import com.example.llama.revamp.viewmodel.SettingsViewModel
import com.example.llama.APP_NAME
import com.example.llama.data.preferences.UserPreferences
import com.example.llama.viewmodel.SettingsViewModel
/**
* Screen for general app settings

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.theme
package com.example.llama.ui.theme
import androidx.compose.ui.graphics.Color

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.theme
package com.example.llama.ui.theme
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Shapes

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.theme
package com.example.llama.ui.theme
import android.app.Activity
import androidx.compose.foundation.isSystemInDarkTheme
@ -13,7 +13,7 @@ import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
import com.example.llama.revamp.data.preferences.UserPreferences
import com.example.llama.data.preferences.UserPreferences
import com.google.accompanist.systemuicontroller.rememberSystemUiController
// TODO-han.yin: support more / custom color palettes?

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.ui.theme
package com.example.llama.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.util
package com.example.llama.util
import android.content.Context
import android.net.Uri

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.util
package com.example.llama.util
import java.util.Locale

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.util
package com.example.llama.util
import kotlinx.serialization.Serializable
import java.io.IOException

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.util
package com.example.llama.util
import java.io.File
import java.io.InputStream

View File

@ -1,9 +1,9 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import android.llama.cpp.isUninterruptible
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.engine.BenchmarkService
import com.example.llama.data.model.ModelInfo
import com.example.llama.engine.BenchmarkService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow

View File

@ -1,11 +1,11 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.clearText
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.engine.ConversationService
import com.example.llama.revamp.engine.GenerationUpdate
import com.example.llama.revamp.engine.TokenMetrics
import com.example.llama.engine.ConversationService
import com.example.llama.engine.GenerationUpdate
import com.example.llama.engine.TokenMetrics
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Job

View File

@ -1,7 +1,7 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import androidx.lifecycle.ViewModel
import com.example.llama.revamp.engine.InferenceService
import com.example.llama.engine.InferenceService
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

View File

@ -1,11 +1,11 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.data.model.SystemPrompt
import com.example.llama.revamp.data.repository.ModelRepository
import com.example.llama.revamp.data.repository.SystemPromptRepository
import com.example.llama.revamp.engine.ModelLoadingMetrics
import com.example.llama.revamp.engine.ModelLoadingService
import com.example.llama.data.model.SystemPrompt
import com.example.llama.data.repository.ModelRepository
import com.example.llama.data.repository.SystemPromptRepository
import com.example.llama.engine.ModelLoadingMetrics
import com.example.llama.engine.ModelLoadingService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow

View File

@ -1,18 +1,18 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.clearText
import androidx.compose.runtime.snapshotFlow
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.data.model.ModelFilter
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.data.model.ModelSortOrder
import com.example.llama.revamp.data.model.filterBy
import com.example.llama.revamp.data.model.queryBy
import com.example.llama.revamp.data.model.sortByOrder
import com.example.llama.revamp.data.repository.ModelRepository
import com.example.llama.revamp.engine.InferenceService
import com.example.llama.data.model.ModelFilter
import com.example.llama.data.model.ModelInfo
import com.example.llama.data.model.ModelSortOrder
import com.example.llama.data.model.filterBy
import com.example.llama.data.model.queryBy
import com.example.llama.data.model.sortByOrder
import com.example.llama.data.repository.ModelRepository
import com.example.llama.engine.InferenceService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.MutableStateFlow

View File

@ -1,4 +1,4 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import android.llama.cpp.InferenceEngine
import android.llama.cpp.InferenceEngine.State
@ -6,7 +6,7 @@ import android.llama.cpp.isModelLoaded
import android.llama.cpp.isUninterruptible
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.engine.InferenceService
import com.example.llama.engine.InferenceService
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

View File

@ -1,22 +1,22 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import android.content.Context
import android.net.Uri
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.data.model.ModelFilter
import com.example.llama.revamp.data.model.ModelInfo
import com.example.llama.revamp.data.model.ModelSortOrder
import com.example.llama.revamp.data.model.filterBy
import com.example.llama.revamp.data.model.sortByOrder
import com.example.llama.revamp.data.remote.HuggingFaceModel
import com.example.llama.revamp.data.repository.InsufficientStorageException
import com.example.llama.revamp.data.repository.ModelRepository
import com.example.llama.revamp.util.getFileNameFromUri
import com.example.llama.revamp.util.getFileSizeFromUri
import com.example.llama.revamp.viewmodel.ModelManagementState.Deletion
import com.example.llama.revamp.viewmodel.ModelManagementState.Importation
import com.example.llama.data.model.ModelFilter
import com.example.llama.data.model.ModelInfo
import com.example.llama.data.model.ModelSortOrder
import com.example.llama.data.model.filterBy
import com.example.llama.data.model.sortByOrder
import com.example.llama.data.remote.HuggingFaceModel
import com.example.llama.data.repository.InsufficientStorageException
import com.example.llama.data.repository.ModelRepository
import com.example.llama.util.getFileNameFromUri
import com.example.llama.util.getFileSizeFromUri
import com.example.llama.viewmodel.ModelManagementState.Deletion
import com.example.llama.viewmodel.ModelManagementState.Importation
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.delay

View File

@ -1,15 +1,15 @@
package com.example.llama.revamp.viewmodel
package com.example.llama.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.llama.revamp.data.preferences.UserPreferences
import com.example.llama.revamp.data.repository.ModelRepository
import com.example.llama.revamp.monitoring.BatteryMetrics
import com.example.llama.revamp.monitoring.MemoryMetrics
import com.example.llama.revamp.monitoring.PerformanceMonitor
import com.example.llama.revamp.monitoring.StorageMetrics
import com.example.llama.revamp.monitoring.TemperatureMetrics
import com.example.llama.revamp.monitoring.TemperatureWarningLevel
import com.example.llama.data.preferences.UserPreferences
import com.example.llama.data.repository.ModelRepository
import com.example.llama.monitoring.BatteryMetrics
import com.example.llama.monitoring.MemoryMetrics
import com.example.llama.monitoring.PerformanceMonitor
import com.example.llama.monitoring.StorageMetrics
import com.example.llama.monitoring.TemperatureMetrics
import com.example.llama.monitoring.TemperatureWarningLevel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow