You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using streaming mode (SSE) with models that emit thinking/reasoning content (e.g., Claude with extended thinking via LiteLLM, or Gemini with thinking_config), each partial ReasoningChunk renders as a separate "Thought" bubble in the Dev UI instead of being consolidated into a single thought block.
Non-streaming mode correctly shows a single consolidated "Thought" bubble.
Steps to Reproduce
Configure an ADK agent with a model that supports thinking/reasoning (e.g., vertex_ai/claude-sonnet-4-6 via LiteLlm with thinking={"type": "enabled", "budget_tokens": 10000})
Consecutive partial thought events should be consolidated into a single "Thought" bubble that progressively accumulates text, similar to how text response chunks are merged into a single response bubble.
Actual Behavior
Each ReasoningChunk partial generates a separate "Thought" bubble in the timeline, resulting in dozens of fragmented thought events for a single reasoning block.
Analysis
The consolidation logic in chat.component.ts (lines ~1237-1257) attempts to merge thought partials by searching for an existing event with partial=true and thought=true. However, buildUiEventFromEvent creates a new UiEvent with only the current chunk's content, and the replacement at line ~1285 (newEvents[existingIndex] = uiEvent) replaces rather than accumulates the text. This causes either:
The consolidation search to fail (resulting in multiple bubbles), or
The previous thought to be replaced instead of appended to
Environment
ADK Python: v1.32.0
ADK Web: latest (cloned from main)
Model: vertex_ai/claude-sonnet-4-6 via LiteLlm with extended thinking enabled
Also reproducible with native LiteLlm (not just custom BaseLlm subclasses)
Description
When using streaming mode (SSE) with models that emit thinking/reasoning content (e.g., Claude with extended thinking via LiteLLM, or Gemini with
thinking_config), each partialReasoningChunkrenders as a separate "Thought" bubble in the Dev UI instead of being consolidated into a single thought block.Non-streaming mode correctly shows a single consolidated "Thought" bubble.
Steps to Reproduce
vertex_ai/claude-sonnet-4-6viaLiteLlmwiththinking={"type": "enabled", "budget_tokens": 10000})adk weband open the Dev UIExpected Behavior
Consecutive partial thought events should be consolidated into a single "Thought" bubble that progressively accumulates text, similar to how text response chunks are merged into a single response bubble.
Actual Behavior
Each
ReasoningChunkpartial generates a separate "Thought" bubble in the timeline, resulting in dozens of fragmented thought events for a single reasoning block.Analysis
The consolidation logic in
chat.component.ts(lines ~1237-1257) attempts to merge thought partials by searching for an existing event withpartial=trueandthought=true. However,buildUiEventFromEventcreates a newUiEventwith only the current chunk's content, and the replacement at line ~1285 (newEvents[existingIndex] = uiEvent) replaces rather than accumulates the text. This causes either:Environment
vertex_ai/claude-sonnet-4-6viaLiteLlmwith extended thinking enabledLiteLlm(not just customBaseLlmsubclasses)