Skip to content

Commit c411ef2

Browse files
Gemini Documentation chatbot with UrlContext
Implement a Gemini Documentation chatbot using the UrlContext API
1 parent 3638799 commit c411ef2

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.android.ai.samples.geminichatbot
1717

18+
import androidx.compose.material3.TooltipState
1819
import androidx.lifecycle.ViewModel
1920
import androidx.lifecycle.viewModelScope
2021
import com.android.ai.uicomponent.ChatMessage
@@ -23,7 +24,9 @@ import com.google.firebase.ai.ai
2324
import com.google.firebase.ai.type.GenerativeBackend
2425
import com.google.firebase.ai.type.HarmBlockThreshold
2526
import com.google.firebase.ai.type.HarmCategory
27+
import com.google.firebase.ai.type.PublicPreviewAPI
2628
import com.google.firebase.ai.type.SafetySetting
29+
import com.google.firebase.ai.type.Tool
2730
import com.google.firebase.ai.type.content
2831
import com.google.firebase.ai.type.generationConfig
2932
import javax.inject.Inject
@@ -48,9 +51,16 @@ class GeminiChatbotViewModel @Inject constructor() : ViewModel() {
4851
private val _uiState = MutableStateFlow(GeminiChatbotUiState())
4952
val uiState: StateFlow<GeminiChatbotUiState> = _uiState.asStateFlow()
5053

54+
val url1 = "https://developer.android.com/ai/gemini"
55+
val url2 = "https://developer.android.com/ai/gemini/developer-api"
56+
val url3 = "https://developer.android.com/ai/gemini/live"
57+
val url4 = "https://developer.android.com/ai/vertex-ai-firebase"
58+
val urlContextPrompt = "\nDon't hallucinate, use the webpages documentation to answer: \n$url1 \n$url2 \n$url3 \n$url4"
59+
60+
@OptIn(PublicPreviewAPI::class)
5161
private val generativeModel by lazy {
5262
Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
53-
"gemini-2.5-flash",
63+
"gemini-3-flash-preview",
5464
generationConfig = generationConfig {
5565
temperature = 0.9f
5666
topK = 32
@@ -66,6 +76,7 @@ class GeminiChatbotViewModel @Inject constructor() : ViewModel() {
6676
systemInstruction = content {
6777
text("""You are a friendly assistant. Keep your response short.""")
6878
},
79+
tools = listOf(Tool.urlContext())
6980
)
7081
}
7182

@@ -85,7 +96,7 @@ class GeminiChatbotViewModel @Inject constructor() : ViewModel() {
8596
)
8697
}
8798

88-
val response = chat.sendMessage(message)
99+
val response = chat.sendMessage(message + urlContextPrompt)
89100
val newMessage = response.text?.let {
90101
ChatMessage(
91102
text = it.trim(),

0 commit comments

Comments
 (0)