Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.google.firebase.quickstart.ai.feature.text

import kotlinx.serialization.Serializable

import com.google.firebase.Firebase
import com.google.firebase.ai.Chat
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.Content
import com.google.firebase.ai.type.GenerativeBackend
import com.google.firebase.ai.type.ImageSize
import com.google.firebase.ai.type.ResponseModality
import com.google.firebase.ai.type.generationConfig
import com.google.firebase.ai.type.imageConfig
import com.google.firebase.quickstart.ai.ui.UiChatMessage

@Serializable
object NanoBananaLiteRoute

class NanoBananaLiteViewModel : ChatViewModel() {

override val initialPrompt: String = """
A kawaii-style sticker of a happy red panda wearing a tiny bamboo hat.
It's munching on a green bamboo leaf. The design features bold,
clean outlines, simple cel-shading, and a vibrant color palette.
The background must be white.
""".trimIndent()

private val chat: Chat

init {
val generativeModel = Firebase.ai(
backend = GenerativeBackend.googleAI()
).generativeModel(
modelName = "gemini-3.1-flash-lite-image", // aka Nano Banana Lite
generationConfig = generationConfig {
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
imageConfig = imageConfig {
// Nano Banana Lite currently only supports 1K output
imageSize = ImageSize.SIZE_1K
}
}
)
chat = generativeModel.startChat()
}
Comment thread
thatfiredev marked this conversation as resolved.

override suspend fun performSendMessage(prompt: Content, currentMessages: List<UiChatMessage>) {
val response = chat.sendMessage(prompt)
validateAndDisplayResponse(response, currentMessages)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import com.google.firebase.quickstart.ai.feature.text.ImageBlogCreatorRoute
import com.google.firebase.quickstart.ai.feature.text.ImageBlogCreatorViewModel
import com.google.firebase.quickstart.ai.feature.text.NanoBanana2Route
import com.google.firebase.quickstart.ai.feature.text.NanoBanana2ViewModel
import com.google.firebase.quickstart.ai.feature.text.NanoBananaLiteRoute
import com.google.firebase.quickstart.ai.feature.text.NanoBananaLiteViewModel
import com.google.firebase.quickstart.ai.feature.text.NanoBananaProRoute
import com.google.firebase.quickstart.ai.feature.text.NanoBananaProViewModel
import com.google.firebase.quickstart.ai.feature.text.NanoBananaRoute
Expand Down Expand Up @@ -86,6 +88,14 @@ val FIREBASE_AI_SAMPLES = listOf(
viewModelClass = ImageBlogCreatorViewModel::class,
categories = listOf(Category.MULTIMODAL_UNDERSTANDING)
),
Sample(
title = "Gemini 3.1 Flash Image Lite (Nano Banana Lite)",
description = "Generate and/or edit images using Nano Banana Lite",
route = NanoBananaLiteRoute,
screenType = ScreenType.CHAT,
viewModelClass = NanoBananaLiteViewModel::class,
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
),
Sample(
title = "Gemini 3.1 Flash Image (Nano Banana 2)",
description = "Generate and/or edit images using Nano Banana 2",
Expand Down
Loading