From 36c3768f5280bade1e6d6099f5dedb521399aa80 Mon Sep 17 00:00:00 2001 From: Han Yin Date: Tue, 2 Sep 2025 10:56:44 -0700 Subject: [PATCH] data: make sure fetch preselected models in the same order of their IDs --- .../remote/HuggingFaceRemoteDataSource.kt | 19 +++++++++---------- .../viewmodel/ModelsManagementViewModel.kt | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/llama.android/app/src/main/java/com/example/llama/data/source/remote/HuggingFaceRemoteDataSource.kt b/examples/llama.android/app/src/main/java/com/example/llama/data/source/remote/HuggingFaceRemoteDataSource.kt index 33953f830f..0352651ff6 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/data/source/remote/HuggingFaceRemoteDataSource.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/data/source/remote/HuggingFaceRemoteDataSource.kt @@ -86,25 +86,24 @@ class HuggingFaceRemoteDataSourceImpl @Inject constructor( parallelCount: Int, quorum: Float, ): List = withContext(Dispatchers.IO) { - val successes = mutableListOf() - val failures = mutableListOf() - val sem = Semaphore(parallelCount) - supervisorScope { + val results = supervisorScope { ids.map { id -> async { sem.withPermit { - runCatching { getModelDetails(id) } - .onSuccess { synchronized(successes) { successes += it } } - .onFailure { t -> - if (t is CancellationException) throw t - synchronized(failures) { failures += t } - } + try { + Result.success(getModelDetails(id)) + } catch (t: CancellationException) { + Result.failure(t) + } } } }.awaitAll() } + val successes = results.mapNotNull { it.getOrNull() } + val failures = results.mapNotNull { it.exceptionOrNull() } + val total = ids.size val failed = failures.size val ok = successes.size diff --git a/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/ModelsManagementViewModel.kt b/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/ModelsManagementViewModel.kt index 212d0f6cb8..ab1addbf4f 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/ModelsManagementViewModel.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/ModelsManagementViewModel.kt @@ -190,7 +190,7 @@ class ModelsManagementViewModel @Inject constructor( val models = modelRepository.fetchPreselectedHuggingFaceModels().map(HuggingFaceModelDetails::toModel) _managementState.emit(Download.Ready(models)) } catch (_: CancellationException) { - // no-op + resetManagementState() } catch (_: UnknownHostException) { _managementState.value = Download.Error(message = "No internet connection") } catch (_: SocketTimeoutException) {