Integrating AI with Grace: The Gemini SDK and Flutter - Part 3
Tags: buildwithgemini, flutter, ai, tutorial
Published: 2024-05-22 21:08:18

Welcome to the third part of our series on building an AI Bible chat app. In this segment, we’ll explore the integration of the Google Gemini AI SDK with Flutter, delve into prompt design, and discuss maintaining persistent chat sessions.

## What Is Prompt Design and Why Gemini?

**Prompt design** is creating and tweaking prompts given to a Large Language Model (Gemini AI Models) to get the desired type and output quality. This is a process of trial and error until you get a specific prompt that fits your use case. 

Interestingly, the prompt design for the AI Bible Chat App took more than half my day, before I could get the exact output I wanted.


## Training on Google AI Studio

I had to learn and experiment with [Google AI Studio](https://aistudio.google.com), a browser-based IDE for prototyping with Google's generative models.

With Generative AI, there's I had no need for a large database of Scriptures, even more, the app is capable of delivering in-depth analysis of scriptures just by using the free access Gemini API, model 1.5 pro.

The Google Gemini 1.5 pro model is multi-modal and takes texts and images as input and outputs text and input also, which is dependent on your prompt.

You could experiment with Freeform (open-ended text)
Structured (predefined format, examples of request and response), and
Chat (enables a user to have a natural ongoing conversation with the model) type of prompt, depending on your use case. 

For our AI Bible Chat App, both the structured and chat types were applied for optimal output.


## Integrating Google Gemini AI SDK in Flutter

The Google Gemini AI SDK is a powerful tool that allows Flutter developers to incorporate AI functionalities into their apps. Here’s how you can integrate it into your Flutter project:

## Setting Up Your API Key

Before you can start using the Gemini AI SDK, you need to obtain an API key from Google AI Studio. This key will authenticate your requests to the AI services.

## Installing the SDK

Add the Gemini AI SDK to your pubspec.yaml file:

```
dependencies:
  google_generative_ai: ^0.4.0 (or latest version)
```
Run `flutter pub get` to install the package.


## Initializing the SDK

```
  GenerativeModel _initializeAIModel() {
    const apiKey = 'YOUR_API_KEY';
    openModel ??= GenerativeModel(
        model: 'gemini-pro',
        apiKey: apiKey,
        generationConfig: GenerationConfig(maxOutputTokens: 1000));
    return openModel!;
  }
```

## Maintaining Persistent Chat Sessions

To keep chat sessions open for continuous interaction, you can use static variables to maintain the state across different user inputs.

```
  static ChatSession? openChatSession;

  ChatSession _initializeAIChatSession(
      String userQuery, String companionResponse) {
    final newChatSession = _initializeAIModel().startChat(history: [
      Content.text(userQuery),
      Content.model([TextPart(companionResponse)])
    ]);
    openChatSession = newChatSession;
    return newChatSession;
  }
```

## Conclusion

Integrating AI into your Flutter app with the Gemini AI SDK opens up a world of possibilities. By understanding prompt design and maintaining persistent chat sessions, you can create an engaging and interactive Bible study experience for your users.

Stay tuned for the next article, **Harmonizing Technology and Faith: The Final Composition of the AI Bible Chat App**, where we’ll dive into the user interface design and user experience considerations for our AI Bible chat app.

Remember, the key to a successful Generative AI integration is a combination of technical know-how and creative prompt design. Keep experimenting and refining your approach to achieve the best results.

Here's a link to the previous article [here](https://dev.to/apow/flutter-faith-crafting-an-ai-bible-chat-app-with-stacked-architecture-part-2-18no)

Download the APK app sample (arm64) [here](https://drive.google.com/file/d/1_kBvIbgYM8-VfWvVVYyt1RbCvGbkIi2K/view?usp=sharing)