anomalyco / anomalyco/opencode
Zen gateway does not forward reasoning/thinking stream for Muse Spark 1.2
@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
- Subscribe to OpenCode Go and obtain a Zen API key.
- Stream a request for
muse-spark-1.2-contributorvia the Zen gateway:POST https://opencode.ai/zen/go/v1/responseswith"stream": trueandreasoning: { effort: "high" }(Responses API), orPOST https://opencode.ai/zen/go/v1/chat/completionswith"stream": true(OpenAI chat completions)
- 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.deltafor reasoning or a dedicatedreasoningevent - Chat completions:
choices[0].delta.reasoning_content(or equivalentreasoningfield)
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.contentis 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 todelta.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_reasonfor muse-* onchat/completions(blocking, open) - can1357/oh-my-pi#8957 / #8980 — pinned muse-spark to
responsesto 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.