Skip to content

Commit c027b8f

Browse files
committed
fix: skip network requests for inactive server sources
- GetStableDiffusionModelsUseCaseImpl: only fetch when A1111 is active - FetchAndGetSwarmUiModelsUseCaseImpl: only fetch when SwarmUI is active - FetchAndGetHuggingFaceModelsUseCaseImpl: only fetch when HuggingFace is active - FetchAndGetStabilityAiEnginesUseCaseImpl: only fetch when StabilityAI is active This prevents unnecessary network requests to servers that are not currently configured as the active generation source.
1 parent d777d34 commit c027b8f

7 files changed

Lines changed: 93 additions & 18 deletions

File tree

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
package com.shifthackz.aisdv1.domain.usecase.huggingface
22

3+
import com.shifthackz.aisdv1.domain.entity.HuggingFaceModel
4+
import com.shifthackz.aisdv1.domain.entity.ServerSource
5+
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
36
import com.shifthackz.aisdv1.domain.repository.HuggingFaceModelsRepository
7+
import io.reactivex.rxjava3.core.Single
48

59
internal class FetchAndGetHuggingFaceModelsUseCaseImpl(
10+
private val preferenceManager: PreferenceManager,
611
private val huggingFaceModelsRepository: HuggingFaceModelsRepository,
712
) : FetchAndGetHuggingFaceModelsUseCase {
813

9-
override fun invoke() = huggingFaceModelsRepository.fetchAndGetHuggingFaceModels()
14+
override fun invoke(): Single<List<HuggingFaceModel>> {
15+
if (preferenceManager.source != ServerSource.HUGGING_FACE) {
16+
return Single.just(emptyList())
17+
}
18+
return huggingFaceModelsRepository.fetchAndGetHuggingFaceModels()
19+
}
1020
}

domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/sdmodel/GetStableDiffusionModelsUseCaseImpl.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package com.shifthackz.aisdv1.domain.usecase.sdmodel
22

3+
import com.shifthackz.aisdv1.domain.entity.ServerSource
34
import com.shifthackz.aisdv1.domain.entity.StableDiffusionModel
5+
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
46
import com.shifthackz.aisdv1.domain.repository.ServerConfigurationRepository
57
import com.shifthackz.aisdv1.domain.repository.StableDiffusionModelsRepository
68
import io.reactivex.rxjava3.core.Single
79

810
internal class GetStableDiffusionModelsUseCaseImpl(
11+
private val preferenceManager: PreferenceManager,
912
private val serverConfigurationRepository: ServerConfigurationRepository,
1013
private val sdModelsRepository: StableDiffusionModelsRepository,
1114
) : GetStableDiffusionModelsUseCase {
1215

13-
override operator fun invoke(): Single<List<Pair<StableDiffusionModel, Boolean>>> =
14-
serverConfigurationRepository
16+
override operator fun invoke(): Single<List<Pair<StableDiffusionModel, Boolean>>> {
17+
// Only fetch models if A1111/Forge is the active source
18+
if (preferenceManager.source != ServerSource.AUTOMATIC1111) {
19+
return Single.just(emptyList())
20+
}
21+
return serverConfigurationRepository
1522
.fetchAndGetConfiguration()
1623
.flatMap { config ->
1724
sdModelsRepository
@@ -23,4 +30,5 @@ internal class GetStableDiffusionModelsUseCaseImpl(
2330
model to (config.sdModelCheckpoint == model.title)
2431
}
2532
}
33+
}
2634
}
Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.shifthackz.aisdv1.domain.usecase.stabilityai
22

3+
import com.shifthackz.aisdv1.domain.entity.ServerSource
34
import com.shifthackz.aisdv1.domain.entity.StabilityAiEngine
45
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
56
import com.shifthackz.aisdv1.domain.repository.StabilityAiEnginesRepository
@@ -10,12 +11,17 @@ internal class FetchAndGetStabilityAiEnginesUseCaseImpl(
1011
private val preferenceManager: PreferenceManager,
1112
) : FetchAndGetStabilityAiEnginesUseCase {
1213

13-
override fun invoke() = repository
14-
.fetchAndGet()
15-
.flatMap { engines ->
16-
if (!engines.map(StabilityAiEngine::id).contains(preferenceManager.stabilityAiEngineId)) {
17-
preferenceManager.stabilityAiEngineId = engines.firstOrNull()?.id ?: ""
18-
}
19-
Single.just(engines)
14+
override fun invoke(): Single<List<StabilityAiEngine>> {
15+
if (preferenceManager.source != ServerSource.STABILITY_AI) {
16+
return Single.just(emptyList())
2017
}
18+
return repository
19+
.fetchAndGet()
20+
.flatMap { engines ->
21+
if (!engines.map(StabilityAiEngine::id).contains(preferenceManager.stabilityAiEngineId)) {
22+
preferenceManager.stabilityAiEngineId = engines.firstOrNull()?.id ?: ""
23+
}
24+
Single.just(engines)
25+
}
26+
}
2127
}
Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.shifthackz.aisdv1.domain.usecase.swarmmodel
22

3+
import com.shifthackz.aisdv1.domain.entity.ServerSource
34
import com.shifthackz.aisdv1.domain.entity.SwarmUiModel
45
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
56
import com.shifthackz.aisdv1.domain.repository.SwarmUiModelsRepository
@@ -10,12 +11,17 @@ internal class FetchAndGetSwarmUiModelsUseCaseImpl(
1011
private val repository: SwarmUiModelsRepository,
1112
) : FetchAndGetSwarmUiModelsUseCase {
1213

13-
override fun invoke(): Single<List<SwarmUiModel>> = repository
14-
.fetchAndGetModels()
15-
.map { models ->
16-
if (!models.map(SwarmUiModel::name).contains(preferenceManager.swarmUiModel)) {
17-
preferenceManager.swarmUiModel = models.firstOrNull()?.name ?: ""
18-
}
19-
models
14+
override fun invoke(): Single<List<SwarmUiModel>> {
15+
if (preferenceManager.source != ServerSource.SWARM_UI) {
16+
return Single.just(emptyList())
2017
}
18+
return repository
19+
.fetchAndGetModels()
20+
.map { models ->
21+
if (!models.map(SwarmUiModel::name).contains(preferenceManager.swarmUiModel)) {
22+
preferenceManager.swarmUiModel = models.firstOrNull()?.name ?: ""
23+
}
24+
models
25+
}
26+
}
2127
}

domain/src/test/java/com/shifthackz/aisdv1/domain/usecase/huggingface/FetchAndGetHuggingFaceModelsUseCaseImplTest.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,29 @@ package com.shifthackz.aisdv1.domain.usecase.huggingface
22

33
import com.nhaarman.mockitokotlin2.mock
44
import com.nhaarman.mockitokotlin2.whenever
5+
import com.shifthackz.aisdv1.domain.entity.ServerSource
56
import com.shifthackz.aisdv1.domain.mocks.mockHuggingFaceModels
7+
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
68
import com.shifthackz.aisdv1.domain.repository.HuggingFaceModelsRepository
79
import io.reactivex.rxjava3.core.Single
10+
import org.junit.Before
811
import org.junit.Test
912

1013
class FetchAndGetHuggingFaceModelsUseCaseImplTest {
1114

15+
private val stubPreferenceManager = mock<PreferenceManager>()
1216
private val stubRepository = mock<HuggingFaceModelsRepository>()
1317

14-
private val useCase = FetchAndGetHuggingFaceModelsUseCaseImpl(stubRepository)
18+
private val useCase = FetchAndGetHuggingFaceModelsUseCaseImpl(
19+
preferenceManager = stubPreferenceManager,
20+
huggingFaceModelsRepository = stubRepository,
21+
)
22+
23+
@Before
24+
fun initialize() {
25+
whenever(stubPreferenceManager.source)
26+
.thenReturn(ServerSource.HUGGING_FACE)
27+
}
1528

1629
@Test
1730
fun `given repository provided models list, expected valid list value`() {

domain/src/test/java/com/shifthackz/aisdv1/domain/usecase/sdmodel/GetStableDiffusionModelsUseCaseImplTest.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,35 @@ package com.shifthackz.aisdv1.domain.usecase.sdmodel
33
import com.nhaarman.mockitokotlin2.mock
44
import com.nhaarman.mockitokotlin2.whenever
55
import com.shifthackz.aisdv1.domain.entity.ServerConfiguration
6+
import com.shifthackz.aisdv1.domain.entity.ServerSource
67
import com.shifthackz.aisdv1.domain.mocks.mockServerConfiguration
78
import com.shifthackz.aisdv1.domain.mocks.mockStableDiffusionModels
9+
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
810
import com.shifthackz.aisdv1.domain.repository.ServerConfigurationRepository
911
import com.shifthackz.aisdv1.domain.repository.StableDiffusionModelsRepository
1012
import io.reactivex.rxjava3.core.Single
1113
import org.junit.Assert
14+
import org.junit.Before
1215
import org.junit.Test
1316

1417
class GetStableDiffusionModelsUseCaseImplTest {
1518

19+
private val stubPreferenceManager = mock<PreferenceManager>()
1620
private val stubServerConfigurationRepository = mock<ServerConfigurationRepository>()
1721
private val stubSdModelsRepository = mock<StableDiffusionModelsRepository>()
1822

1923
private val useCase = GetStableDiffusionModelsUseCaseImpl(
24+
preferenceManager = stubPreferenceManager,
2025
serverConfigurationRepository = stubServerConfigurationRepository,
2126
sdModelsRepository = stubSdModelsRepository,
2227
)
2328

29+
@Before
30+
fun initialize() {
31+
whenever(stubPreferenceManager.source)
32+
.thenReturn(ServerSource.AUTOMATIC1111)
33+
}
34+
2435
@Test
2536
fun `given repository returns list with value present in configuration, expected list with selected value`() {
2637
whenever(stubServerConfigurationRepository.fetchAndGetConfiguration())
@@ -105,4 +116,17 @@ class GetStableDiffusionModelsUseCaseImplTest {
105116
.await()
106117
.assertNotComplete()
107118
}
119+
120+
@Test
121+
fun `given source is not AUTOMATIC1111, expected empty list without network requests`() {
122+
whenever(stubPreferenceManager.source)
123+
.thenReturn(ServerSource.FAL_AI)
124+
125+
useCase()
126+
.test()
127+
.assertNoErrors()
128+
.assertValue(emptyList())
129+
.await()
130+
.assertComplete()
131+
}
108132
}

domain/src/test/java/com/shifthackz/aisdv1/domain/usecase/stabilityai/FetchAndGetStabilityAiEnginesUseCaseImplTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package com.shifthackz.aisdv1.domain.usecase.stabilityai
22

33
import com.nhaarman.mockitokotlin2.mock
44
import com.nhaarman.mockitokotlin2.whenever
5+
import com.shifthackz.aisdv1.domain.entity.ServerSource
56
import com.shifthackz.aisdv1.domain.mocks.mockStabilityAiEngines
67
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
78
import com.shifthackz.aisdv1.domain.repository.StabilityAiEnginesRepository
89
import io.reactivex.rxjava3.core.Single
10+
import org.junit.Before
911
import org.junit.Test
1012

1113
class FetchAndGetStabilityAiEnginesUseCaseImplTest {
@@ -19,6 +21,12 @@ class FetchAndGetStabilityAiEnginesUseCaseImplTest {
1921
preferenceManager = stubPreferenceManager,
2022
)
2123

24+
@Before
25+
fun initialize() {
26+
whenever(stubPreferenceManager.source)
27+
.thenReturn(ServerSource.STABILITY_AI)
28+
}
29+
2230
@Test
2331
fun `given repository returned engines list, id present in preference, expected the same engines list, id not changed`() {
2432
whenever(stubRepository.fetchAndGet())

0 commit comments

Comments
 (0)