Models overview
One page per model. Everything on these pages was measured against the live endpoint, so where a model disagrees with its upstream documentation, these pages follow the endpoint.
GET /v1/models is the source of truth for which models exist
right now; it currently returns two.
Side by side
Section titled “Side by side”| DeepSeek-V4-Flash | Qwen3.8-Flash-Next | |
|---|---|---|
| Vendor build | DeepSeek-V4-Flash-0731 | Qwen3.8-Flash-Next-FP8 |
| Parameters | 43 layers, 256+1 experts, 6 activated | 125B total / 6B activated, 512 experts, 10+1 activated |
| Attention | MLA — 64 Q heads, 1 KV head | Hybrid — 36 linear-attention layers + 12 QSA layers |
| Licence | MIT | Qwen Community License 1.0 |
| Context | 1,048,576 | 262,144 |
| Input | text | text |
| Streaming | ✅ | ✅ |
| Tool calling | ✅ | ✅ |
| Parallel tool calls | ❌ | ❌ |
response_format: json_object | ✅ | ✅ |
response_format: json_schema | ❌ | ❌ |
| Image input | ❌ | ❌ |
| Thinking | ✅ | ✅ |
Thinks when reasoning_effort omitted | ❌ | ✅ |
Usable reasoning_effort tiers | minimal low medium high xhigh max | low medium only |
usage.reasoning_tokens | ✅ | ❌ |
system anywhere in messages | ✅ | ❌ first position only |
More than one system | ✅ | ❌ |
developer role | ✅ | ❌ |
The messages differences trace back to one thing: Qwen ships a Jinja chat template that raises
on anything but a single leading system message, and DeepSeek ships no Jinja template at all.
Writing one code path for both
Section titled “Writing one code path for both”The intersection that works on every model today:
- one
systemmessage, at index0, using the role namesystem— notdeveloper reasoning_effortset explicitly tolowormedium, never omitted- read thinking text from
choices[0].message.reasoning - read thinking token count from
usage.completion_tokens_details.reasoning_tokens response_format: {"type": "json_object"}for JSON, neverjson_schema- text-only
content
Common to every model
Section titled “Common to every model”These hold regardless of which model you call:
| Accepted parameters | temperature, max_tokens, top_p, stream, response_format, tools, tool_choice |
| Dropped silently | stop, seed, logit_bias, logprobs, top_logprobs, top_k, min_p, repetition_penalty |
thinking parameter | Rejected with 400 — use reasoning_effort |
| Tokenizer reported | GPT |
| Stability | experimental |
Anything outside the accepted set is removed before the request reaches the serving backend — no error, no effect. If you need those parameters, run a dedicated endpoint, which passes your body straight through to vLLM or SGLang.