Study · Local vs API
Where the best local models land
Every configuration on the leaderboard is either Local, served on Forcebench’s own hardware (with open weights, the kind of model you could own), or API, reached through a hosted service: the vendor's own API or a third party's. This study puts them on one chart and compares the best local configuration with the API ones: its score, and the tokens and time it spent.
The best local configuration, DeepSeek V4.1 Flash (EXL3 2.9bpw, effort high), scores 59% (95% CI 54–64%). The best API configuration, Claude Opus 5.5 (effort high, reasoning on), scores 90% (95% CI 87–94%): clearly above it. Separately, Claude Opus 4.8 (thinking off) and Claude Sonnet 5 (thinking off) are not clearly different from it (their intervals overlap), but they ran with thinking off, so this page doesn't compare their tokens or time with it.
- Local (open weights)
- API
Show the numbers
| Model | Runs | Setup | Effort | pass@1 | 95% CI | Tokens: mean | median | 90th pct | No answer | Median time per answer |
|---|---|---|---|---|---|---|---|---|---|---|
| Claude Opus 5.5 | API | high | 90% | 87–94 | 2.4k | 1.5k | 5.3k | <1% | 16 s | |
| Claude Opus 5.5 | API | medium | 90% | 87–93 | 1.8k | 1.3k | 4k | <1% | 13 s | |
| Claude Opus 5.5 | API | low | 89% | 86–93 | 1.2k | 936 | 2.7k | 1% | 9.5 s | |
| Grok 4.6 | API | high | 84% | 80–88 | 6.2k | 4.3k | 14k | 0% | 68 s | |
| GPT-6 Astra | API | medium | 84% | 80–87 | 846 | 502 | 2k | 0% | 6.9 s | |
| Claude Sonnet 5.5 | API | high | 82% | 77–86 | 1.8k | 1.2k | 4.1k | 0% | 9.0 s | |
| GPT-6 Astra | API | high | 80% | 76–84 | 1.8k | 865 | 4.6k | 0% | 12 s | |
| GPT-6.1 Sol | API | high | 80% | 76–84 | 1.5k | 749 | 3.9k | 0% | 19 s | |
| Grok 4.7 | API | high | 79% | 75–84 | 13k | 7.4k | 35k | 0% | 105 s | |
| Claude Sonnet 5.5 | API | low | 77% | 73–82 | 1k | 699 | 2.2k | 0% | 5.6 s | |
| GPT-5.6 Sol | API | medium | 77% | 73–82 | 1.4k | 943 | 3.7k | 0% | 10 s | |
| Claude Opus 4.8 | API | high | 77% | 73–81 | 2k | 1k | 5.8k | 0% | 12 s | |
| Gemini 3.8 Flash | API | medium | 76% | 71–80 | 7.4k | 3.9k | 22k | <1% | 39 s | |
| Claude Fable 5.1 | API | high | 76% | 71–80 | 2.1k | 1.2k | 4.9k | 9% | 17 s | |
| Claude Opus 4.8 | API | medium | 75% | 71–80 | 1.6k | 828 | 4.6k | 0% | 9.9 s | |
| Claude Sonnet 5.5 | API | medium | 75% | 70–79 | 1.1k | 747 | 2.7k | 0% | 5.6 s | |
| Claude Opus 4.8 | API | low | 70% | 65–75 | 940 | 573 | 2.4k | 0% | 7.1 s | |
| Claude Opus 4.8 | API | thinking off | 69% | 64–73 | 882 | 549 | 2.2k | 0% | 6.8 s | |
| Claude Sonnet 5 | API | high | 65% | 60–70 | 2.4k | 978 | 7.2k | 0% | 9.8 s | |
| Claude Haiku 5.5 | API | medium | 64% | 59–69 | 2.8k | 1.7k | 7k | 0% | 7.7 s | |
| GPT-6 Luna | API | medium | 64% | 58–69 | 1.5k | 1.1k | 3.4k | 0% | 15 s | |
| Claude Haiku 5.5 | API | high | 63% | 58–68 | 4.5k | 2.5k | 11k | <1% | 11 s | |
| DeepSeek V4.1 Flash | API | high | 61% | 56–66 | 9.6k | 6.8k | 27k | 0% | 126 s | |
| Claude Sonnet 5 | API | medium | 60% | 55–65 | 1.2k | 562 | 3.3k | 0% | 7.2 s | |
| Claude Haiku 5.5 | API | low | 59% | 54–64 | 2.2k | 1.4k | 4.8k | 0% | 6.6 s | |
| DeepSeek V4.1 Flash | Local | EXL3 2.9bpw · vLLM + ExLlamaV3 | high | 59% | 54–64 | 7.4k | 3.5k | 22k | 6% | 150 s |
| Claude Sonnet 5 | API | thinking off | 58% | 52–63 | 919 | 586 | 2.1k | 0% | 6.6 s | |
| DeepSeek V4.1 Flash | Local | Native FP8, FP4 experts · SGLang | high | 57% | 52–62 | 9.6k | 6.1k | 26k | 8% | 253 s |
| Claude Sonnet 5 | API | low | 55% | 50–61 | 730 | 408 | 2k | 0% | 5.0 s | |
| MiMo V2.6 Pro | API | thinking on | 55% | 50–61 | 14k | 9.5k | 33k | 20% | 252 s | |
| DeepSeek V4 Pro | API | high | 55% | 49–60 | 11k | 7.8k | 27k | 6% | 113 s | |
| Inkling Small | API | high | 45% | 40–51 | 5.4k | 3.9k | 12k | 0% | 41 s | |
| GLM-5.3 Flash | API | high | 45% | 40–51 | 3.5k | 1.1k | 9k | 1% | 22 s | |
| GLM-5.3 Flash | Local | EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 | high | 43% | 38–48 | 3.4k | 1.1k | 10k | 2% | 64 s |
| Qwen3.8 Flash-Next | Local | NVFP4 · vLLM | medium | 40% | 34–45 | 5.1k | 2.9k | 11k | 2% | 75 s |
| Mistral Large 4 | API | high | 38% | 33–43 | 15k | 10k | 33k | 28% | 162 s | |
| Nemotron 3 Ultra | API | thinking on | 38% | 33–43 | 1.8k | 1k | 3.7k | 0% | 33 s | |
| Claude Haiku 4.5 | API | thinking on | 37% | 32–42 | 5.1k | 4.6k | 10k | 0% | 33 s | |
| GLM-5.3 Flash | Local | EXL3 4.0bpw experts, 4-bit dense · TensorFold | high | 37% | 32–42 | 4k | 1.2k | 10k | 2% | 45 s |
| Qwen3.8 Flash-Next | Local | MLX 4-bit · MTPLX | medium | 37% | 31–42 | 9.8k | 4.4k | 33k | 12% | 58 s |
| DeepSeek V4 Flash Vision experimental | Local | FP8 + FP4 experts · vLLM | high | 36% | 31–42 | 16k | 14k | 33k | 18% | 858 s |
| MiMo V2.6 Flash | Local | FP8 + MXFP4 experts · SGLang | thinking on | 36% | 31–41 | 14k | 7.1k | 33k | 25% | 1029 s |
| MiMo V2.6 Flash | API | thinking on | 35% | 30–40 | 13k | 6.7k | 33k | 23% | 142 s | |
| GLM-5.3 Flash | Local | EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 | low | 34% | 29–40 | 733 | 401 | 1.9k | 0% | 23 s |
| Gemma 4 31B | Local | QAT W4A16 · vLLM | thinking on | 34% | 29–39 | 2.8k | 2.3k | 5.3k | 0% | 35 s |
| Qwen3.8 Flash-Next | Local | MLX 4-bit · TensorFold | medium | 34% | 29–39 | 12k | 5.7k | 33k | 15% | 215 s |
| GLM-5.3 Flash | Local | EXL3 4.0bpw experts, FP8 dense · vLLM + ExLlamaV3 | thinking off | 34% | 29–39 | 2.3k | 644 | 4.4k | 0% | 38 s |
| Gemma 4 26B-A4B | Local | NVFP4 · vLLM | thinking on | 32% | 27–37 | 5.8k | 5.6k | 10k | 0% | 45 s |
| Claude Haiku 4.5 | API | thinking off | 32% | 27–37 | 1.1k | 657 | 2.3k | 0% | 5.8 s | |
| Qwen3.8 Flash-Next | Local | INT4-AutoRound, 5 of 10 experts · TensorFold (Zig) | medium | 29% | 24–34 | 13k | 5.9k | 33k | 26% | 130 s |
| Qwen3.8 27B | Local | MLX 8-bit · MTPLX | low | 28% | 24–33 | 3.1k | 2k | 5.4k | 0% | 54 s |
| Qwen3.8 27B | Local | MLX 4-bit · MTPLX | low | 26% | 21–31 | 3.4k | 2.2k | 6.4k | 0% | 45 s |
| Qwen3.8 Flash-Next | API | thinking on | 26% | 21–30 | 21k | 22k | 33k | 34% | 388 s | |
| Nemotron 3 Super | API | thinking on | 25% | 20–30 | 2.6k | 1.6k | 5.3k | <1% | 15 s | |
| Laguna S 2.1 | API | thinking on | 24% | 19–28 | 3.4k | 522 | 10k | 3% | 13 s | |
| Qwen3.8 27B | Local | AWQ-INT4 · vLLM | medium | 24% | 19–28 | 4.7k | 2.8k | 9k | 2% | 20 s |
| Qwen3.8 27B | Local | AWQ-INT4 · vLLM | low | 24% | 19–28 | 3.3k | 2.2k | 8.4k | 1% | 15 s |
| Ling 3.0 Flash | API | thinking on | 23% | 18–27 | 4.9k | 1.9k | 11k | 2% | 35 s | |
| Qwen3.8 27B | Local | Splash 4-bit · Splash | low | 22% | 18–27 | 3.4k | 2.3k | 7.1k | 0% | 54 s |
| Qwen3.8 27B | Local | AWQ-INT4 · vLLM | xhigh | 21% | 17–26 | 18k | 18k | 33k | 25% | 141 s |
| Qwen3.6 35B-A3B | Local | NVFP4 · vLLM | thinking on | 21% | 16–25 | 6.1k | 4.6k | 11k | 2% | 29 s |
| Nemotron 3.5 Lightning | API | thinking on | 14% | 10–18 | 6.6k | 5k | 14k | 0% | 166 s |
The best local model and the API ones around it
The best local configuration, the best API one in the same reasoning state, every API one whose interval overlaps it, and the best API one overall.
| Model | Runs | Effort | pass@1 | 95% CI | Tokens: mean | median | 90th pct | No answer | Median time per answer |
|---|---|---|---|---|---|---|---|---|---|
| DeepSeek V4.1 Flashbest local | Local · EXL3 2.9bpw · vLLM + ExLlamaV3 | high | 59% | 54–64 | 7.4k | 3.5k | 22k | 6% | 150 s |
| Claude Opus 5.5best API, reasoning on | API | high | 90% | 87–94 | 2.4k | 1.5k | 5.3k | <1% | 16 s |
| Claude Opus 4.8 | API | thinking off | 69% | 64–73 | 882 | 549 | 2.2k | 0% | 6.8 s |
| Claude Sonnet 5 | API | high | 65% | 60–70 | 2.4k | 978 | 7.2k | 0% | 9.8 s |
| Claude Haiku 5.5 | API | medium | 64% | 59–69 | 2.8k | 1.7k | 7k | 0% | 7.7 s |
| GPT-6 Luna | API | medium | 64% | 58–69 | 1.5k | 1.1k | 3.4k | 0% | 15 s |
| Claude Haiku 5.5 | API | high | 63% | 58–68 | 4.5k | 2.5k | 11k | <1% | 11 s |
| DeepSeek V4.1 Flash | API | high | 61% | 56–66 | 9.6k | 6.8k | 27k | 0% | 126 s |
| Claude Sonnet 5 | API | medium | 60% | 55–65 | 1.2k | 562 | 3.3k | 0% | 7.2 s |
| Claude Haiku 5.5 | API | low | 59% | 54–64 | 2.2k | 1.4k | 4.8k | 0% | 6.6 s |
| Claude Sonnet 5 | API | thinking off | 58% | 52–63 | 919 | 586 | 2.1k | 0% | 6.6 s |
| Claude Sonnet 5 | API | low | 55% | 50–61 | 730 | 408 | 2k | 0% | 5.0 s |
| MiMo V2.6 Pro | API | thinking on | 55% | 50–61 | 14k | 9.5k | 33k | 20% | 252 s |
| DeepSeek V4 Pro | API | high | 55% | 49–60 | 11k | 7.8k | 27k | 6% | 113 s |
No answer is the share of tasks where a configuration gave no answer, usually because it used its whole 32,768-token output budget first. Those answers count the full budget, so a high no-answer rate inflates a configuration's mean tokens: in this table, DeepSeek V4.1 Flash (EXL3 2.9bpw, effort high) gave no answer to 6% of tasks, MiMo V2.6 Pro (thinking on) gave no answer to 20% of tasks and DeepSeek V4 Pro (effort high) gave no answer to 6% of tasks.
DeepSeek V4.1 Flash and Claude Opus 5.5, both reasoning on
Score: DeepSeek V4.1 Flash (effort high) 59% (95% CI 54–64%); Claude Opus 5.5 (effort high) 90% (95% CI 87–94%), clearly above it.
Output tokens per task, reasoning included: DeepSeek V4.1 Flash writes a mean of 7.4k, a median of 3.5k and a 90th percentile of 22k; Claude Opus 5.5 a mean of 2.4k, a median of 1.5k and a 90th percentile of 5.3k.
Median time per answer: 150 s for DeepSeek V4.1 Flash and 16 s for Claude Opus 5.5. That is what waiting looked like here, not a property of either model: the local model ran on hardware a small team could own, the API one on its vendor's data-centre hardware.
Not clearly different from 12 API configurations
DeepSeek V4.1 Flash (effort high) scores 59% (95% CI 54–64%). Its interval overlaps Claude Opus 4.8 (thinking off) and Claude Sonnet 5 (thinking off), so the scores are not clearly different; those ran with thinking off, so their tokens and time aren't compared with a configuration that reasons. In the same reasoning state, its interval overlaps Claude Sonnet 5 (effort high), Claude Haiku 5.5 (effort medium), GPT-6 Luna (effort medium), Claude Haiku 5.5 (effort high), DeepSeek V4.1 Flash (effort high), Claude Sonnet 5 (effort medium), Claude Haiku 5.5 (effort low), Claude Sonnet 5 (effort low), MiMo V2.6 Pro (thinking on) and DeepSeek V4 Pro (effort high): not clearly different. 17 API configurations score clearly above it: their intervals don't overlap.
How the tokens were counted
Output tokens include reasoning everywhere on this page. They come from the usage each provider or server reports (what it bills, for a vendor's API), never from counting the text that comes back, which for some models is only a summary of their reasoning, or none of it:
- Local inference servers count every token they generate, thinking included.
- Anthropic's API counts thinking as output, including thinking it returns only as a summary or not at all.
- Some services leave reasoning out of the output count and report it only in the request's total. Forcebench adds it back.
Each model family uses its own tokeniser, so the same text can be a different number of tokens across vendors. Treat token comparisons across vendors as approximate.
The mean, the median and the 90th percentile are over each configuration's answers. A few very long answers pull a mean well above the median, which is why both are shown.
Tokens are the fairer measure of cost. Time per answer mostly measures the hardware and how many requests ran at once: the local models here ran on hardware a small team could own, one to eight requests at a time depending on the run, while a vendor's API runs on data-centre hardware.
What to keep in mind
- Local models run quantised to fit the hardware (the best one at EXL3 2.9bpw). The quantisation study shows what changes with it. API providers don't say how they serve their models.
The best local model is not clearly different from some API models running with thinking off, and clearly below the best API ones. The reasons to run your own are data control and a model that doesn't change under you. See Sovereign AI.
Private evaluations
Want this for your team?
Azul Labs runs Forcebench privately for two kinds of Salesforce team.
Choosing a model to run yourself?
A private benchmark of your shortlist
Open-weight models at the quantisations and reasoning efforts you could run on infrastructure you control, tested on your kind of Salesforce work, with a written recommendation.
- Private tasks written from your work only ever run on local models; they are never sent to an API.
- Re-testing after any change of model, quantisation or engine is available.
- Typical turnaround is 2–3 weeks; large models take about a day of machine time per configuration.
Building or buying a Salesforce AI tool?
A private evaluation of your tool
Your tool on held-out tasks it has never seen, against API baselines (models reached through a hosted service) and Local ones (served on Forcebench’s own hardware), with a written report on where it holds up and where it fails.
- It can start as a smaller pilot, about 30 held-out tasks with your tool against two baselines, before a full evaluation.
- Repeat evaluations after your releases are available.
- Typical turnaround is 2–3 weeks.
Fixed fee, quoted up front. The quote depends on the number of tasks and the number of models, tools or configurations tested.
Or email leo@azl.au · azl.au