r/OpenWebUI

Texting Bubbles: Open WebUI replies arrive as text-message bubbles, with typing dots in between

Texting Bubbles: Open WebUI replies arrive as text-message bubbles, with typing dots in between

I built a pair of functions that make a model reply the way a person texts: a few short messages, each in its own chat bubble, popping in one after another with typing dots while the next one is on its way.

This started with u/kvyb's Qwen3.8-27B-Humanlike-Chat 2.0 post on r/LocalLLaMA. Their side-by-side screenshots of the model texting in chat bubbles made me want that look in Open WebUI, for any model.

What each one does

  • Texting Bubbles changes how replies look. Every paragraph of a reply becomes its own bubble. While the reply streams in, each bubble appears whole after a short typing pause, so you never watch a message spell itself out.
  • Texting Bubbles Filter changes how the model writes. It adds a short instruction to the system prompt (76 tokens with OpenAI's cl100k_base tokenizer) asking for one to four short, casual messages with a blank line between them. Without the filter, a model still gets bubbles, one per paragraph of its normal reply.

What it handles

  • Lists, quotes, tables, math, code blocks and embeds each get their own bubble. Code blocks keep Open WebUI's colors and their Copy button.
  • The Copy and Regenerate buttons, the follow-up suggestions and late status lines (like token stats) wait until the last bubble appears.
  • Reloading mid-reply picks up where it left off, and older chats open with all their bubbles at once.
  • Two colors you pick yourself under Settings > Interface: Assistant Message Bubble Color for replies and User Message Bubble Color for your own messages. The text turns black or white, whichever reads better on that color.
  • Your own messages can get the texting look too: turn on the User Messages valve and a message you send with several paragraphs splits into a bubble per paragraph.
  • Light mode, dark mode, and right-to-left text such as Arabic.
  • The reply is still saved as one message, so the model's context, Copy, Edit and Regenerate all work on the whole turn.
  • A Bubble Shape setting: Rounded, Grouped (tighter corners between bubbles sent in a row), or Tails (grouped, plus a tail on the last bubble, like a phone's messaging app).

Models that already text

Some models, like 2.0, put a single line break between their short messages instead of a blank line. Thanks to kvyb's tip, the filter has a Split Short Lines valve for them: set it to a word limit such as 15, and every line of that many words or fewer gets its own bubble as the reply streams in. Lists, tables, code and math are left alone. Turn Add Instruction off for a model like that, since it doesn't need the texting prompt. The split adds a blank line after each short line, and that blank line is saved in the reply.

With my other functions

  • Message Loading Indicator (https://openwebui.com/posts/4fdc6152-552f-4c98-9fe3-bdbbad4b395b): the style you picked there (Spinner, Equalizer, Shimmer Lines and the rest) shows inside the bubble in place of the typing dots. You see it while the model loads before its first word, and again between messages. With it set to Default, or not installed, you get typing dots.
  • Interface Toggles: its Assistant Message Bubbles setting skips its outer bubble on replies Texting Bubbles shows, so the bubbles don't end up inside a second bubble.

Setting it up

  1. Import both functions under Admin Panel > Functions and turn them on.
  2. Open the model that should text under Workspace > Models, tick Texting Bubbles Filter under Filters, and save. To make every model text, set the filter to global instead.
  3. To keep bubbles to certain models, list them in Texting Bubbles' Model IDs valve. Left empty, every model gets bubbles.
  4. Reload Open WebUI in your browser. If the bubbles don't show, do a hard refresh.

The typing pause is 600 ms plus 18 ms per character, up to 3.5 seconds, and you can change all three numbers or turn pauses off in the valves.

Limits

  • Needs Open WebUI v0.11.0 or later.
  • Needs Render Markdown in Assistant Messages, which is on by default. With it off, replies show as plain text without bubbles.
  • A reply with a raw HTML block or a ::: callout stays a normal reply.
  • Smaller models sometimes ignore the instruction and add headings or --- dividers. Texting Bubbles hides the dividers and shows headings as plain text, so those replies still get bubbles.
  • Turn Texting Bubbles off before you delete it. Open WebUI doesn't tell a function when it's deleted, so a deleted one keeps serving its script until the server restarts.

Bug reports and ideas are welcome here or on the function pages. I'd also love to see what bubble colors people pick.

Edit: Texting Bubbles v1.1.0 adds user message bubbles with their own color, and a Bubble Shape setting under Settings > Interface with grouped corners and messaging-app tails that mirror for right-to-left chats. The filter's v1.1.0 adds Split Short Lines for models that already text. Update both from the links above.

Replies arrive one bubble at a time, with typing dots in between, so you never watch a message type itself out.

Dark mode with the Tails shape and a blue color for my own messages. Each paragraph, in replies and in what I send, gets its own bubble.

Light mode with the Tails shape and a blue color for my own messages. Each paragraph, in replies and in what I send, gets its own bubble.

Mid-reply: finished messages show right away, and typing dots hold the place of the next one.

Code blocks and tables get bubbles too. Code keeps Open WebUI's colors and its Copy button.

With my Message Loading Indicator function installed, the style you picked (here, Equalizer) shows in the bubble while the reply waits for its first word.

Bubble Shape: Rounded.

Bubble Shape: Grouped. Bubbles sent in a row get tighter corners, so they read as one turn.

Bubble Shape: Tails. Grouped, plus a tail on the last bubble, like a phone's messaging app.

The same thing at phone width, in Open WebUI's mobile layout.

Phone width, dark mode.

Phone width, light mode.

Each person picks their own reply color, message color and bubble shape under Settings > Interface. Saved in their browser.

Texting Bubbles valves: default colors and shape for everyone, which models get bubbles, splitting your own messages, and the typing pause timing.

Texting Bubbles Filter valves: turn the texting instruction on or off, edit it, and Split Short Lines for models that already text.

reddit.com
u/Silentoplayz — 12 days ago

Caching Optimization and the Citations Capability

The question and answer posted here here was eye opening, so I started to mess around with disabling the Citations Capability and was amazed at how effective this is at improving the Input caching rates for my requests (went from like 1-10% to sometimes as much as 50% or greater). This is going to be a huge savings as we roll out OWUI to our organization.

My question surrounds the Workspace and Base Model features in OWUI:

My setup / intended configuration:

  • A connected base model with a system prompt configured in Open WebUI.
  • A custom model created under Workspace → Models, selecting that model as its Base Model (From).
  • The workspace model has its own system prompt for its specialized role.

The docs describe workspace models as wrappers with their own system prompts, but I haven’t found an explicit explanation of whether the base model’s configured prompt is also included when using the workspace model system prompt.

My practical goal is to apply shared instructions for reusing/caching web research and producing grounded citations, while keeping each workspace model’s role-specific instructions separate. For example:

  • Reuse previously retrieved research when appropriate rather than repeating searches unnecessarily.
  • Fetch source pages when needed to support citations, rather than treating search snippets as verified page content.
  • Cite the sources actually used and avoid fabricated or mismatched citations.

The closest upstream reference I was able to find in the owui docs was Chat Parameters, particularly its system-prompt hierarchy section:

1. System-prompt hierarchy

Open WebUI — Chat Parameters: System Prompt and Advanced Parameters Hierarchy Chart

It documents three levels:

  • Per-account: Settings → General → System Prompt.
  • Per-chat: Chat Controls → System Prompt.
  • Per-model: Workspace → Models → System Prompt.

The page says the per-model system prompt takes precedence and cannot be overridden by a user’s account-level or chat-level prompt. It does not distinguish a base model’s Open WebUI-configured prompt from a derived workspace model’s prompt.

2. Workspace models and their system prompts

Open WebUI — Models
System prompt and variables section

This describes workspace models as configuration presets layered over a selected base model, with their own system prompts, knowledge, tools, and parameter overrides. However, the retrieved material does not explicitly say whether the base model’s configured system prompt is appended, replaced, or inherited as a fallback

Important ambiguity in the documentation

The Chat Parameters page also has an “Optimize System Prompt Settings for Maximum Flexibility” section that says an account-level prompt can work “in conjunction with” a chat-level or model-level prompt. That wording is less precise than the hierarchy section’s override language; it does not explain the actual message assembly or concatenation behavior.

Bottom line: These are useful references for your Reddit post, but I still cannot verify base-to-workspace prompt inheritance from them. The precise question to attach is:

Questions:

  1. When a workspace model has its own system prompt, does Open WebUI append the base prompt, replace it, or use it only if the workspace prompt is empty?
  2. Where should shared research/citation instructions live: only on the base model, in every workspace model, or in another shared injection mechanism (eg. An Account Level System Prompt)?
reddit.com
u/mcdeth187 — 13 days ago