real output TPS, TTFT, and throughput-per-dollar — measured, not claimed.
Every number on this page comes from a real streaming request sent through surp to the Surplus Intelligence marketplace. No vendor spec sheets, no extrapolated benchmarks — only observed generation throughput. This is the data the Surplus dashboard doesn't show.
Models ranked by throughput-value score (p50 output TPS × tokens-per-dollar). Green ≥ 80 TPS, amber 40-79, red < 40.
| # | model | p50 TPS | p95 TPS | range | p50 TTFT | price /1M | throughput/$ | runs |
|---|---|---|---|---|---|---|---|---|
| 1 | gpt-5.6-luna | 282.4 | 400000.0 | 42.6-400000.0 | 4595ms | $0.0183 | 15.39B | 75/240 |
| 2 | deepseek-v4-flash | 69.0 | 192.9 | 16.1-492.6 | 2039ms | $0.0091 | 7.54B | 85/245 |
| 3 | glm-5.2 | 91.5 | 145.6 | 46.9-220.6 | 4412ms | $0.0171 | 5.37B | 80/240 |
| 4 | llama-3.3-70b-instruct | 280.1 | 538.4 | 173.6-551.7 | 1327ms | $0.0588 | 4.76B | 80/240 |
| 5 | deepseek-v4-pro | 53.5 | 69.9 | 43.1-83.3 | 2560ms | $0.0301 | 1.77B | 80/240 |
| 6 | deepseek-v4-flash-0731 | 88.3 | 128.1 | 19.7-326.8 | 2478ms | $0.1104 | 800.0M | 86/245 |
Output TPS = generated completion tokens ÷ generation seconds (time from first token to last token). This is the metric LLM buyers care about: how fast the model produces text.
This is different from request RPS (requests per second), which measures how many separate requests the gateway handles. The health board tracks RPS; this page tracks output TPS.
POST /v1/chat/completions through surp with max_tokens=400.completion_tokens / generation_seconds.p50_output_tps × (1,000,000 / price_per_1m) — higher is better.usage.completion_tokens from the API; falls back to len(text)/4 estimate if usage is absent.Last 10 raw runs — verify the numbers yourself.
| output TPS | TTFT | wall | tokens | price/1M | status |
|---|---|---|---|---|---|
| 0.0 | 0ms | 1103ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1118ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 935ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1307ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1190ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1047ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1107ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 859ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 874ms | 0 | $0.0000 | failed |
| 0.0 | 0ms | 1069ms | 0 | $0.0000 | failed |
The benchmark runner is open source. Clone the repo and run:
python3 benchmark_runner.py --model deepseek-v4-flash-0731 --runs 10 --api-key sk-sur-...
You'll get the same kind of numbers we publish here. Or just make a streaming request and time it:
curl -N -X POST https://surp.ivc.lol/v1/chat/completions \
-H "Authorization: Bearer sk-sur-..." \
-H "Content-Type: application/json" \
-d '{"model":"surp/direct/deepseek-v4-flash-0731",
"messages":[{"role":"user","content":"Write 200 words about HTTP/2"}],
"max_tokens":400,
"stream":true}'
related: provider health board (RPS, latency) · free models · cache-affinity auction · benchmark API