@@ -23,14 +23,10 @@ import com.android.developers.androidify.model.ValidatedDescription
2323import com.android.developers.androidify.model.ValidatedImage
2424import com.google.firebase.Firebase
2525import com.google.firebase.ai.GenerativeModel
26- import com.google.firebase.ai.ImagenModel
2726import com.google.firebase.ai.ai
2827import com.google.firebase.ai.type.GenerativeBackend
2928import com.google.firebase.ai.type.HarmBlockThreshold
3029import com.google.firebase.ai.type.HarmCategory
31- import com.google.firebase.ai.type.ImagenPersonFilterLevel
32- import com.google.firebase.ai.type.ImagenSafetyFilterLevel
33- import com.google.firebase.ai.type.ImagenSafetySettings
3430import com.google.firebase.ai.type.PublicPreviewAPI
3531import com.google.firebase.ai.type.ResponseModality
3632import com.google.firebase.ai.type.SafetySetting
@@ -81,15 +77,20 @@ class FirebaseAiDataSourceImpl @Inject constructor(
8177 )
8278 }
8379
84- private fun createGenerativeImageModel (): ImagenModel {
85- return Firebase .ai(backend = GenerativeBackend .vertexAI()).imagenModel(
86- remoteConfigDataSource.imageModelName(),
87- safetySettings =
88- ImagenSafetySettings (
89- safetyFilterLevel = ImagenSafetyFilterLevel .BLOCK_LOW_AND_ABOVE ,
90- // Uses `ALLOW_ADULT` filter since `ALLOW_ALL` requires a special approval
91- // See https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen
92- personFilterLevel = ImagenPersonFilterLevel .ALLOW_ADULT ,
80+ private fun createGenerativeImageModel (): GenerativeModel {
81+ return Firebase .ai(backend = GenerativeBackend .vertexAI()).generativeModel(
82+ modelName = remoteConfigDataSource.imageModelName(),
83+ generationConfig = generationConfig {
84+ responseModalities = listOf (
85+ ResponseModality .IMAGE ,
86+ )
87+ },
88+ safetySettings = listOf (
89+ SafetySetting (HarmCategory .HARASSMENT , HarmBlockThreshold .LOW_AND_ABOVE ),
90+ SafetySetting (HarmCategory .HATE_SPEECH , HarmBlockThreshold .LOW_AND_ABOVE ),
91+ SafetySetting (HarmCategory .SEXUALLY_EXPLICIT , HarmBlockThreshold .LOW_AND_ABOVE ),
92+ SafetySetting (HarmCategory .DANGEROUS_CONTENT , HarmBlockThreshold .LOW_AND_ABOVE ),
93+ SafetySetting (HarmCategory .CIVIC_INTEGRITY , HarmBlockThreshold .LOW_AND_ABOVE ),
9394 ),
9495 )
9596 }
@@ -227,11 +228,13 @@ class FirebaseAiDataSourceImpl @Inject constructor(
227228 }
228229
229230 private suspend fun executeImageGeneration (
230- generativeModel : ImagenModel ,
231+ generativeModel : GenerativeModel ,
231232 prompt : String ,
232233 ): Bitmap {
233- val response = generativeModel.generateImages(prompt)
234- return response.images.first().asBitmap()
234+ val response = generativeModel.generateContent(prompt)
235+ val image = response.candidates.firstOrNull()
236+ ?.content?.parts?.firstNotNullOfOrNull { it.asImageOrNull() }
237+ return image ? : throw IllegalStateException (" Could not extract image from model response" )
235238 }
236239
237240 override suspend fun generatePrompt (prompt : String ): GeneratedPrompt {
0 commit comments