[GH-ISSUE #23982] issue: Floating Quick Actions contextual menu does not load after chat completion and does nothing #35668

Closed
opened 2026-04-25 09:51:14 -05:00 by GiteaMirror · 2 comments
Owner

Originally created by @jlgill on GitHub (Apr 22, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/23982

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!).
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.9.1

Ollama Version (if applicable)

Not applicable to this issue.

Operating System

Windows (host), Dockerized Open WebUI

Browser (if applicable)

Chromium-based browser (DevTools used for network capture and inspection)

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

Expected Behavior

  1. In a freshly generated assistant message, selecting text should immediately show Floating Quick Actions (Ask/Explain) without requiring navigation or reload.
  2. Choosing Floating Quick Actions -> Explain should stream and render explanation text in the floating response panel, then allow adding the generated exchange to chat.

Actual Behavior

  1. In a newly active chat session, selecting text in assistant output does not show Floating Quick Actions until navigating away and back (or reloading).
  2. When Floating Quick Actions -> Explain is used, the panel opens but remains in a pulsing placeholder state and never renders response content.

Both behaviors reproduce across providers and are not limited to OpenAI.

Steps to Reproduce

  1. Start Open WebUI v0.9.1 via Docker.
  2. Open a chat and send a prompt.
  3. Wait for the assistant response to finish.
  4. Select text in the just-generated assistant message.
  5. Observe: Floating Quick Actions do not appear.
  6. Navigate away from the chat and return (or reload), then select the same text.
  7. Observe: Floating Quick Actions now appear.
  8. Click Floating Quick Actions -> Explain.
  9. Observe network request to POST /api/chat/completions with stream=true and HTTP 200.
  10. Observe UI remains in pulsing placeholder state with no rendered explanation output.

Logs & Screenshots

Database forensics (backend state)

Read-only query for repro chat 1de12d59-459f-4d17-bfb6-aec5690989a2:

  • history.currentId = b6d39595-00b3-4550-b596-dca72c78ad66
  • Current message fields: id=b6d39595-00b3-4550-b596-dca72c78ad66 | role=assistant | done=true

This shows backend state marks the assistant message complete while the UI still behaves as if Floating Quick Actions are unavailable until reload.

Sample request payload (captured)

A captured Floating Quick Actions Explain request includes a final user message in this form:

{"model":"gpt-5.4","model_item":{"id":"gpt-5.4","object":"model","created":1772691852,"owned_by":"openai","connection_type":"external","name":"gpt-5.4","openai":{"id":"gpt-5.4","object":"model","created":1772691852,"owned_by":"system","connection_type":"external"},"urlIdx":0,"info":{"id":"gpt-5.4","user_id":"f345ef87-66e8-487f-9756-eb197d9b65c5","base_model_id":null,"name":"gpt-5.4","meta":{"description":null,"capabilities":{"file_context":true,"vision":true,"file_upload":true,"web_search":true,"image_generation":true,"code_interpreter":true,"terminal":true,"citations":true,"status_updates":true,"usage":true,"builtin_tools":true},"suggestion_prompts":null,"tags":[],"defaultFeatureIds":["web_search","code_interpreter","image_generation"],"builtinTools":{"time":true,"memory":true,"chats":true,"notes":false,"knowledge":false,"channels":false,"web_search":true,"image_generation":true,"code_interpreter":true},"hidden":false},"access_grants":[{"id":"bcb90df8-751b-4165-aa89-9d00d1e58452","resource_type":"model","resource_id":"gpt-5.4","principal_type":"user","principal_id":"*","permission":"read","created_at":1776834566}],"is_active":true,"updated_at":1776834566,"created_at":1775624056},"actions":[],"filters":[],"tags":[]},"session_id":"5l1P27ptRn6Im2prAAAX","chat_id":"12871519-6bcd-4bb9-96c6-0c3a31d5c057","messages":[{"role":"user","content":"Tell me a random fun fact about the Roman Empire"},{"role":"assistant","content":"A fun one: the Romans used a fish sauce called garum on everything.\n\nIt was made by fermenting fish with salt, and it was so popular that it was basically the Roman version of ketchup or soy sauce—used in meals across the empire, from everyday cooking to fancy banquets. There were even large garum factories, and the best varieties could be very expensive.\n\nIf you want, I can give you 5 more weird Roman Empire facts."},{"role":"user","content":"> There were even large garum factories, and the best varieties could be very expensive.\n\n\nExplain"}],"stream":true}

Runtime logs

  • owui-app logs show /api/chat/completions returning HTTP 200 during repro windows.
  • No matching 4xx/5xx backend errors for either symptom.

Frontend Evidence

  • Floating action enablement is gated by message completion state in src/lib/components/chat/Messages/ResponseMessage.svelte (floatingButtons={message?.done && ...}).
  • Selection listeners are attached in onMount path in src/lib/components/chat/Messages/ContentRenderer.svelte only when floatingButtons is true at mount-time.
  • Floating Quick Actions Explain stream handling in src/lib/components/chat/ContentRenderer/FloatingButtons.svelte appends only choices[0].delta.content.
  • The Explain panel displays placeholder skeleton when response content remains empty.

https://github.com/user-attachments/assets/b58f3c22-dabb-4fc2-b2e0-442c22d81fe6
https://github.com/user-attachments/assets/6c1b2601-b279-4e8a-9503-23dafaa6ec34

Additional Information

This appears to involve two related failures in the same Floating Quick Actions feature surface:

  1. Lifecycle mismatch: listeners may not attach if component mounts before message.done flips to true.
  2. Stream parsing fragility: Explain rendering path may assume chunk/event shapes that are not always present.
Originally created by @jlgill on GitHub (Apr 22, 2026). Original GitHub issue: https://github.com/open-webui/open-webui/issues/23982 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!). - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.9.1 ### Ollama Version (if applicable) Not applicable to this issue. ### Operating System Windows (host), Dockerized Open WebUI ### Browser (if applicable) Chromium-based browser (DevTools used for network capture and inspection) ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. ### Expected Behavior 1. In a freshly generated assistant message, selecting text should immediately show Floating Quick Actions (Ask/Explain) without requiring navigation or reload. 2. Choosing Floating Quick Actions -> Explain should stream and render explanation text in the floating response panel, then allow adding the generated exchange to chat. ### Actual Behavior 1. In a newly active chat session, selecting text in assistant output does not show Floating Quick Actions until navigating away and back (or reloading). 2. When Floating Quick Actions -> Explain is used, the panel opens but remains in a pulsing placeholder state and never renders response content. Both behaviors reproduce across providers and are not limited to OpenAI. ### Steps to Reproduce 1. Start Open WebUI v0.9.1 via Docker. 2. Open a chat and send a prompt. 3. Wait for the assistant response to finish. 4. Select text in the just-generated assistant message. 5. Observe: Floating Quick Actions do not appear. 6. Navigate away from the chat and return (or reload), then select the same text. 7. Observe: Floating Quick Actions now appear. 8. Click Floating Quick Actions -> Explain. 9. Observe network request to `POST /api/chat/completions` with `stream=true` and HTTP 200. 10. Observe UI remains in pulsing placeholder state with no rendered explanation output. ### Logs & Screenshots ### Database forensics (backend state) Read-only query for repro chat `1de12d59-459f-4d17-bfb6-aec5690989a2`: - `history.currentId = b6d39595-00b3-4550-b596-dca72c78ad66` - Current message fields: `id=b6d39595-00b3-4550-b596-dca72c78ad66 | role=assistant | done=true` This shows backend state marks the assistant message complete while the UI still behaves as if Floating Quick Actions are unavailable until reload. ### Sample request payload (captured) A captured Floating Quick Actions Explain request includes a final user message in this form: {"model":"gpt-5.4","model_item":{"id":"gpt-5.4","object":"model","created":1772691852,"owned_by":"openai","connection_type":"external","name":"gpt-5.4","openai":{"id":"gpt-5.4","object":"model","created":1772691852,"owned_by":"system","connection_type":"external"},"urlIdx":0,"info":{"id":"gpt-5.4","user_id":"f345ef87-66e8-487f-9756-eb197d9b65c5","base_model_id":null,"name":"gpt-5.4","meta":{"description":null,"capabilities":{"file_context":true,"vision":true,"file_upload":true,"web_search":true,"image_generation":true,"code_interpreter":true,"terminal":true,"citations":true,"status_updates":true,"usage":true,"builtin_tools":true},"suggestion_prompts":null,"tags":[],"defaultFeatureIds":["web_search","code_interpreter","image_generation"],"builtinTools":{"time":true,"memory":true,"chats":true,"notes":false,"knowledge":false,"channels":false,"web_search":true,"image_generation":true,"code_interpreter":true},"hidden":false},"access_grants":[{"id":"bcb90df8-751b-4165-aa89-9d00d1e58452","resource_type":"model","resource_id":"gpt-5.4","principal_type":"user","principal_id":"*","permission":"read","created_at":1776834566}],"is_active":true,"updated_at":1776834566,"created_at":1775624056},"actions":[],"filters":[],"tags":[]},"session_id":"5l1P27ptRn6Im2prAAAX","chat_id":"12871519-6bcd-4bb9-96c6-0c3a31d5c057","messages":[{"role":"user","content":"Tell me a random fun fact about the Roman Empire"},{"role":"assistant","content":"A fun one: the Romans used a fish sauce called **garum** on everything.\n\nIt was made by fermenting fish with salt, and it was so popular that it was basically the Roman version of ketchup or soy sauce—used in meals across the empire, from everyday cooking to fancy banquets. There were even large garum factories, and the best varieties could be very expensive.\n\nIf you want, I can give you 5 more weird Roman Empire facts."},{"role":"user","content":"> There were even large garum factories, and the best varieties could be very expensive.\n\n\nExplain"}],"stream":true} ### Runtime logs - `owui-app` logs show `/api/chat/completions` returning HTTP 200 during repro windows. - No matching 4xx/5xx backend errors for either symptom. ## Frontend Evidence - Floating action enablement is gated by message completion state in `src/lib/components/chat/Messages/ResponseMessage.svelte` (`floatingButtons={message?.done && ...}`). - Selection listeners are attached in `onMount` path in `src/lib/components/chat/Messages/ContentRenderer.svelte` only when `floatingButtons` is true at mount-time. - Floating Quick Actions Explain stream handling in `src/lib/components/chat/ContentRenderer/FloatingButtons.svelte` appends only `choices[0].delta.content`. - The Explain panel displays placeholder skeleton when response content remains empty. https://github.com/user-attachments/assets/b58f3c22-dabb-4fc2-b2e0-442c22d81fe6 https://github.com/user-attachments/assets/6c1b2601-b279-4e8a-9503-23dafaa6ec34 ### Additional Information This appears to involve two related failures in the same Floating Quick Actions feature surface: 1. Lifecycle mismatch: listeners may not attach if component mounts before `message.done` flips to true. 2. Stream parsing fragility: Explain rendering path may assume chunk/event shapes that are not always present.
GiteaMirror added the bugconfirmed issue labels 2026-04-25 09:51:14 -05:00
Author
Owner

@RandyR34 commented on GitHub (Apr 22, 2026):

I can confirm the same issue with the Ask/Explain inline popups. Here are steps to reproduce the issue in OpenWebUI version v0.9.1. I tested in both Chrome and Firefox.

Note that there are two bugs:

  • Bug 01: Ask/Explain inline buttons do not appear (the steps below show how to partially resolve this with a page reload but it's a Band-Aid fix)
  • Bug 02: The popup after clicking Ask/Explain freezes while waiting for a message. No response text displays in the popup bubble.
  1. Open a new browser window and navigate to OpenWebUI. Then enter a bogus test message and submit it.
Image
  1. Select any string of text. You should notice that the Ask/Explain buttons do not appear (this is Bug 01).
Image
  1. Click Ctrl+R (or Ctrl+Shift+R) to reload the current page.

  2. After reloading, select the same substring. You should notice that the Ask/Explain inline buttons now appear.

Image
  1. After clicking one of the Ask/Explain buttons, you should notice that the popup freezes. The response from the AI will not appear; it just sits there permanently waiting. This is Bug 02.
Image

Finally, here is the response text from the Firefox browser (from the frozen Ask/Explain popup).

Image

(I'll pass on including the request payload, as above should be enough to recreate the bugs fairly easily. Let me know if you require more info. )

<!-- gh-comment-id:4299088991 --> @RandyR34 commented on GitHub (Apr 22, 2026): I can confirm the same issue with the Ask/Explain inline popups. Here are steps to reproduce the issue in OpenWebUI version v0.9.1. I tested in both Chrome and Firefox. Note that there are two bugs: - **Bug 01**: Ask/Explain inline buttons do not appear (the steps below show how to partially resolve this with a page reload but it's a Band-Aid fix) - **Bug 02**: The popup after clicking Ask/Explain freezes while waiting for a message. No response text displays in the popup bubble. 1. Open a new browser window and navigate to OpenWebUI. Then enter a bogus test message and submit it. <img width="1080" height="323" alt="Image" src="https://github.com/user-attachments/assets/74e15e86-49c0-4ed0-a31d-d3b59bb0cf6d" /> 2. Select any string of text. You should notice that the Ask/Explain buttons do not appear (this is **Bug 01**). <img width="856" height="231" alt="Image" src="https://github.com/user-attachments/assets/93855602-bb19-4a90-bbcd-4e63ae848804" /> 3. Click Ctrl+R (or Ctrl+Shift+R) to reload the current page. 4. After reloading, select the same substring. You should notice that the Ask/Explain inline buttons now appear. <img width="850" height="240" alt="Image" src="https://github.com/user-attachments/assets/d5af917b-7e0a-4ed8-a192-641fcc749407" /> 5. After clicking one of the Ask/Explain buttons, you should notice that the popup freezes. The response from the AI will not appear; it just sits there permanently waiting. This is **Bug 02**. <img width="844" height="356" alt="Image" src="https://github.com/user-attachments/assets/b740203f-4a35-495c-bdf6-c4bf6c470ee3" /> Finally, here is the response text from the Firefox browser (from the frozen Ask/Explain popup). <img width="537" height="115" alt="Image" src="https://github.com/user-attachments/assets/ee93ce1b-bc4a-40c8-8cb3-981e9b4f8974" /> (I'll pass on including the request payload, as above should be enough to recreate the bugs fairly easily. Let me know if you require more info. )
Author
Owner

@tjbck commented on GitHub (Apr 24, 2026):

Deprecated old behaviour to prefill the text input instead in dev.

<!-- gh-comment-id:4311970890 --> @tjbck commented on GitHub (Apr 24, 2026): Deprecated old behaviour to prefill the text input instead in dev.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#35668