[GH-ISSUE #267] bug: message is silently lost when sending fails (e.g. network offline) #181

Open
opened 2026-10-18 14:03:38 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @ebifrier on GitHub (Sep 7, 2026).
Original GitHub issue: https://github.com/open-webui/computer/issues/267

Problem

When sending a chat message fails (network offline, server unreachable, or a non-2xx response), the message silently disappears. The input is cleared, the optimistic user message flashes and is removed, no error is shown, and the text is gone. The only trace is an unhandled TypeError: Failed to fetch in the console.

Steps to reproduce

  1. Open a chat and type a message (optionally attach a file).
  2. Make the request fail, e.g. DevTools → Network → Offline, or stop the server.
  3. Press Enter.

Actual: the message appears for a moment, then vanishes; the input and attachments are empty; no toast. For a new chat the tab title keeps the first 40 characters of the lost message.

Expected: an error is shown and the message (and attachments) stay in the input so it can be re-sent.

Root cause

In ChatPanel.svelte send():

  • inputText = '' and chatInputEl.clearUploads() run before apiSendMessage is awaited.
  • The catch block only removes the optimistic message and rethrows. Nothing restores the draft and no toast is shown.
  • ChatInput calls onsend() without awaiting, so the rethrown error becomes an unhandled rejection and never reaches the user.
  • The streaming/queue branch has the same problem (its catch only logs).

Proposed fix

  • Capture the untransformed draft text and the attached files before sending.
  • On failure, restore both, reset currentMessageId, and reset the new-chat tab label.
  • Replace throw e with toast.error(...), matching how compact/fork failures are reported. ApiError messages from the server are shown as-is; other failures (network) use a new chat.sendFailed string.
  • Apply the same restoration in the queue branch.
  • ChatInput gets a small restoreUploads() counterpart to clearUploads().

Deliberately minimal: no retry button or "failed" marker on the message; happy to adjust if you prefer a different UX.

Verification

Playwright (headless Chromium) against a local build, aborting POST /api/chats with internetdisconnected:

before after
input after failed send empty text restored
toast none "Failed to send message"
new-chat tab title first 40 chars of the lost message "New Chat"
unhandled rejection yes no

Additional context

Implemented on a fork (4 files, +20/-3):
https://github.com/open-webui/computer/compare/main...ebifrier💻fix/keep-message-on-send-failure

Related but different cause: #262 (prompt deleted when moving the window) does not involve sending.

Originally created by @ebifrier on GitHub (Sep 7, 2026). Original GitHub issue: https://github.com/open-webui/computer/issues/267 ### Problem When sending a chat message fails (network offline, server unreachable, or a non-2xx response), the message silently disappears. The input is cleared, the optimistic user message flashes and is removed, no error is shown, and the text is gone. The only trace is an unhandled `TypeError: Failed to fetch` in the console. ### Steps to reproduce 1. Open a chat and type a message (optionally attach a file). 2. Make the request fail, e.g. DevTools → Network → Offline, or stop the server. 3. Press Enter. **Actual:** the message appears for a moment, then vanishes; the input and attachments are empty; no toast. For a new chat the tab title keeps the first 40 characters of the lost message. **Expected:** an error is shown and the message (and attachments) stay in the input so it can be re-sent. ### Root cause In `ChatPanel.svelte` `send()`: - `inputText = ''` and `chatInputEl.clearUploads()` run before `apiSendMessage` is awaited. - The `catch` block only removes the optimistic message and rethrows. Nothing restores the draft and no toast is shown. - `ChatInput` calls `onsend()` without awaiting, so the rethrown error becomes an unhandled rejection and never reaches the user. - The streaming/queue branch has the same problem (its `catch` only logs). ### Proposed fix - Capture the untransformed draft text and the attached files before sending. - On failure, restore both, reset `currentMessageId`, and reset the new-chat tab label. - Replace `throw e` with `toast.error(...)`, matching how compact/fork failures are reported. `ApiError` messages from the server are shown as-is; other failures (network) use a new `chat.sendFailed` string. - Apply the same restoration in the queue branch. - `ChatInput` gets a small `restoreUploads()` counterpart to `clearUploads()`. Deliberately minimal: no retry button or "failed" marker on the message; happy to adjust if you prefer a different UX. ### Verification Playwright (headless Chromium) against a local build, aborting `POST /api/chats` with `internetdisconnected`: | | before | after | |---|---|---| | input after failed send | empty | text restored | | toast | none | "Failed to send message" | | new-chat tab title | first 40 chars of the lost message | "New Chat" | | unhandled rejection | yes | no | ### Additional context Implemented on a fork (4 files, +20/-3): https://github.com/open-webui/computer/compare/main...ebifrier:computer:fix/keep-message-on-send-failure Related but different cause: #262 (prompt deleted when moving the window) does not involve sending.
Author
Owner

@owui-terminator[bot] commented on GitHub (Sep 7, 2026):

🔍 Related Issues Found

I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions:

  1. 🟢 #262 bug: prompt DELETED when moving around window
    Related in that both reports describe user-entered prompt text being lost unexpectedly in the chat UI. However, this issue is about text disappearing when moving/resizing the window, not when a send request fails, so the cause is different.
    by Classic298

  2. 🟣 #50 Gateway connection hangs in OpenWebUI
    This is the closest send-path related issue found: it reports a chat request hanging/failing in the gateway path. It is not the same symptom as the message being deleted from the input, but it does concern failure handling in the chat submission flow.
    by naqerl


💡 If your issue is a duplicate, please close it and add any additional details to the existing issue instead.

This comment was generated automatically. React with 👍 if helpful, 👎 if not.

<!-- gh-comment-id:5568755760 --> @owui-terminator[bot] commented on GitHub (Sep 7, 2026): <!-- terminator-bot:related-issues-reply --> 🔍 **Related Issues Found** I found some existing issues that might be related. Please check if any of these are duplicates or contain helpful solutions: 1. 🟢 [#262](https://github.com/open-webui/computer/issues/262) **bug: prompt DELETED when moving around window** *Related in that both reports describe user-entered prompt text being lost unexpectedly in the chat UI. However, this issue is about text disappearing when moving/resizing the window, not when a send request fails, so the cause is different.* *by Classic298* 2. 🟣 [#50](https://github.com/open-webui/computer/issues/50) **Gateway connection hangs in OpenWebUI** *This is the closest send-path related issue found: it reports a chat request hanging/failing in the gateway path. It is not the same symptom as the message being deleted from the input, but it does concern failure handling in the chat submission flow.* *by naqerl* --- 💡 If your issue is a duplicate, please close it and add any additional details to the existing issue instead. *This comment was generated automatically.* React with 👍 if helpful, 👎 if not.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
open-webui/computer#181
No description provided.