From ee634e2abb0ca2bd9fa06728cc89df9054451d40 Mon Sep 17 00:00:00 2001 From: m57 <41645758+Hy4ri@users.noreply.github.com> Date: Wed, 23 Sep 2026 11:33:17 +0300 Subject: [PATCH] fix(#1214): render generated images inline (#1233) --- .../ui/chat/tool/ToolViewBuilder.kt | 2 +- .../chat/tool/ToolViewCharacterizationTest.kt | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/m57/hermescontrol/ui/chat/tool/ToolViewBuilder.kt b/app/src/main/java/com/m57/hermescontrol/ui/chat/tool/ToolViewBuilder.kt index a95d672b..b70a26ff 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/chat/tool/ToolViewBuilder.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/chat/tool/ToolViewBuilder.kt @@ -154,7 +154,7 @@ object ToolViewBuilder { ): String? { val candidate = ToolJson - .firstString(result, listOf("image_url", "url", "path", "image_path")) + .firstString(result, listOf("image_url", "image", "url", "path", "image_path")) .ifEmpty { ToolJson.firstString(args, listOf("image_url", "url", "path")) } if (candidate.isEmpty()) { diff --git a/app/src/test/java/com/m57/hermescontrol/ui/chat/tool/ToolViewCharacterizationTest.kt b/app/src/test/java/com/m57/hermescontrol/ui/chat/tool/ToolViewCharacterizationTest.kt index aeb33d05..8e05020d 100644 --- a/app/src/test/java/com/m57/hermescontrol/ui/chat/tool/ToolViewCharacterizationTest.kt +++ b/app/src/test/java/com/m57/hermescontrol/ui/chat/tool/ToolViewCharacterizationTest.kt @@ -592,8 +592,27 @@ class ToolViewCharacterizationTest { assertEquals("https://img.example/cat.png (image)", view.subtitle) assertEquals("šŸ–¼ļø a cat\n\nšŸ”— https://img.example/cat.png", view.detail) - // Pinned: imageUrlFor does not read the "image" key, so no thumbnail. - assertNull(view.imageUrl) + assertEquals("https://img.example/cat.png", view.imageUrl) + } + + @Test + fun `image_generate data image reaches inline image view`() { + val view = build("image_generate", """{"prompt":"a cat"}""", """{"image":"data:image/png;base64,AAA"}""") + + assertEquals("data:image/png;base64,AAA", view.imageUrl) + } + + @Test + fun `image_generate http image reaches inline image view`() { + val view = build("image_generate", "{}", """{"image":"http://img.example/cat.webp"}""") + + assertEquals("http://img.example/cat.webp", view.imageUrl) + } + + @Test + fun `image_generate local path and non-image url do not reach inline image view`() { + assertNull(build("image_generate", "{}", """{"image":"/tmp/cat.png"}""").imageUrl) + assertNull(build("image_generate", "{}", """{"image":"https://img.example/page"}""").imageUrl) } @Test