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
10 changes: 5 additions & 5 deletions firebase-ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ You can find the implementation for each feature by clicking on the links below:
### Gemini 3
- [Translate text](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt): Use Gemini 3.1 Flash-Lite to translate text
- [SVG Generator](app/src/main/java/com/google/firebase/quickstart/ai/feature/text/SvgViewModel.kt): Use Gemini 3.5 Flash to create SVG illustrations
- [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
- [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
- [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
- [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

### Nano Banana
- [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
- [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
- [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)
- [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
- [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
- [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

### Multimodal understanding
- [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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,48 @@ 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.AspectRatio
import com.google.firebase.ai.type.Content
import com.google.firebase.ai.type.GenerativeBackend
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
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

@Serializable
object NanoBanana2Route

class NanoBanana2ViewModel : ChatViewModel() {

override val initialPrompt: String = """
override val initialPrompt: String by lazy {
val currentMonthAndYear = SimpleDateFormat("MMM yyyy", Locale.US).format(Date())
"""
A photo of a glossy magazine cover, the minimal blue cover
has the large bold words Nano Banana. The text is in a serif
font and fills the view. No other text. In front of the text
there is a portrait of a person in a sleek and minimal dress.
She is playfully holding the number 2, which is the focal point.
Put the issue number and "Feb 2026" date in the corner along with
Put the issue number and "$currentMonthAndYear" date in the corner along with
a barcode. The magazine is on a shelf against an orange plastered
wall, within a designer store.
""".trimIndent()
}

private val chat: Chat

init {
val generativeModel = Firebase.ai(
backend = GenerativeBackend.googleAI()
).generativeModel(
modelName = "gemini-3.1-flash-image-preview",
modelName = "gemini-3.1-flash-image",
generationConfig = generationConfig {
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
// Optionally specify additional configuration
imageConfig = imageConfig {
aspectRatio = AspectRatio.PORTRAIT_3x4
}
}
)
chat = generativeModel.startChat()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ 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.AspectRatio
import com.google.firebase.ai.type.Content
import com.google.firebase.ai.type.GenerativeBackend
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
Expand Down Expand Up @@ -36,9 +38,13 @@ class NanoBananaProViewModel : ChatViewModel() {
val generativeModel = Firebase.ai(
backend = GenerativeBackend.googleAI()
).generativeModel(
modelName = "gemini-3-pro-image-preview",
modelName = "gemini-3-pro-image",
generationConfig = generationConfig {
responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE)
// Optionally specify additional configuration
imageConfig = imageConfig {
aspectRatio = AspectRatio.SQUARE_1x1
}
}
)
chat = generativeModel.startChat()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,23 +88,23 @@ val FIREBASE_AI_SAMPLES = listOf(
),
Sample(
title = "Gemini 3.1 Flash Image (Nano Banana 2)",
description = "Generate and/or edit images using Nano Banana 2 preview",
description = "Generate and/or edit images using Nano Banana 2",
route = NanoBanana2Route,
screenType = ScreenType.CHAT,
viewModelClass = NanoBanana2ViewModel::class,
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
),
Sample(
title = "Gemini 3 Pro Image (Nano Banana Pro)",
description = "Generate and/or edit images using Nano Banana Pro preview",
description = "Generate and/or edit images using Nano Banana Pro",
route = NanoBananaProRoute,
screenType = ScreenType.CHAT,
viewModelClass = NanoBananaProViewModel::class,
categories = listOf(Category.NANO_BANANA, Category.GEMINI3)
),
Sample(
title = "Gemini 2.5 Flash Image (Nano Banana)",
description = "Generate and/or edit images using Nano Banana (GA)",
description = "Generate and/or edit images using Nano Banana",
route = NanoBananaRoute,
screenType = ScreenType.CHAT,
viewModelClass = NanoBananaViewModel::class,
Expand Down Expand Up @@ -187,6 +187,5 @@ val FIREBASE_AI_SAMPLES = listOf(
screenType = ScreenType.HYBRID,
viewModelClass = HybridInferenceViewModel::class,
categories = listOf(Category.HYBRID)

)
)
Loading