From b61dc2eb35bed33190eb2fc920caf80bb378532a Mon Sep 17 00:00:00 2001 From: ciaranbor <81697641+ciaranbor@users.noreply.github.com> Date: Mon, 16 Feb 2026 11:39:59 +0000 Subject: [PATCH] Prevent image editing without image input (#1410) ## Motivation Models that only support image editing (ImageToImage but not TextToImage) would silently attempt text-to-image generation when a user submitted a text prompt without an attached image ## Changes - Added an early return guard in handleSubmit() that prevents submission when the selected model only supports image editing and no image is attached (isEditOnlyWithoutImage) - Fixed the text-to-image generation branch to use the more specific modelSupportsTextToImage() check instead of the broad isImageModel(), ensuring only models with TextToImage capability trigger generation from text alone - The existing isEditOnlyWithoutImage derived state (which was already used for UI hints like placeholder text and button disabling) now also blocks the actual submit path ## Why It Works The text-to-image fallback now correctly checks modelSupportsTextToImage() directly, so edit-only models no longer fall through to the generation path ## Test Plan ### Manual Testing - Select an edit-only image model (e.g., one with only ImageToImage capability) - Verify the send button is disabled and placeholder reads "Attach an image to edit..." when no image is attached - Attach an image and verify the form becomes submittable - Select a text-to-image model and verify text-only prompts still trigger generation normally - Ensure pressing `enter` doesn't bypass check --- dashboard/src/lib/components/ChatForm.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dashboard/src/lib/components/ChatForm.svelte b/dashboard/src/lib/components/ChatForm.svelte index 120f2467..2eb7aa40 100644 --- a/dashboard/src/lib/components/ChatForm.svelte +++ b/dashboard/src/lib/components/ChatForm.svelte @@ -265,6 +265,7 @@ function handleSubmit() { if ((!message.trim() && uploadedFiles.length === 0) || loading) return; + if (isEditOnlyWithoutImage) return; const content = message.trim(); const files = [...uploadedFiles]; @@ -289,7 +290,11 @@ if (imageFile.preview) { editImage(content, imageFile.preview); } - } else if (isImageModel() && content) { + } else if ( + currentModel && + modelSupportsTextToImage(currentModel) && + content + ) { // Use image generation for text-to-image models generateImage(content); } else {