Inkling, from Thinking Machines, the hottest new entry into the open weights category, is available on five vendors on launch day instead of primarily being a first party API. We picked three for this comparison and took them through the same tests we did for Kimi, Deepseek and GLM last time. In theory, we're buying access to the same weights down to the bits of the same model. As you're about to find out, your mileage might vary depending on your inference provider.
At Isotopes AI, we don't always fine tune models for our general agents, but we do have a small loop within NeoCortex, which would benefit from an open weights frontier model which was built ground up with fine-tuning in mind. Last time we evaluated the Chinese open-weight models, we found them usable on quality and dramatically cheaper. But open weights isn't a Chinese lab thing.
Inkling (from Thinking Machines) has emerged as a credible challenger: 975B mixture-of-experts, open weights, and available across multiple vendors. We wanted to see if it lives up to the hype, but more importantly, we liked the licensing. Instead of the the non-competes or "do no evil" licensing schemes from the other open weight providers, Inkling came with a proper Apache 2.0 license which is a license near and dear to all of us ex-ASF folks. Throw in a discount to Tinker, it would be an understatement to say, we had big plans.
Before we got too excited about fine tuning, we tried to look around for a good inference provider for our fine tuned models. We wanted to know: if we pick inkling, does it behave the same across vendors: same accuracy, quality, latency and speed. Or does the vendor you choose actually change what you get? To check, each model below is run through the identical coding task on every vendor that serves it (same weights, different infrastructure), and we compare quality, latency, cost and tokens, scored by a fixed neutral judge (Claude Opus 4.8). This was a quick, two-person, exploratory evaluation to guide that decision, not a formal product comparison. For example, we tried out Modal, but couldn't get it to work with our existing harness easily.
Baseten stands out with the highest quality score, and the gap persists despite all three vendors running the same model weights. Baseten and Together publish identical per-token pricing, but Baseten came out cheaper because it needed fewer tokens to complete the same tasks. Turns out quality has a quantity of its own. Fireworks runs on dedicated hardware with per-GPU-second billing, a completely different cost model that resulted in much higher expenses for lower quality. The pattern is clear: serverless + fewer retries wins on both quality and cost.
Caveat: Inkling launched just days before this benchmark was run. These vendors' infrastructure, optimizations, and configurations will evolve rapidly. This snapshot captures early deployments that may look quite different by the time you read this. Fireworks, for instance, may offer serverless soon, which would reshape the cost and latency picture entirely. To run a cheap comparison, reasoning is turned off for this benchmark, so don't think this is a less capable model compared to the last blog post about chinese models.
Judge overall (/5) per vendor. If the weights are the same, quality should be identical.
Scale 0–5. ★ = native baseline; Δ badges are vs native.
Each model's vendors overlaid across all dimensions at once. Same-model polygons should overlap if the vendors were truly interchangeable — where one caves inward (usually Speed/Turnaround), that's where the vendor diverges. (Speed = TTFT; Throughput = decode tok/s — a vendor can be slow to start yet generate at a normal rate.)
Each axis is normalized so the best vendor for that model reaches the outer edge (1.0); lower-is-better axes (Speed=TTFT, Cost, Turnaround=e2e) are inverted first. Quality sits near the edge for everyone (same model) — the Speed/Turnaround axes are where vendors pull apart.
Plot any two metrics against each other and filter by model. Cost-vs-latency is the default view (where each vendor sits on the price/speed trade-off), but you can swap either axis to quality, throughput, TTFT, or token count. Changing a dropdown re-renders the chart.
Each point is one vendor · ★ = native · hover a point for every metric. Axis ends are labeled with the data min/max; pick any two metrics to compare.
Combined $/task (writer + critic + judge), computed from raw tokens × per-vendor pricing.
Per-model scale. Lower = better. An arm whose writer was unpriced shows only judge/critic cost (footnoted in methodology).
| turn | e2e (median) | dedicated $ |
|---|---|---|
| q1 | 13.0s | $1.27 |
| q2 | 17.8s | $1.74 |
| q3 | 17.2s | $1.68 |
| q4 | 11.8s | $1.15 |
| q5 | 43.4s | $4.24 |
max_tokens. This drags the mean latency up sharply, so the tables above report per-arm medians (robust to these). The raw outliers:Total latency splits into two phases: TTFT (time-to-first-token — the wait before generation starts: request queue + prompt prefill) and decode (streaming the output tokens). The split is the whole story here: decode speed was fairly similar across every vendor (~100–200 tok/s — it's the same model generating), so the latency differences below are driven almost entirely by TTFT. On a slow arm the model isn't generating slower — you simply wait far longer for the first token. (TTFT dominates a streaming UX; for long outputs the shared decode time dilutes it in the end-to-end total, which is why the e2e ratios look smaller than the TTFT ratios.)
| vendor | TTFT | × native | worst TTFT | decode | tok/s | e2e | × native | out tok |
|---|---|---|---|---|---|---|---|---|
| Inkling (Thinking Machines) — native: Baseten | ||||||||
| Baseten ★ | 680ms | 1.0× | 782ms | 6.9s | 227 | 7.6s | 1.0× | 4,208 |
| Fireworks AI | 1.3s | 1.9× | 1.7s | 16.0s | 153 | 17.2s | 2.3× | 3,043 |
| Together AI | 1.1s | 1.6× | 1.5s | 24.3s | 101 | 25.4s | 3.3× | 7,706 |
TTFT / e2e are per-arm MEDIANS (robust to the tail); worst TTFT is the slowest turn (red = ≥2× the median = heavy tail). decode = e2e − TTFT (generation after the first token). × native = ratio vs the ★ first-party arm.
Per-model scale (bars compare vendors within a model). Lower = better.
Per-model scale. Lower = better.
Tokens are not expected to be identical across every arm, and that isn't a same-weights problem. On turn 1 the input is identical across a model's vendors (same prompt, same tokenizer) — the clean proof it's the same model. It drifts on later turns because this is a multi-turn conversation: each turn's input includes the previous turn's output, and each vendor produced a slightly different-length answer, so accumulated context diverges. Output tokens vary for the same reason (sampling yields different-length answers). Across different models the counts differ more — different tokenizers. So: near-equal ⇒ same model; small drift = conversation state, not different weights.
Same open weights, three vendors — but served at the same precision? Here is what can and cannot be verified.
inference.baseten.co/v1) resolves to Google Cloud, so Baseten may be running on different hardware than the other two vendors. Their blog does mention BF16, but only as a memory requirement (~2 TB for BF16 vs ~600 GB for NVFP4) — it does not confirm which precision they actually serve. Still, if their setup is serving the full-precision BF16 weights, that would plausibly explain why Baseten was both faster and higher quality in our runs. We cannot confirm this; it is a plausible suspicion for why Baseten came out ahead.A vendor scorecard of the mean per metric — read down a column to rank the vendors on that metric, across a row for a vendor's whole profile.
| vendor | Quality ↑ | Cost ↓ | TTFT ↓ | Latency ↓ |
|---|---|---|---|---|
| Baseten ★ | 3.81 | $0.0936 | 672ms | 19.0s |
| Fireworks AI | 3.33 | $2.0154 | 1.3s | 20.6s |
| Together AI | 3.29 | $0.1257 | 1.0s | 79.8s |
Mean per metric, colored INDEPENDENTLY per column (green = leading vendor for that metric → red = trailing). ↑ higher-is-better · ↓ lower-is-better.
The raw per-query values behind the means above — one heatmap per metric (vendors × turns + arm mean). Cell color runs green (leading) → red (trailing).
| vendor | q1 | q2 | q3 | q4 | q5 | mean |
|---|---|---|---|---|---|---|
| Baseten ★ | 4.93 | 4.73 | 3.67 | 3.80 | 1.93 | 3.81 |
| Fireworks AI | 2.33 | 4.80 | 3.47 | 4.67 | 1.40 | 3.33 |
| Together AI | 4.27 | 3.33 | 2.80 | 4.07 | 2.00 | 3.29 |
| vendor | q1 | q2 | q3 | q4 | q5 | mean |
|---|---|---|---|---|---|---|
| Baseten ★ | $0.0714 | $0.0447 | $0.1016 | $0.0653 | $0.1850 | $0.0936 |
| Fireworks AI | $1.2727 | $1.7387 | $1.6768 | $1.1507 | $4.2378 | $2.0154 |
| Together AI | $0.0896 | $0.0496 | $0.0872 | $0.0580 | $0.3442 | $0.1257 |
| vendor | q1 | q2 | q3 | q4 | q5 | mean |
|---|---|---|---|---|---|---|
| Baseten ★ | 722ms | 601ms | 577ms | 680ms | 782ms | 672ms |
| Fireworks AI | 1.4s | 1.7s | 1.1s | 1.2s | 1.3s | 1.3s |
| Together AI | 1.2s | 556ms | 1.1s | 837ms | 1.5s | 1.0s |
| vendor | q1 | q2 | q3 | q4 | q5 | mean |
|---|---|---|---|---|---|---|
| Baseten ★ | 6.7s | 5.6s | 18.0s | 7.6s | 57.0s | 19.0s |
| Fireworks AI | 13.0s | 17.8s | 17.2s | 11.8s | 43.4s | 20.6s |
| Together AI | 29.9s | 12.5s | 25.4s | 12.0s | 319.2s | 79.8s |
The three arms run the same open weights, but we did not buy the same product from each vendor. This section pins down the four things that actually differ — deployment mode, hardware, precision, and price — and cites the source for every cell. Where a vendor publishes nothing, the cell says so: “not disclosed” is itself a result, and it is the same observability gap described in §9.
| Baseten ★ | Fireworks AI | Together AI | |
|---|---|---|---|
| Deployment | |||
| Mode | Model API — serverless, per-token1 | Dedicated deployment, per-GPU-second4,6 Serverless not offered for this model4 |
Serverless, per-token7,8 Dedicated not offered8 |
| Model id | thinkingmachines/inkling1 | accounts/xxxxx/ deployments/zzzzzzz6 |
thinkingmachines/Inkling7 |
| Scaling | Managed by vendor3 | Autoscale on, min 0 / max 1 replica, scale-to-zero when idle6 | Managed by vendor |
| Hardware & precision | |||
| GPU | B2001 count per replica not published |
NVIDIA B200 180GB 8 GPUs/replica, shape “Minimal”6 |
Not disclosed |
| Cloud (inference) | Google Cloudinference.baseten.co → 35.244.129.243 (GCP range, likely GCLB anycast). Note the control plane differs: app.baseten.co / api.baseten.co sit on EKS behind a shared ALB in AWS us-west-2 — the inference hostname is the one that matters here.10 |
AWS us-west-210 | Not resolved |
| Precision served | NVFP4 (inferred)1 Baseten's own example response returns inferact/inkling-nvfp4 as the model string. Not a runtime guarantee for our calls, but it is the only precision signal Baseten publishes. |
FP4 (confirmed)6 Stated outright in the deployment console. Auto-tune on; long-prompt optimization off. |
Not disclosed7,8 |
| Model & limits (as the vendor states them) | |||
| Parameters | 975B total / 41B active1,3 | 975B total / 41B active4 | 975B total / 41B active7 Console panel reads 552.8B — conflicts with Together's own model page; treated as a UI artifact.8 |
| Context window | 256K1 | 1040K4 | 524K7,8 |
| Max output tokens | Not published | 131,072 requested by our harness6 | 131,0729 |
| Modalities | text · image · audio in → text out3 | text · image · audio in → text out4 | text · image · audio in → text out8 |
| Cost | |||
| Billing basis | Per token2 | Per GPU-second, whether busy or idle5 | Per token8 |
| Input / 1M | $1.002 | — | $1.008 |
| Cached input / 1M | $0.172 | — | $0.178 |
| Output / 1M | $4.052 | — | $4.058 |
| Hardware rate | n/a (serverless) | $10.00 / B200-hour list5 × 8 GPUs = $80/hr while a replica is up |
n/a (serverless) |
| What we actually spent | Metered per token — see §6 | $60.18 total account spend, $5.82 credits remaining6 | Metered per token — see §6 |
Every cell is sourced below. “Not disclosed” = the vendor publishes no such figure; (inferred) = derived from vendor documentation rather than stated as a served configuration.
inferact/inkling-nvfp4 and lists the hardware as
B2001 — i.e. the same 4-bit checkpoint family, on the same GPU generation, as the
Fireworks arm. The BF16 figure in Baseten's blog appears only as a memory footprint (~2 TB BF16 vs
~600 GB NVFP4)3, never as a claim about what they serve. We have no Baseten console access
to check directly, so this is not conclusive either — but on published evidence, precision is no
longer our best explanation for the quality gap, and the earlier notes should be read with that
correction. What survives is the cloud/infrastructure difference, which is independently evidenced by
DNS10.inferact/inkling-nvfp4.zkjsn36d (“inkling test2”), captured 23 Jul 2026 — GPU type and count, precision FP4, auto-tune, replica policy, max_tokens, and total spend $60.18. Internal screenshot.inference.baseten.co → 35.244.129.243 (Google Cloud range, likely GCLB anycast); app.baseten.co / api.baseten.co → EKS behind a shared ALB, AWS us-west-2; api.fireworks.ai → AWS us-west-2. Internal measurement.The same codebench coding task (write → run → self-critique Python for a SaaS-finance analyst question), sent to every vendor serving a given model. A fixed neutral judge (Claude Opus 4.8 (neutral)), kept out of the competing arms, scores each final output against a hand-verified golden. Vendors use different model-ids for the same weights (e.g. Baseten thinkingmachines/inkling vs Together …/Inkling vs a Fireworks dedicated-deployment id) — collapsed to one model here.
Every metric for each turn (q1–q5), for every model × vendor — the complete raw numbers behind this report, to lift straight into a write-up (respects the vendor toggle above). Think tok ≈ 0 means reasoning was off on that turn; a non-zero cell is a turn where the host reasoned. The bottom mean row is the arm average; infra-error turns are flagged.
| turn | Quality | Exec OK | Critic OK | In tok | Out tok | Think tok | TTFT | e2e | Writer $ |
|---|---|---|---|---|---|---|---|---|---|
| q1 | 4.93 | 100% | 100% | 2,430 | 1,360 | 0 | 722ms | 6.7s | $0.0079 |
| q2 | 4.73 | 100% | 100% | 4,310 | 1,121 | 0 | 601ms | 5.6s | $0.0089 |
| q3 | 3.67 | 100% | 100% | 13,205 | 3,351 | 626 | 577ms | 18.0s | $0.0293 |
| q4 | 3.80 | 100% | 100% | 15,594 | 1,690 | 0 | 680ms | 7.6s | $0.0224 |
| q5 | 1.93 | 67% | 67% | 45,848 | 13,517 | 0 | 782ms | 57.0s | $0.1006 |
| mean | 3.81 | 93% | 93% | 16,277 | 4,208 | 125 | 672ms | 19.0s | $0.0338 |
| turn | Quality | Exec OK | Critic OK | In tok | Out tok | Think tok | TTFT | e2e | Writer $ |
|---|---|---|---|---|---|---|---|---|---|
| q1 | 2.33 | 33% | 100% | 6,162 | 1,664 | 0 | 1.4s | 13.0s | $1.2727 |
| q2 | 4.80 | 100% | 100% | 4,311 | 2,767 | 0 | 1.7s | 17.8s | $1.7387 |
| q3 | 3.47 | 100% | 100% | 5,586 | 2,750 | 0 | 1.1s | 17.2s | $1.6768 |
| q4 | 4.67 | 100% | 100% | 21,951 | 1,594 | 0 | 1.2s | 11.8s | $1.1507 |
| q5 | 1.40 | 33% | 33% | 59,769 | 6,442 | 0 | 1.3s | 43.4s | $4.2378 |
| mean | 3.33 | 73% | 87% | 19,556 | 3,043 | 0 | 1.3s | 20.6s | $2.0154 |
| turn | Quality | Exec OK | Critic OK | In tok | Out tok | Think tok | TTFT | e2e | Writer $ |
|---|---|---|---|---|---|---|---|---|---|
| q1 | 4.27 | 100% | 67% | 4,957 | 2,924 | 0 | 1.2s | 29.9s | $0.0168 |
| q2 | 3.33 | 100% | 100% | 4,310 | 1,395 | 0 | 556ms | 12.5s | $0.0100 |
| q3 | 2.80 | 100% | 100% | 9,402 | 2,177 | 0 | 1.1s | 25.4s | $0.0182 |
| q4 | 4.07 | 100% | 100% | 9,269 | 1,134 | 0 | 837ms | 12.0s | $0.0139 |
| q5 | 2.00 | 33% | 0% | 111,065 | 30,901 | 0 | 1.5s | 319.2s | $0.2362 |
| mean | 3.29 | 87% | 73% | 27,801 | 7,706 | 0 | 1.0s | 79.8s | $0.0590 |