diff --git a/firebase-ai/CHANGELOG.md b/firebase-ai/CHANGELOG.md index 241a23f0f63..3244c980674 100644 --- a/firebase-ai/CHANGELOG.md +++ b/firebase-ai/CHANGELOG.md @@ -1,8 +1,12 @@ # Unreleased * [fixed] Fixed `FirebaseAI.getInstance` StackOverflowException (#6971) -* [fixed] Fixed an issue that was causing the SDK to send empty `FunctionDeclaration` descriptions to the API. +* [fixed] Fixed an issue that was causing the SDK to send empty `FunctionDeclaration` descriptions to the API. +* [changed] Introduced the `Voice` class, which accepts a voice name, and deprecated the `Voices` class. +* [changed] **Breaking Change**: Updated `SpeechConfig` to take in `Voice` class instead of `Voices` class. + * **Action Required:** Update all references of `SpeechConfig` initialization to use `Voice` class. + # 16.0.0 * [feature] Initial release of the Firebase AI SDK (`firebase-ai`). This SDK *replaces* the previous Vertex AI in Firebase SDK (`firebase-vertexai`) to accommodate the evolving set of supported diff --git a/firebase-ai/api.txt b/firebase-ai/api.txt index c9d55f52295..5645b466110 100644 --- a/firebase-ai/api.txt +++ b/firebase-ai/api.txt @@ -863,9 +863,9 @@ package com.google.firebase.ai.type { } @com.google.firebase.ai.type.PublicPreviewAPI public final class SpeechConfig { - ctor public SpeechConfig(com.google.firebase.ai.type.Voices voice); - method public com.google.firebase.ai.type.Voices getVoice(); - property public final com.google.firebase.ai.type.Voices voice; + ctor public SpeechConfig(com.google.firebase.ai.type.Voice voice); + method public com.google.firebase.ai.type.Voice getVoice(); + property public final com.google.firebase.ai.type.Voice voice; } public abstract class StringFormat { @@ -914,19 +914,25 @@ package com.google.firebase.ai.type { property public final int totalTokenCount; } - @com.google.firebase.ai.type.PublicPreviewAPI public final class Voices { - method public int getOrdinal(); - property public final int ordinal; - field public static final com.google.firebase.ai.type.Voices AOEDE; - field public static final com.google.firebase.ai.type.Voices CHARON; - field public static final com.google.firebase.ai.type.Voices.Companion Companion; - field public static final com.google.firebase.ai.type.Voices FENRIR; - field public static final com.google.firebase.ai.type.Voices KORE; - field public static final com.google.firebase.ai.type.Voices PUCK; - field public static final com.google.firebase.ai.type.Voices UNSPECIFIED; + @com.google.firebase.ai.type.PublicPreviewAPI public final class Voice { + ctor public Voice(String voiceName); + method public String getVoiceName(); + property public final String voiceName; + } + + @Deprecated @com.google.firebase.ai.type.PublicPreviewAPI public final class Voices { + method @Deprecated public int getOrdinal(); + property @Deprecated public final int ordinal; + field @Deprecated public static final com.google.firebase.ai.type.Voices AOEDE; + field @Deprecated public static final com.google.firebase.ai.type.Voices CHARON; + field @Deprecated public static final com.google.firebase.ai.type.Voices.Companion Companion; + field @Deprecated public static final com.google.firebase.ai.type.Voices FENRIR; + field @Deprecated public static final com.google.firebase.ai.type.Voices KORE; + field @Deprecated public static final com.google.firebase.ai.type.Voices PUCK; + field @Deprecated public static final com.google.firebase.ai.type.Voices UNSPECIFIED; } - public static final class Voices.Companion { + @Deprecated public static final class Voices.Companion { } } diff --git a/firebase-ai/gradle.properties b/firebase-ai/gradle.properties index b9f800fb7d6..1c7c87996dd 100644 --- a/firebase-ai/gradle.properties +++ b/firebase-ai/gradle.properties @@ -12,5 +12,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -version=16.0.1 +version=16.1.0 latestReleasedVersion=16.0.0 diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/SpeechConfig.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/SpeechConfig.kt index 8a25b47893f..12de21caff3 100644 --- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/SpeechConfig.kt +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/SpeechConfig.kt @@ -23,14 +23,14 @@ import kotlinx.serialization.Serializable @PublicPreviewAPI public class SpeechConfig( /** The voice to be used for the server's speech response. */ - public val voice: Voices + public val voice: Voice ) { @Serializable internal data class Internal(@SerialName("voice_config") val voiceConfig: VoiceConfigInternal) { @Serializable internal data class VoiceConfigInternal( - @SerialName("prebuilt_voice_config") val prebuiltVoiceConfig: Voices.Internal, + @SerialName("prebuilt_voice_config") val prebuiltVoiceConfig: Voice.Internal, ) } diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voice.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voice.kt new file mode 100644 index 00000000000..7053fc986cf --- /dev/null +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voice.kt @@ -0,0 +1,34 @@ +/* + * 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.ai.type + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Various voices supported by the server. The list of all voices can be found + * [here](https://cloud.google.com/text-to-speech/docs/chirp3-hd) + */ +@PublicPreviewAPI +public class Voice public constructor(public val voiceName: String) { + + @Serializable internal data class Internal(@SerialName("voice_name") val voiceName: String) + + internal fun toInternal(): Internal { + return Internal(this.voiceName) + } +} diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voices.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voices.kt index ad26db572bc..d5e1f738dc2 100644 --- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voices.kt +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Voices.kt @@ -20,6 +20,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable /** Various voices supported by the server */ +@Deprecated("Please use the Voice class instead.", ReplaceWith("Voice")) @PublicPreviewAPI public class Voices private constructor(public val ordinal: Int) { diff --git a/firebase-ai/src/testUtil/java/com/google/firebase/ai/JavaCompileTests.java b/firebase-ai/src/testUtil/java/com/google/firebase/ai/JavaCompileTests.java index 0c32921d5db..559c4ac8a04 100644 --- a/firebase-ai/src/testUtil/java/com/google/firebase/ai/JavaCompileTests.java +++ b/firebase-ai/src/testUtil/java/com/google/firebase/ai/JavaCompileTests.java @@ -61,7 +61,7 @@ import com.google.firebase.ai.type.SpeechConfig; import com.google.firebase.ai.type.TextPart; import com.google.firebase.ai.type.UsageMetadata; -import com.google.firebase.ai.type.Voices; +import com.google.firebase.ai.type.Voice; import com.google.firebase.concurrent.FirebaseExecutors; import java.util.ArrayList; import java.util.Calendar; @@ -137,7 +137,7 @@ private LiveGenerationConfig getLiveConfig() { .setFrequencyPenalty(1.0F) .setPresencePenalty(2.0F) .setResponseModality(ResponseModality.AUDIO) - .setSpeechConfig(new SpeechConfig(Voices.AOEDE)) + .setSpeechConfig(new SpeechConfig(new Voice("AOEDE"))) .build(); } diff --git a/release.json b/release.json new file mode 100644 index 00000000000..74cdfb6fdad --- /dev/null +++ b/release.json @@ -0,0 +1,10 @@ +{ + "name": "m165", + "libraries": [ + ":firebase-ai", + ":firebase-crashlytics", + ":firebase-crashlytics-ndk", + ":firebase-sessions", + ":firebase-crashlytics:ktx" + ] +} \ No newline at end of file diff --git a/release_report.json b/release_report.json new file mode 100644 index 00000000000..6fbeae8c7d5 --- /dev/null +++ b/release_report.json @@ -0,0 +1,84 @@ +{ + "changesByLibraryName": { + "firebase-ai": [ + { + "commitId": "4e027a9f2751584cf5f8d411c9a031e72ef208a2", + "prId": "6995", + "author": "Rosário P. Fernandes", + "message": "Update ImagenPersonFilterLevel refdocs to match the iOS SDK (#6995)\n\nThis PR updates the ImagenPersonFilter refdocs to match the [iOS\nSDK](https://github.com/firebase/firebase-ios-sdk/blob/4f6c342424df416d78dfc12d08c97769fd4e1152/FirebaseAI/Sources/Types/Public/Imagen/ImagenPersonFilterLevel.swift#L33-L45),\nincluding the information about the [Person and face generation\nallowlist](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen).", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/4e027a9f2751584cf5f8d411c9a031e72ef208a2", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6995" + }, + { + "commitId": "82ad185491d1134f66ce5bfa6020b1d1ab8b8270", + "prId": "6972", + "author": "emilypgoogle", + "message": "Fix Firebase AI StackOverflow (#6972)\n\nSee #6971", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/82ad185491d1134f66ce5bfa6020b1d1ab8b8270", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6972" + }, + { + "commitId": "9c004772e550ac5f83eb95afb4c27b05ff8f1f0d", + "prId": "6957", + "author": "Rosário P. Fernandes", + "message": "fix(ai): pass FunctionDeclaration#description arg to internal class (#6957)\n\nIt seems like the value set in `FunctionDeclaration#description` was\nnever making it to the API.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/9c004772e550ac5f83eb95afb4c27b05ff8f1f0d", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6957" + }, + { + "commitId": "129cb89fb28d3d76519e85471e6fcaad90db3b90", + "prId": "6970", + "author": "Daymon", + "message": "Update changelog and Vertex version from M164 (#6970)\n\nPer [b/419000235](https://b.corp.google.com/issues/419000235),\n\nThis updates the changelogs and vai version changes we made on the\nrelease branch for M164. This should be merged before we create the\nmerge-back branch, such that the merge-back works as expected.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/129cb89fb28d3d76519e85471e6fcaad90db3b90", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6970" + }, + { + "commitId": "2a1776413caaa70182c1c782fe7efcc5d73b2303", + "prId": "6948", + "author": "Vinay Guthal", + "message": "update headers in the correct location (#6948)\n\n", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/2a1776413caaa70182c1c782fe7efcc5d73b2303", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6948" + } + ], + "firebase-crashlytics": [ + { + "commitId": "a9960190582812b7298196828509fbb5e49e4b33", + "prId": "6945", + "author": "Matthew Robertson", + "message": "Update Crashlytics changelog (#6945)\n\n", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/a9960190582812b7298196828509fbb5e49e4b33", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6945" + } + ], + "firebase-crashlytics-ndk": [ + { + "commitId": "78360ad0ccd55589d37206729916ac57b61b7907", + "prId": "6946", + "author": "Daymon", + "message": "Add crashlytics-ndk changelog entry (#6946)\n\n#6945 was missing a changelog entry for the dependent library. This PR\nadds that changelog.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/78360ad0ccd55589d37206729916ac57b61b7907", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6946" + } + ], + "firebase-sessions": [ + { + "commitId": "9f5839fd4e823703629e60e876034b791f589c6e", + "prId": "6982", + "author": "Matthew Robertson", + "message": "Add macrobenchmark module for sessions test app (#6982)\n\nAdd macrobenchmark module for sessions test app. This is just the setup\nand the example startup benchmark. I will add more in the PerfAQS\nproject, and write instructions in the readme then.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/9f5839fd4e823703629e60e876034b791f589c6e", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/6982" + } + ], + "firebase-crashlytics/ktx": [ + ] + }, + "changedLibrariesWithNoChangelog": [ + ":firebase-inappmessaging", + ":firebase-inappmessaging-display", + ":firebase-inappmessaging:ktx", + ":firebase-inappmessaging-display:ktx" + ] +} \ No newline at end of file diff --git a/release_report.md b/release_report.md new file mode 100644 index 00000000000..94ac9ef46f9 --- /dev/null +++ b/release_report.md @@ -0,0 +1,37 @@ +# Release Report +## firebase-ai + +* Update ImagenPersonFilterLevel refdocs to match the iOS SDK (#6995) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6995) [commit](https://github.com/firebase/firebase-android-sdk/commit/4e027a9f2751584cf5f8d411c9a031e72ef208a2) [Rosário P. Fernandes] + +* Fix Firebase AI StackOverflow (#6972) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6972) [commit](https://github.com/firebase/firebase-android-sdk/commit/82ad185491d1134f66ce5bfa6020b1d1ab8b8270) [emilypgoogle] + +* fix(ai): pass FunctionDeclaration#description arg to internal class (#6957) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6957) [commit](https://github.com/firebase/firebase-android-sdk/commit/9c004772e550ac5f83eb95afb4c27b05ff8f1f0d) [Rosário P. Fernandes] + +* Update changelog and Vertex version from M164 (#6970) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6970) [commit](https://github.com/firebase/firebase-android-sdk/commit/129cb89fb28d3d76519e85471e6fcaad90db3b90) [Daymon] + +* update headers in the correct location (#6948) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6948) [commit](https://github.com/firebase/firebase-android-sdk/commit/2a1776413caaa70182c1c782fe7efcc5d73b2303) [Vinay Guthal] + +## firebase-crashlytics + +* Update Crashlytics changelog (#6945) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6945) [commit](https://github.com/firebase/firebase-android-sdk/commit/a9960190582812b7298196828509fbb5e49e4b33) [Matthew Robertson] + +## firebase-crashlytics-ndk + +* Add crashlytics-ndk changelog entry (#6946) + [pr](https://github.com/firebase/firebase-android-sdk/pull/6946) [commit](https://github.com/firebase/firebase-android-sdk/commit/78360ad0ccd55589d37206729916ac57b61b7907) [Daymon] + + +## firebase-crashlytics/ktx + + +## SDKs with changes, but no changelogs +:firebase-inappmessaging +:firebase-inappmessaging-display +:firebase-inappmessaging:ktx +:firebase-inappmessaging-display:ktx \ No newline at end of file