Skip to content

Commit 19aa368

Browse files
authored
(A1111) Lora & HyperNet & Text Inversion implementation (#130)
* Lora & HyperNet implementation | Patch 1 * Text inversion implementation | Patch 1 * Text inversion implementation | Patch 2 * Design Patch * Finalization * Translations * Fix build * Fix states ui * Fix local storage dao/datasource cache issue * Update
1 parent 2fd76f1 commit 19aa368

File tree

93 files changed

+2572
-444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+2572
-444
lines changed

core/ui/src/main/java/com/shifthackz/aisdv1/core/extensions/ShimmerExtensions.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@ import androidx.compose.ui.unit.IntSize
2121

2222
fun Modifier.shimmer() = composed {
2323
var size by remember { mutableStateOf(IntSize.Zero) }
24-
val transition = rememberInfiniteTransition()
24+
val transition = rememberInfiniteTransition(label = "shimmer")
2525
val startOffsetX by transition.animateFloat(
2626
initialValue = -2 * size.width.toFloat(),
2727
targetValue = 2 * size.width.toFloat(),
28-
animationSpec = infiniteRepeatable(animation = tween(durationMillis = 1000))
28+
animationSpec = infiniteRepeatable(animation = tween(durationMillis = 1000)),
29+
label = "shimmer"
2930
)
30-
val colorBg = MaterialTheme.colorScheme.secondaryContainer
31-
.copy(alpha = 0.5f)
32-
.compositeOver(Color(0xFFCACACA))
33-
val colorEffect = MaterialTheme.colorScheme.secondary
31+
val colorBg = MaterialTheme.colorScheme.surfaceVariant
32+
.copy(alpha = 0.75f)
33+
.compositeOver(MaterialTheme.colorScheme.background)
34+
val colorEffect = MaterialTheme.colorScheme.surfaceTint
3435
background(
3536
brush = Brush.linearGradient(
3637
colors = listOf(

core/ui/src/main/java/com/shifthackz/aisdv1/core/viewmodel/MviViewModel.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package com.shifthackz.aisdv1.core.viewmodel
55
import android.util.Log
66
import androidx.lifecycle.ViewModel
77
import androidx.lifecycle.viewModelScope
8+
import com.shifthackz.aisdv1.core.common.log.debugLog
89
import com.shifthackz.aisdv1.core.ui.BuildConfig
910
import com.shifthackz.aisdv1.core.ui.MviEffect
1011
import com.shifthackz.aisdv1.core.ui.MviState
@@ -16,6 +17,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
1617
import kotlinx.coroutines.flow.StateFlow
1718
import kotlinx.coroutines.flow.asStateFlow
1819
import kotlinx.coroutines.flow.receiveAsFlow
20+
import kotlinx.coroutines.flow.update
1921
import kotlinx.coroutines.launch
2022

2123
abstract class MviViewModel<S : MviState, E : MviEffect> : ViewModel() {
@@ -35,13 +37,18 @@ abstract class MviViewModel<S : MviState, E : MviEffect> : ViewModel() {
3537

3638
abstract val emptyState: S
3739

38-
open fun setState(state: S) {
40+
fun setState(state: S) {
3941
if (BuildConfig.DEBUG) {
4042
Log.d(this::class.simpleName, "NEW STATE : $state")
4143
}
4244
mutableState.tryEmit(state)
4345
}
4446

47+
open fun updateState(mutation: (S) -> S) = mutableState.update {
48+
if (BuildConfig.DEBUG) debugLog("NEW STATE : $state")
49+
mutation(it)
50+
}
51+
4552
fun emitEffect(effect: E) {
4653
viewModelScope.launch(Dispatchers.Main.immediate + exceptionHandler) {
4754
effectChannel.send(effect)

core/validation/src/main/java/com/shifthackz/aisdv1/core/validation/dimension/DimensionValidator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ fun interface DimensionValidator {
77
operator fun invoke(input: String?): ValidationResult<Error>
88

99
sealed interface Error {
10-
object Empty : Error
11-
object Unexpected : Error
10+
data object Empty : Error
11+
data object Unexpected : Error
1212
data class LessThanMinimum(val min: Int) : Error
1313
data class BiggerThanMaximum(val max: Int) : Error
1414
}

core/validation/src/main/java/com/shifthackz/aisdv1/core/validation/horde/CommonStringValidator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ interface CommonStringValidator {
77
operator fun invoke(input: String?) : ValidationResult<Error>
88

99
sealed interface Error {
10-
object Empty : Error
10+
data object Empty : Error
1111
}
1212
}

core/validation/src/main/java/com/shifthackz/aisdv1/core/validation/url/UrlValidator.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ interface UrlValidator {
77
operator fun invoke(input: String?): ValidationResult<Error>
88

99
sealed interface Error {
10-
object Empty : Error
11-
object BadScheme : Error
12-
object Invalid : Error
13-
object Localhost : Error
10+
data object Empty : Error
11+
data object BadScheme : Error
12+
data object Invalid : Error
13+
data object Localhost : Error
1414
}
1515
}

data/src/main/java/com/shifthackz/aisdv1/data/di/LocalDataSourceModule.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,17 @@ import com.shifthackz.aisdv1.data.gateway.mediastore.MediaStoreGatewayFactory
55
import com.shifthackz.aisdv1.data.local.DownloadableModelLocalDataSource
66
import com.shifthackz.aisdv1.data.local.GenerationResultLocalDataSource
77
import com.shifthackz.aisdv1.data.local.ServerConfigurationLocalDataSource
8+
import com.shifthackz.aisdv1.data.local.StableDiffusionEmbeddingsLocalDataSource
9+
import com.shifthackz.aisdv1.data.local.StableDiffusionHyperNetworksLocalDataSource
10+
import com.shifthackz.aisdv1.data.local.StableDiffusionLorasLocalDataSource
811
import com.shifthackz.aisdv1.data.local.StableDiffusionModelsLocalDataSource
912
import com.shifthackz.aisdv1.data.local.StableDiffusionSamplersLocalDataSource
1013
import com.shifthackz.aisdv1.domain.datasource.DownloadableModelDataSource
1114
import com.shifthackz.aisdv1.domain.datasource.GenerationResultDataSource
1215
import com.shifthackz.aisdv1.domain.datasource.ServerConfigurationDataSource
16+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionEmbeddingsDataSource
17+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionHyperNetworksDataSource
18+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionLorasDataSource
1319
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionModelsDataSource
1420
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionSamplersDataSource
1521
import com.shifthackz.aisdv1.domain.gateway.DatabaseClearGateway
@@ -23,6 +29,9 @@ val localDataSourceModule = module {
2329
singleOf(::DatabaseClearGatewayImpl) bind DatabaseClearGateway::class
2430
factoryOf(::StableDiffusionModelsLocalDataSource) bind StableDiffusionModelsDataSource.Local::class
2531
factoryOf(::StableDiffusionSamplersLocalDataSource) bind StableDiffusionSamplersDataSource.Local::class
32+
factoryOf(::StableDiffusionLorasLocalDataSource) bind StableDiffusionLorasDataSource.Local::class
33+
factoryOf(::StableDiffusionHyperNetworksLocalDataSource) bind StableDiffusionHyperNetworksDataSource.Local::class
34+
factoryOf(::StableDiffusionEmbeddingsLocalDataSource) bind StableDiffusionEmbeddingsDataSource.Local::class
2635
factoryOf(::ServerConfigurationLocalDataSource) bind ServerConfigurationDataSource.Local::class
2736
factoryOf(::GenerationResultLocalDataSource) bind GenerationResultDataSource.Local::class
2837
factoryOf(::DownloadableModelLocalDataSource) bind DownloadableModelDataSource.Local::class

data/src/main/java/com/shifthackz/aisdv1/data/di/RemoteDataSourceModule.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,20 @@ import com.shifthackz.aisdv1.data.remote.HordeGenerationRemoteDataSource
88
import com.shifthackz.aisdv1.data.remote.HordeStatusSource
99
import com.shifthackz.aisdv1.data.remote.RandomImageRemoteDataSource
1010
import com.shifthackz.aisdv1.data.remote.ServerConfigurationRemoteDataSource
11+
import com.shifthackz.aisdv1.data.remote.StableDiffusionEmbeddingsRemoteDataSource
1112
import com.shifthackz.aisdv1.data.remote.StableDiffusionGenerationRemoteDataSource
13+
import com.shifthackz.aisdv1.data.remote.StableDiffusionHyperNetworksRemoteDataSource
14+
import com.shifthackz.aisdv1.data.remote.StableDiffusionLorasRemoteDataSource
1215
import com.shifthackz.aisdv1.data.remote.StableDiffusionModelsRemoteDataSource
1316
import com.shifthackz.aisdv1.data.remote.StableDiffusionSamplersRemoteDataSource
1417
import com.shifthackz.aisdv1.domain.datasource.DownloadableModelDataSource
1518
import com.shifthackz.aisdv1.domain.datasource.HordeGenerationDataSource
1619
import com.shifthackz.aisdv1.domain.datasource.RandomImageDataSource
1720
import com.shifthackz.aisdv1.domain.datasource.ServerConfigurationDataSource
21+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionEmbeddingsDataSource
1822
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionGenerationDataSource
23+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionHyperNetworksDataSource
24+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionLorasDataSource
1925
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionModelsDataSource
2026
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionSamplersDataSource
2127
import com.shifthackz.aisdv1.domain.entity.ServerSource
@@ -44,6 +50,9 @@ val remoteDataSourceModule = module {
4450
factoryOf(::StableDiffusionGenerationRemoteDataSource) bind StableDiffusionGenerationDataSource.Remote::class
4551
factoryOf(::StableDiffusionSamplersRemoteDataSource) bind StableDiffusionSamplersDataSource.Remote::class
4652
factoryOf(::StableDiffusionModelsRemoteDataSource) bind StableDiffusionModelsDataSource.Remote::class
53+
factoryOf(::StableDiffusionLorasRemoteDataSource) bind StableDiffusionLorasDataSource.Remote::class
54+
factoryOf(::StableDiffusionHyperNetworksRemoteDataSource) bind StableDiffusionHyperNetworksDataSource.Remote::class
55+
factoryOf(::StableDiffusionEmbeddingsRemoteDataSource) bind StableDiffusionEmbeddingsDataSource.Remote::class
4756
factoryOf(::ServerConfigurationRemoteDataSource) bind ServerConfigurationDataSource.Remote::class
4857
factoryOf(::RandomImageRemoteDataSource) bind RandomImageDataSource.Remote::class
4958
factoryOf(::DownloadableModelRemoteDataSource) bind DownloadableModelDataSource.Remote::class

data/src/main/java/com/shifthackz/aisdv1/data/di/RepositoryModule.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import com.shifthackz.aisdv1.data.repository.HordeGenerationRepositoryImpl
88
import com.shifthackz.aisdv1.data.repository.LocalDiffusionGenerationRepositoryImpl
99
import com.shifthackz.aisdv1.data.repository.RandomImageRepositoryImpl
1010
import com.shifthackz.aisdv1.data.repository.ServerConfigurationRepositoryImpl
11+
import com.shifthackz.aisdv1.data.repository.StableDiffusionEmbeddingsRepositoryImpl
1112
import com.shifthackz.aisdv1.data.repository.StableDiffusionGenerationRepositoryImpl
13+
import com.shifthackz.aisdv1.data.repository.StableDiffusionHyperNetworksRepositoryImpl
14+
import com.shifthackz.aisdv1.data.repository.StableDiffusionLorasRepositoryImpl
1215
import com.shifthackz.aisdv1.data.repository.StableDiffusionModelsRepositoryImpl
1316
import com.shifthackz.aisdv1.data.repository.StableDiffusionSamplersRepositoryImpl
1417
import com.shifthackz.aisdv1.data.repository.TemporaryGenerationResultRepositoryImpl
@@ -19,7 +22,10 @@ import com.shifthackz.aisdv1.domain.repository.HordeGenerationRepository
1922
import com.shifthackz.aisdv1.domain.repository.LocalDiffusionGenerationRepository
2023
import com.shifthackz.aisdv1.domain.repository.RandomImageRepository
2124
import com.shifthackz.aisdv1.domain.repository.ServerConfigurationRepository
25+
import com.shifthackz.aisdv1.domain.repository.StableDiffusionEmbeddingsRepository
2226
import com.shifthackz.aisdv1.domain.repository.StableDiffusionGenerationRepository
27+
import com.shifthackz.aisdv1.domain.repository.StableDiffusionHyperNetworksRepository
28+
import com.shifthackz.aisdv1.domain.repository.StableDiffusionLorasRepository
2329
import com.shifthackz.aisdv1.domain.repository.StableDiffusionModelsRepository
2430
import com.shifthackz.aisdv1.domain.repository.StableDiffusionSamplersRepository
2531
import com.shifthackz.aisdv1.domain.repository.TemporaryGenerationResultRepository
@@ -43,6 +49,9 @@ val repositoryModule = module {
4349
factoryOf(::StableDiffusionGenerationRepositoryImpl) bind StableDiffusionGenerationRepository::class
4450
factoryOf(::StableDiffusionModelsRepositoryImpl) bind StableDiffusionModelsRepository::class
4551
factoryOf(::StableDiffusionSamplersRepositoryImpl) bind StableDiffusionSamplersRepository::class
52+
factoryOf(::StableDiffusionLorasRepositoryImpl) bind StableDiffusionLorasRepository::class
53+
factoryOf(::StableDiffusionHyperNetworksRepositoryImpl) bind StableDiffusionHyperNetworksRepository::class
54+
factoryOf(::StableDiffusionEmbeddingsRepositoryImpl) bind StableDiffusionEmbeddingsRepository::class
4655
factoryOf(::ServerConfigurationRepositoryImpl) bind ServerConfigurationRepository::class
4756
factoryOf(::GenerationResultRepositoryImpl) bind GenerationResultRepository::class
4857
factoryOf(::RandomImageRepositoryImpl) bind RandomImageRepository::class
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.shifthackz.aisdv1.data.local
2+
3+
import com.shifthackz.aisdv1.data.mappers.mapDomainToEntity
4+
import com.shifthackz.aisdv1.data.mappers.mapEntityToDomain
5+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionEmbeddingsDataSource
6+
import com.shifthackz.aisdv1.domain.entity.StableDiffusionEmbedding
7+
import com.shifthackz.aisdv1.storage.db.cache.dao.StableDiffusionEmbeddingDao
8+
import com.shifthackz.aisdv1.storage.db.cache.entity.StableDiffusionEmbeddingEntity
9+
10+
internal class StableDiffusionEmbeddingsLocalDataSource(
11+
private val dao: StableDiffusionEmbeddingDao,
12+
) : StableDiffusionEmbeddingsDataSource.Local {
13+
14+
override fun getEmbeddings() = dao
15+
.queryAll()
16+
.map(List<StableDiffusionEmbeddingEntity>::mapEntityToDomain)
17+
18+
override fun insertEmbeddings(list: List<StableDiffusionEmbedding>) = dao
19+
.deleteAll()
20+
.andThen(dao.insertList(list.mapDomainToEntity()))
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.shifthackz.aisdv1.data.local
2+
3+
import com.shifthackz.aisdv1.data.mappers.mapDomainToEntity
4+
import com.shifthackz.aisdv1.data.mappers.mapEntityToDomain
5+
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionHyperNetworksDataSource
6+
import com.shifthackz.aisdv1.domain.entity.StableDiffusionHyperNetwork
7+
import com.shifthackz.aisdv1.storage.db.cache.dao.StableDiffusionHyperNetworkDao
8+
import com.shifthackz.aisdv1.storage.db.cache.entity.StableDiffusionHyperNetworkEntity
9+
10+
internal class StableDiffusionHyperNetworksLocalDataSource(
11+
private val dao: StableDiffusionHyperNetworkDao,
12+
) : StableDiffusionHyperNetworksDataSource.Local {
13+
14+
override fun getHyperNetworks() = dao
15+
.queryAll()
16+
.map(List<StableDiffusionHyperNetworkEntity>::mapEntityToDomain)
17+
18+
override fun insertHyperNetworks(list: List<StableDiffusionHyperNetwork>) = dao
19+
.deleteAll()
20+
.andThen(dao.insertList(list.mapDomainToEntity()))
21+
}

0 commit comments

Comments
 (0)