Titanium Computing
benchmarks by
Titanium Computing
measured on
Tiiny

TiinyBench

An independent measurement of what a Tiiny Pocket actually does, as opposed to what a spec sheet says it does. Prefill against prompt length, throughput over a long generation, what happens when more than one person uses the box, and what a reasoning model charges for the tokens nobody reads.

runs 91models 52latest 20260919-160525firmware 0.1.34

What these were taken under

The same model on a busier box, or over a slower link, is a different number. This is the part a stranger needs before trusting any of it.

91of 91
measured alone
nothing else was loaded on the box for any of these

Every model, side by side

The newest run for each of the 20 models with something to compare, not the best run: this is what the box does now. Colour is the same for a given model in every chart below. Run 5 runs, 20260919.

Qwen3-30B-A3B-InstructQwen3-30B-A3B-Instruct-2507Qwen3-30B-A3B-ThinkingQwen3-4B-Instruct-2507Qwen3-8BQwen3-Coder-30B-A3B-InstructQwen3-Coder-30B-A3B-Instruct-TurboQwen3-Coder-NextQwen3.5-35B-A3BQwen3.5-9BQwen3.6-27BQwen3.6-27B-TurboQwen3.6-35B-A3BQwen3.6-35B-A3B-turboQwen3.8-27BOrnith-1.0-35Bgemma-4-26B-A4B-itgpt-oss-120bgpt-oss-20bGLM-4.7-Flash
Sustained decode

One unbroken generation each, same prompt, same box. This is the number that decides whether something feels instant.

Qwen3.6-35B-A3B-turbo32.5 tok/s · 55ugpt-oss-20b30.9 tok/s · 32uQwen3-Coder-30B-A3B-Instruct-Turbo29.4 tok/s · 55uQwen3-30B-A3B-Instruct29.3 tok/s · 55uQwen3-30B-A3B-Thinking29.2 tok/s · 58uQwen3-Coder-30B-A3B-Instruct29.2 tok/s · 55uQwen3.5-35B-A3B28.8 tok/s · 45uQwen3-30B-A3B-Instruct-250724.9 tok/s · 55uQwen3.6-35B-A3B24.9 tok/s · 47uOrnith-1.0-35B22.5 tok/s · 50ugemma-4-26B-A4B-it21.7 tok/s · 78uQwen3.5-9B20.9 tok/s · 16uQwen3-8B20.4 tok/s · 28uQwen3-Coder-Next20.1 tok/s · 94uQwen3-4B-Instruct-250719.1 tok/s · 25ugpt-oss-120b18.8 tok/s · 99uGLM-4.7-Flash14.9 tok/s · 57uQwen3.6-27B-Turbo13.4 tok/s · 55uQwen3.8-27B11.4 tok/s · 55uQwen3.6-27B6.4 tok/s · 48u

Qwen3.6-35B-A3B-turbo leads at 32.5 tok/s, 5.1x the slowest measured, Qwen3.6-27B at 6.4. Every one of these is a single stream on an idle box.

Throughput per NPU unit

The box has 100 NPU units and a loaded model holds its share of them for as long as it is resident. This is what each one returns for what it occupies, which is the question that decides what to keep loaded.

Qwen3.5-9B1.31 tok/s per unit · 21 tok/s on 16ugpt-oss-20b0.97 tok/s per unit · 31 tok/s on 32uQwen3-4B-Instruct-25070.76 tok/s per unit · 19 tok/s on 25uQwen3-8B0.73 tok/s per unit · 20 tok/s on 28uQwen3.5-35B-A3B0.64 tok/s per unit · 29 tok/s on 45uQwen3.6-35B-A3B-turbo0.59 tok/s per unit · 33 tok/s on 55uQwen3-Coder-30B-A3B-Instruct-Turbo0.53 tok/s per unit · 29 tok/s on 55uQwen3-30B-A3B-Instruct0.53 tok/s per unit · 29 tok/s on 55uQwen3-Coder-30B-A3B-Instruct0.53 tok/s per unit · 29 tok/s on 55uQwen3.6-35B-A3B0.53 tok/s per unit · 25 tok/s on 47uQwen3-30B-A3B-Thinking0.50 tok/s per unit · 29 tok/s on 58uQwen3-30B-A3B-Instruct-25070.45 tok/s per unit · 25 tok/s on 55uOrnith-1.0-35B0.45 tok/s per unit · 23 tok/s on 50ugemma-4-26B-A4B-it0.28 tok/s per unit · 22 tok/s on 78uGLM-4.7-Flash0.26 tok/s per unit · 15 tok/s on 57uQwen3.6-27B-Turbo0.24 tok/s per unit · 13 tok/s on 55uQwen3-Coder-Next0.21 tok/s per unit · 20 tok/s on 94uQwen3.8-27B0.21 tok/s per unit · 11 tok/s on 55ugpt-oss-120b0.19 tok/s per unit · 19 tok/s on 99uQwen3.6-27B0.13 tok/s per unit · 6 tok/s on 48u

Qwen3.5-9B returns 1.31 tok/s for every unit it holds and Qwen3.6-27B returns 0.13, a 9.8x difference in what the same slice of the box buys. In plain terms: Qwen3.5-9B occupies 16 of the 100 units and leaves 84 for everything else, while Qwen3.6-27B occupies 48 and leaves 52. The fastest model measured, Qwen3.6-35B-A3B-turbo at 32.5 tok/s, is not the most efficient: it costs 55 units to get there, against 16 for Qwen3.5-9B at 20.9 tok/s. If one model is going to sit resident while the box does other work, that gap is the whole decision; if the box only ever runs one thing, it does not matter and the previous chart is the one to read.

Prefill, every model

How fast each model reads a prompt, at four lengths. The x axis is logarithmic because the prompts are.

0649129819472596651273251,5736,253prompt tokensprefill tok/s

Qwen3-4B-Instruct-2507 reads fastest at its best length, 2,277 tok/s, against 309 for GLM-4.7-Flash. A line that climbs to the right is a model that gets cheaper per token as the prompt grows.

Aggregate throughput against stream count

Every caller added together as more of them arrive at once. A line that climbs is a box that batches; a flat line is a box that queues.

091827351248streams at onceaggregate tok/s

All 20 of them are flat, the best managing 1.18x at its deepest level. This is one accelerator serving one sequence at a time, so a second caller waits rather than shares. It is the single most important thing to know before putting a Tiiny behind anything with more than one user.

Every run

Newest first. Each block is one model on one day, with the numbers exactly as the device reported them.

SongGeneration-v2-large

Music Generation4B params28 of 100 NPU units6.9 GB on disk
tencent/SongGeneration-v2-large
run recover4-19sep · 20260919-160525 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate404neither a WAV nor a session id came back

SongGeneration-v2-large

Music Generation4B params28 of 100 NPU units6.9 GB on disk
tencent/SongGeneration-v2-large
run recover4-19sep · 20260919-160106 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate400neither a WAV nor a session id came back

R3-embedding-0.6b

Text Embedding0.6B params4 of 100 NPU units0.8 GB on disk
tencent/R3-embedding-0.6b
run recover3-19sep · 20260919-155635 · TiinyOS 0.1.34 · 17s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
21.6/s
embeddings
1024 wide, best of one, eight and thirty-two at a time

SongGeneration-v2-large

Music Generation4B params28 of 100 NPU units6.9 GB on disk
tencent/SongGeneration-v2-large
run recover2-19sep · 20260919-155443 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate400neither a WAV nor a session id came back

supertonic-3

Text-to-Speech0.1B params1.0 GB on disk
Supertone/supertonic-3
run recover2-19sep · 20260919-155302 · TiinyOS 0.1.34 · 10s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab
2.10x
real time
voice F1, seconds of speech per second of wall clock

Foundation-1

Music Generation2B params5 of 100 NPU units1.4 GB on disk
RoyalCities/Foundation-1
run recover-19sep · 20260919-154858 · TiinyOS 0.1.34 · 140s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
0.29x
real time
seconds of music per second of wall clock

SongGeneration-v2-large

Music Generation4B params28 of 100 NPU units6.9 GB on disk
tencent/SongGeneration-v2-large
run recover-19sep · 20260919-154715 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate400neither a WAV nor a session id came back

R3-embedding-0.6b

Text Embedding0.6B params4 of 100 NPU units0.8 GB on disk
tencent/R3-embedding-0.6b
run recover-19sep · 20260919-154544 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
embedgateway/v1/embeddings502the response could not be read as this test expects

Qwen3-Embedding-0.6B

Text Embedding0.6B params1 of 100 NPU units0.9 GB on disk
Qwen/Qwen3-Embedding-0.6B
run recover-19sep · 20260919-154412 · TiinyOS 0.1.34 · 2s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
22.2/s
embeddings
1024 wide, best of one, eight and thirty-two at a time

supertonic-3

Text-to-Speech0.1B params1.0 GB on disk
Supertone/supertonic-3
run recover-19sep · 20260919-154241 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
speechgateway/v1/audio/speech500no WAV came back, in any envelope this knows

Qwen3-TTS-12Hz-1.7B-VoiceDesign

Text-to-Speech1.7B params5 of 100 NPU units2.4 GB on disk
Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign
run recover-19sep · 20260919-154107 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
speechgateway/v1/audio/speech500no WAV came back, in any envelope this knows

Qwen3-TTS-12Hz-1.7B-Base

Text-to-Speech1.7B params5 of 100 NPU units2.5 GB on disk
Qwen/Qwen3-TTS-12Hz-1.7B-Base
run recover-19sep · 20260919-153932 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
speechgateway/v1/audio/speech500no WAV came back, in any envelope this knows

PP-OCRv6-Small

Image-to-Text2.48M params0.1 GB on disk
PaddlePaddle/PP-OCRv6-Small
run recover-19sep · 20260919-153757 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr400the response could not be read as this test expects
ocr fallbackgateway/v1/chat/completions400the chat fallback refused it too, so there is no route left to read a page with

PP-OCRv6-Medium

Image-to-Text22M params1 of 100 NPU units0.1 GB on disk
PaddlePaddle/PP-OCRv6-Medium
run recover-19sep · 20260919-153622 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr400the response could not be read as this test expects
ocr fallbackgateway/v1/chat/completions400the chat fallback refused it too, so there is no route left to read a page with

PP-DocLayoutV3

Image-to-Text1B params20 of 100 NPU units0.2 GB on disk
PaddlePaddle/PP-DocLayoutV3
run recover-19sep · 20260919-153448 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/chat/completions400the /v1/ocr route refused it and the chat fallback refused it as well

GLM-OCR

Image-to-Text0.9B params4 of 100 NPU units1.9 GB on disk
zai-org/GLM-OCR
run recover-19sep · 20260919-153309 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/chat/completions400the /v1/ocr route refused it and the chat fallback refused it as well

Qwen3-Coder-Next

Text Generation80B params94 of 100 NPU units37.7 GB on disk
Qwen/Qwen3-Coder-Next
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 247s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.94s
first token
68 tokens in
20.1tok/s
sustained decode
1,500 tokens unbroken
19.6tok/s
batched at 8 streams
every caller added together
10.59s
deepest prefill
wait at 6,256 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s04.52s179.03s3513.55s520.94s40681.59s403283.90s391,57610.59s376,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 11.3x the wait, 0.94s at 68 tokens against 10.59s at 6,256. Reading got cheaper per token as the prompt grew, from 74 to 447 tok/s. Decode stayed near 37 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.94 s7440.5
3281.59 s21039.6
1,5763.90 s39139.2
6,25610.59 s44737.4
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

08172519201x8s wall20212x16s wall20214x33s wall20218x65s wallaggregateper stream

8 streams deliver 1.02x the aggregate of one, and wall time grows in step with the callers, 8s to 65s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off15.9s · 318 tokensthinking on15.8s · 318 tokens

Thinking on and off came out the same, within 0.1s and 0 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
99%peak NPU54%median NPU12,758 MBNPU memory at peak63samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

gpt-oss-120b

Text Generation120B params99 of 100 NPU units36.8 GB on disk
openai/gpt-oss-120b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 285s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
1.05s
first token
127 tokens in
18.8tok/s
sustained decode
1,500 tokens unbroken
18.7tok/s
batched at 8 streams
every caller added together
8.57s
deepest prefill
wait at 6,315 tokens of prompt
0.7x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s03.66s97.31s1710.97s261.05s201271.06s203872.56s171,6358.57s166,315time to first tokendecode tok/s (dashed)prompt tokens

50x the prompt cost 8.2x the wait, 1.05s at 127 tokens against 8.57s at 6,315. Reading got cheaper per token as the prompt grew, from 127 to 581 tok/s. Decode stayed near 16 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
1271.05 s12720.3
3871.06 s32220.3
1,6352.56 s60217.3
6,3158.57 s58115.6
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

08162417201x9s wall19202x17s wall18204x35s wall19208x68s wallaggregateper stream

8 streams deliver 1.07x the aggregate of one, and wall time grows in step with the callers, 9s to 68s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off35.6s · 663 tokensthinking on25.2s · 466 tokens

Thinking finished 10.4s sooner and used 197 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 19 against 19 tok/s.

What the device was doing
99%peak NPU59%median NPU10,130 MBNPU memory at peak34%CPU after67samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 214s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.57s
first token
72 tokens in
22.5tok/s
sustained decode
1,500 tokens unbroken
21.5tok/s
batched at 2 streams
every caller added together
6.70s
deepest prefill
wait at 6,260 tokens of prompt
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.86s195.71s398.57s580.57s44720.89s453322.18s401,5806.70s466,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.7x the wait, 0.57s at 72 tokens against 6.70s at 6,260. Reading got cheaper per token as the prompt grew, from 131 to 740 tok/s. Decode stayed near 46 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.57 s13144.1
3320.89 s38544.5
1,5802.18 s70039.8
6,2606.70 s74045.5
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09192820231x8s wall21232x15s wall21234x30s wall18238x35s wallaggregateper stream

8 streams deliver 1.06x the aggregate of one, and wall time grows in step with the callers, 8s to 35s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time. 4 request(s) failed and are not in these figures.

What the device was doing
100%peak NPU55%median NPU12,289 MBNPU memory at peak34%CPU after56samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B-turbo

Image-Text-to-Text35B params55 of 100 NPU units17.9 GB on disk
Qwen/Qwen3.6-35B-A3B-turbo
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 179s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.67s
first token
72 tokens in
32.5tok/s
sustained decode
1,500 tokens unbroken
26.8tok/s
batched at 4 streams
every caller added together
6.92s
deepest prefill
wait at 6,260 tokens of prompt
1.2x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.95s105.91s218.86s310.67s23720.97s243322.30s221,5806.92s236,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 10.4x the wait, 0.67s at 72 tokens against 6.92s at 6,260. Reading got cheaper per token as the prompt grew, from 115 to 718 tok/s. Decode stayed near 23 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.67 s11523.4
3320.97 s35824.3
1,5802.30 s66822.1
6,2606.92 s71823.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012243623261x7s wall25272x13s wall27294x24s wall26298x49s wallaggregateper stream

8 streams deliver 1.17x the aggregate of one, and wall time grows in step with the callers, 7s to 49s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off12.4s · 595 tokensthinking on15.4s · 688 tokens

Reasoning added 3.0s and 93 tokens to the same question. The decode rate barely moved, 50 against 48 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
98%peak NPU48%median NPU11,123 MBNPU memory at peak34%CPU after39samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B

Image-Text-to-Text35B params47 of 100 NPU units17.4 GB on disk
Qwen/Qwen3.6-35B-A3B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 227s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.56s
first token
72 tokens in
24.9tok/s
sustained decode
1,500 tokens unbroken
23.6tok/s
batched at 2 streams
every caller added together
6.89s
deepest prefill
wait at 6,260 tokens of prompt
1.3x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.94s245.88s498.81s730.56s57720.92s503322.29s481,5806.89s556,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 12.4x the wait, 0.56s at 72 tokens against 6.89s at 6,260. Reading got cheaper per token as the prompt grew, from 134 to 719 tok/s. Decode stayed near 55 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.56 s13457.0
3320.92 s36750.2
1,5802.29 s66448.1
6,2606.89 s71954.7
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

010213122251x7s wall24252x14s wall23254x27s wall23258x55s wallaggregateper stream

8 streams deliver 1.07x the aggregate of one, and wall time grows in step with the callers, 7s to 55s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off22.6s · 542 tokensthinking on28.3s · 700 tokens

Reasoning added 5.7s and 158 tokens to the same question. The decode rate barely moved, 25 against 25 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
93%peak NPU65%median NPU9,365 MBNPU memory at peak30%CPU after51samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.5-35B-A3B

Image-Text-to-Text35B params45 of 100 NPU units16.9 GB on disk
Qwen/Qwen3.5-35B-A3B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 195s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.58s
first token
72 tokens in
28.8tok/s
sustained decode
1,500 tokens unbroken
27.9tok/s
batched at 8 streams
every caller added together
6.81s
deepest prefill
wait at 6,260 tokens of prompt
1.2x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.91s265.81s518.72s770.58s58720.98s603322.41s581,5806.81s556,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.7x the wait, 0.58s at 72 tokens against 6.81s at 6,260. Reading got cheaper per token as the prompt grew, from 128 to 695 tok/s. Decode stayed near 55 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.58 s12858.4
3320.98 s34659.8
1,5802.41 s63457.5
6,2606.81 s69555.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012243627291x6s wall28292x12s wall28294x23s wall28298x46s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 6s to 46s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off20.2s · 573 tokensthinking on24.3s · 700 tokens

Reasoning added 4.2s and 127 tokens to the same question. The decode rate barely moved, 29 against 29 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
90%peak NPU53%median NPU8,963 MBNPU memory at peak26%CPU after44samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

GLM-4.7-Flash

Text Generation31B params57 of 100 NPU units15.8 GB on disk
zai-org/GLM-4.7-Flash
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 349s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.81s
first token
65 tokens in
14.9tok/s
sustained decode
1,500 tokens unbroken
15.1tok/s
batched at 2 streams
every caller added together
16.46s
deepest prefill
wait at 6,253 tokens of prompt
3.1x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s07.02s1314.05s2721.07s400.81s31651.54s313254.10s281,57316.46s226,253time to first tokendecode tok/s (dashed)prompt tokens

96x the prompt cost 20.2x the wait, 0.81s at 65 tokens against 16.46s at 6,253. Reading got cheaper per token as the prompt grew, from 83 to 286 tok/s. Decode stayed near 22 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
650.81 s8331.5
3251.54 s17931.1
1,5734.10 s30928.1
6,25316.46 s28621.6
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

06131914161x12s wall15162x21s wall14164x44s wall15168x86s wallaggregateper stream

8 streams deliver 1.11x the aggregate of one, and wall time grows in step with the callers, 12s to 86s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off14.8s · 206 tokensthinking on45.3s · 700 tokens

Reasoning added 30.4s and 494 tokens to the same question. The decode rate barely moved, 16 against 16 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
96%peak NPU44%median NPU10,557 MBNPU memory at peak34%CPU after85samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.8-27B

Image-Text-to-Text27B params55 of 100 NPU units15.7 GB on disk
Qwen/Qwen3.8-27B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 453s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
1.27s
first token
72 tokens in
11.4tok/s
sustained decode
1,500 tokens unbroken
10.0tok/s
batched at 8 streams
every caller added together
11.00s
deepest prefill
wait at 6,260 tokens of prompt
0.5x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s04.69s49.39s914.08s131.27s10722.00s103323.96s101,58011.00s106,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 8.6x the wait, 1.27s at 72 tokens against 11.00s at 6,260. Reading got cheaper per token as the prompt grew, from 61 to 453 tok/s. Decode stayed near 10 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
721.27 s6110.2
3322.00 s17410.3
1,5803.96 s39110.2
6,26011.00 s4539.9
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

059148101x19s wall9102x35s wall9114x67s wall10118x128s wallaggregateper stream

8 streams deliver 1.18x the aggregate of one, and wall time grows in step with the callers, 19s to 128s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off34.5s · 623 tokensthinking on17.8s · 264 tokens

Thinking finished 16.7s sooner and used 359 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 20 against 18 tok/s.

What the device was doing
100%peak NPU50%median NPU9,712 MBNPU memory at peak34%CPU after111samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-27B-Turbo

Image-Text-to-Text27B params55 of 100 NPU units15.7 GB on disk
Qwen/Qwen3.6-27B-Turbo
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 428s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
1.27s
first token
72 tokens in
13.4tok/s
sustained decode
1,500 tokens unbroken
11.1tok/s
batched at 2 streams
every caller added together
13.13s
deepest prefill
wait at 6,260 tokens of prompt
1.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s05.60s411.21s916.81s131.27s10721.84s103323.79s101,58013.13s106,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 10.4x the wait, 1.27s at 72 tokens against 13.13s at 6,260. Reading got cheaper per token as the prompt grew, from 62 to 480 tok/s. Decode stayed near 10 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
721.27 s629.9
3321.84 s19010.1
1,5803.79 s4099.8
6,26013.13 s4809.7
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

05101510131x16s wall11122x29s wall11124x59s wall11128x121s wallaggregateper stream

8 streams deliver 1.11x the aggregate of one, and wall time grows in step with the callers, 16s to 121s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off33.8s · 652 tokensthinking on34.7s · 700 tokens

Reasoning added 0.8s and 48 tokens to the same question. The decode rate barely moved, 22 against 22 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
99%peak NPU54%median NPU11,345 MBNPU memory at peak28%CPU after94samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-27B

Image-Text-to-Text27B params48 of 100 NPU units15.6 GB on disk
Qwen/Qwen3.6-27B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 863s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
1.24s
first token
72 tokens in
6.4tok/s
sustained decode
1,500 tokens unbroken
6.2tok/s
batched at 2 streams
every caller added together
12.95s
deepest prefill
wait at 6,260 tokens of prompt
0.9x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s05.53s511.05s1116.58s161.24s13721.84s133323.73s131,58012.95s136,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 10.5x the wait, 1.24s at 72 tokens against 12.95s at 6,260. Reading got cheaper per token as the prompt grew, from 62 to 486 tok/s. Decode stayed near 13 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
721.24 s6212.9
3321.84 s18812.8
1,5803.73 s41312.8
6,26012.95 s48612.6
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

0358561x30s wall662x52s wall664x105s wall668x209s wallaggregateper stream

8 streams deliver 1.16x the aggregate of one, and wall time grows in step with the callers, 30s to 209s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off107.2s · 660 tokensthinking on101.5s · 630 tokens

Thinking finished 5.6s sooner and used 30 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 6 against 6 tok/s.

What the device was doing
99%peak NPU48%median NPU12,362 MBNPU memory at peak34%CPU after198samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Coder-30B-A3B-Instruct-Turbo

Text Generation31B params55 of 100 NPU units15.2 GB on disk
Qwen/Qwen3-Coder-30B-A3B-Instruct-Turbo
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 167s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.27s
first token
68 tokens in
29.4tok/s
sustained decode
1,500 tokens unbroken
25.4tok/s
batched at 8 streams
every caller added together
4.96s
deepest prefill
wait at 6,256 tokens of prompt
1.1x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.12s104.24s206.36s300.27s24680.49s233281.32s201,5764.96s216,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 18.7x the wait, 0.27s at 68 tokens against 4.96s at 6,256. Reading got cheaper per token as the prompt grew, from 305 to 960 tok/s. Decode stayed near 21 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.27 s30523.7
3280.49 s73622.9
1,5761.32 s1,03820.3
6,2564.96 s96020.7
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

011223225261x6s wall24252x13s wall25254x26s wall25268x50s wallaggregateper stream

8 streams deliver 1.00x the aggregate of one, and wall time grows in step with the callers, 6s to 50s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off5.5s · 267 tokensthinking on6.3s · 315 tokens

Reasoning added 0.8s and 48 tokens to the same question. The decode rate barely moved, 51 against 52 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
98%peak NPU53%median NPU11,251 MBNPU memory at peak32%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Instruct-2507

Text Generation30B params55 of 100 NPU units14.7 GB on disk
Qwen/Qwen3-30B-A3B-Instruct-2507
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 194s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.34s
first token
68 tokens in
24.9tok/s
sustained decode
1,500 tokens unbroken
24.8tok/s
batched at 8 streams
every caller added together
5.93s
deepest prefill
wait at 6,256 tokens of prompt
0.9x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.53s225.06s447.59s660.34s51680.62s513281.58s471,5765.93s406,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 17.2x the wait, 0.34s at 68 tokens against 5.93s at 6,256. Reading got cheaper per token as the prompt grew, from 209 to 799 tok/s. Decode stayed near 40 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.34 s20951.4
3280.62 s54851.4
1,5761.58 s84447.2
6,2565.93 s79940.2
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

011213224261x7s wall25262x13s wall24264x26s wall25268x52s wallaggregateper stream

8 streams deliver 1.05x the aggregate of one, and wall time grows in step with the callers, 7s to 52s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off14.0s · 344 tokensthinking on12.4s · 311 tokens

Thinking finished 1.6s sooner and used 33 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 26 against 26 tok/s.

What the device was doing
92%peak NPU42%median NPU8,523 of 13,089 MBNPU memory at peak16%CPU after51samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Instruct

Text Generation30B params55 of 100 NPU units14.7 GB on disk
Qwen/Qwen3-30B-A3B-Instruct
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 165s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.23s
first token
68 tokens in
29.3tok/s
sustained decode
1,500 tokens unbroken
30.1tok/s
batched at 2 streams
every caller added together
4.82s
deepest prefill
wait at 6,256 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.06s264.11s526.17s790.23s59680.41s613281.11s551,5764.82s486,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 20.5x the wait, 0.23s at 68 tokens against 4.82s at 6,256. Reading got cheaper per token as the prompt grew, from 311 to 978 tok/s. Decode stayed near 48 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.23 s31159.2
3280.41 s69161.4
1,5761.11 s1,15155.1
6,2564.82 s97848.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013253829311x5s wall30312x11s wall30314x21s wall30318x43s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 5s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off13.3s · 397 tokensthinking on12.8s · 388 tokens

Thinking on and off came out the same, within 0.5s and 9 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
96%peak NPU55%median NPU10,659 MBNPU memory at peak34%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Coder-30B-A3B-Instruct

Text Generation30B params55 of 100 NPU units14.6 GB on disk
Qwen/Qwen3-Coder-30B-A3B-Instruct
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 160s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.22s
first token
68 tokens in
29.2tok/s
sustained decode
1,500 tokens unbroken
30.0tok/s
batched at 8 streams
every caller added together
5.01s
deepest prefill
wait at 6,256 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.14s274.27s536.41s800.22s62680.40s623281.11s551,5765.01s486,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 22.4x the wait, 0.22s at 68 tokens against 5.01s at 6,256. Reading got cheaper per token as the prompt grew, from 327 to 941 tok/s. Decode stayed near 48 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.22 s32762.3
3280.40 s71361.7
1,5761.11 s1,15054.6
6,2565.01 s94148.3
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013253830311x5s wall30312x11s wall30314x21s wall30318x43s wallaggregateper stream

8 streams deliver 1.01x the aggregate of one, and wall time grows in step with the callers, 5s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off10.3s · 308 tokensthinking on9.9s · 300 tokens

Thinking on and off came out the same, within 0.4s and 8 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
99%peak NPU64%median NPU8,625 of 15,030 MBNPU memory at peak34%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Thinking

Text Generation30B params58 of 100 NPU units14.5 GB on disk
Qwen/Qwen3-30B-A3B-Thinking
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 187s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.24s
first token
70 tokens in
29.2tok/s
sustained decode
1,500 tokens unbroken
30.0tok/s
batched at 2 streams
every caller added together
4.88s
deepest prefill
wait at 6,258 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.08s184.17s356.25s530.24s41700.42s413301.14s361,5784.88s316,258time to first tokendecode tok/s (dashed)prompt tokens

89x the prompt cost 20.3x the wait, 0.24s at 70 tokens against 4.88s at 6,258. Reading got cheaper per token as the prompt grew, from 324 to 968 tok/s. Decode stayed near 31 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
700.24 s32441.2
3300.42 s69540.7
1,5781.14 s1,13935.8
6,2584.88 s96830.9
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013253829311x6s wall30312x11s wall30314x21s wall30318x43s wallaggregateper stream

8 streams deliver 1.05x the aggregate of one, and wall time grows in step with the callers, 6s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off23.5s · 700 tokensthinking on23.2s · 700 tokens

Thinking on and off came out the same, within 0.3s and 0 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
96%peak NPU50%median NPU12,098 of 15,274 MBNPU memory at peak30%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

gemma-4-26B-A4B-it

Image-Text-to-Text26B params78 of 100 NPU units13.4 GB on disk
google/gemma-4-26B-A4B-it
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 225s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.25s
first token
74 tokens in
21.7tok/s
sustained decode
1,325 tokens unbroken
22.0tok/s
batched at 8 streams
every caller added together
3.77s
deepest prefill
wait at 6,262 tokens of prompt
2.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.61s193.22s394.83s580.25s45740.43s413341.09s431,5823.77s426,262time to first tokendecode tok/s (dashed)prompt tokens

85x the prompt cost 15.1x the wait, 0.25s at 74 tokens against 3.77s at 6,262. Reading got cheaper per token as the prompt grew, from 326 to 1,254 tok/s. Decode stayed near 42 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
740.25 s32645.4
3340.43 s68041.2
1,5821.09 s1,18743.1
6,2623.77 s1,25441.5
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09182822231x7s wall22232x15s wall22234x29s wall22238x58s wallaggregateper stream

8 streams deliver 1.01x the aggregate of one, and wall time grows in step with the callers, 7s to 58s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off15.7s · 343 tokensthinking on32.1s · 700 tokens

Reasoning added 16.4s and 357 tokens to the same question. The decode rate barely moved, 22 against 22 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
96%peak NPU48%median NPU12,234 MBNPU memory at peak34%CPU after51samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

ERNIE-Image-Turbo

Text-to-Image8B params27 of 100 NPU units11.5 GB on disk
baidu/ERNIE-Image-Turbo
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 38s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
12.83s
per illustration
512 by 512, eight steps

gpt-oss-20b

Text Generation20B params32 of 100 NPU units10.3 GB on disk
openai/gpt-oss-20b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 172s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.27s
first token
66 tokens in
30.9tok/s
sustained decode
1,500 tokens unbroken
31.0tok/s
batched at 4 streams
every caller added together
4.42s
deepest prefill
wait at 6,254 tokens of prompt
0.9x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.89s173.77s355.66s520.27s39660.42s403261.08s401,5744.42s356,254time to first tokendecode tok/s (dashed)prompt tokens

95x the prompt cost 16.5x the wait, 0.27s at 66 tokens against 4.42s at 6,254. Reading got cheaper per token as the prompt grew, from 272 to 1,068 tok/s. Decode stayed near 35 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
660.27 s27239.4
3260.42 s68440.4
1,5741.08 s1,19140.2
6,2544.42 s1,06834.7
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013263929321x6s wall31322x10s wall31324x21s wall31328x42s wallaggregateper stream

8 streams deliver 1.07x the aggregate of one, and wall time grows in step with the callers, 6s to 42s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off20.0s · 627 tokensthinking on17.9s · 548 tokens

Thinking finished 2.1s sooner and used 79 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 32 against 32 tok/s.

What the device was doing
100%peak NPU47%median NPU12,037 MBNPU memory at peak34%CPU after41samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Z-Image-Turbo-Creating-Realistic

Text-to-Image10B params26 of 100 NPU units10.3 GB on disk
TaoBaiBai2025/Z-Image-Turbo-Creating-Realistic
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 26s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.83s
per illustration
512 by 512, eight steps

Z-Image-Turbo-Children-Drawing

Text-to-Image10B params26 of 100 NPU units10.3 GB on disk
Tongyi-MAI/Z-Image-Turbo-Children-Drawing
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 26s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.78s
per illustration
512 by 512, eight steps

Z-Image-Turbo-CharacterDesignSheet

Text-to-Image10B params26 of 100 NPU units10.3 GB on disk
YeiYeiArt/Z-Image-Turbo-CharacterDesignSheet
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 26s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.80s
per illustration
512 by 512, eight steps

Z-Image-Turbo

Text-to-Image10B params32 of 100 NPU units10.2 GB on disk
Tongyi-MAI/Z-Image-Turbo
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
7.90s
per illustration
512 by 512, eight steps

Firered-ASR2-LLM

ASR8B params6 of 100 NPU units9.8 GB on disk
FireRedTeam/Firered-ASR2-LLM
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 3s of measurement
measured through /v1/audio/transcriptions on a Tiiny Pocket Lab
5.49x
real time
seconds of audio transcribed per second

Nemotron-3-Embed-8b-Bf16

Text Embedding8B params20 of 100 NPU units8.1 GB on disk
nvidia/Nemotron-3-Embed-8b-Bf16
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 18s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
2.2/s
embeddings
4096 wide, best of one, eight and thirty-two at a time

Qwen3-Embedding-8b

Text Embedding8B params18 of 100 NPU units7.8 GB on disk
Qwen/Qwen3-Embedding-8b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 9s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
4.9/s
embeddings
4096 wide, best of one, eight and thirty-two at a time

FLUX.2-klein-4B-Object-Remove

Text-to-Image4B params26 of 100 NPU units7.3 GB on disk
fal/FLUX.2-klein-4B-Object-Remove
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.04s
per illustration
512 by 512, eight steps

FLUX.2-klein-4B

Text-to-Image4B params26 of 100 NPU units7.3 GB on disk
black-forest-labs/FLUX.2-klein-4B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.01s
per illustration
512 by 512, eight steps

FLUX.2-klein-4B-Outpaint

Text-to-Image4B params26 of 100 NPU units7.3 GB on disk
fal/FLUX.2-klein-4B-Outpaint
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.05s
per illustration
512 by 512, eight steps

FLUX.2-klein-4B-Background-Remove

Text-to-Image4B params26 of 100 NPU units7.3 GB on disk
fal/FLUX.2-klein-4B-Background-Remove
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.05s
per illustration
512 by 512, eight steps

FLUX.2-klein-4B-Zoom

Text-to-Image4B params26 of 100 NPU units7.3 GB on disk
fal/FLUX.2-klein-4B-Zoom
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
8.02s
per illustration
512 by 512, eight steps

SongGeneration-v2-large

Music Generation4B params28 of 100 NPU units6.9 GB on disk
tencent/SongGeneration-v2-large
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate400neither a WAV nor a session id came back

Qwen3.5-9B

Image-Text-to-Text9B params16 of 100 NPU units5.5 GB on disk
Qwen/Qwen3.5-9B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 256s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.44s
first token
72 tokens in
20.9tok/s
sustained decode
1,500 tokens unbroken
20.1tok/s
batched at 8 streams
every caller added together
3.67s
deepest prefill
wait at 6,260 tokens of prompt
1.5x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.56s173.13s354.69s520.44s41720.59s403321.24s401,5803.67s416,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 8.3x the wait, 0.44s at 72 tokens against 3.67s at 6,260. Reading got cheaper per token as the prompt grew, from 172 to 1,356 tok/s. Decode stayed near 41 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.44 s17240.9
3320.59 s58539.7
1,5801.24 s1,24039.9
6,2603.67 s1,35640.9
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09172619211x8s wall20212x16s wall20214x32s wall20218x64s wallaggregateper stream

8 streams deliver 1.06x the aggregate of one, and wall time grows in step with the callers, 8s to 64s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off22.3s · 453 tokensthinking on34.0s · 700 tokens

Reasoning added 11.7s and 247 tokens to the same question. The decode rate barely moved, 21 against 21 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
98%peak NPU54%median NPU11,811 MBNPU memory at peak33%CPU after60samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-8B

Text Generation8B params28 of 100 NPU units4.3 GB on disk
Qwen/Qwen3-8B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 246s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.16s
first token
72 tokens in
20.4tok/s
sustained decode
1,500 tokens unbroken
21.0tok/s
batched at 2 streams
every caller added together
3.34s
deepest prefill
wait at 6,260 tokens of prompt
1.7x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.42s182.85s364.27s550.16s43720.27s423320.69s391,5803.34s356,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 21.0x the wait, 0.16s at 72 tokens against 3.34s at 6,260. Reading got cheaper per token as the prompt grew, from 533 to 1,419 tok/s. Decode stayed near 35 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.16 s53342.8
3320.27 s1,14641.8
1,5800.69 s1,90038.5
6,2603.34 s1,41935.5
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09172620211x8s wall21212x15s wall21214x31s wall21218x61s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 8s to 61s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off19.2s · 398 tokensthinking on33.5s · 700 tokens

Reasoning added 14.3s and 302 tokens to the same question. The decode rate barely moved, 21 against 21 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
100%peak NPU40%median NPU9,963 MBNPU memory at peak32%CPU after62samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Embedding-4b

Text Embedding4B params23 of 100 NPU units4.2 GB on disk
Qwen/Qwen3-Embedding-4b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 6s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
6.9/s
embeddings
2560 wide, best of one, eight and thirty-two at a time

Qwen3-ASR-1.7B

ASR1.7B params7 of 100 NPU units3.6 GB on disk
Qwen/Qwen3-ASR-1.7B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 2s of measurement
measured through /v1/audio/transcriptions on a Tiiny Pocket Lab
7.03x
real time
seconds of audio transcribed per second

Fun-ASR-MLT-Nano

ASR1B params6 of 100 NPU units2.7 GB on disk
FunAudioLLM/Fun-ASR-MLT-Nano
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 2s of measurement
measured through /v1/audio/transcriptions on a Tiiny Pocket Lab
7.46x
real time
seconds of audio transcribed per second

Fun-ASR-Nano

ASR1B params7 of 100 NPU units2.7 GB on disk
FunAudioLLM/Fun-ASR-Nano
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 3s of measurement
measured through /v1/audio/transcriptions on a Tiiny Pocket Lab
6.04x
real time
seconds of audio transcribed per second

Qwen3-TTS-12Hz-1.7B-Base

Text-to-Speech1.7B params5 of 100 NPU units2.5 GB on disk
Qwen/Qwen3-TTS-12Hz-1.7B-Base
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab

Qwen3-TTS-12Hz-1.7B-VoiceDesign

Text-to-Speech1.7B params5 of 100 NPU units2.4 GB on disk
Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab

Qwen3-TTS-12Hz-1.7B-CustomVoice

Text-to-Speech1.7B params7 of 100 NPU units2.4 GB on disk
Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 15s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab
1.58x
real time
seconds of speech per second of wall clock

Qwen3-Vl-Embedding-2b

Text Embedding2B params8 of 100 NPU units2.4 GB on disk
Qwen/Qwen3-Vl-Embedding-2b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 5s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
9.7/s
embeddings
2048 wide, best of one, eight and thirty-two at a time

Qwen3-4B-Instruct-2507

Text Generation4B params25 of 100 NPU units2.3 GB on disk
Qwen/Qwen3-4B-Instruct-2507
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 250s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.14s
first token
68 tokens in
19.1tok/s
sustained decode
1,500 tokens unbroken
19.6tok/s
batched at 4 streams
every caller added together
2.98s
deepest prefill
wait at 6,256 tokens of prompt
0.8x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.27s172.54s343.82s510.14s40680.23s393280.58s361,5762.98s346,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 21.9x the wait, 0.14s at 68 tokens against 2.98s at 6,256. Reading got cheaper per token as the prompt grew, from 584 to 1,590 tok/s. Decode stayed near 34 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.14 s58439.7
3280.23 s1,35939.1
1,5760.58 s2,27736.4
6,2562.98 s1,59033.7
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

08162419201x8s wall20202x16s wall20204x33s wall20208x66s wallaggregateper stream

8 streams deliver 1.04x the aggregate of one, and wall time grows in step with the callers, 8s to 66s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off24.3s · 468 tokensthinking on19.5s · 383 tokens

Thinking finished 4.8s sooner and used 85 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 20 against 20 tok/s.

What the device was doing
99%peak NPU55%median NPU11,019 MBNPU memory at peak33%CPU after66samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

GLM-OCR

Image-to-Text0.9B params4 of 100 NPU units1.9 GB on disk
zai-org/GLM-OCR
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr404the response could not be read as this test expects

Foundation-1

Music Generation2B params5 of 100 NPU units1.4 GB on disk
RoyalCities/Foundation-1
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 1937s of measurement
measured through /v1/music/generate on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
musicgateway/v1/music/generate200neither a WAV nor a session id came back

Nemotron-3-Embed-1B-BF16

Text Embedding1B params7 of 100 NPU units1.3 GB on disk
nvidia/Nemotron-3-Embed-1B-BF16
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 4s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
10.5/s
embeddings
2048 wide, best of one, eight and thirty-two at a time

supertonic-3

Text-to-Speech0.1B params1.0 GB on disk
Supertone/supertonic-3
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/audio/speech on a Tiiny Pocket Lab

Qwen3-Embedding-0.6B

Text Embedding0.6B params1 of 100 NPU units0.9 GB on disk
Qwen/Qwen3-Embedding-0.6B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab

R3-embedding-0.6b

Text Embedding0.6B params4 of 100 NPU units0.8 GB on disk
tencent/R3-embedding-0.6b
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab

Qwen3-Reranker-0.6B

Text Reranking0.6B params2 of 100 NPU units0.7 GB on disk
Qwen/Qwen3-Reranker-0.6B
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 4s of measurement
measured through /v1/rerank on a Tiiny Pocket Lab
22.4/s
pairs scored
query against documents, all at once

PP-DocLayoutV3

Image-to-Text1B params20 of 100 NPU units0.2 GB on disk
PaddlePaddle/PP-DocLayoutV3
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr404the response could not be read as this test expects

PP-OCRv6-Medium

Image-to-Text22M params1 of 100 NPU units0.1 GB on disk
PaddlePaddle/PP-OCRv6-Medium
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr400the response could not be read as this test expects

PP-OCRv6-Small

Image-to-Text2.48M params0.1 GB on disk
PaddlePaddle/PP-OCRv6-Small
run full-catalog-19sep · 20260919-124921 · TiinyOS 0.1.34 · 0s of measurement
measured through /v1/ocr on a Tiiny Pocket Lab
A reply this could not read

The device answered and the benchmark did not understand the answer. That is a bug here rather than a fault on the box, and the first such reply is kept so it can be chased without loading the model again.

testpathstatuswhat was wrong
ocrgateway/v1/ocr400the response could not be read as this test expects

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 218s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.55s
first token
72 tokens in
25.6tok/s
sustained decode
1,500 tokens unbroken
24.0tok/s
batched at 4 streams
every caller added together
6.60s
deepest prefill
wait at 6,260 tokens of prompt
1.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.81s225.63s458.44s670.55s47720.92s533322.13s511,5806.60s506,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 12.0x the wait, 0.55s at 72 tokens against 6.60s at 6,260. Reading got cheaper per token as the prompt grew, from 137 to 751 tok/s. Decode stayed near 50 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.55 s13746.6
3320.92 s36852.7
1,5802.13 s71351.4
6,2606.60 s75150.4
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

011213223261x7s wall24262x14s wall24264x27s wall24268x53s wallaggregateper stream

8 streams deliver 1.05x the aggregate of one, and wall time grows in step with the callers, 7s to 53s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off22.8s · 565 tokensthinking on23.5s · 598 tokens

Reasoning added 0.7s and 33 tokens to the same question. The decode rate barely moved, 26 against 26 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
96%peak NPU29%median NPU9,866 MBNPU memory at peak37%CPU after50samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B-turbo

Image-Text-to-Text35B params55 of 100 NPU units17.9 GB on disk
Qwen/Qwen3.6-35B-A3B-turbo
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 182s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.60s
first token
72 tokens in
32.0tok/s
sustained decode
1,500 tokens unbroken
26.0tok/s
batched at 8 streams
every caller added together
6.88s
deepest prefill
wait at 6,260 tokens of prompt
1.1x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.93s115.87s218.80s320.60s23720.96s253322.28s241,5806.88s236,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.5x the wait, 0.60s at 72 tokens against 6.88s at 6,260. Reading got cheaper per token as the prompt grew, from 130 to 723 tok/s. Decode stayed near 23 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.60 s13023.1
3320.96 s36224.7
1,5802.28 s67423.6
6,2606.88 s72323.4
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012233526281x6s wall25282x13s wall26284x25s wall26288x49s wallaggregateper stream

8 streams deliver 1.00x the aggregate of one, and wall time grows in step with the callers, 6s to 49s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off13.9s · 614 tokensthinking on15.9s · 700 tokens

Reasoning added 2.0s and 86 tokens to the same question. The decode rate barely moved, 48 against 45 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
97%peak NPU46%median NPU11,309 MBNPU memory at peak36%CPU after40samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B

Image-Text-to-Text35B params47 of 100 NPU units17.4 GB on disk
Qwen/Qwen3.6-35B-A3B
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 210s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.57s
first token
72 tokens in
27.0tok/s
sustained decode
1,500 tokens unbroken
26.2tok/s
batched at 8 streams
every caller added together
6.82s
deepest prefill
wait at 6,260 tokens of prompt
1.1x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.91s245.82s498.73s730.57s57720.94s573322.25s561,5806.82s556,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 12.0x the wait, 0.57s at 72 tokens against 6.82s at 6,260. Reading got cheaper per token as the prompt grew, from 130 to 726 tok/s. Decode stayed near 55 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.57 s13056.9
3320.94 s36156.5
1,5802.25 s67756.0
6,2606.82 s72654.8
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012233523271x7s wall25282x13s wall25284x25s wall26288x49s wallaggregateper stream

8 streams deliver 1.13x the aggregate of one, and wall time grows in step with the callers, 7s to 49s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off23.5s · 633 tokensthinking on25.3s · 700 tokens

Reasoning added 1.8s and 67 tokens to the same question. The decode rate barely moved, 28 against 28 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
98%peak NPU54%median NPU8,889 of 12,963 MBNPU memory at peak40%CPU after47samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.8-27B

Image-Text-to-Text27B params55 of 100 NPU units15.7 GB on disk
Qwen/Qwen3.8-27B
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 455s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
1.30s
first token
72 tokens in
11.7tok/s
sustained decode
1,500 tokens unbroken
10.3tok/s
batched at 2 streams
every caller added together
10.93s
deepest prefill
wait at 6,260 tokens of prompt
0.5x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s04.66s49.33s913.99s131.30s10722.00s103323.95s101,58010.93s106,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 8.4x the wait, 1.30s at 72 tokens against 10.93s at 6,260. Reading got cheaper per token as the prompt grew, from 60 to 456 tok/s. Decode stayed near 10 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
721.30 s6010.4
3322.00 s17510.0
1,5803.95 s3929.9
6,26010.93 s45610.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

059148101x19s wall10112x31s wall9104x68s wall10108x131s wallaggregateper stream

8 streams deliver 1.24x the aggregate of one, and wall time grows in step with the callers, 19s to 131s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off37.6s · 695 tokensthinking on17.9s · 271 tokens

Thinking finished 19.7s sooner and used 424 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 20 against 19 tok/s.

What the device was doing
99%peak NPU48%median NPU10,442 MBNPU memory at peak36%CPU after109samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Coder-30B-A3B-Instruct-Turbo

Text Generation31B params55 of 100 NPU units15.2 GB on disk
Qwen/Qwen3-Coder-30B-A3B-Instruct-Turbo
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 163s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.25s
first token
68 tokens in
29.5tok/s
sustained decode
1,500 tokens unbroken
28.3tok/s
batched at 1 streams
every caller added together
4.88s
deepest prefill
wait at 6,256 tokens of prompt
1.2x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.08s114.17s216.25s320.25s25680.48s233281.29s211,5764.88s216,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 19.2x the wait, 0.25s at 68 tokens against 4.88s at 6,256. Reading got cheaper per token as the prompt grew, from 319 to 976 tok/s. Decode stayed near 21 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.25 s31924.7
3280.48 s75123.0
1,5761.29 s1,06320.7
6,2564.88 s97621.2
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012243628301x6s wall28292x12s wall25264x26s wall26278x49s wallaggregateper stream

8 streams deliver 1.00x the aggregate of one, and wall time grows in step with the callers, 6s to 49s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off5.5s · 266 tokensthinking on6.3s · 298 tokens

Reasoning added 0.8s and 32 tokens to the same question. The decode rate barely moved, 51 against 49 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
95%peak NPU42%median NPU11,364 of 16,080 MBNPU memory at peak38%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Instruct-2507

Text Generation30B params55 of 100 NPU units14.7 GB on disk
Qwen/Qwen3-30B-A3B-Instruct-2507
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 194s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.33s
first token
68 tokens in
25.3tok/s
sustained decode
1,500 tokens unbroken
25.1tok/s
batched at 4 streams
every caller added together
5.85s
deepest prefill
wait at 6,256 tokens of prompt
1.1x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.50s235.00s457.49s680.33s53680.61s533281.56s481,5765.85s416,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 17.8x the wait, 0.33s at 68 tokens against 5.85s at 6,256. Reading got cheaper per token as the prompt grew, from 219 to 810 tok/s. Decode stayed near 41 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.33 s21953.3
3280.61 s55752.9
1,5761.56 s85748.2
6,2565.85 s81040.8
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

011213224261x7s wall25262x13s wall25264x26s wall25268x52s wallaggregateper stream

8 streams deliver 1.04x the aggregate of one, and wall time grows in step with the callers, 7s to 52s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off14.0s · 353 tokensthinking on15.1s · 388 tokens

Reasoning added 1.1s and 35 tokens to the same question. The decode rate barely moved, 26 against 26 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
100%peak NPU62%median NPU9,082 MBNPU memory at peak18%CPU after50samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Instruct

Text Generation30B params55 of 100 NPU units14.7 GB on disk
Qwen/Qwen3-30B-A3B-Instruct
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 170s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.23s
first token
68 tokens in
29.0tok/s
sustained decode
1,500 tokens unbroken
29.1tok/s
batched at 1 streams
every caller added together
4.83s
deepest prefill
wait at 6,256 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.06s264.12s526.18s780.23s61680.41s613281.12s531,5764.83s476,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 21.2x the wait, 0.23s at 68 tokens against 4.83s at 6,256. Reading got cheaper per token as the prompt grew, from 321 to 976 tok/s. Decode stayed near 47 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.23 s32160.9
3280.41 s69660.5
1,5761.12 s1,14253.0
6,2564.83 s97647.4
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012253729301x6s wall29302x11s wall28304x22s wall28308x46s wallaggregateper stream

8 streams deliver 1.00x the aggregate of one, and wall time grows in step with the callers, 6s to 46s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off13.1s · 383 tokensthinking on13.0s · 390 tokens

Thinking on and off came out the same, within 0.1s and 7 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
97%peak NPU47%median NPU9,150 MBNPU memory at peak39%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Coder-30B-A3B-Instruct

Text Generation30B params55 of 100 NPU units14.6 GB on disk
Qwen/Qwen3-Coder-30B-A3B-Instruct
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 162s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.23s
first token
68 tokens in
29.0tok/s
sustained decode
1,500 tokens unbroken
29.7tok/s
batched at 4 streams
every caller added together
5.00s
deepest prefill
wait at 6,256 tokens of prompt
0.9x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.13s264.27s536.40s790.23s62680.40s603281.12s551,5765.00s486,256time to first tokendecode tok/s (dashed)prompt tokens

92x the prompt cost 21.5x the wait, 0.23s at 68 tokens against 5.00s at 6,256. Reading got cheaper per token as the prompt grew, from 313 to 942 tok/s. Decode stayed near 48 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
680.23 s31361.7
3280.40 s70659.9
1,5761.12 s1,14555.1
6,2565.00 s94248.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013253829301x6s wall30312x11s wall30314x22s wall30318x43s wallaggregateper stream

8 streams deliver 1.02x the aggregate of one, and wall time grows in step with the callers, 6s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off10.9s · 321 tokensthinking on9.6s · 285 tokens

Thinking finished 1.3s sooner and used 36 fewer tokens than not thinking. That is not a measurement error: having reasoned, the model writes a much shorter answer, and the reasoning tokens are counted in the total. The decode rate barely moved, 30 against 30 tok/s.

What the device was doing
99%peak NPU55%median NPU8,951 of 13,053 MBNPU memory at peak37%CPU after43samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-30B-A3B-Thinking

Text Generation30B params58 of 100 NPU units14.5 GB on disk
Qwen/Qwen3-30B-A3B-Thinking
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 193s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.24s
first token
70 tokens in
28.6tok/s
sustained decode
1,500 tokens unbroken
29.5tok/s
batched at 8 streams
every caller added together
4.89s
deepest prefill
wait at 6,258 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.09s174.17s356.26s520.24s41700.42s413301.14s371,5784.89s326,258time to first tokendecode tok/s (dashed)prompt tokens

89x the prompt cost 20.5x the wait, 0.24s at 70 tokens against 4.89s at 6,258. Reading got cheaper per token as the prompt grew, from 328 to 966 tok/s. Decode stayed near 32 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
700.24 s32840.7
3300.42 s68940.7
1,5781.14 s1,13637.1
6,2584.89 s96632.0
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012253726281x6s wall27282x12s wall27284x24s wall30318x43s wallaggregateper stream

8 streams deliver 1.12x the aggregate of one, and wall time grows in step with the callers, 6s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off23.8s · 700 tokensthinking on23.5s · 700 tokens

Thinking on and off came out the same, within 0.3s and 0 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
99%peak NPU63%median NPU9,670 MBNPU memory at peak48%CPU after44samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

gemma-4-26B-A4B-it

Image-Text-to-Text26B params78 of 100 NPU units13.4 GB on disk
google/gemma-4-26B-A4B-it
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 226s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.24s
first token
74 tokens in
21.5tok/s
sustained decode
1,308 tokens unbroken
22.1tok/s
batched at 2 streams
every caller added together
3.82s
deepest prefill
wait at 6,262 tokens of prompt
2.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.63s193.26s394.88s580.24s45740.43s453341.09s421,5823.82s416,262time to first tokendecode tok/s (dashed)prompt tokens

85x the prompt cost 16.1x the wait, 0.24s at 74 tokens against 3.82s at 6,262. Reading got cheaper per token as the prompt grew, from 326 to 1,239 tok/s. Decode stayed near 41 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
740.24 s32645.4
3340.43 s68744.6
1,5821.09 s1,18942.3
6,2623.82 s1,23940.9
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09182821231x7s wall22232x15s wall22224x29s wall22238x59s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 7s to 59s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off16.0s · 346 tokensthinking on32.1s · 700 tokens

Reasoning added 16.1s and 354 tokens to the same question. The decode rate barely moved, 22 against 22 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
96%peak NPU49%median NPU9,488 MBNPU memory at peak37%CPU after51samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

gpt-oss-20b

Text Generation20B params32 of 100 NPU units10.3 GB on disk
openai/gpt-oss-20b
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 183s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.25s
first token
66 tokens in
30.3tok/s
sustained decode
1,500 tokens unbroken
30.1tok/s
batched at 4 streams
every caller added together
4.44s
deepest prefill
wait at 6,254 tokens of prompt
1.0x
reasoning saving
wall clock: thinking on finished sooner than thinking off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.89s183.79s355.68s530.25s39660.42s413261.08s401,5744.44s346,254time to first tokendecode tok/s (dashed)prompt tokens

95x the prompt cost 17.8x the wait, 0.25s at 66 tokens against 4.44s at 6,254. Reading got cheaper per token as the prompt grew, from 295 to 1,064 tok/s. Decode stayed near 34 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
660.25 s29538.7
3260.42 s68441.4
1,5741.08 s1,18940.3
6,2544.44 s1,06434.0
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

013263829311x5s wall30312x11s wall30314x21s wall30318x43s wallaggregateper stream

8 streams deliver 1.02x the aggregate of one, and wall time grows in step with the callers, 5s to 43s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off22.8s · 700 tokensthinking on22.7s · 683 tokens

Thinking on and off came out the same, within 0.1s and 17 tokens. Either this model does not reason on this prompt, or it ignores the switch. Nothing here is a cost.

What the device was doing
96%peak NPU48%median NPU8,779 MBNPU memory at peak33%CPU after41samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-8B

Text Generation8B params28 of 100 NPU units4.3 GB on disk
Qwen/Qwen3-8B
run full-sweep-19sep-chat · 20260919-062824 · TiinyOS 0.1.34 · 247s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.17s
first token
72 tokens in
20.7tok/s
sustained decode
1,500 tokens unbroken
21.4tok/s
batched at 4 streams
every caller added together
3.32s
deepest prefill
wait at 6,260 tokens of prompt
1.4x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s01.42s182.83s374.25s550.17s40720.27s433320.68s401,5803.32s366,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 19.5x the wait, 0.17s at 72 tokens against 3.32s at 6,260. Reading got cheaper per token as the prompt grew, from 496 to 1,427 tok/s. Decode stayed near 36 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.17 s49640.0
3320.27 s1,13543.1
1,5800.68 s1,92039.7
6,2603.32 s1,42736.5
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09182721221x8s wall21222x15s wall21224x30s wall21228x60s wallaggregateper stream

8 streams deliver 1.04x the aggregate of one, and wall time grows in step with the callers, 8s to 60s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off23.2s · 489 tokensthinking on33.1s · 700 tokens

Reasoning added 9.9s and 211 tokens to the same question. The decode rate barely moved, 21 against 21 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
90%peak NPU40%median NPU10,239 MBNPU memory at peak38%CPU after61samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run full-sweep-15sep · 20260915-064459 · TiinyOS 0.1.34 · 238s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.55s
first token
72 tokens in
23.3tok/s
sustained decode
1,500 tokens unbroken
21.9tok/s
batched at 8 streams
every caller added together
6.67s
deepest prefill
wait at 6,260 tokens of prompt
1.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.84s205.69s408.53s600.55s47720.86s463322.15s451,5806.67s436,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 12.1x the wait, 0.55s at 72 tokens against 6.67s at 6,260. Reading got cheaper per token as the prompt grew, from 136 to 744 tok/s. Decode stayed near 43 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.55 s13646.9
3320.86 s39546.4
1,5802.15 s70944.9
6,2606.67 s74443.4
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

010192921241x8s wall22242x15s wall22244x29s wall22248x58s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 8s to 58s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off24.9s · 565 tokensthinking on25.9s · 598 tokens

Reasoning added 1.0s and 33 tokens to the same question. The decode rate barely moved, 23 against 23 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
98%peak NPU43%median NPU10,897 MBNPU memory at peak31%CPU after54samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B-turbo

Image-Text-to-Text35B params55 of 100 NPU units17.9 GB on disk
Qwen/Qwen3.6-35B-A3B-turbo
run full-sweep-15sep · 20260915-064459 · TiinyOS 0.1.34 · 7106s of measurement
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.61s
first token
72 tokens in
33.9tok/s
sustained decode
1,500 tokens unbroken
26.2tok/s
batched at 4 streams
every caller added together
6.88s
deepest prefill
wait at 6,260 tokens of prompt
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.94s105.87s218.81s310.61s23720.97s243322.31s221,5806.88s226,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.3x the wait, 0.61s at 72 tokens against 6.88s at 6,260. Reading got cheaper per token as the prompt grew, from 127 to 722 tok/s. Decode stayed near 22 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.61 s12722.7
3320.97 s35824.1
1,5802.31 s66622.2
6,2606.88 s72222.0
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012233524271x7s wall24262x13s wall26284x24s wall0288x7005s wallaggregateper stream

8 streams deliver 1.08x the aggregate of one, and wall time grows in step with the callers, 7s to 7005s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time. 6 request(s) failed and are not in these figures.

What the device was doing
98%peak NPU70%median NPU11,617 MBNPU memory at peak31%CPU after38samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3-Embedding-0.6B

Text Embedding0.6B params1 of 100 NPU units0.9 GB on disk
Qwen/Qwen3-Embedding-0.6B
run tiiny-1.0-transport-proof · 20260913-115136 · TiinyOS 0.1.34 · 2s of measurement
measured through /v1/embeddings on a Tiiny Pocket Lab
21.9/s
embeddings
1024 wide, best of one, eight and thirty-two at a time

Z-Image-Turbo

Text-to-Image10B params32 of 100 NPU units10.2 GB on disk
Tongyi-MAI/Z-Image-Turbo
run zimage · 20260912-052449 · TiinyOS 0.1.29 · 24s of measurement
measured through /v1/image/generate on a Tiiny Pocket Lab
7.93s
per illustration
512 by 512, eight steps

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run run · 20260912-040842 · TiinyOS 0.1.29 · 246s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.56s
first token
72 tokens in
22.6tok/s
sustained decode
1,500 tokens unbroken
21.2tok/s
batched at 8 streams
every caller added together
6.65s
deepest prefill
wait at 6,260 tokens of prompt
1.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.84s205.67s408.51s590.56s46720.85s463322.15s441,5806.65s456,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.8x the wait, 0.56s at 72 tokens against 6.65s at 6,260. Reading got cheaper per token as the prompt grew, from 133 to 746 tok/s. Decode stayed near 45 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.56 s13346.5
3320.85 s39946.0
1,5802.15 s70844.2
6,2606.65 s74645.1
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

09192821231x8s wall21232x15s wall21234x30s wall21238x60s wallaggregateper stream

8 streams deliver 1.03x the aggregate of one, and wall time grows in step with the callers, 8s to 60s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off25.7s · 565 tokensthinking on26.8s · 598 tokens

Reasoning added 1.1s and 33 tokens to the same question. The decode rate barely moved, 23 against 23 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
86%peak NPU80%median NPU34,513 of 49,024 MBNPU memory at peak35%CPU after53samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run ornith-npu · 20260911-211223 · TiinyOS 0.1.29 · 60s of measurement
measured through /v1/chat/completions on a Tiiny Pocket Lab
25.6tok/s
sustained decode
1,500 tokens unbroken
What the device was doing
95%peak NPU87%median NPU34,513 of 49,024 MBNPU memory at peak36%CPU after48samples

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Ornith-1.0-35B

Image-Text-to-Text35B params50 of 100 NPU units18.0 GB on disk
deepreinforce-ai/Ornith-1.0-35B
run ornith-baseline · 20260911-210426 · TiinyOS 0.1.29 · 216s of measurement · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.55s
first token
72 tokens in
25.9tok/s
sustained decode
1,500 tokens unbroken
24.4tok/s
batched at 2 streams
every caller added together
6.56s
deepest prefill
wait at 6,260 tokens of prompt
1.0x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.80s235.60s458.39s680.55s53720.88s533322.14s521,5806.56s506,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.8x the wait, 0.55s at 72 tokens against 6.56s at 6,260. Reading got cheaper per token as the prompt grew, from 135 to 756 tok/s. Decode stayed near 50 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.55 s13553.1
3320.88 s38852.9
1,5802.14 s71151.8
6,2606.56 s75649.8
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

011223224261x7s wall24262x13s wall24264x26s wall24268x53s wallaggregateper stream

8 streams deliver 1.04x the aggregate of one, and wall time grows in step with the callers, 7s to 53s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off22.4s · 565 tokensthinking on23.4s · 598 tokens

Reasoning added 1.0s and 33 tokens to the same question. The decode rate barely moved, 26 against 26 tok/s, so that is the model thinking rather than the box slowing down.

Qwen3.6-35B-A3B-turbo

Qwen/Qwen3.6-35B-A3B-turbo
run turbo-16aug · 20260816-183859 · TiinyOS 0.1.33 · measured with reasoning off and on
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.56s
first token
72 tokens in
32.7tok/s
sustained decode
1,500 tokens unbroken
27.2tok/s
batched at 4 streams
every caller added together
6.83s
deepest prefill
wait at 6,260 tokens of prompt
1.2x
reasoning tax
wall clock, thinking on against off
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.91s105.82s218.74s310.56s24720.97s243322.28s241,5806.83s246,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 12.1x the wait, 0.56s at 72 tokens against 6.83s at 6,260. Reading got cheaper per token as the prompt grew, from 138 to 728 tok/s. Decode stayed near 24 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.56 s13824.2
3320.97 s35924.5
1,5802.28 s67424.3
6,2606.83 s72823.6
More than one caller at once

Every stream added together, against what each single caller saw, at each level.

012243626291x6s wall26282x12s wall27304x23s wall27298x48s wallaggregateper stream

8 streams deliver 1.04x the aggregate of one, and wall time grows in step with the callers, 6s to 48s. The box is not sharing itself between requests, it is queueing them. Plan for one inference at a time.

What reasoning costs

The same question asked twice. Hidden reasoning tokens are paid for in wall time whether or not anyone reads them.

thinking off12.8s · 631 tokensthinking on15.7s · 700 tokens

Reasoning added 2.9s and 69 tokens to the same question. The decode rate barely moved, 52 against 46 tok/s, so that is the model thinking rather than the box slowing down.

What the device was doing
30%CPU after

Sampled on a separate thread while the long generation ran, not before or after it. A reading taken once the request has returned always catches the box going idle and says nothing.

Qwen3.6-35B-A3B-turbo

Qwen/Qwen3.6-35B-A3B-turbo
run smoke · 20260816-183551 · TiinyOS 0.1.33
measured through /v1/chat/completions on a Tiiny Pocket Lab
0.59s
first token
72 tokens in
6.87s
deepest prefill
wait at 6,260 tokens of prompt
Prefill against prompt length

What a long prompt costs to read, and what it does to the wait before the first word. Solid is time to first token on the left axis; dashed is decode rate on the right.

0.00s02.93s115.86s218.79s320.59s22720.95s253322.31s231,5806.87s216,260time to first tokendecode tok/s (dashed)prompt tokens

87x the prompt cost 11.7x the wait, 0.59s at 72 tokens against 6.87s at 6,260. Reading got cheaper per token as the prompt grew, from 133 to 724 tok/s. Decode stayed near 21 tok/s throughout, so the prompt is paid for once at the front and not again per word.

prompt tokenstime to first tokenprefill tok/sdecode tok/s
720.59 s13321.6
3320.95 s36524.7
1,5802.31 s66623.3
6,2606.87 s72420.9

Qwen3.6-35B-A3B-turbo

Qwen/Qwen3.6-35B-A3B-turbo
run turbo-optimized · 20260816-174053

Qwen3.6-35B-A3B

Qwen/Qwen3.6-35B-A3B
run before-optimization · 20260815-072029

How it is measured

So you can decide whether to believe any of it.

Prefill

The same deterministic filler repeated to four lengths, each asked for a four-token answer so decode barely registers. What is plotted is the device's own reported prefill rate, not a stopwatch.

Sustained

One unbroken 1500-token generation from a single prompt, with NPU utilisation and memory sampled either side of it. Short bursts flatter a box; this is the number that holds.

Concurrency

1, 2, 4 and 8 identical requests fired at once from separate threads. Aggregate is total tokens over wall time; per-stream is the median of what each caller saw.

Reasoning

One arithmetic word problem, asked with thinking off and then on. The ratio is wall time, because that is what a person waits.

What it does not do

No quality evaluation of any kind. Nothing here says a model is good, only how fast it is. A fast wrong answer is still wrong.

What it does not touch

By default the suite loads and unloads nothing, and benchmarks whatever was already running. Sweeps that do load models put the box back the way they found it.