Skip to content

[Bug]: ChatGPT app (iOS) in Remote Mode renders the routed model raw chain of thought #6122

Description

@robin-bially

Client or integration

Other (ChatGPT app for iOS, Codex "Remote Mode", pointed at a Codex host that routes through OpenCodex)

Area

Streaming

Summary

A routed provider's chain of thought reaches clients on the raw reasoning content channel, and the ChatGPT app for iOS renders that channel inline in the transcript while it streams. The desktop Codex app shows only the thinking animation for the same stream, so the visible difference is how each client renders response.reasoning_text.*.

Observed with opencode-go/deepseek-v4.1-flash (adapter openai-chat). OpenCodex emits that model's reasoning as response.reasoning_text.delta plus a reasoning item of the shape {"type":"reasoning","summary":[],"content":[{"type":"reasoning_text","text":"..."}]}, and emits no response.reasoning_summary_text.* frames for this route. A client that renders the raw content channel therefore shows the chain of thought, while a client that renders authored summaries shows nothing. Raw reasoning is never relabelled as a provider-authored summary (by design), and hideThinkingSummary is the only switch that hides it — it hides authored summaries at the same time. showThinkingSummary moves in the opposite direction.

Expected: an operator can keep one provider's raw chain of thought off the client wire while provider-authored summaries stay visible (for example for native OpenAI models, which author real summaries).

Reproduction

  1. Route a model whose endpoint returns thinking as reasoning_content (here opencode-go/deepseek-v4.1-flash, adapter openai-chat).

  2. Stream a Responses request with a validated effort and reasoning.summary omitted or "auto":

    curl -N -X POST http://127.0.0.1:10100/v1/responses -H 'content-type: application/json' -d '{"model":"opencode-go/deepseek-v4.1-flash","input":"Reply with exactly: pong","stream":true,"max_output_tokens":64,"reasoning":{"effort":"low","summary":"auto"}}'

  3. Observe that only response.reasoning_text.delta frames carry the thinking (4 in the capture below) and that no response.reasoning_summary_text.* frame appears at all; the finished item carries summary: [] with the text on the content channel.

  4. Open the same Codex thread from the ChatGPT app for iOS in Remote Mode: the chain of thought is rendered inline (screenshot below). The desktop app shows only the thinking animation for the same thread.

  5. Note the only way to suppress it today: reasoning.summary: "none" (or omitting the summary without a validated active effort), which also suppresses any authored summary.

Version

2.68.0

Operating system

Host: macOS 27.0 (arm64). Viewer: ChatGPT app for iOS in Remote Mode.

Provider and model

opencode-go / deepseek-v4.1-flash (adapter openai-chat)

Logs or error output

Probe from step 2 (summary "auto"):

4  response.reasoning_text.delta
0  response.reasoning_summary_text.delta
response.output_item.done item: {"type":"reasoning","summary":[],"content":[{"type":"reasoning_text","text":"We need answer exactly \"pong\"..."}]}

Same probe with summary: "none":

0  response.reasoning_text.delta
response.output_item.done item: {"type":"reasoning","summary":[],"encrypted_content":"ocxr1:..."}

Screenshots and supporting files

ChatGPT app for iOS in Remote Mode, showing the routed model's chain of thought rendered as text in the transcript while it is generated:

ChatGPT app in Remote Mode rendering the routed model's raw chain of thought

Redacted configuration

Redacted provider row. Nothing in it can keep the raw channel off the client wire today:

{
  "providers": {
    "opencode-go": {
      "adapter": "openai-chat",
      "baseUrl": "https://opencode.ai/zen/go/v1",
      "apiKey": "<redacted>"
    }
  }
}

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingstreamingSSE, WebSocket, terminal stream frames

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions