Skip to content

Assistant turn ends silently when model returns reasoning-only (empty text) #48599

Closed as not planned

Description

@bcow0092-lgtm

Description

Environment

opencode 1.18.30, Desktop app, Windows 10/11
Provider/model: deepseek/deepseek-flash (built-in deepseek provider), agent build
Reasoning display setting "Show reasoning summaries" was off at the time (default)
Summary Intermittently, an assistant turn produces no visible output at all — the message appears empty and the turn just ends. The answer was actually generated, but the model streamed it entirely into the reasoning channel with an empty normal-text channel (finish=stop, output=0). opencode hides reasoning by default, so the user sees a blank reply. No error is shown and no retry happens.

Steps to reproduce

Select deepseek/deepseek-flash and chat normally.
Ask a normal question (e.g. a documentation-style question).
Intermittently the assistant bubble is empty and the turn ends; re-sending the same message usually works.
Expected

Show the answer, or
If the step finishes with no text and no tool calls, surface a warning and/or automatically retry, instead of ending silently.
Actual Empty assistant turn, no output, no error.

Evidence Session ses_f8c20eceeffeweusSFtvoVF80T.

message.data for the broken turns shows finish="stop" with tokens.output=0:

msg_093c6c024001jKRKOGQ5rIYPvw → finish=stop, output=0, reasoning=634, cache.read=120960
msg_093ca3e5b001nahGAMQuOfssEj → finish=stop, output=0, reasoning=366, cache.read=125312
The part table for these messages contains only step-start, reasoning, step-finish — there is no text part. The full final answer is present inside the reasoning part.

Working comparison (same session):

msg_093c7885500150d6x7MbIpNj5V → finish=stop, output=261, reasoning=93, and a text part (length 567) → displays normally.
Verification: enabling Settings → General → "Show reasoning summaries" makes the previously "blank" turn show the full answer, confirming the content was in the reasoning channel all along.

Root cause The model/provider intermittently emits the entire response as reasoning content and an empty text content (reasoning-only completion). opencode renders only text parts by default, so a text-less step looks like a total failure.

Suggested fix

In the stream/loop completion handling: if a step ends with no text and no tool parts but has reasoning, either surface a visible warning or auto-retry the step (N times).
Optionally, fall back to rendering reasoning content when text is empty.
Consider a guard/telemetry counter for "empty assistant step" so this is diagnosable.
Note This may be an upstream model behavior; regardless, opencode should not silently end a turn with zero user-visible content.

Plugins

No response

OpenCode version

No response

Steps to reproduce

No response

Screenshot and/or share link

No response

Operating System

No response

Terminal

No response

Activity

  1. github-actions commented on Sep 12, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

  2. thdxr commented on Oct 11, 2026

    @thdxr
    Member

    Thanks for the report! OpenCode 2.0 is now out and development is focused on V2, so we're closing issues filed against OpenCode 1. Please upgrade (opencode upgrade --major, details: https://anoma.ly/notes/opencode-2-0), and if this is still relevant on 2.0, reopen this issue or open a new one with your 2.0 version.

    — from 𝕺𝖕𝖊𝖓𝕮𝖔𝖉𝖊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions