[object Object]

← back to Exo

Fix regenerate for image models (#1263)

ba19940828e10f171fa5300441aab94b074802de · 2026-01-23 16:33:01 +0000 · ciaranbor

## Motivation

The 'regenerate' button was hardcoded to chat completion. Clicking
'regenerate' for image request would result in an error after the model
is loaded

## Changes

Store request type and dispatch to appropriate request upon regeneration

## Why It Works

We make sure to repeat the same request type as was performed originally

## Test Plan

### Manual Testing

Checked 'regenerate' works for chat completion, image generation, image
editing

Files touched

Diff

commit ba19940828e10f171fa5300441aab94b074802de
Author: ciaranbor <81697641+ciaranbor@users.noreply.github.com>
Date:   Fri Jan 23 16:33:01 2026 +0000

    Fix regenerate for image models (#1263)
    
    ## Motivation
    
    The 'regenerate' button was hardcoded to chat completion. Clicking
    'regenerate' for image request would result in an error after the model
    is loaded
    
    ## Changes
    
    Store request type and dispatch to appropriate request upon regeneration
    
    ## Why It Works
    
    We make sure to repeat the same request type as was performed originally
    
    ## Test Plan
    
    ### Manual Testing
    
    Checked 'regenerate' works for chat completion, image generation, image
    editing
---
 dashboard/src/lib/stores/app.svelte.ts | 47 +++++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 3 deletions(-)

diff --git a/dashboard/src/lib/stores/app.svelte.ts b/dashboard/src/lib/stores/app.svelte.ts
index ebfe0cb8..1b1a3847 100644
--- a/dashboard/src/lib/stores/app.svelte.ts
+++ b/dashboard/src/lib/stores/app.svelte.ts
@@ -216,6 +216,8 @@ export interface Message {
   attachments?: MessageAttachment[];
   ttftMs?: number; // Time to first token in ms (for assistant messages)
   tps?: number; // Tokens per second (for assistant messages)
+  requestType?: "chat" | "image-generation" | "image-editing";
+  sourceImageDataUrl?: string; // For image editing regeneration
 }
 
 export interface Conversation {
@@ -1270,10 +1272,46 @@ class AppStore {
 
     if (lastUserIndex === -1) return;
 
-    // Remove any messages after the user message
-    this.messages = this.messages.slice(0, lastUserIndex + 1);
+    const lastUserMessage = this.messages[lastUserIndex];
+    const requestType = lastUserMessage.requestType || "chat";
+    const prompt = lastUserMessage.content;
 
-    // Resend the message to get a new response
+    // Remove messages after user message (including the user message for image requests
+    // since generateImage/editImage will re-add it)
+    this.messages = this.messages.slice(0, lastUserIndex);
+
+    switch (requestType) {
+      case "image-generation":
+        await this.generateImage(prompt);
+        break;
+      case "image-editing":
+        if (lastUserMessage.sourceImageDataUrl) {
+          await this.editImage(prompt, lastUserMessage.sourceImageDataUrl);
+        } else {
+          // Can't regenerate edit without source image - restore user message and show error
+          this.messages.push(lastUserMessage);
+          const errorMessage = this.addMessage("assistant", "");
+          const idx = this.messages.findIndex((m) => m.id === errorMessage.id);
+          if (idx !== -1) {
+            this.messages[idx].content =
+              "Error: Cannot regenerate image edit - source image not found";
+          }
+          this.updateActiveConversation();
+        }
+        break;
+      case "chat":
+      default:
+        // Restore the user message for chat regeneration
+        this.messages.push(lastUserMessage);
+        await this.regenerateChatCompletion();
+        break;
+    }
+  }
+
+  /**
+   * Helper method to regenerate a chat completion response
+   */
+  private async regenerateChatCompletion(): Promise<void> {
     this.isLoading = true;
     this.currentResponse = "";
 
@@ -1788,6 +1826,7 @@ class AppStore {
       role: "user",
       content: prompt,
       timestamp: Date.now(),
+      requestType: "image-generation",
     };
     this.messages.push(userMessage);
 
@@ -1998,6 +2037,8 @@ class AppStore {
       role: "user",
       content: prompt,
       timestamp: Date.now(),
+      requestType: "image-editing",
+      sourceImageDataUrl: imageDataUrl,
     };
     this.messages.push(userMessage);
 

← f255345a dashboard: decouple prettier-svelte from dashboard source  ·  back to Exo  ·  downloads: refactor to run at node level 9357503c →