From 8f70d4410892d9c232f3fde3f2d2e9a363a7f766 Mon Sep 17 00:00:00 2001
From: Mason Palmer <97921708+mason-palmer@users.noreply.github.com>
Date: Mon, 19 Jan 2026 14:13:14 -0700
Subject: [PATCH] agent: Patch image format bug (#45978)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #44694
Release Notes:
- Fixed images being converted to png but retaining old format
---------
Co-authored-by: versecafe <147033096+versecafe@users.noreply.github.com>
Co-authored-by: MrSubidubi
---
crates/agent_ui/src/mention_set.rs | 6 ++----
crates/language_model/src/request.rs | 3 +++
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/crates/agent_ui/src/mention_set.rs b/crates/agent_ui/src/mention_set.rs
index ea4b82e3037393ef1c73ea5608d61b0f0e5de054..c3384096cf01aa09c1f770009bdae9e75b4888e0 100644
--- a/crates/agent_ui/src/mention_set.rs
+++ b/crates/agent_ui/src/mention_set.rs
@@ -292,14 +292,13 @@ impl MentionSet {
return cx.spawn(async move |_, cx| {
let image = task.await?;
let image = image.update(cx, |image, _| image.image.clone())?;
- let format = image.format;
let image = cx
.update(|cx| LanguageModelImage::from_image(image, cx))?
.await;
if let Some(image) = image {
Ok(Mention::Image(MentionImage {
data: image.source,
- format,
+ format: LanguageModelImage::FORMAT,
}))
} else {
Err(anyhow!("Failed to convert image"))
@@ -631,7 +630,6 @@ pub(crate) fn paste_images_as_context(
};
let task = cx
.spawn(async move |cx| {
- let format = image.format;
let image = cx
.update(|_, cx| LanguageModelImage::from_image(image, cx))
.map_err(|e| e.to_string())?
@@ -640,7 +638,7 @@ pub(crate) fn paste_images_as_context(
if let Some(image) = image {
Ok(Mention::Image(MentionImage {
data: image.source,
- format,
+ format: LanguageModelImage::FORMAT,
}))
} else {
Err("Failed to convert image".into())
diff --git a/crates/language_model/src/request.rs b/crates/language_model/src/request.rs
index 96ed0907427c305211b1484e17ab61d434781ed6..e655e964e43847a776d4ba3f5e658b1ceb22a0d0 100644
--- a/crates/language_model/src/request.rs
+++ b/crates/language_model/src/request.rs
@@ -92,6 +92,9 @@ const DEFAULT_IMAGE_MAX_BYTES: usize = 5 * 1024 * 1024;
const MAX_IMAGE_DOWNSCALE_PASSES: usize = 8;
impl LanguageModelImage {
+ // All language model images are encoded as PNGs.
+ pub const FORMAT: ImageFormat = ImageFormat::Png;
+
pub fn empty() -> Self {
Self {
source: "".into(),