Skip to content

Commit

Permalink
Fix lint errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Popalay committed Jun 30, 2023
1 parent f6c4987 commit 5afb8eb
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 95 deletions.
49 changes: 22 additions & 27 deletions app/src/main/java/com/popalay/barnee/navigation/AppNavigation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -50,34 +50,29 @@ fun <T : Input> NavGraphBuilder.navigationNode(
command: NavigationCommand<T>,
content: @Composable (NavBackStackEntry) -> Unit
) {
when(command.navigationType){
Dialog -> {
dialog(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = content
)
when (command.navigationType) {
Dialog -> dialog(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = content
)

}
BottomSheet -> {
bottomSheet(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = {
content(it)
}
)
}
Screen -> {
composable(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = content
)
}
BottomSheet -> bottomSheet(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = {
content(it)
}
)

Screen -> composable(
route = command.route,
deepLinks = command.deeplinks,
arguments = command.arguments,
content = content
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ package com.popalay.barnee.ui.screen.bartender

import androidx.compose.animation.Crossfade
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.Icon
Expand Down Expand Up @@ -124,25 +126,37 @@ fun BartenderScreen(
}
},
body = {
BarneeTextField(
value = state.prompt,
onValueChange = { onAction(BartenderAction.OnPromptChanged(it)) },
label = { Text(text = "Explain what you want") },
placeholder = { Text(text = "e.g. sour cocktail with gin and cherry") },
isError = state.isError,
enabled = !state.isLoading,
singleLine = true,
textStyle = MaterialTheme.typography.body1,
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Unspecified,
focusedIndicatorColor = Color.Unspecified,
unfocusedIndicatorColor = Color.Unspecified,
disabledIndicatorColor = Color.Unspecified
),
modifier = Modifier
.fillMaxWidth()
.focusRequester(promptFocus)
)
Column {

BarneeTextField(
value = state.prompt,
onValueChange = { onAction(BartenderAction.OnPromptChanged(it)) },
label = { Text(text = "Explain what you want") },
placeholder = { Text(text = "e.g. sour cocktail with gin and cherry") },
isError = state.isError,
enabled = !state.isLoading,
singleLine = true,
textStyle = MaterialTheme.typography.body1,
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Unspecified,
focusedIndicatorColor = Color.Unspecified,
unfocusedIndicatorColor = Color.Unspecified,
disabledIndicatorColor = Color.Unspecified,
errorIndicatorColor = Color.Unspecified,
),
modifier = Modifier
.fillMaxWidth()
.focusRequester(promptFocus)
)
if (state.isError) {
Text(
text = state.error,
color = MaterialTheme.colors.error,
style = MaterialTheme.typography.caption,
modifier = Modifier.padding(start = 16.dp)
)
}
}
},
navigation = {
IconButton(onClick = { onAction(BartenderAction.OnCloseClicked) }) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

package com.popalay.barnee.ui.screen.search

import com.popalay.barnee.domain.search.SearchAction
import com.popalay.barnee.domain.search.SearchSideEffect
import com.popalay.barnee.domain.search.SearchState
import com.popalay.barnee.domain.search.SearchStateMachine
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
package com.popalay.barnee.ui.screen.shaketodrink

import com.popalay.barnee.domain.NoSideEffect
import com.popalay.barnee.domain.shakedrink.ShakeToDrinkAction
import com.popalay.barnee.domain.shakedrink.ShakeToDrinkState
import com.popalay.barnee.domain.shakedrink.ShakeToDrinkStateMachine
import com.popalay.barnee.ui.screen.StateMachineWrapperViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,35 +34,52 @@ import com.popalay.barnee.data.model.Drink
import com.popalay.barnee.util.Logger
import kotlinx.serialization.json.Json

@OptIn(BetaOpenAI::class)
class AiApi(
private val openAi: OpenAI,
private val json: Json,
private val logger: Logger
) {

@OptIn(BetaOpenAI::class)
suspend fun getDrinkByPrompt(prompt: String): Drink {
val chatCompletionRequest = chatCompletionRequest {
model = ModelId("gpt-3.5-turbo-0613")
n = 1
temperature = 1.5
messages = listOf(
ChatMessage(
role = ChatRole.System,
content = "You are a helpful cocktails recipe assistant."
),
ChatMessage(
role = ChatRole.User,
content = "Suggest a cocktail based on the following wishlist: $prompt. Be creative and imaginative! " +
"The name of the cocktail should be unique and imaginative e.g. The Fluffy Unicorn, Stellar Swirl, Mystical Mingle."
)
)
functions {
function {
name = "setRecipe"
description = "Set the recipe for the cocktail"
parameters = Parameters.fromJsonString(
"""
val response = openAi.chatCompletion(createChatCompletionRequest(prompt))
val result = response.choices[0].message?.functionCall?.arguments?.let {
json.decodeFromString(Drink.serializer(), it)
}

logger.debug("AiAPI", result.toString())

return result ?: error("Drink is null")
}
}

@OptIn(BetaOpenAI::class)
private fun createChatCompletionRequest(prompt: String) = chatCompletionRequest {
model = ModelId("gpt-3.5-turbo-0613")
n = 1
temperature = 1.5
messages = listOf(
ChatMessage(
role = ChatRole.System,
content = "You are a helpful cocktails recipe assistant."
),
ChatMessage(
role = ChatRole.User,
content = "Suggest a cocktail based on the following wishlist: $prompt. Be creative and imaginative! " +
"The name of the cocktail should be unique and imaginative e.g. The Fluffy Unicorn, Stellar Swirl, Mystical Mingle."
)
)
functions {
function {
name = "setRecipe"
description = "Set the recipe for the cocktail"
parameters = Parameters.fromJsonString(responseScheme)
}
}
functionCall = FunctionMode.Named("setRecipe")
}

private val responseScheme = """
{
"type": "object",
"properties": {
Expand Down Expand Up @@ -138,19 +155,3 @@ class AiApi(
]
}
""".trimIndent()
)
}
}
functionCall = FunctionMode.Named("setRecipe")
}

val response = openAi.chatCompletion(chatCompletionRequest)
val result = response.choices[0].message?.functionCall?.arguments?.let {
json.decodeFromString(Drink.serializer(), it)
}

logger.debug("AiAPI", result.toString())

return result ?: error("Drink is null")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import com.popalay.barnee.data.repository.DrinksRequest.Generated
import com.popalay.barnee.data.repository.DrinksRequest.Random
import com.popalay.barnee.data.repository.DrinksRequest.RelatedTo
import com.popalay.barnee.data.repository.DrinksRequest.Search
import com.popalay.barnee.util.Logger
import com.popalay.barnee.util.filter
import com.popalay.barnee.util.identifier
import com.popalay.barnee.util.toImageUrl
Expand Down Expand Up @@ -72,7 +71,6 @@ internal class DrinkRepositoryImpl(
private val aiApi: AiApi,
private val localStore: LocalStore,
private val json: Json,
private val logger: Logger,
private val collectionRepository: CollectionRepository
) : DrinkRepository {
override fun drinks(request: DrinksRequest): Flow<PagingData<Drink>> =
Expand Down
2 changes: 1 addition & 1 deletion shared/src/commonMain/kotlin/com/popalay/barnee/di/Koin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ val commonModule = module {
}
}
}
single<DrinkRepository> { DrinkRepositoryImpl(get(), get(), get(), get(), get(), get()) }
single<DrinkRepository> { DrinkRepositoryImpl(get(), get(), get(), get(), get()) }
single<CollectionRepository> { CollectionRepositoryImpl(get(), get(), get()) }
single<ShareRepository> { ShareRepositoryImpl(get(), get()) }
single<OpenAI> { OpenAI(token = BuildKonfig.OPEN_AI_API_KEY) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@ data class BartenderState(
val generatedDrink: Drink? = null,
val prompt: String = "",
val isLoading: Boolean = false,
val isError: Boolean = false,
val error: String = "",
) : State {
val isPromptValid = prompt.isNotBlank() && prompt.length >= 3
val isError = error.isNotBlank()
}

sealed interface BartenderAction : Action {
Expand All @@ -64,15 +65,15 @@ class BartenderStateMachine(
reducer = { state, _ ->
merge(
filterIsInstance<BartenderAction.OnPromptChanged>()
.map { state().copy(prompt = it.prompt) },
.map { state().copy(prompt = it.prompt, error = "") },
filterIsInstance<BartenderAction.OnGenerateDrinkClicked>()
.flatMapLatest {
drinkRepository.drinkForPrompt(state().prompt)
.take(1)
.map { state().copy(generatedDrink = it, isLoading = false, isError = false) }
.onStart { emit(state().copy(isLoading = true, isError = false)) }
.catch { emit(state().copy(isError = true, isLoading = false)) }
},
.map { state().copy(generatedDrink = it, isLoading = false, error = "") }
.onStart { emit(state().copy(isLoading = true, error = "")) }
}
.catch { emit(state().copy(error = it.message ?: "Something went wrong. Please try again.", isLoading = false)) },
filterIsInstance<BartenderAction.OnDrinkClicked>()
.onEach { router.navigate(DrinkDestination(it.drink)) }
.map { state() },
Expand Down

0 comments on commit 5afb8eb

Please sign in to comment.