Skip to content

[AI Logic] Add Imagen support #1279

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 7, 2025
Merged

[AI Logic] Add Imagen support #1279

merged 6 commits into from
Jul 7, 2025

Conversation

a-maurice
Copy link
Collaborator

Description

Provide details of the change, and generalize the change in the PR title above.

Add Imagen support to Firebase AI Logic. Adds some basic tests, and moves some internal functions to the a shared place for all the rest calls to use.


Testing

Describe how you've tested these changes.

Running tests locally.


Type of Change

Place an x the applicable box:

  • Bug fix. Add the issue # below if applicable.
  • New feature. A non-breaking change which adds functionality.
  • Other, such as a build process or documentation change.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @a-maurice, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces comprehensive support for Google's Imagen 3 image generation models within the Firebase AI Logic library. It provides a new API for interacting with Imagen, along with detailed configuration options for image generation and safety settings. Additionally, it includes a significant refactoring effort to centralize HTTP utility functions, improving the overall architecture and testability of the AI client.

Highlights

  • Imagen Model Integration: Added a new ImagenModel class and a GetImagenModel factory method to FirebaseAI.cs to support image generation using Imagen 3 models.
  • Imagen-Specific Configurations: Introduced dedicated structs (ImagenGenerationConfig, ImagenSafetySettings) and enums (ImagenAspectRatio, ImagenImageFormat, SafetyFilterLevel, PersonFilterLevel) to provide granular control over image generation parameters and safety filters.
  • Shared HTTP Utilities: Refactored common HTTP request logic (URL construction, header setting, response validation) from GenerativeModel.cs into a new HttpHelpers.cs utility class, promoting code reuse and maintainability.
  • Comprehensive Imagen Testing: Added new automated tests (TestImagenGenerateImage, TestImagenGenerateImageOptions) and internal response parsing tests (InternalTestGenerateImagesBase64, InternalTestGenerateImagesAllFiltered, InternalTestGenerateImagesBase64SomeFiltered) to validate the new Imagen functionality.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds Imagen support to the Firebase AI SDK. It includes new classes for the Imagen model, configuration, and response types. The refactoring of HTTP handling logic into a shared HttpHelpers class is a good step towards code reuse. I've identified a critical issue regarding a potential NullReferenceException in the response parsing logic, and a medium-severity bug in one of the new tests.

@a-maurice a-maurice requested a review from cynthiajoan July 1, 2025 22:02
/// Intended for internal use only.
/// This method is used for deserializing JSON responses and should not be called directly.
/// </summary>
internal static IImagenImage FromJson(Dictionary<string, object> jsonDict) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since the only return result is ImagenInlineImage, why use interface as the return type signature?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is weird. Below when we call this, we are storing it in a List, where T is the interface. So we can easily cast from the interface to T, but not from ImagenInlineImage to T (even though the code has proven that T is ImagenInlineImage). I could change this to the actual class, and then below double cast, if you think that would be easier to understand.

@a-maurice a-maurice merged commit 5e1c3b4 into main Jul 7, 2025
5 checks passed
@a-maurice a-maurice deleted the am-imagen branch July 7, 2025 23:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants