Skip to content

[Bug]: streaming: partial drops text block when assistant turn contains [thinking, text] #53384

@amitgaur

Description

@amitgaur

Bug type

Behavior bug (incorrect output/state without crash)

Summary

When streaming: "partial" is enabled for the Telegram channel and the model produces a turn with both a thinking block and a text block
(e.g. after a tool call), OpenClaw sends the thinking block as a Telegram message but silently drops the text block. The text never reaches
the user.

To reproduce:

  1. Set streaming: "partial" in the Telegram channel config
  2. Enable verbose reasoning mode
  3. Send a message that causes the model to: reason → call a tool → reason again → respond
  4. Observe: 3 messages arrive (reasoning, tool exec display, second reasoning) but the final text response is missing

Evidence:

  • Session file confirms the model generated the full response (stopReason: "stop", text block present)
  • Gateway log shows only 3 sendMessage ok calls — no 4th call for the text block
  • Forwarding the 3 messages via Bot API confirmed msg 3 = thinking block only, text block never dispatched
  • Switching to streaming: "off" fixes it immediately

Version: 2026.3.13 (61d171a), Node 22.22.1

Steps to reproduce

  1. In ~/.openclaw/openclaw.json, set the Telegram channel to "streaming": "partial":
    "telegram": {
    "streaming": "partial"
    }
  2. Enable verbose/reasoning display mode in the OpenClaw Telegram chat (or have a model with extended thinking enabled)
  3. Send any message that causes the model to follow this turn sequence:
    - Turn 1: [thinking, tool_use] — model reasons then calls a tool (e.g. exec)
    - Tool result returned
    - Turn 2: [thinking, text] — model reasons then produces the final text response

A reliable trigger: send a message like list my projects or any prompt that causes the model to run a shell command and then summarize the
output.
4. Expected: 4 Telegram messages arrive — reasoning, exec display, second reasoning, and the final text response
5. Actual: Only 3 messages arrive — the text block from Turn 2 is silently dropped. The last message the user sees is "Reasoning: [thinking
text]" with no response following it.

Expected behavior

After Turn 2 completes, a 4th Telegram message should be sent containing the text block content (the actual response to the user). The
complete sequence should be:

  1. Reasoning: [thinking text] — streaming preview of Turn 1 thinking
  2. 🛠️ Exec: [command] — tool call display
  3. Reasoning: [thinking text] — streaming preview of Turn 2 thinking
  4. Your projects: ... (or whatever the model's text response is) — this message is missing

The thinking and text blocks within the same assistant turn should both be dispatched. Currently only the thinking block is sent; the text
block that follows in the same turn is dropped.

Workaround: Setting "streaming": "off" sends the complete response as a single message after the full turn completes.

Actual behavior

Actual: Only 3 messages arrive — the text block from Turn 2 is silently dropped. The last message the user sees is "Reasoning: [thinking
text]" with no response following it.

OpenClaw version

2026.3.13 (61d171a), Node 22.22.1

Operating system

Ubuntu

Install method

npm global

Model

minimax

Provider / routing chain

openclaw -> minimax -> openclaw

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingbug:behaviorIncorrect behavior without a crash

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions