From 0007a825a0d192072dfc0b0e48e6aebb680e350a Mon Sep 17 00:00:00 2001 From: David Motsonashvili Date: Tue, 7 Jan 2025 11:21:08 -0800 Subject: [PATCH 1/3] Added java implementation for imagen --- .../vertexai/java/ImageModelFutures.kt | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt new file mode 100644 index 00000000000..e09430c9400 --- /dev/null +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.firebase.vertexai.java + +import androidx.concurrent.futures.SuspendToFutureAdapter +import com.google.common.util.concurrent.ListenableFuture +import com.google.firebase.vertexai.ImageModel +import com.google.firebase.vertexai.type.ImagenGCSImage +import com.google.firebase.vertexai.type.ImagenGenerationConfig +import com.google.firebase.vertexai.type.ImagenGenerationResponse +import com.google.firebase.vertexai.type.ImagenInlineImage + +/** + * Wrapper class providing Java compatible methods for [ImageModel]. + * + * @see [ImageModel] + */ +public abstract class ImageModelFutures internal constructor() { + /** + * Generates an image, returning the result directly to the caller. + * + * @param prompt The main text prompt from which the image is generated. + * @param config contains secondary image generation parameters. + */ + public abstract fun generateImage( + prompt: String, + config: ImagenGenerationConfig?, + ): ListenableFuture> + + /** + * Generates an image, storing the result in Google Cloud Storage and returning a URL + * + * @param prompt The main text prompt from which the image is generated. + * @param gcsUri Specifies the GCS bucket in which to store the image. + * @param config contains secondary image generation parameters. + */ + public abstract fun generateImage( + prompt: String, + gcsUri: String, + config: ImagenGenerationConfig?, + ): ListenableFuture> + + /** Returns the [ImageModel] object wrapped by this object. */ + public abstract fun getImageModel(): ImageModel + + private class FuturesImpl(private val model: ImageModel) : ImageModelFutures() { + override fun generateImage( + prompt: String, + config: ImagenGenerationConfig?, + ): ListenableFuture> = + SuspendToFutureAdapter.launchFuture { model.generateImage(prompt, config) } + + override fun generateImage( + prompt: String, + gcsUri: String, + config: ImagenGenerationConfig?, + ): ListenableFuture> = + SuspendToFutureAdapter.launchFuture { model.generateImage(prompt, gcsUri, config) } + + override fun getImageModel(): ImageModel = model + } + + public companion object { + + /** @return a [ImageModelFutures] created around the provided [ImageModel] */ + @JvmStatic public fun from(model: ImageModel): ImageModelFutures = FuturesImpl(model) + } +} From ab6d5553f18c020baa452198622ab75746dfec2d Mon Sep 17 00:00:00 2001 From: David Motsonashvili Date: Mon, 27 Jan 2025 11:59:58 -0800 Subject: [PATCH 2/3] generateImage -> generateImages --- .../google/firebase/vertexai/java/ImageModelFutures.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt index e09430c9400..c03a5b0aaa7 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt @@ -36,7 +36,7 @@ public abstract class ImageModelFutures internal constructor() { * @param prompt The main text prompt from which the image is generated. * @param config contains secondary image generation parameters. */ - public abstract fun generateImage( + public abstract fun generateImages( prompt: String, config: ImagenGenerationConfig?, ): ListenableFuture> @@ -48,7 +48,7 @@ public abstract class ImageModelFutures internal constructor() { * @param gcsUri Specifies the GCS bucket in which to store the image. * @param config contains secondary image generation parameters. */ - public abstract fun generateImage( + public abstract fun generateImages( prompt: String, gcsUri: String, config: ImagenGenerationConfig?, @@ -58,13 +58,13 @@ public abstract class ImageModelFutures internal constructor() { public abstract fun getImageModel(): ImageModel private class FuturesImpl(private val model: ImageModel) : ImageModelFutures() { - override fun generateImage( + override fun generateImages( prompt: String, config: ImagenGenerationConfig?, ): ListenableFuture> = SuspendToFutureAdapter.launchFuture { model.generateImage(prompt, config) } - override fun generateImage( + override fun generateImages( prompt: String, gcsUri: String, config: ImagenGenerationConfig?, From 44d7d0497e84eaf9203d1f04d22b1e33092889fe Mon Sep 17 00:00:00 2001 From: David Motsonashvili Date: Tue, 28 Jan 2025 13:45:19 -0800 Subject: [PATCH 3/3] fix for renames on main branch --- ...eModelFutures.kt => ImagenModelFutures.kt} | 31 +++++++------------ .../vertexai/type/ImagenModelConfig.kt | 3 -- 2 files changed, 12 insertions(+), 22 deletions(-) rename firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/{ImageModelFutures.kt => ImagenModelFutures.kt} (62%) delete mode 100644 firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/ImagenModelConfig.kt diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImagenModelFutures.kt similarity index 62% rename from firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt rename to firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImagenModelFutures.kt index c03a5b0aaa7..bcdb981a6a2 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImageModelFutures.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/java/ImagenModelFutures.kt @@ -18,27 +18,24 @@ package com.google.firebase.vertexai.java import androidx.concurrent.futures.SuspendToFutureAdapter import com.google.common.util.concurrent.ListenableFuture -import com.google.firebase.vertexai.ImageModel +import com.google.firebase.vertexai.ImagenModel import com.google.firebase.vertexai.type.ImagenGCSImage -import com.google.firebase.vertexai.type.ImagenGenerationConfig import com.google.firebase.vertexai.type.ImagenGenerationResponse import com.google.firebase.vertexai.type.ImagenInlineImage /** - * Wrapper class providing Java compatible methods for [ImageModel]. + * Wrapper class providing Java compatible methods for [ImagenModel]. * - * @see [ImageModel] + * @see [ImagenModel] */ -public abstract class ImageModelFutures internal constructor() { +public abstract class ImagenModelFutures internal constructor() { /** * Generates an image, returning the result directly to the caller. * * @param prompt The main text prompt from which the image is generated. - * @param config contains secondary image generation parameters. */ public abstract fun generateImages( prompt: String, - config: ImagenGenerationConfig?, ): ListenableFuture> /** @@ -46,37 +43,33 @@ public abstract class ImageModelFutures internal constructor() { * * @param prompt The main text prompt from which the image is generated. * @param gcsUri Specifies the GCS bucket in which to store the image. - * @param config contains secondary image generation parameters. */ public abstract fun generateImages( prompt: String, gcsUri: String, - config: ImagenGenerationConfig?, ): ListenableFuture> - /** Returns the [ImageModel] object wrapped by this object. */ - public abstract fun getImageModel(): ImageModel + /** Returns the [ImagenModel] object wrapped by this object. */ + public abstract fun getImageModel(): ImagenModel - private class FuturesImpl(private val model: ImageModel) : ImageModelFutures() { + private class FuturesImpl(private val model: ImagenModel) : ImagenModelFutures() { override fun generateImages( prompt: String, - config: ImagenGenerationConfig?, ): ListenableFuture> = - SuspendToFutureAdapter.launchFuture { model.generateImage(prompt, config) } + SuspendToFutureAdapter.launchFuture { model.generateImages(prompt) } override fun generateImages( prompt: String, gcsUri: String, - config: ImagenGenerationConfig?, ): ListenableFuture> = - SuspendToFutureAdapter.launchFuture { model.generateImage(prompt, gcsUri, config) } + SuspendToFutureAdapter.launchFuture { model.generateImages(prompt, gcsUri) } - override fun getImageModel(): ImageModel = model + override fun getImageModel(): ImagenModel = model } public companion object { - /** @return a [ImageModelFutures] created around the provided [ImageModel] */ - @JvmStatic public fun from(model: ImageModel): ImageModelFutures = FuturesImpl(model) + /** @return a [ImagenModelFutures] created around the provided [ImagenModel] */ + @JvmStatic public fun from(model: ImagenModel): ImagenModelFutures = FuturesImpl(model) } } diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/ImagenModelConfig.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/ImagenModelConfig.kt deleted file mode 100644 index 685933d0145..00000000000 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/ImagenModelConfig.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.firebase.vertexai.type - -public class ImagenModelConfig private constructor() {}