Skip to content

Commit 1a6aad7

Browse files
committed
refactor(ai-logic): use nano banana GA models
1 parent 2668312 commit 1a6aad7

4 files changed

Lines changed: 28 additions & 12 deletions

File tree

firebase-ai/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ You can find the implementation for each feature by clicking on the links below:
3030
### Gemini 3
3131
- [Translate text](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt): Use Gemini 3.1 Flash-Lite to translate text
3232
- [SVG Generator](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/SvgViewModel.kt): Use Gemini 3.5 Flash to create SVG illustrations
33-
- [Gemini 3.1 Flash Image (Nano Banana 2)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBanana2ViewModel.kt): Generate and/or edit images using Nano Banana 2 preview
34-
- [Gemini 3 Pro Image (Nano Banana Pro)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaProViewModel.kt): Generate and/or edit images using Nano Banana Pro preview
33+
- [Gemini 3.1 Flash Image (Nano Banana 2)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBanana2ViewModel.kt): Generate and/or edit images using Nano Banana 2
34+
- [Gemini 3 Pro Image (Nano Banana Pro)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaProViewModel.kt): Generate and/or edit images using Nano Banana Pro
3535

3636
### Nano Banana
37-
- [Gemini 3.1 Flash Image (Nano Banana 2)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBanana2ViewModel.kt): Generate and/or edit images using Nano Banana 2 preview
38-
- [Gemini 3 Pro Image (Nano Banana Pro)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaProViewModel.kt): Generate and/or edit images using Nano Banana Pro preview
39-
- [Gemini 2.5 Flash Image (Nano Banana)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaViewModel.kt): Generate and/or edit images using Nano Banana (GA)
37+
- [Gemini 3.1 Flash Image (Nano Banana 2)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBanana2ViewModel.kt): Generate and/or edit images using Nano Banana 2
38+
- [Gemini 3 Pro Image (Nano Banana Pro)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaProViewModel.kt): Generate and/or edit images using Nano Banana Pro
39+
- [Gemini 2.5 Flash Image (Nano Banana)](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaViewModel.kt): Generate and/or edit images using Nano Banana
4040

4141
### Multimodal understanding
4242
- [Audio Summarization](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/AudioSummarizationViewModel.kt): Use Gemini 3.1 Flash Lite to summarize an audio file

firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBanana2ViewModel.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,31 @@ import kotlinx.serialization.Serializable
55
import com.google.firebase.Firebase
66
import com.google.firebase.ai.Chat
77
import com.google.firebase.ai.ai
8+
import com.google.firebase.ai.type.AspectRatio
89
import com.google.firebase.ai.type.Content
910
import com.google.firebase.ai.type.GenerativeBackend
1011
import com.google.firebase.ai.type.ResponseModality
1112
import com.google.firebase.ai.type.generationConfig
13+
import com.google.firebase.ai.type.imageConfig
1214
import com.google.firebase.quickstart.ai.ui.UiChatMessage
15+
import java.text.SimpleDateFormat
16+
import java.util.Date
17+
import java.util.Locale
1318

1419
@Serializable
1520
object NanoBanana2Route
1621

1722
class NanoBanana2ViewModel : ChatViewModel() {
23+
private val currentMonthAndYear = SimpleDateFormat("MMM yyyy", Locale.US)
24+
.format(Date())
1825

1926
override val initialPrompt: String = """
2027
A photo of a glossy magazine cover, the minimal blue cover
2128
has the large bold words Nano Banana. The text is in a serif
2229
font and fills the view. No other text. In front of the text
2330
there is a portrait of a person in a sleek and minimal dress.
2431
She is playfully holding the number 2, which is the focal point.
25-
Put the issue number and "Feb 2026" date in the corner along with
32+
Put the issue number and "$currentMonthAndYear" date in the corner along with
2633
a barcode. The magazine is on a shelf against an orange plastered
2734
wall, within a designer store.
2835
""".trimIndent()
@@ -33,9 +40,13 @@ class NanoBanana2ViewModel : ChatViewModel() {
3340
val generativeModel = Firebase.ai(
3441
backend = GenerativeBackend.googleAI()
3542
).generativeModel(
36-
modelName = "gemini-3.1-flash-image-preview",
43+
modelName = "gemini-3.1-flash-image",
3744
generationConfig = generationConfig {
3845
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
46+
// Optionally specify additional configuration
47+
imageConfig = imageConfig {
48+
aspectRatio = AspectRatio.PORTRAIT_3x4
49+
}
3950
}
4051
)
4152
chat = generativeModel.startChat()

firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/NanoBananaProViewModel.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import kotlinx.serialization.Serializable
55
import com.google.firebase.Firebase
66
import com.google.firebase.ai.Chat
77
import com.google.firebase.ai.ai
8+
import com.google.firebase.ai.type.AspectRatio
89
import com.google.firebase.ai.type.Content
910
import com.google.firebase.ai.type.GenerativeBackend
1011
import com.google.firebase.ai.type.ResponseModality
1112
import com.google.firebase.ai.type.generationConfig
13+
import com.google.firebase.ai.type.imageConfig
1214
import com.google.firebase.quickstart.ai.ui.UiChatMessage
1315

1416
@Serializable
@@ -36,9 +38,13 @@ class NanoBananaProViewModel : ChatViewModel() {
3638
val generativeModel = Firebase.ai(
3739
backend = GenerativeBackend.googleAI()
3840
).generativeModel(
39-
modelName = "gemini-3-pro-image-preview",
41+
modelName = "gemini-3-pro-image",
4042
generationConfig = generationConfig {
4143
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
44+
// Optionally specify additional configuration
45+
imageConfig = imageConfig {
46+
aspectRatio = AspectRatio.SQUARE_1x1
47+
}
4248
}
4349
)
4450
chat = generativeModel.startChat()

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,23 +88,23 @@ val FIREBASE_AI_SAMPLES = listOf(
8888
),
8989
Sample(
9090
title = "Gemini 3.1 Flash Image (Nano Banana 2)",
91-
description = "Generate and/or edit images using Nano Banana 2 preview",
91+
description = "Generate and/or edit images using Nano Banana 2",
9292
route = NanoBanana2Route,
9393
screenType = ScreenType.CHAT,
9494
viewModelClass = NanoBanana2ViewModel::class,
9595
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
9696
),
9797
Sample(
9898
title = "Gemini 3 Pro Image (Nano Banana Pro)",
99-
description = "Generate and/or edit images using Nano Banana Pro preview",
99+
description = "Generate and/or edit images using Nano Banana Pro",
100100
route = NanoBananaProRoute,
101101
screenType = ScreenType.CHAT,
102102
viewModelClass = NanoBananaProViewModel::class,
103103
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
104104
),
105105
Sample(
106106
title = "Gemini 2.5 Flash Image (Nano Banana)",
107-
description = "Generate and/or edit images using Nano Banana (GA)",
107+
description = "Generate and/or edit images using Nano Banana",
108108
route = NanoBananaRoute,
109109
screenType = ScreenType.CHAT,
110110
viewModelClass = NanoBananaViewModel::class,
@@ -187,6 +187,5 @@ val FIREBASE_AI_SAMPLES = listOf(
187187
screenType = ScreenType.HYBRID,
188188
viewModelClass = HybridInferenceViewModel::class,
189189
categories = listOf(Category.HYBRID)
190-
191190
)
192191
)

0 commit comments

Comments
 (0)