diff --git a/README.md b/README.md index 856efe4f..3e707b6c 100644 --- a/README.md +++ b/README.md @@ -11,21 +11,6 @@ some of Google's models. > For best practices follow our documentation and check > [Now In Android](https://github.com/android/nowinandroid) -Browse the samples inside the `/samples` folder: - -- **gemini-image-chat**: a sample using the new [Gemini 2.5 Flash Image model](https://developers.googleblog.com/en/introducing-gemini-2-5-flash-image/) (a.k.a. "NanoBanana") enabling image generation and iterations via chat interactions -- **gemini-chatbot**: a simple chatbot using Gemini Flash -- **gemini-multimodal**: a single screen application leveraging text+image to text generation with Gemini Flash -- **genai-summarization**: a text summarization sample using Gemini Nano -- **genai-image-description**: an image description sample using Gemini Nano -- **genai-writing-assistance**: a proofreading and rewriting sample using Gemini Nano -- **imagen**: an image generation sample using Imagen -- **magic-selfie**: an sample using ML Kit subject segmentation and Imagen for image generation -- **gemini-video-summarization**: a video summarization sample using Gemini Flash -- **gemini-video-metadata-creation**: a sample using Gemini Flash to generate a video description, hashtags, chapters, etc... -- **gemini-live-todo**: a todo list app using Gemini Live -- More to come... - > **Requires Firebase setup** the samples relying on Google Cloud models (Gemini Pro, Gemini Flash, etc...) > require setting up a Firebase project and connecting the app to Firebase (read more [here](https://firebase.google.com/docs/ai-logic/get-started?platform=android&api=dev#set-up-firebase)). @@ -42,6 +27,35 @@ file (`google-services.json`) to the `/app` directory. Read more in the [Firebas The app will open with the samples list screen that allows you to navigate throughout the different available samples. +## Samples +Here is the list of samples you can find in the `/samples` folder: + +| Samples | | +|:----------------------------------------------------------------------------------------------------------------------------------|-----------| +| Gemini Image Chat sample | ✨🖼️🍌 **Gemini Image Chat**:
A chatbot app using the new [Gemini 2.5 Flash Image model](https://developers.googleblog.com/en/introducing-gemini-2-5-flash-image/) (a.k.a. "NanoBanana") enabling image generation and iterations via conversation with the Gemini model. Ask the model to generate an image and ask for tweaks in the chat.



**[> Browse code](samples/gemini-image-chat)**

| +| | | +| Gemini Chatbot sample | ✨🗣️ **Gemini Chatbot**:
A chatbot app using the Gemini Flash model. You can tweak the [system instructions](https://firebase.google.com/docs/ai-logic/system-instructions) in the model configuration to change the tone or the persona of the model.



**[> Browse code](samples/gemini-chatbot)**

| +| | | +| Gemini Multimodal sample | ✨📸 **Gemini Multimodal**:
A sample leveraging the [multimodal capabilities](https://developer.android.com/ai/gemini/developer-api#generate-text-from-media) of the Gemini Flash model (in this case text and image-to-text) to let you prompt the model with an image.



**[> Browse code](samples/gemini-multimodal)**

| +| | | +| Gemini Nano summarization sample | ✨📱📰 **On-device Summarization**:
A sample letting you summarize text on-device using Gemini Nano via the [GenAI Summarization API](https://developers.google.com/ml-kit/genai/summarization/android).



**[> Browse code](samples/genai-summarization)**

| +| | | +| Gemini Nano Image description | ✨📱🔍 **On-device Image Description**:
A sample letting you generate image descriptions using Gemini Nano via the [GenAI Image Description API](https://developers.google.com/ml-kit/genai/image-description/android).



**[> Browse code](samples/genai-image-description)**

| +| | | +| Gemini Nano Rewrite | ✨📱🖋️ **On-device Writing Assistance**:
A sample letting you proofread and rewrite text using Gemini Nano via the [GenAI Rewriting API](https://developers.google.com/ml-kit/genai/rewriting/android).



**[> Browse code](samples/genai-writing-assistance)**

| +| | | +| Imagen sample | 🖼️ **Image Generation with Imagen**:
A sample using [Imagen to generate images](https://developer.android.com/ai/imagen#generate-image) of landscapes, objects and people in various artistic style.



**[> Browse code](samples/imagen)**

| +| | | +| Magic Selfie sample | 🖼️📸 **Magic Selfie**:
A sample using [ML Kit subject Segmentation SDK](https://developers.google.com/ml-kit/vision/subject-segmentation/android) to remove the background behind a person, and [Imagen](https://developer.android.com/ai/imagen#generate-image) to generate new background.



**[> Browse code](samples/magic-selfie)**

| +| | | +| Gemini Video Summarization sample | ✨🎥 **Gemini Video Summarization**:
A sample using Gemini Flash to [summarize videos](https://firebase.google.com/docs/ai-logic/analyze-video?api=dev) leveraging the [large file support](https://firebase.google.com/docs/ai-logic/solutions/cloud-storage).



**[> Browse code](samples/gemini-video-summarization)**

| +| | | +| Gemini Video Metadata sample | ✨🎥 **Gemini Video Metadata Creation**:
A sample using Gemini Flash to generate thumbnails, descriptions, hashtags, account tags, chapters and links from a video. This sample leverages the ability to provide a [Youtube video link](https://firebase.google.com/docs/ai-logic/input-file-requirements?api=dev#provide-file-using-url) to the model context for inference.



**[> Browse code](samples/gemini-video-metadata-creation)**

| +| | | +| Gemini Live Todo sample | ✨🗣️ **Gemini Live Todo App**:
A Todo List app using the [Gemini Live API](https://developer.android.com/ai/gemini/live) to let the user interact with Gemini Live via voice to update the todo list.



**[> Browse code](samples/gemini-live-todo)**

| +| | | +| Imagen Editing sample | 🖼️🖌️ **Imagen Editing**:
A sample using Imagen to [generate images](https://developer.android.com/ai/imagen#generate-image) and [editing images](https://developer.android.com/ai/imagen#editing) using the mask based editing capabilities of the model.



**[> Browse code](samples/imagen-editing)**

| + ## Reporting issues You can report [issues with the samples](https://github.com/android/ai-samples/issues) using diff --git a/samples/gemini-chatbot/README.md b/samples/gemini-chatbot/README.md new file mode 100644 index 00000000..9b207814 --- /dev/null +++ b/samples/gemini-chatbot/README.md @@ -0,0 +1,34 @@ +# Gemini Chatbot Sample + +This sample is part of the [AI Sample Catalog](../../). To build and run this sample, you should clone the entire repository. + +## Description + +This sample demonstrates a basic chat bot using the `Gemini 2.5 Flash` model. Users can send text-based messages, and the generative model will respond, creating an interactive chat experience. This showcases how to build a simple, yet powerful, conversational AI with the Gemini API. + +
+Gemini Chatbot in action +
+ +## How it works + +The application uses the Firebase AI SDK (see [How to run](../../#how-to-run)) for Android to interact with the `Gemini 2.5 Flash` model. The core logic is in the `GeminiChatbotViewModel.kt` file. A `generativeModel` is initialized, and then a `chat` session is started from it. When a user sends a message, it's passed to the model, which then generates a text response. + +Here is the key snippet of code that calls the generative model: + +```kotlin +private val generativeModel by lazy { + Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel("gemini-2.5-flash") +} +private val chat = generativeModel.startChat() + +fun sendMessage(message: String) { + viewModelScope.launch { + // ... + val response = chat.sendMessage(message) + // ... + } +} +``` + +Read more about [getting started with Gemini](https://developer.android.com/ai/gemini/get-started) in the Android Documentation. diff --git a/samples/gemini-chatbot/gemini_chatbot.png b/samples/gemini-chatbot/gemini_chatbot.png new file mode 100644 index 00000000..97a4334a Binary files /dev/null and b/samples/gemini-chatbot/gemini_chatbot.png differ diff --git a/samples/gemini-image-chat/android_nano_banana.png b/samples/gemini-image-chat/android_nano_banana.png index 6f5cc215..644cdd31 100644 Binary files a/samples/gemini-image-chat/android_nano_banana.png and b/samples/gemini-image-chat/android_nano_banana.png differ diff --git a/samples/gemini-live-todo/gemini_live_todo.png b/samples/gemini-live-todo/gemini_live_todo.png new file mode 100644 index 00000000..491b5bbe Binary files /dev/null and b/samples/gemini-live-todo/gemini_live_todo.png differ diff --git a/samples/gemini-multimodal/gemini_multimodal.png b/samples/gemini-multimodal/gemini_multimodal.png new file mode 100644 index 00000000..4c4621e5 Binary files /dev/null and b/samples/gemini-multimodal/gemini_multimodal.png differ diff --git a/samples/gemini-video-metadata-creation/gemini_video_metadata.png b/samples/gemini-video-metadata-creation/gemini_video_metadata.png new file mode 100644 index 00000000..636c698f Binary files /dev/null and b/samples/gemini-video-metadata-creation/gemini_video_metadata.png differ diff --git a/samples/gemini-video-summarization/gemini_video_summarization.png b/samples/gemini-video-summarization/gemini_video_summarization.png new file mode 100644 index 00000000..e90bbc46 Binary files /dev/null and b/samples/gemini-video-summarization/gemini_video_summarization.png differ diff --git a/samples/genai-image-description/nano_image_description.png b/samples/genai-image-description/nano_image_description.png new file mode 100644 index 00000000..fa63fc1b Binary files /dev/null and b/samples/genai-image-description/nano_image_description.png differ diff --git a/samples/genai-summarization/nano_summarization.png b/samples/genai-summarization/nano_summarization.png new file mode 100644 index 00000000..267dc5bd Binary files /dev/null and b/samples/genai-summarization/nano_summarization.png differ diff --git a/samples/genai-writing-assistance/nano_rewrite.png b/samples/genai-writing-assistance/nano_rewrite.png new file mode 100644 index 00000000..771c0b8a Binary files /dev/null and b/samples/genai-writing-assistance/nano_rewrite.png differ diff --git a/samples/imagen-editing/imagen_editing.png b/samples/imagen-editing/imagen_editing.png new file mode 100644 index 00000000..d603efa2 Binary files /dev/null and b/samples/imagen-editing/imagen_editing.png differ diff --git a/samples/imagen/imagen_image_generation.png b/samples/imagen/imagen_image_generation.png new file mode 100644 index 00000000..af4d3ad2 Binary files /dev/null and b/samples/imagen/imagen_image_generation.png differ diff --git a/samples/magic-selfie/magic_selfie.png b/samples/magic-selfie/magic_selfie.png new file mode 100644 index 00000000..1f3155c5 Binary files /dev/null and b/samples/magic-selfie/magic_selfie.png differ