From 7fbf4430e51c3ca80c2125feb1729aecddb85e8a Mon Sep 17 00:00:00 2001 From: Android PowerUser <88908510+Android-PowerUser@users.noreply.github.com> Date: Sun, 5 Apr 2026 21:39:36 +0200 Subject: [PATCH 1/3] Fix Mistral image_url payload format for vision requests --- .../kotlin/com/google/ai/sample/ScreenCaptureApiClients.kt | 7 ++----- .../feature/multimodal/PhotoReasoningProviderDtos.kt | 5 +---- .../sample/feature/multimodal/PhotoReasoningViewModel.kt | 4 +--- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/com/google/ai/sample/ScreenCaptureApiClients.kt b/app/src/main/kotlin/com/google/ai/sample/ScreenCaptureApiClients.kt index 05a1e4a..be933e8 100644 --- a/app/src/main/kotlin/com/google/ai/sample/ScreenCaptureApiClients.kt +++ b/app/src/main/kotlin/com/google/ai/sample/ScreenCaptureApiClients.kt @@ -50,10 +50,7 @@ data class ServiceMistralTextContent(@SerialName("text") val text: String) : Ser @Serializable @SerialName("image_url") -data class ServiceMistralImageContent(@SerialName("image_url") val imageUrl: ServiceMistralImageUrl) : ServiceMistralContent() - -@Serializable -data class ServiceMistralImageUrl(val url: String) +data class ServiceMistralImageContent(@SerialName("image_url") val imageUrl: String) : ServiceMistralContent() @Serializable data class ServiceMistralResponse( @@ -104,7 +101,7 @@ internal suspend fun callMistralApi( is TextPart -> if (part.text.isNotBlank()) ServiceMistralTextContent(text = part.text) else null is ImagePart -> { if (supportsScreenshot) { - ServiceMistralImageContent(imageUrl = ServiceMistralImageUrl(url = "data:image/jpeg;base64,${com.google.ai.sample.util.ImageUtils.bitmapToBase64(part.image)}")) + ServiceMistralImageContent(imageUrl = "data:image/jpeg;base64,${com.google.ai.sample.util.ImageUtils.bitmapToBase64(part.image)}") } else null } else -> null diff --git a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningProviderDtos.kt b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningProviderDtos.kt index 8ade575..eb4e410 100644 --- a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningProviderDtos.kt +++ b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningProviderDtos.kt @@ -66,12 +66,9 @@ internal data class MistralTextContent(val text: String) : MistralContent() @Serializable @kotlinx.serialization.SerialName("image_url") internal data class MistralImageContent( - @kotlinx.serialization.SerialName("image_url") val imageUrl: MistralImageUrl + @kotlinx.serialization.SerialName("image_url") val imageUrl: String ) : MistralContent() -@Serializable -internal data class MistralImageUrl(val url: String) - @Serializable internal data class MistralResponse( val choices: List diff --git a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt index d8ae9ea..9b9e746 100644 --- a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt +++ b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt @@ -1097,9 +1097,7 @@ class PhotoReasoningViewModel( for (bitmap in selectedImages) updatedContent.add( MistralImageContent( - imageUrl = MistralImageUrl( - url = "data:image/jpeg;base64,${PhotoReasoningSerialization.bitmapToBase64(bitmap)}" - ) + imageUrl = "data:image/jpeg;base64,${PhotoReasoningSerialization.bitmapToBase64(bitmap)}" ) ) apiMessages[apiMessages.lastIndex] = lastUserMsg.copy(content = updatedContent) From 5738e2eb16b6c9c86ce48a7bf00205e7b97c26ef Mon Sep 17 00:00:00 2001 From: Android PowerUser <88908510+Android-PowerUser@users.noreply.github.com> Date: Mon, 6 Apr 2026 10:09:35 +0200 Subject: [PATCH 2/3] Update PhotoReasoningViewModel.kt --- .../ai/sample/feature/multimodal/PhotoReasoningViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt index 9b9e746..4fbfd72 100644 --- a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt +++ b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt @@ -1118,7 +1118,7 @@ class PhotoReasoningViewModel( messages = apiMessages, temperature = genSettings.temperature.toDouble().coerceAtLeast(0.01), top_p = genSettings.topP.toDouble().coerceAtLeast(0.01), - max_tokens = 4096, + max_tokens = 50000, stream = true ) val jsonBody = jsonSerializer.encodeToString(MistralRequest.serializer(), requestBody) @@ -1291,7 +1291,7 @@ class PhotoReasoningViewModel( messages = apiMessages, temperature = genSettings.temperature.toDouble(), top_p = genSettings.topP.toDouble(), - max_tokens = 4096, + max_tokens = null, stream = true ) From 90ee92df3414e4b840cb1a6effb6fc0c32f3bbf5 Mon Sep 17 00:00:00 2001 From: Android PowerUser <88908510+Android-PowerUser@users.noreply.github.com> Date: Mon, 6 Apr 2026 10:19:48 +0200 Subject: [PATCH 3/3] Update PhotoReasoningViewModel.kt --- .../ai/sample/feature/multimodal/PhotoReasoningViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt index 4fbfd72..955dd28 100644 --- a/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt +++ b/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt @@ -1291,7 +1291,7 @@ class PhotoReasoningViewModel( messages = apiMessages, temperature = genSettings.temperature.toDouble(), top_p = genSettings.topP.toDouble(), - max_tokens = null, + max_tokens = 320000, stream = true )