Skip to content

Commit 8474140

Browse files
committed
Merge branch 'main' into rl.thinking
2 parents 936e8b4 + 628a6c6 commit 8474140

File tree

12 files changed

+240
-42
lines changed

12 files changed

+240
-42
lines changed

firebase-ai/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
# Unreleased
22
* [changed] Added better description for requests which fail due to the Gemini API not being
33
configured.
4+
* [changed] Added a `dilation` parameter to `ImagenMaskReference.generateMaskAndPadForOutpainting`
5+
(#7260)
6+
7+
# 17.1.0
8+
=======
49
* [feature] added support for Imagen Editing, including inpainting, outpainting, control, style
510
transfer, and subject references (#7075)
11+
* [feature] **Preview:** Added support for bidirectional streaming in Gemini Developer Api
612

713
# 17.0.0
814
* [feature] Added support for configuring the "thinking" budget when using Gemini

firebase-ai/api.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,12 +698,14 @@ package com.google.firebase.ai.type {
698698
@com.google.firebase.ai.type.PublicPreviewAPI public abstract class ImagenMaskReference extends com.google.firebase.ai.type.ImagenReferenceImage {
699699
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
700700
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
701+
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
701702
field public static final com.google.firebase.ai.type.ImagenMaskReference.Companion Companion;
702703
}
703704

704705
public static final class ImagenMaskReference.Companion {
705706
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
706707
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
708+
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
707709
}
708710

709711
@com.google.firebase.ai.type.PublicPreviewAPI public final class ImagenPersonFilterLevel {

firebase-ai/gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
version=17.1.0
16-
latestReleasedVersion=17.0.0
15+
version=17.2.0
16+
latestReleasedVersion=17.1.0

firebase-ai/src/main/kotlin/com/google/firebase/ai/type/ImagenControlType.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,26 @@ package com.google.firebase.ai.type
1919
public class ImagenControlType internal constructor(internal val value: String) {
2020
public companion object {
2121

22-
/** Use edge detection to ensure the new image follow the same outlines */
22+
/**
23+
* Use edge detection to ensure the new image follows the same outlines as the reference image.
24+
*/
2325
@JvmField public val CANNY: ImagenControlType = ImagenControlType("CONTROL_TYPE_CANNY")
2426

25-
/** Use enhanced edge detection to ensure the new image follow similar outlines */
27+
/**
28+
* Use enhanced edge detection to ensure the new image follows the same outlines as the
29+
* reference image.
30+
*/
2631
@JvmField public val SCRIBBLE: ImagenControlType = ImagenControlType("CONTROL_TYPE_SCRIBBLE")
2732

28-
/** Use face mesh control to ensure that the new image has the same facial expressions */
33+
/**
34+
* Use face mesh control to ensure that the new image has the same facial expressions as the
35+
* reference image.
36+
*/
2937
@JvmField public val FACE_MESH: ImagenControlType = ImagenControlType("CONTROL_TYPE_FACE_MESH")
3038

3139
/**
3240
* Use color superpixels to ensure that the new image is similar in shape and color to the
33-
* original
41+
* reference image.
3442
*/
3543
@JvmField
3644
public val COLOR_SUPERPIXEL: ImagenControlType =

firebase-ai/src/main/kotlin/com/google/firebase/ai/type/ImagenEditMode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class ImagenEditMode private constructor(internal val value: String) {
2525
/** Removes an element from an image */
2626
@JvmField
2727
public val INPAINT_REMOVAL: ImagenEditMode = ImagenEditMode("EDIT_MODE_INPAINT_REMOVAL")
28-
/** Extend the borders of an image outwards */
28+
/** Extends the borders of an image outwards */
2929
@JvmField public val OUTPAINT: ImagenEditMode = ImagenEditMode("EDIT_MODE_OUTPAINT")
3030
}
3131
}

firebase-ai/src/main/kotlin/com/google/firebase/ai/type/ImagenReferenceImage.kt

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,11 @@ internal constructor(
8080
* @param referenceId the reference ID for this image, to be referenced in the prompt
8181
* @param enableComputation requests that the reference image be generated serverside instead of
8282
* provided
83-
* @param superpixelRegionSize if type is COLOR_SUPERPIXEL and [enableComputation] is true, this
84-
* will control the size of each superpixel region in pixels for the generated referenced image
85-
* @param superpixelRuler if type is COLOR_SUPERPIXEL and [enableComputation] is true, this will
86-
* control the superpixel smoothness factor for the generated referenced image
83+
* @param superpixelRegionSize if type is [ImagenControlType.COLOR_SUPERPIXEL] and
84+
* [enableComputation] is true, this will control the size of each superpixel region in pixels for
85+
* the generated referenced image
86+
* @param superpixelRuler if type is [ImagenControlType.COLOR_SUPERPIXEL] and [enableComputation] is
87+
* true, this will control the superpixel smoothness factor for the generated referenced image
8788
*/
8889
@PublicPreviewAPI
8990
public class ImagenControlReference(
@@ -102,9 +103,8 @@ public class ImagenControlReference(
102103
) {}
103104

104105
/**
105-
* Represents a reference image for Imagen editing which will mask of a region to be edited. This
106-
* image (generated or provided) should contain only black and white pixels, with black representing
107-
* parts of the image which should not change.
106+
* Represents a mask for Imagen editing. This image (generated or provided) should contain only
107+
* black and white pixels, with black representing parts of the image which should not change.
108108
*/
109109
@PublicPreviewAPI
110110
public abstract class ImagenMaskReference
@@ -113,17 +113,16 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
113113

114114
public companion object {
115115
/**
116-
* Generates these two reference images in order:
116+
* Generates two reference images of [ImagenRawImage] and [ImagenRawMask]. These images are
117+
* generated in this order:
117118
* * One [ImagenRawImage] containing the original image, padded out to the new dimensions with
118119
* black pixels, with the original image placed at the given placement
119120
* * One [ImagenRawMask] of the same dimensions containing white everywhere except at the
120-
* placement original image.
121-
*
122-
* This is the format expected by Imagen for outpainting requests.
121+
* placement original image. This is the format expected by Imagen for outpainting requests.
123122
*
124123
* @param image the original image
125-
* @param newDimensions the new dimensions for outpainting. This *must* be more than the
126-
* original image.
124+
* @param newDimensions the new dimensions for outpainting. These new dimensions *must* be more
125+
* than the original image.
127126
* @param newPosition the placement of the original image within the new outpainted image.
128127
*/
129128
@JvmOverloads
@@ -132,6 +131,29 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
132131
image: ImagenInlineImage,
133132
newDimensions: Dimensions,
134133
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
134+
): List<ImagenReferenceImage> =
135+
generateMaskAndPadForOutpainting(image, newDimensions, newPosition, 0.01)
136+
137+
/**
138+
* Generates two reference images of [ImagenRawImage] and [ImagenRawMask]. These images are
139+
* generated in this order:
140+
* * One [ImagenRawImage] containing the original image, padded out to the new dimensions with
141+
* black pixels, with the original image placed at the given placement
142+
* * One [ImagenRawMask] of the same dimensions containing white everywhere except at the
143+
* placement original image. This is the format expected by Imagen for outpainting requests.
144+
*
145+
* @param image the original image
146+
* @param newDimensions the new dimensions for outpainting. These new dimensions *must* be more
147+
* than the original image.
148+
* @param newPosition the placement of the original image within the new outpainted image.
149+
* @param dilation the dilation for the outpainting mask. See: [ImagenRawMask].
150+
*/
151+
@JvmStatic
152+
public fun generateMaskAndPadForOutpainting(
153+
image: ImagenInlineImage,
154+
newDimensions: Dimensions,
155+
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
156+
dilation: Double = 0.01
135157
): List<ImagenReferenceImage> {
136158
val originalBitmap = image.asBitmap()
137159
if (
@@ -181,7 +203,7 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
181203
newImageCanvas.drawBitmap(originalBitmap, null, normalizedImageRectangle, null)
182204
return listOf(
183205
ImagenRawImage(newImageBitmap.toImagenInlineImage()),
184-
ImagenRawMask(maskBitmap.toImagenInlineImage()),
206+
ImagenRawMask(maskBitmap.toImagenInlineImage(), dilation),
185207
)
186208
}
187209
}
@@ -190,8 +212,8 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
190212
/**
191213
* A generated mask image which will auto-detect and mask out the background. The background will be
192214
* white, and the foreground black
193-
* @param dilation the amount to dilate the mask, this can help smooth the borders of an edit and
194-
* make it seem more convincing. For example, 0.05 would dilate the mask 5%.
215+
* @param dilation the amount to dilate the mask. This can help smooth the borders of an edit and
216+
* make it seem more convincing. For example, `0.05` will dilate the mask 5%.
195217
*/
196218
@PublicPreviewAPI
197219
public class ImagenBackgroundMask(dilation: Double? = null) :
@@ -200,21 +222,20 @@ public class ImagenBackgroundMask(dilation: Double? = null) :
200222
/**
201223
* A generated mask image which will auto-detect and mask out the foreground. The background will be
202224
* black, and the foreground white
203-
* @param dilation the amount to dilate the mask, this can help smooth the borders of an edit and
204-
* make it seem more convincing. For example, 0.05 would dilate the mask 5%.
225+
* @param dilation the amount to dilate the mask. This can help smooth the borders of an edit and
226+
* make it seem more convincing. For example, `0.05` will dilate the mask 5%.
205227
*/
206228
@PublicPreviewAPI
207229
public class ImagenForegroundMask(dilation: Double? = null) :
208230
ImagenMaskReference(maskConfig = ImagenMaskConfig(ImagenMaskMode.FOREGROUND, dilation)) {}
209231

210232
/**
211-
* Represents a reference image for Imagen editing which will mask of a region to be edited. This
212-
* image should contain only black and white pixels, with black representing parts of the image
213-
* which should not change.
233+
* Represents a mask for Imagen editing. This image should contain only black and white pixels, with
234+
* black representing parts of the image which should not change.
214235
*
215236
* @param mask the mask image
216-
* @param dilation the amount to dilate the mask, this can help smooth the borders of an edit and
217-
* make it seem more convincing. For example, 0.05 would dilate the mask 5%.
237+
* @param dilation the amount to dilate the mask. This can help smooth the borders of an edit and
238+
* make it seem more convincing. For example, `0.05` will dilate the mask 5%.
218239
*/
219240
@PublicPreviewAPI
220241
public class ImagenRawMask(mask: ImagenInlineImage, dilation: Double? = null) :
@@ -226,11 +247,11 @@ public class ImagenRawMask(mask: ImagenInlineImage, dilation: Double? = null) :
226247
/**
227248
* Represents a generated mask for Imagen editing which masks out certain objects using object
228249
* detection.
229-
* @param classes the list of segmentation IDs for objects to detect and mask out. See
230-
* [here](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api-edit#segment-ids)
231-
* for a list of segmentation IDs
232-
* @param dilation the amount to dilate the mask, this can help smooth the borders of an edit and
233-
* make it seem more convincing. For example, 0.05 would dilate the mask 5%.
250+
* @param classes the list of segmentation IDs for objects to detect and mask out. Find a
251+
* [list of segmentation IDs](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api-edit#segment-ids)
252+
* in the Vertex AI documentation.
253+
* @param dilation the amount to dilate the mask. This can help smooth the borders of an edit and
254+
* make it seem more convincing. For example, `0.05` will dilate the mask 5%.
234255
*/
235256
@PublicPreviewAPI
236257
public class ImagenSemanticMask(classes: List<Int>, dilation: Double? = null) :

firebase-dataconnect/gradleplugin/plugin/src/main/kotlin/com/google/firebase/dataconnect/gradle/plugin/DataConnectExecutableLauncher.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ import org.gradle.api.Task
2121
interface DataConnectExecutableConfig {
2222
var outputDirectory: File?
2323
var connectors: Collection<String>
24+
var connectorId: Collection<String>
2425
var listen: String?
2526
var localConnectionString: String?
2627
var logFile: File?
2728
var schemaExtensionsOutputEnabled: Boolean?
29+
var platform: String?
2830
}
2931

3032
fun Task.runDataConnectExecutable(
@@ -37,10 +39,12 @@ fun Task.runDataConnectExecutable(
3739
object : DataConnectExecutableConfig {
3840
override var outputDirectory: File? = null
3941
override var connectors: Collection<String> = emptyList()
42+
override var connectorId: Collection<String> = emptyList()
4043
override var listen: String? = null
4144
override var localConnectionString: String? = null
4245
override var logFile: File? = null
4346
override var schemaExtensionsOutputEnabled: Boolean? = null
47+
override var platform: String? = null
4448
}
4549
.apply(configure)
4650

@@ -76,7 +80,13 @@ fun Task.runDataConnectExecutable(
7680
args("-connectors=${it.joinToString(",")}")
7781
}
7882
}
83+
config.connectorId.let {
84+
if (it.isNotEmpty()) {
85+
args("-connector_id=${it.joinToString(",")}")
86+
}
87+
}
7988
config.listen?.let { args("-listen=${it}") }
89+
config.platform?.let { args("-platform=${it}") }
8090
config.localConnectionString?.let { args("-local_connection_string=${it}") }
8191
config.schemaExtensionsOutputEnabled?.let { args("-enable_output_schema_extensions=${it}") }
8292
}

0 commit comments

Comments
 (0)