@@ -181,7 +181,7 @@ fun MenuScreen(
181181 showDownloadDialog = true
182182 } else {
183183 selectedModel = modelOption
184- GenerativeAiViewModelFactory .setModel(modelOption)
184+ GenerativeAiViewModelFactory .setModel(modelOption, context )
185185
186186 // Task 15: Initialize offline model upon selection
187187 val mainActivity = context as ? MainActivity
@@ -190,7 +190,7 @@ fun MenuScreen(
190190 } else if (modelOption == ModelOption .HUMAN_EXPERT ) {
191191 if (isPurchased) {
192192 selectedModel = modelOption
193- GenerativeAiViewModelFactory .setModel(modelOption)
193+ GenerativeAiViewModelFactory .setModel(modelOption, context )
194194 if (wasOfflineModel) {
195195 // Task 19: Close offline model to free RAM
196196 val mainActivity = context as ? MainActivity
@@ -201,7 +201,7 @@ fun MenuScreen(
201201 }
202202 } else {
203203 selectedModel = modelOption
204- GenerativeAiViewModelFactory .setModel(modelOption)
204+ GenerativeAiViewModelFactory .setModel(modelOption, context )
205205 if (wasOfflineModel) {
206206 // Task 19: Close offline model to free RAM
207207 val mainActivity = context as ? MainActivity
@@ -261,10 +261,9 @@ fun MenuScreen(
261261 onClick = {
262262 GenerativeAiViewModelFactory .setBackend(InferenceBackend .GPU , context)
263263 currentBackend.value = InferenceBackend .GPU
264- // Re-initialize model with new backend
265264 val mainActivity = context as ? MainActivity
266- mainActivity?.getPhotoReasoningViewModel()?.reinitializeOfflineModel(context )
267- Toast .makeText(context, " GPU selected – Model loaded into RAM and processed on GPU " , Toast .LENGTH_SHORT ).show()
265+ mainActivity?.getPhotoReasoningViewModel()?.closeOfflineModel( )
266+ Toast .makeText(context, " GPU selected – Model stopped. Will load on next generation " , Toast .LENGTH_SHORT ).show()
268267 },
269268 modifier = Modifier .weight(1f ),
270269 colors = if (currentBackend.value == InferenceBackend .GPU )
@@ -280,12 +279,9 @@ fun MenuScreen(
280279 onClick = {
281280 GenerativeAiViewModelFactory .setBackend(InferenceBackend .CPU , context)
282281 currentBackend.value = InferenceBackend .CPU
283- // Re-initialize model with new backend
284282 val mainActivity = context as ? MainActivity
285- // Explicitly kill the model from GPU to free RAM before reloading
286283 mainActivity?.getPhotoReasoningViewModel()?.closeOfflineModel()
287- mainActivity?.getPhotoReasoningViewModel()?.reinitializeOfflineModel(context)
288- Toast .makeText(context, " CPU selected – Model reloading" , Toast .LENGTH_SHORT ).show()
284+ Toast .makeText(context, " CPU selected – Model stopped. Will load on next generation" , Toast .LENGTH_SHORT ).show()
289285 },
290286 modifier = Modifier .weight(1f ),
291287 colors = if (currentBackend.value == InferenceBackend .CPU )
@@ -322,6 +318,9 @@ fun MenuScreen(
322318 )
323319 )
324320 }
321+ var tempSlider by remember(selectedModel) { mutableStateOf(genSettings.value.temperature) }
322+ var topPSlider by remember(selectedModel) { mutableStateOf(genSettings.value.topP) }
323+ var topKSlider by remember(selectedModel) { mutableStateOf(genSettings.value.topK.toFloat()) }
325324
326325 Card (
327326 modifier = Modifier
@@ -342,15 +341,16 @@ fun MenuScreen(
342341
343342 // Temperature Slider (0.0 - 2.0)
344343 Text (
345- text = " Temperature: ${" %.2f" .format(genSettings.value.temperature )} " ,
344+ text = " Temperature: ${" %.2f" .format(tempSlider )} " ,
346345 style = MaterialTheme .typography.bodyMedium
347346 )
348347 androidx.compose.material3.Slider (
349- value = genSettings.value.temperature ,
348+ value = tempSlider ,
350349 onValueChange = { newVal ->
351- genSettings.value = genSettings.value.copy(temperature = newVal)
350+ tempSlider = newVal
352351 },
353352 onValueChangeFinished = {
353+ genSettings.value = genSettings.value.copy(temperature = tempSlider)
354354 com.google.ai.sample.util.GenerationSettingsPreferences .saveSettings(
355355 context, selectedModel.modelName, genSettings.value
356356 )
@@ -364,15 +364,16 @@ fun MenuScreen(
364364
365365 // TopP Slider (0.0 - 1.0)
366366 Text (
367- text = " Top P: ${" %.2f" .format(genSettings.value.topP )} " ,
367+ text = " Top P: ${" %.2f" .format(topPSlider )} " ,
368368 style = MaterialTheme .typography.bodyMedium
369369 )
370370 androidx.compose.material3.Slider (
371- value = genSettings.value.topP ,
371+ value = topPSlider ,
372372 onValueChange = { newVal ->
373- genSettings.value = genSettings.value.copy(topP = newVal)
373+ topPSlider = newVal
374374 },
375375 onValueChangeFinished = {
376+ genSettings.value = genSettings.value.copy(topP = topPSlider)
376377 com.google.ai.sample.util.GenerationSettingsPreferences .saveSettings(
377378 context, selectedModel.modelName, genSettings.value
378379 )
@@ -386,15 +387,16 @@ fun MenuScreen(
386387
387388 // TopK Slider (0 - 100)
388389 Text (
389- text = " Top K: ${genSettings.value.topK } " ,
390+ text = " Top K: ${Math .round(topKSlider) } " ,
390391 style = MaterialTheme .typography.bodyMedium
391392 )
392393 androidx.compose.material3.Slider (
393- value = genSettings.value.topK.toFloat() ,
394+ value = topKSlider ,
394395 onValueChange = { newVal ->
395- genSettings.value = genSettings.value.copy(topK = Math .round( newVal))
396+ topKSlider = newVal
396397 },
397398 onValueChangeFinished = {
399+ genSettings.value = genSettings.value.copy(topK = Math .round(topKSlider))
398400 com.google.ai.sample.util.GenerationSettingsPreferences .saveSettings(
399401 context, selectedModel.modelName, genSettings.value
400402 )
@@ -725,7 +727,7 @@ fun MenuScreen(
725727 // Set model only after download is completed (Point 17)
726728 downloadDialogModel?.let {
727729 selectedModel = it
728- GenerativeAiViewModelFactory .setModel(it)
730+ GenerativeAiViewModelFactory .setModel(it, context )
729731 }
730732 showDownloadDialog = false
731733 }) { Text (" Close" ) }
0 commit comments