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-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)
- 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
Happy to provide additional logs or test against a staging gateway if helpful.
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/completionsor/v1/responses, clients receive only the final assistant text; noreasoning_content/reasoning_details/thinkingdelta 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_reasonon streaming completions for muse-*). That issue blockschat/completionsentirely. After pinning muse-spark toresponses(as done in oh-my-pi #8980), calls succeed but the thinking remains invisible.Steps to Reproduce
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)Expected Behavior
Per OpenAI Responses / chat completions streaming conventions, the gateway should forward reasoning deltas when the upstream model produces them, e.g.:
response.output_text.deltafor reasoning or a dedicatedreasoningeventchoices[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
output_text/choices[0].delta.contentis streamed.reasoning.effort = high.effort: none), but the thinking is not observable client-side.Environment
https://opencode.ai/zen/go/v1/{responses,chat/completions}muse-spark-1.2,muse-spark-1.2-contributor(alias)Impact
Suggested Fix
/v1/responses: forward upstream reasoning events as Responses API reasoning deltas./v1/chat/completions: map reasoning todelta.reasoning_content(or the gateway's chosen field) when streaming.Related
finish_reasonfor muse-* onchat/completions(blocking, open)responsesto work around Streaming responses for muse-* models on the Zen gateway never send finish_reason — strict OpenAI-compatible clients enter a retry loop #43379 (merged)Happy to provide additional logs or test against a staging gateway if helpful.