Skip to content

Restore visible interim progress for long WebUI tool runs #3014

@franksong2702

Description

@franksong2702

Problem

Long WebUI sessions that spend most of their time in tool calls can appear silent even while Hermes is actively working. This is especially painful for long-running sessions and for users who switch between sessions: if no visible interim text is emitted, the browser can look stuck even though reasoning and tool events are moving underneath.

This is not the same as the SSE reattach/session-switching bug. Reattach can preserve visible text once it exists, but it cannot help when a run emits all progress only through reasoning/tool channels and no normal assistant content is produced until much later.

Why this matters

For long WebUI work, visible interim progress is part of the user-facing contract:

  • Users need to know the run is still alive before the final answer arrives.
  • Session switching should not make a long run feel blank or frozen.
  • Some model/provider combinations are more likely to keep intermediate work inside reasoning/tool channels unless the WebUI instruction is explicit.
  • The UI must not expose chain-of-thought or raw tool logs, but it should receive concise normal assistant text such as what phase is happening or what was found.

History and evidence

Relevant history from the repository:

  • 2026-05-16 2dfe3ffb introduced a strong WebUI visible-progress contract: for multi-step tool work, the model should provide brief user-visible progress updates as normal assistant content before continuing with tool calls.
  • 2026-05-18 PR fix(chat): align WebUI context with messaging sessions #2547 / 540292a7 softened that language from a contract to guidance and changed the key instruction to "you may provide" visible progress updates, while also asking the model not to add extra browser-only status chatter.
  • 2026-05-25 5b9484b8 only suppresses duplicate reasoning/thinking echoes after text was already streamed as visible assistant output. It does not suppress normal assistant output and is not the root cause of invisible progress.

Recent local 8787 dogfood showed the practical impact: one long tool-heavy run had reasoning/tool activity but no token or interim_assistant events for a meaningful period, and another run did not emit its first visible token until after a large batch of tool events. The browser experience was "nothing is coming out" even though the backend was working.

Expected behavior

For long multi-step WebUI tasks that use tools, Hermes should instruct capable models to emit concise visible interim progress as normal assistant content before the next tool batch or after a meaningful finding.

The guidance should also make the boundaries explicit:

  • Do not reveal chain-of-thought, hidden reasoning, secrets, or raw tool logs.
  • Do not make direct or very short answers artificially chatty.
  • Do not treat reasoning/thinking/tool-result streams as a substitute for visible interim assistant text.

Proposed scope

Restore a firmer WebUI progress contract in the streaming prompt and add regression coverage that prevents the instruction from drifting back to optional/silent wording.

This should not change SSE reconnect behavior, persisted session replay, or reasoning echo suppression.

Acceptance criteria

  • The WebUI progress prompt uses explicit "provide/send" style language rather than optional "may" language for long tool-running turns.
  • The prompt tells models not to keep all progress only in reasoning/thinking/tool-result channels.
  • Existing safeguards against chain-of-thought/raw tool log leakage remain present.
  • Static tests lock the wording/intent so future tone-parity work cannot accidentally remove visible interim progress again.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is neededsprint-candidateStrong candidate for next sprintstreamingSSE streaming, gateway sync, real-time updates

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions