Skip to main content

Measured performance

Figures from an on-prem installation, measured on 2026-09-17 from a lab notebook with OpenCode 1.18 against two models from the model catalog: Qwen3.8 27B (FP8), a reasoning and code model, and Qwen3.6 35B A3B (FP8), the fast one. In your installation the product aliases may point to other models: GET /v1/models/aliases tells you which.

They serve two purposes: choosing the limits of a tool like OpenCode (Choose the limits) and knowing what is normal before you report a problem. They are not a service guarantee.

How long a response takes by size​

The output rate of the reasoning model is steady, about 46 tokens per second, so the time grows linearly with the tokens requested. The node aborts the request after about 300 seconds, and that cutoff is what sets the limit.

max_tokens requestedTokens returnedTimeResult
4 0004 00087 sComplete
8 0008 000175 sComplete
16 0000303 s504 with provider_timeout, the request is aborted

The third row is not a slow model: it is the node's cutoff. At 46 tokens per second the practical ceiling is about 13 800 response tokens, and the prefill of a large prompt also uses part of that budget. That is why you should request 8 192 at most and not the max_output_tokens that the model catalog advertises.

What a long prompt costs​

Retrieval of a fact hidden in prompts of different sizes, with the fact at the start, in the middle and at the end. The three models found it in all nine combinations; what changes is the time it takes to read the prompt.

PromptFact at the startIn the middleAt the endHits
32 492 tokens5.9 s4.8 s2.6 s3 of 3
91 292 tokens17.7 s14.3 s12.8 s3 of 3
123 692 tokens26.6 s26.5 s17.7 s3 of 3

There is no loss of accuracy in the middle part of the context, which is where it usually appears. The cost is time: each turn of a long session pays that prefill again.

Several people at once​

Simultaneous requests of about 600 response tokens, on the reasoning model.

Parallel requestsCompletedMedian latencyMaximum latency
11 of 12.9 s2.9 s
44 of 42.8 s3.9 s
88 of 83.4 s3.7 s

Eight requests at once do not degrade latency noticeably. In a series of 25 back-to-back requests none failed, with a median of 3.2 s and a maximum of 8.8 s.

The two models, side by side​

Qwen3.8 27B (FP8)Qwen3.6 35B A3B (FP8)
First token0.15 s0.11 s
Output rate46 chunks/s206 chunks/s
Response of about 400 words15.4 s3.5 s
Reasoning tokens on a simple riddle106560
Empty content with max_tokens: 256NoYes
Follows "reply only: OK"YesNo, it adds text

The fast one delivers tokens four times faster and is the right one for classifying, summarizing or renaming. The reasoning one spends fewer tokens thinking, follows the format and does not run out of budget, so it is the one to use as the main model of a coding tool. This is why you put the fast one in small_model and the other one in model.

How to measure it again​

The figures change with each model catalog update and with the load on the installation. To repeat the measurement:

  1. Request the catalog with GET /v1/models and note the context_window and max_output_tokens of each model.
  2. Measure the output rate with a streaming request and a fixed max_tokens: tokens returned divided by elapsed seconds.
  3. Find the node's cutoff by raising max_tokens until the response is 504 with provider_timeout.
  4. For the long prompt, build a filler text with a single hidden fact and ask for it in three positions.
  5. For concurrency, send N identical requests in parallel and compare the median latency against that of a single request.

Write down the date, the tool version and the model next to each number. Without that, one performance figure cannot be compared with the next.