Skip to content

Commit 612531a

Browse files
authored
feat: add a Nano Banana Lite sample (#2814)
1 parent 3a795af commit 612531a

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.google.firebase.quickstart.ai.feature.text
2+
3+
import kotlinx.serialization.Serializable
4+
5+
import com.google.firebase.Firebase
6+
import com.google.firebase.ai.Chat
7+
import com.google.firebase.ai.ai
8+
import com.google.firebase.ai.type.Content
9+
import com.google.firebase.ai.type.GenerativeBackend
10+
import com.google.firebase.ai.type.ImageSize
11+
import com.google.firebase.ai.type.ResponseModality
12+
import com.google.firebase.ai.type.generationConfig
13+
import com.google.firebase.ai.type.imageConfig
14+
import com.google.firebase.quickstart.ai.ui.UiChatMessage
15+
16+
@Serializable
17+
object NanoBananaLiteRoute
18+
19+
class NanoBananaLiteViewModel : ChatViewModel() {
20+
21+
override val initialPrompt: String = """
22+
A kawaii-style sticker of a happy red panda wearing a tiny bamboo hat.
23+
It's munching on a green bamboo leaf. The design features bold,
24+
clean outlines, simple cel-shading, and a vibrant color palette.
25+
The background must be white.
26+
""".trimIndent()
27+
28+
private val chat: Chat
29+
30+
init {
31+
val generativeModel = Firebase.ai(
32+
backend = GenerativeBackend.googleAI()
33+
).generativeModel(
34+
modelName = "gemini-3.1-flash-lite-image", // aka Nano Banana Lite
35+
generationConfig = generationConfig {
36+
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
37+
imageConfig = imageConfig {
38+
// Nano Banana Lite currently only supports 1K output
39+
imageSize = ImageSize.SIZE_1K
40+
}
41+
}
42+
)
43+
chat = generativeModel.startChat()
44+
}
45+
46+
override suspend fun performSendMessage(prompt: Content, currentMessages: List<UiChatMessage>) {
47+
val response = chat.sendMessage(prompt)
48+
validateAndDisplayResponse(response, currentMessages)
49+
}
50+
}

firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.google.firebase.quickstart.ai.feature.text.ImageBlogCreatorRoute
2020
import com.google.firebase.quickstart.ai.feature.text.ImageBlogCreatorViewModel
2121
import com.google.firebase.quickstart.ai.feature.text.NanoBanana2Route
2222
import com.google.firebase.quickstart.ai.feature.text.NanoBanana2ViewModel
23+
import com.google.firebase.quickstart.ai.feature.text.NanoBananaLiteRoute
24+
import com.google.firebase.quickstart.ai.feature.text.NanoBananaLiteViewModel
2325
import com.google.firebase.quickstart.ai.feature.text.NanoBananaProRoute
2426
import com.google.firebase.quickstart.ai.feature.text.NanoBananaProViewModel
2527
import com.google.firebase.quickstart.ai.feature.text.NanoBananaRoute
@@ -86,6 +88,14 @@ val FIREBASE_AI_SAMPLES = listOf(
8688
viewModelClass = ImageBlogCreatorViewModel::class,
8789
categories = listOf(Category.MULTIMODAL_UNDERSTANDING)
8890
),
91+
Sample(
92+
title = "Gemini 3.1 Flash Image Lite (Nano Banana Lite)",
93+
description = "Generate and/or edit images using Nano Banana Lite",
94+
route = NanoBananaLiteRoute,
95+
screenType = ScreenType.CHAT,
96+
viewModelClass = NanoBananaLiteViewModel::class,
97+
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
98+
),
8999
Sample(
90100
title = "Gemini 3.1 Flash Image (Nano Banana 2)",
91101
description = "Generate and/or edit images using Nano Banana 2",

0 commit comments

Comments
 (0)