From 282985c03fa78b2ac884d0757e125bcfc5fc22e9 Mon Sep 17 00:00:00 2001 From: rosariopf Date: Tue, 20 May 2025 19:39:33 +0100 Subject: [PATCH 1/3] refactor: use Firebase AI Logic SDK --- app/build.gradle.kts | 2 +- core/network/build.gradle.kts | 2 +- .../vertexai/FirebaseAiDataSource.kt | 31 ++++++++++--------- gradle/libs.versions.toml | 4 +-- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 51403db0..fb634eea 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -121,7 +121,7 @@ dependencies { implementation(platform(libs.firebase.bom)) implementation(libs.firebase.crashlytics) - implementation(libs.firebase.vertexai) + implementation(libs.firebase.ai) implementation(libs.firebase.app.check) implementation(libs.firebase.config) implementation(libs.firebase.appcheck.debug) diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 91098500..18f595dd 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -71,7 +71,7 @@ dependencies { implementation(libs.coil.compose.http) implementation(libs.coil.gif) implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.vertexai) + implementation(libs.firebase.ai) implementation(libs.firebase.analytics) { exclude(group = "com.google.guava") } diff --git a/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt b/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt index 51695894..8b52aa62 100644 --- a/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt +++ b/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt @@ -22,19 +22,20 @@ import com.android.developers.androidify.model.ImageValidationError import com.android.developers.androidify.model.ValidatedDescription import com.android.developers.androidify.model.ValidatedImage import com.google.firebase.Firebase -import com.google.firebase.vertexai.GenerativeModel -import com.google.firebase.vertexai.ImagenModel -import com.google.firebase.vertexai.type.HarmBlockThreshold -import com.google.firebase.vertexai.type.HarmCategory -import com.google.firebase.vertexai.type.ImagenPersonFilterLevel -import com.google.firebase.vertexai.type.ImagenSafetyFilterLevel -import com.google.firebase.vertexai.type.ImagenSafetySettings -import com.google.firebase.vertexai.type.PublicPreviewAPI -import com.google.firebase.vertexai.type.SafetySetting -import com.google.firebase.vertexai.type.Schema -import com.google.firebase.vertexai.type.content -import com.google.firebase.vertexai.type.generationConfig -import com.google.firebase.vertexai.vertexAI +import com.google.firebase.ai.GenerativeModel +import com.google.firebase.ai.ImagenModel +import com.google.firebase.ai.type.HarmBlockThreshold +import com.google.firebase.ai.type.HarmCategory +import com.google.firebase.ai.type.ImagenPersonFilterLevel +import com.google.firebase.ai.type.ImagenSafetyFilterLevel +import com.google.firebase.ai.type.ImagenSafetySettings +import com.google.firebase.ai.type.PublicPreviewAPI +import com.google.firebase.ai.type.SafetySetting +import com.google.firebase.ai.type.Schema +import com.google.firebase.ai.type.content +import com.google.firebase.ai.type.generationConfig +import com.google.firebase.ai.ai +import com.google.firebase.ai.type.GenerativeBackend import kotlinx.serialization.json.Json import kotlinx.serialization.json.booleanOrNull import kotlinx.serialization.json.decodeFromJsonElement @@ -73,7 +74,7 @@ class FirebaseAiDataSourceImpl @Inject constructor( private val remoteConfigDataSource: RemoteConfigDataSource, ) : FirebaseAiDataSource { private fun createGenerativeTextModel(jsonSchema: Schema, temperature: Float? = null): GenerativeModel { - return Firebase.vertexAI.generativeModel( + return Firebase.ai(backend = GenerativeBackend.vertexAI()).generativeModel( modelName = remoteConfigDataSource.textModelName(), generationConfig = generationConfig { responseMimeType = "application/json" @@ -91,7 +92,7 @@ class FirebaseAiDataSourceImpl @Inject constructor( } private fun createGenerativeImageModel(): ImagenModel { - return Firebase.vertexAI.imagenModel( + return Firebase.ai.imagenModel( remoteConfigDataSource.imageModelName(), safetySettings = ImagenSafetySettings( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e5c1860a..bb677d9d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,7 +25,7 @@ coreKtx = "1.15.0" coreSplashscreen = "1.0.1" crashlytics = "3.0.3" espressoCore = "3.6.1" -firebaseBom = "33.13.0" +firebaseBom = "33.14.0" firebaseConfigKtx = "22.1.1" googleServices = "4.4.2" hiltAndroid = "2.56.2" @@ -107,7 +107,7 @@ firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "fir firebase-config = { module = "com.google.firebase:firebase-config" } firebase-config-ktx = { group = "com.google.firebase", name = "firebase-config-ktx", version.ref = "firebaseConfigKtx" } firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" } -firebase-vertexai = { module = "com.google.firebase:firebase-vertexai" } +firebase-ai = { module = "com.google.firebase:firebase-ai" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hiltAndroid" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hiltAndroid" } hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hiltAndroid" } From 37dfa5e2bf7475cf818ba5d7305bdf591ff23d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20P=2E=20Fernandes?= Date: Tue, 20 May 2025 19:53:25 +0100 Subject: [PATCH 2/3] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 534a919d..50bedd06 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The app combines a variety of different Google technologies, such as: ## Setup and installation 1. Clone the repository. -2. Create a [Firebase project](https://firebase.google.com/products/vertex-ai-in-firebase) and +2. Create a [Firebase project](https://firebase.google.com/products/firebase-ai-logic) and generate a `google-services.json` file. Replace the current placeholder app/google-services.json file with your own json file created above. Be sure to enable Vertex AI SDK. @@ -51,4 +51,4 @@ See [Contributing](CONTRIBUTING.md). ## License Androidify 2.0 is licensed under the [Apache License 2.0](LICENSE). See the `LICENSE` file for -details. \ No newline at end of file +details. From a5cebcfe14d8a4d250fefd779fc41ac5b270dbc5 Mon Sep 17 00:00:00 2001 From: rosariopf Date: Tue, 20 May 2025 20:36:41 +0100 Subject: [PATCH 3/3] use Vertex AI backend for imagen --- .../developers/androidify/vertexai/FirebaseAiDataSource.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt b/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt index 8b52aa62..24e079d7 100644 --- a/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt +++ b/core/network/src/main/java/com/android/developers/androidify/vertexai/FirebaseAiDataSource.kt @@ -92,7 +92,7 @@ class FirebaseAiDataSourceImpl @Inject constructor( } private fun createGenerativeImageModel(): ImagenModel { - return Firebase.ai.imagenModel( + return Firebase.ai(backend = GenerativeBackend.vertexAI()).imagenModel( remoteConfigDataSource.imageModelName(), safetySettings = ImagenSafetySettings(