Skip to content

stealth/ox-alpha emits reasoning but reports reasoning_tokens: 0 #296

Description

@nurazem

Summary

stealth/ox-alpha returns observable reasoning content through the raw Chat
Completions API, but reports completion_tokens_details.reasoning_tokens: 0.
The same zero appears in generation metadata as native_tokens_reasoning: 0.

This is reproducible with direct HTTP in both streaming and non-streaming mode;
no SDK or framework translation is involved.

Reproduction

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stealth/ox-alpha",
    "messages": [{"role": "user", "content": "What is 17 * 23? Reply with only the number."}],
    "stream": false
  }'

Inspect both the assistant reasoning fields and:

usage.completion_tokens_details.reasoning_tokens

For streaming, use "stream": true and
"stream_options": {"include_usage": true}. Reasoning deltas arrive before
the final usage chunk, whose reasoning counter is still zero.

Observed

On 2026-08-22, a streaming request returned:

  • 128 non-empty reasoning deltas
  • 134 prompt tokens
  • 688 completion tokens
  • 822 total tokens
  • completion_tokens_details.reasoning_tokens: 0
  • upstream provider Stealth

An independent non-streaming control also returned non-empty reasoning and a
reasoning.text detail while reporting 0 reasoning tokens. Generation metadata
for tested responses likewise reported native_tokens_reasoning: 0 despite the
reasoning output.

The response's total and completion token counts appear internally consistent;
the problem is specifically the reasoning breakdown being represented as an
exact zero even though reasoning was emitted.

Expected

If the upstream route can supply the breakdown,
completion_tokens_details.reasoning_tokens and
native_tokens_reasoning should contain the actual nonzero count.

If the route cannot supply it, the API should expose that the breakdown is
unavailable (for example, omit it, return null, or provide an explicit
availability flag) rather than return an indistinguishable exact zero. The
documented caveat that some models/providers do not return reasoning-token
counts would be much easier for clients to handle with a machine-readable
signal.

Impact

Clients cannot distinguish "no reasoning occurred" from "reasoning occurred but
the provider supplied no count." This makes reasoning-aware usage accounting,
cost attribution, and visible-output throughput measurements unreliable for
this model/route. Agent runtimes must observe reasoning content separately and
treat the reported zero as only a lower bound.

Metadata

Metadata

Assignees

No one assigned

    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