Skip to content

Reasoning-model survey — June 2026 ​

This is a research artifact documenting the empirical state of reasoning models across the five OpenAI-compatible providers @llm-ports actively supports. It informs the alpha.24 catalog architectural redesign and the behavioral fingerprinting feature.

Generated 2026-06-24. Each claim cites a source URL; uncertain claims are flagged explicitly rather than guessed.

Headline finding ​

Three distinct CoT field conventions exist across the providers surveyed. A static catalog approach that tries to map (model × provider) → response shape via regex is unsustainable maintenance. The behavioral fingerprinting approach shipped in alpha.24 catches all three at adapter construction time with a single probe per model.

ConventionProvidersField path
Cerebras-styleCerebras, Groq, SambaNovachoices[0].message.reasoning (string)
vLLM-styleDeepInfra, Parasailchoices[0].message.reasoning_content (string)
Inline-tagSome R1 distills<think>...</think> embedded in content

A fourth pattern — usage.completion_tokens_details.reasoning_tokens — is documented by OpenAI native but not consistently populated by OpenAI-compat providers. Most fold reasoning into completion_tokens without a breakdown.

Critical adapter-side gotcha: round-trip incompatibility ​

Cerebras and Groq emit reasoning outbound but REJECT it inbound on follow-up turns. Sending an assistant message back with reasoning populated returns HTTP 400: property 'messages.N.assistant.reasoning' is unsupported. Clients must strip the field before replaying the conversation.

Implication for @llm-ports: the adapter's toOpenAIMessage conversion (the inverse of fromOpenAIAssistantMessage) must strip both reasoning and reasoning_content from assistant messages before sending. Worth a defensive guard in alpha.24's adapter pass.

Per-provider catalog ​

DeepInfra ​

Response shape:

  • Tool calls: standard OpenAI tool_calls[] array. Source: docs.deepinfra.com/chat/tool-calling.
  • CoT field: message.reasoning_content (vLLM convention; not authoritatively documented by DeepInfra but consistent with their vLLM substrate). Empirical evidence: the 2026-06-19 ADW probe showed reasoning_content: '{"path":"","depth":3}\n' on openai/gpt-oss-120b.
  • usage.completion_tokens_details.reasoning_tokens: not documented; reasoning is folded into completion_tokens per docs.deepinfra.com/chat/reasoning.
  • finish_reason: only "stop" documented in examples; "tool_calls" behavior not authoritative.

Reasoning models (8 confirmed):

Model IDInput $/1MOutput $/1MCached $/1MNotes
deepseek-ai/DeepSeek-R1-0528$0.50$2.15$0.35Only model explicitly named in DeepInfra reasoning docs
openai/gpt-oss-120b$0.039$0.19—reasoning_effort low/medium/high
openai/gpt-oss-20b$0.03$0.14—Same surface as 120b
Qwen/Qwen3-Max-Thinking$1.20$6.00$0.24Explicit "Thinking" variant
nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning$0.20$0.80—Slug literally -Reasoning
deepseek-ai/DeepSeek-V4-Pro$1.30$2.60$0.10Hybrid: Non-think / Think High / Think Max via inline <think> tags
deepseek-ai/DeepSeek-V4-Flash$0.10$0.20$0.02Same three-mode design
microsoft/phi-4-reasoning-plusnot verifiednot verified—Pricing 404 at fetch time

Parasail ​

Response shape:

  • Tool calls: standard OpenAI tool_calls[] array. Source: docs.parasail.io/.../tool-function-calling.
  • CoT field: message.reasoning_content (vLLM substrate). Confirmed via cross-provider convention; Parasail's own docs sparse but their substrate is parasail-ai/vllm-public.
  • DeepSeek-style models use <think>...</think> inline as a fallback per Parasail Model-Specific Parameters.
  • usage.completion_tokens_details.reasoning_tokens: not present (vLLM-flat usage shape).
  • finish_reason: undocumented; expected OpenAI-standard values.

Reasoning models (16-18 confirmed):

ModelPrice (in/out per 1M)Notes
openai/gpt-oss-120b$0.10 / $0.75Also Fast variant: $0.15 / $0.60
openai/gpt-oss-20b$0.04 / $0.20
XiaomiMiMo/MiMo-V2.5$0.14 / $0.28Already in alpha.21 catalog
deepseek/deepseek-v4-pro$1.74 / $3.48
deepseek/deepseek-v4-flash$0.14 / $0.28
z-ai/glm-5.2$1.40 / $4.40
z-ai/glm-5.1$1.40 / $4.40
z-ai/glm-5$1.00 / $3.20
moonshotai/kimi-k2.7-code$0.75 / $3.50"Always operates in thinking mode"
moonshotai/kimi-k2.6$0.75 / $3.50
minimax/minimax-m3$0.30 / $1.20
minimax/minimax-m2.5$0.30 / $1.20
qwen/qwen3.5-397b-a17b$0.50 / $3.60
qwen/qwen3.6-35b-a3b$0.15 / $1.00
google/gemma-4-31b-it$0.15 / $0.40Reasoning configurable
google/gemma-4-26b-a4b-it$0.13 / $0.40
allenai/olmo-3-32b-think—Purpose-built reasoning
Trinity Large (Thinking)$0.22 / $0.85

SambaNova ​

Response shape:

  • Tool calls: standard OpenAI tool_calls[] on /v1/chat/completions. Source: docs.sambanova.ai/.../function-calling.
  • CoT field: message.reasoning (NOT reasoning_content). Confirmed via Gemma-4 community example.
  • Separate /v1/responses endpoint uses Responses-API shape (reasoning as output array item).
  • usage.completion_tokens_details.reasoning_tokens: not documented.

Reasoning models (4 confirmed):

ModelInput $/1MOutput $/1MNotes
gpt-oss-120b$0.22$0.59reasoning_effort low/medium/high
MiniMax-M2.7$0.60$2.40Already in alpha.21 catalog (minimax-m2.7)
gemma-4-31B-it$0.38$1.15Toggleable via `<
DeepSeek-R1-Distill-Llama-70B$0.70$1.40On pricing page but absent from current models doc; legacy?

Cerebras ​

Response shape:

  • Tool calls: standard OpenAI tool_calls[]. Source: inference-docs.cerebras.ai/capabilities/tool-use.
  • CoT field: message.reasoning under default reasoning_format: "text_parsed". Streaming: delta.reasoning. Alternative formats raw / hidden / none control parsing.
  • finish_reason: four documented values — stop / length / tool_calls / content_filter. Authoritative per chat-completions reference.
  • usage.completion_tokens_details.reasoning_tokens: not documented.

Known edge case: gpt-oss-120b sometimes emits the function call on the analysis channel instead of commentary, in which case tool_calls[] is empty and harmony tokens leak into content. Source: LangChain forum thread #2554. Defensive parser should detect this.

Reasoning models (2 production):

ModelInput $/1MOutput $/1MConfidence
gpt-oss-120b$0.35$0.75HIGH (primary docs)
zai-glm-4.7$2.25$2.75MEDIUM (third-party only; Cerebras hides per-token rates behind redirect)

Catalog shrinkage observation: Cerebras's previous lineup (Qwen3-235B/32B, Llama-3.1/3.3, DeepSeek-R1-distill, Llama-4-Scout) is no longer in the public catalog as of June 2026. All return 404. Either retired or moved to enterprise-only.

Groq ​

Response shape:

  • Tool calls: standard OpenAI tool_calls[]. Source: console.groq.com/docs/tool-use.
  • CoT field: message.reasoning (matches Cerebras convention). Confirmed: Mozilla.ai cross-provider comparison.
  • Two distinct contracts per family:
    • gpt-oss family: include_reasoning (boolean) + reasoning_effort (low/medium/high). NO reasoning_format.
    • Qwen family: reasoning_format (parsed/raw/hidden) switches the shape.
  • finish_reason: standard OpenAI values.
  • usage.completion_tokens_details.reasoning_tokens: not documented/unreliable.

Reasoning models:

ModelInput $/1MCached $/1MOutput $/1M
openai/gpt-oss-120b$0.15$0.075$0.60
openai/gpt-oss-20b$0.075$0.0375$0.30
openai/gpt-oss-safeguard-20b$0.075$0.0375$0.30
qwen/qwen3-32b$0.29(50% off)$0.59
qwen-3.6-27b$0.60(50% off)$3.00

Deprecated/missing: qwen-qwq-32b and deepseek-r1-distill-* no longer on the public catalog as of June 2026.

Cross-provider behavior caveats ​

Field-name mismatch on round-trip ​

When echoing assistant messages back as conversation history:

  • Cerebras + Groq: must strip reasoning (reject inbound)
  • DeepInfra + Parasail: must strip reasoning_content (vLLM may accept it but inconsistent)
  • All providers: strip both fields defensively

Tool-use during reasoning ​

Some providers (Groq, Cerebras) document caveats:

  • Groq's reasoning_format: "raw" is INCOMPATIBLE with JSON mode or tool use (Groq docs).
  • LiteLLM #15761 + LangChain #34155 report structured outputs + tool use is broken on Groq gpt-oss.
  • Cerebras gpt-oss occasionally emits tool calls on the analysis channel (harmony leak); tool_calls[] becomes empty.

Reasoning effort knobs ​

Not standardized across providers:

Providergpt-oss knobQwen/Other knob
Cerebrasreasoning_effort low/medium/highreasoning_effort + clear_thinking
Groqreasoning_effort + include_reasoningreasoning_format
DeepInfrareasoning_effort or reasoning: { effort, enabled }model-dependent
SambaNovareasoning_effortmodel-dependent
Parasailextra_body.chat_template_kwargs.thinking: true (DeepSeek)model-dependent

Standardization across providers is unrealistic; @llm-ports passes reasoningEffort through to the underlying provider when supported and lets undocumented combinations error visibly rather than papering over.

Implications for the alpha.24 architectural redesign ​

  1. Static catalog cannot scale. ~30+ reasoning models across 5 providers, each with provider-specific response shapes, round-trip quirks, and effort knobs. Maintaining per-(model × provider) regex matches is not the answer.

  2. Behavioral fingerprinting catches all three shape conventions in one probe. A small probe call ("what's 2+2") with reasoning_effort: "low" returns a response whose shape we can inspect: presence of reasoning, reasoning_content, or inline <think> markers. Cache the result per (provider × model) tuple keyed by baseURL + modelId.

  3. The catalog stays as the cheap shortcut for the universally-recognized cases. OpenAI native o-series, gpt-5-nano are stable; the catalog correctly fast-paths them.

  4. Runtime detection (already shipped in alpha.22) is the universal correctness path. First-call detection of reasoning_content (alpha.22) + reasoning (alpha.22) handles novel models. Fingerprinting just skips the first-call penalty.

  5. Defensive round-trip stripping of reasoning and reasoning_content from outbound assistant messages should ship in alpha.24 alongside the architectural changes. Currently we don't strip, which means agentic loops against Cerebras can return 400 on turn 2+.

Sources ​

Every entry in this artifact cites its source URL inline. Aggregate primary sources:

Cross-provider reference: Artificial Analysis providers, Mozilla.ai standardized reasoning content.

MIT License