anomalyco / anomalyco/opencode

Zen gateway does not forward reasoning/thinking stream for Muse Spark 1.2

Open
#43,584 3 comments 2 reactions 1 assignee View on GitHub

@MrMushrooooom is already working on this.

Since Aug 20, 2026.

Dominant language
TypeScript
Stars
209k
Forks
27.5k
PR merge metrics
PR metrics pending

Description

Summary

Muse Spark 1.2 (muse-spark-1.2, muse-spark-1.2-contributor) supports reasoning/thinking, but the Zen gateway (https://opencode.ai/zen/go/v1) does not expose the reasoning stream to OpenAI-compatible clients. When streaming via either /v1/chat/completions or /v1/responses, clients receive only the final assistant text; no reasoning_content / reasoning_details / thinking delta is ever emitted, so UIs cannot render a thinking bubble even though the model is reasoning on the server side.

This is distinct from #43379 (missing finish_reason on streaming completions for muse-*). That issue blocks chat/completions entirely. After pinning muse-spark to responses (as done in oh-my-pi #8980), calls succeed but the thinking remains invisible.

Steps to Reproduce

  1. Subscribe to OpenCode Go and obtain a Zen API key.
  2. Stream a request for muse-spark-1.2-contributor via the Zen gateway:
    • POST https://opencode.ai/zen/go/v1/responses with "stream": true and reasoning: { effort: "high" } (Responses API), or
    • POST https://opencode.ai/zen/go/v1/chat/completions with "stream": true (OpenAI chat completions)
  3. Observe the SSE stream.

Expected Behavior

Per OpenAI Responses / chat completions streaming conventions, the gateway should forward reasoning deltas when the upstream model produces them, e.g.:

  • Responses API: response.output_text.delta for reasoning or a dedicated reasoning event
  • Chat completions: choices[0].delta.reasoning_content (or equivalent reasoning field)

Clients that render thinking (Hermes, oh-my-pi, other agent UIs) rely on these deltas to show progress.

Actual Behavior

  • Only output_text / choices[0].delta.content is streamed.
  • No reasoning delta is emitted at any point, even with reasoning.effort = high.
  • The model does reason server-side (higher latency and token usage vs effort: none), but the thinking is not observable client-side.

Environment

  • Endpoint: https://opencode.ai/zen/go/v1/{responses,chat/completions}
  • Models: muse-spark-1.2, muse-spark-1.2-contributor (alias)
  • Client: any OpenAI-compatible streaming client (Hermes Agent, oh-my-pi)
  • Auth: Zen Go API key

Impact

  • Users cannot see or debug the model's reasoning, making long turns appear as hangs.
  • Agent UIs that gate on reasoning (e.g., showing a spinner/thinking block) show no progress until the final answer arrives.

Suggested Fix

  • For /v1/responses: forward upstream reasoning events as Responses API reasoning deltas.
  • For /v1/chat/completions: map reasoning to delta.reasoning_content (or the gateway's chosen field) when streaming.
  • If upstream does not provide a structured reasoning stream, consider exposing it once available rather than swallowing it.

Related

  • #43379 — missing finish_reason for muse-* on chat/completions (blocking, open)
  • can1357/oh-my-pi#8957 / #8980 — pinned muse-spark to responses to work around #43379 (merged)
  • This issue remains after that workaround: calls succeed, but reasoning is still not forwarded.

Happy to provide additional logs or test against a staging gateway if helpful.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.