From 136819f6b2a221aa8bfe0c37007f4ec818730124 Mon Sep 17 00:00:00 2001 From: ThalesBezerra21 Date: Wed, 19 Jun 2024 15:44:05 -0300 Subject: [PATCH] =?UTF-8?q?Tela=20de=20download=20de=20modelos=20para=20te?= =?UTF-8?q?ste=20padr=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/ai/mlc/mlcchat/HomeView.kt | 34 ++++++ .../src/main/java/ai/mlc/mlcchat/NavView.kt | 5 +- .../mlcchat/utils/benchmark/DownloadView.kt | 100 ++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 android/MLCChat/app/src/main/java/ai/mlc/mlcchat/HomeView.kt create mode 100644 android/MLCChat/app/src/main/java/ai/mlc/mlcchat/utils/benchmark/DownloadView.kt diff --git a/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/HomeView.kt b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/HomeView.kt new file mode 100644 index 00000000..216ae78b --- /dev/null +++ b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/HomeView.kt @@ -0,0 +1,34 @@ +package ai.mlc.mlcchat + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController + +@Composable +fun HomeView(navController: NavController) { + + Column ( + modifier = Modifier + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ){ + Column( + verticalArrangement = Arrangement.spacedBy(15.dp), + ) { + Button(onClick = { navController.navigate("download") }) { + Text(text = "Iniciar testes") + } + Button(onClick = { navController.navigate("home") }) { + Text(text = "Conversar com LLM") + } + } + } +} \ No newline at end of file diff --git a/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/NavView.kt b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/NavView.kt index 33e4d1d0..5c2137e7 100644 --- a/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/NavView.kt +++ b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/NavView.kt @@ -1,5 +1,6 @@ package ai.mlc.mlcchat +import ai.mlc.mlcchat.utils.benchmark.DownloadView import ai.mlc.mlcchat.utils.benchmark.ResultViewModel import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable @@ -12,7 +13,9 @@ import androidx.navigation.compose.rememberNavController @Composable fun NavView(appViewModel: AppViewModel = viewModel(), resultViewModel: ResultViewModel = viewModel()) { val navController = rememberNavController() - NavHost(navController = navController, startDestination = "home") { + NavHost(navController = navController, startDestination = "main") { + composable("main") { HomeView(navController) } + composable("download") { DownloadView(navController, appViewModel)} composable("home") { StartView(navController, appViewModel) } composable("chat") { ChatView(navController, appViewModel.chatState, resultViewModel) } composable("result") { ResultView(navController, resultViewModel) } diff --git a/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/utils/benchmark/DownloadView.kt b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/utils/benchmark/DownloadView.kt new file mode 100644 index 00000000..b112a23f --- /dev/null +++ b/android/MLCChat/app/src/main/java/ai/mlc/mlcchat/utils/benchmark/DownloadView.kt @@ -0,0 +1,100 @@ +package ai.mlc.mlcchat.utils.benchmark + +import ai.mlc.mlcchat.AppViewModel +import ai.mlc.mlcchat.ModelInitState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import kotlinx.coroutines.delay + +val modelsLabel = listOf( + "Qwen2-1.5B-Instruct-q4f16_1-MLC", + "gemma-2b-q4f16_1-MLC" +) + +@Composable +fun DownloadView( + navController: NavController, + appViewModel: AppViewModel +) { + + var modelsList by remember { + mutableStateOf( + appViewModel.modelList.filter{ modelsLabel.contains(it.modelConfig.modelId) } + ) + } + + val numModels = remember { + modelsList.size + } + + var finished by remember { mutableStateOf(false) } + + LaunchedEffect(Unit) { + while(modelsList.isNotEmpty()){ + delay(100) + + val modelState = modelsList[0] + + if(modelState.modelInitState.value == ModelInitState.Finished){ + modelsList = modelsList.subList(1, modelsList.size) + continue + } + + if(modelState.modelInitState.value !== ModelInitState.Downloading){ + modelState.handleStart() + } + } + finished = true + } + + Column ( + modifier = Modifier + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ){ + if(modelsList.isNotEmpty()){ + + val modelState = modelsList[0] + + Text( + modifier = Modifier + .padding(0.dp, 15.dp), + text = "Downloading model ${numModels-modelsList.size+1} of $numModels" + ) + + Column ( + modifier = Modifier + .fillMaxWidth(0.8F), + verticalArrangement = Arrangement.spacedBy(15.dp) + ){ + Text(text = modelState.modelConfig.modelId) + LinearProgressIndicator( + progress = modelState.progress.value.toFloat() / modelState.total.value, + modifier = Modifier.fillMaxWidth() + ) + } + + } + if(finished){ + Text(text = "Finished downloading all models!") + } + } + + +} \ No newline at end of file