From 9c68ddd26bbcf03b158bb30690843b82adf25ace Mon Sep 17 00:00:00 2001 From: Rosario Fernandes Date: Fri, 13 Mar 2026 18:00:26 +0000 Subject: [PATCH 1/4] feat: add Translation sample --- .../ai/feature/text/TranslationViewModel.kt | 44 +++++++++++++++++++ .../ai/ui/navigation/FirebaseAISamples.kt | 10 +++++ 2 files changed, 54 insertions(+) create mode 100644 firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt new file mode 100644 index 000000000..6d7289c07 --- /dev/null +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt @@ -0,0 +1,44 @@ +package com.google.firebase.quickstart.ai.feature.text + +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.content +import com.google.firebase.quickstart.ai.ui.UiChatMessage +import kotlinx.serialization.Serializable + +@Serializable +object TranslationRoute + +class TranslationViewModel : ChatViewModel() { + override val initialPrompt: String + get() = """ + Translate the following text to Spanish: + Hey, are you down to grab some pizza later? I'm starving! + """.trimIndent() + + private var chat: Chat + + init { + val generativeModel = Firebase.ai( + backend = GenerativeBackend.googleAI() + ).generativeModel( + modelName = "gemini-3.1-flash-lite-preview", + systemInstruction = content { + text("Only output the translated text") + } + ) + + chat = generativeModel.startChat() + } + + override suspend fun performSendMessage( + prompt: Content, + currentMessages: List + ) { + val response = chat.sendMessage(prompt) + validateAndDisplayResponse(response, currentMessages) + } +} \ No newline at end of file diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt index be38f7b76..253b0c2e5 100644 --- a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt @@ -36,6 +36,8 @@ import com.google.firebase.quickstart.ai.feature.text.SvgRoute import com.google.firebase.quickstart.ai.feature.text.SvgViewModel import com.google.firebase.quickstart.ai.feature.text.ThinkingChatRoute import com.google.firebase.quickstart.ai.feature.text.ThinkingChatViewModel +import com.google.firebase.quickstart.ai.feature.text.TranslationRoute +import com.google.firebase.quickstart.ai.feature.text.TranslationViewModel import com.google.firebase.quickstart.ai.feature.text.TravelTipsRoute import com.google.firebase.quickstart.ai.feature.text.TravelTipsViewModel import com.google.firebase.quickstart.ai.feature.text.VideoHashtagGeneratorRoute @@ -46,6 +48,14 @@ import com.google.firebase.quickstart.ai.feature.text.WeatherChatRoute import com.google.firebase.quickstart.ai.feature.text.WeatherChatViewModel val FIREBASE_AI_SAMPLES = listOf( + Sample( + title = "Translate text", + description = "Use Gemini 3.1 Flash-Lite to translate text", + route = TranslationRoute, + screenType = ScreenType.CHAT, + viewModelClass = TranslationViewModel::class, + categories = listOf(Category.TEXT) + ), Sample( title = "Travel tips", description = "The user wants the model to help a new traveler" + From 1a49b7778a42d84ccc3dc470c444e4e217974e13 Mon Sep 17 00:00:00 2001 From: Rosario Fernandes Date: Fri, 13 Mar 2026 18:03:39 +0000 Subject: [PATCH 2/4] Update Audio summarization to use Gemini 3.1 Flash-Lite --- .../quickstart/ai/feature/text/AudioSummarizationViewModel.kt | 2 +- .../firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/AudioSummarizationViewModel.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/AudioSummarizationViewModel.kt index 8ddb16c92..1c225656d 100644 --- a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/AudioSummarizationViewModel.kt +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/AudioSummarizationViewModel.kt @@ -28,7 +28,7 @@ class AudioSummarizationViewModel : ChatViewModel() { val generativeModel = Firebase.ai( backend = GenerativeBackend.googleAI() ).generativeModel( - modelName = "gemini-2.5-flash" + modelName = "gemini-3.1-flash-lite-preview" ) chat = generativeModel.startChat( listOf( diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt index 253b0c2e5..24a4640a0 100644 --- a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt @@ -75,7 +75,7 @@ val FIREBASE_AI_SAMPLES = listOf( ), Sample( title = "Audio Summarization", - description = "Summarize an audio file", + description = "Use Gemini 3.1 Flash Lite to summarize an audio file", route = AudioSummarizationRoute, screenType = ScreenType.CHAT, viewModelClass = AudioSummarizationViewModel::class, From 47d5b7ff331c557e00a13ba9028a74ab2a292b3a Mon Sep 17 00:00:00 2001 From: Rosario Fernandes Date: Fri, 13 Mar 2026 18:06:27 +0000 Subject: [PATCH 3/4] remove grounding from the document category --- .../firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt index 24a4640a0..8bb2cb153 100644 --- a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/ui/navigation/FirebaseAISamples.kt @@ -204,7 +204,7 @@ val FIREBASE_AI_SAMPLES = listOf( route = GoogleSearchGroundingRoute, screenType = ScreenType.CHAT, viewModelClass = GoogleSearchGroundingViewModel::class, - categories = listOf(Category.TEXT, Category.DOCUMENT) + categories = listOf(Category.TEXT) ), Sample( title = "Server Prompt Template - Imagen", From 22198fe1ba13e9b5a3cd7ce1ed1fb0cd32eaac89 Mon Sep 17 00:00:00 2001 From: Rosario Fernandes Date: Fri, 13 Mar 2026 18:13:27 +0000 Subject: [PATCH 4/4] val instead of var --- .../firebase/quickstart/ai/feature/text/TranslationViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt index 6d7289c07..bc10192e9 100644 --- a/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt +++ b/firebase-ai/app/src/main/java/com/google/firebase/quickstart/ai/feature/text/TranslationViewModel.kt @@ -19,7 +19,7 @@ class TranslationViewModel : ChatViewModel() { Hey, are you down to grab some pizza later? I'm starving! """.trimIndent() - private var chat: Chat + private val chat: Chat init { val generativeModel = Firebase.ai(