Define useful before fast
Pick a task before picking a winner. A coding comparison needs a test suite or a reviewed patch; an extraction task needs expected fields. Run the same workload on each configuration and keep the failures. Tokens per second tell you how output arrived, not whether it solved the problem.
Record the complete setup
Record the chip, memory, operating system, model version, inference engine version, quantization, context settings and prompt. Keep other applications and power settings consistent across runs.
Separate loading and generation
Report model-loading time, first-token latency and generation throughput separately. Distinguish cold and warm runs. Note whether compilation or cache reuse is included.
Measure memory under the real workload
Context length and simultaneous requests change memory use. Record peak memory and system responsiveness, not just the model file’s size. Avoid translating a model fitting in memory into a claim that it is practical.
Repeat and retain failures
Repeat each configuration, keep raw measurements and document failed or interrupted runs. Use consistent prompts and output limits. If a configuration cannot complete the task, report that outcome.
Publish limitations
Results describe a specific machine, model and workload. They do not prove that every model in the same size range will behave similarly. The M2 evidence below is an observed example; it is separate from this repeatable test protocol.
Download the blank benchmark CSV or visit the Local AI Lab.
Further implementation guides
Read the Mac setup guide and MLX versus Ollama comparison. These are documentation-led review editions; speed measurements remain pending.
Compare latency and throughput separately
A short interaction can feel slow even when its generation rate is high if loading or prompt processing delays the first token. Report time to first token, generation throughput and end-to-end latency as separate values. State whether the measurement begins before model loading, after warmup or at the request boundary.
For concurrent serving, distinguish aggregate output from per-request experience. Four requests producing a large combined token rate do not give each person that combined rate. Record average or per-request first-token delay and the output length used in the test. Check the benchmark implementation before assuming another tool uses identical metric definitions.
Keep a hardware specification ledger
Store chip name, CPU/GPU cores, memory capacity, nominal bandwidth and operating-system version. Memory capacity affects what can remain resident; bandwidth can affect decode performance when moving model data is the bottleneck. Neither specification is a measured token rate. Use the bandwidth guide for the distinction and keep hardware reference entries separate from machines actually tested.
The owner’s M3 Ultra screenshots now provide four result rows, with configuration and source images on the hardware-lab page. Exact RAM, advanced settings, model revision and repeat-run spread are still missing. Those limitations remain attached to the observations rather than being replaced with guessed values.
Prepare a repeatable run sheet
Create one configuration label for each distinct combination of model, quantization, context, cache policy and acceleration settings. Save the individual run number and timestamp. Record failed attempts in a separate outcome field rather than entering a zero as if it were a successful but slow generation.
Start with at least three identical runs for an initial inspection. Use medians to summarize the observations and retain the raw rows. With few trials, a percentile near the tail is often just the maximum and should not be described as a reliable service-level estimate. The benchmark analyzer exposes its calculation method so readers can interpret the summary.
Source context
Hugging Face’s memory-estimation documentation distinguishes loading a model from the additional demands of inference. Artificial Analysis publishes a methodology that separates latency and throughput across serving conditions. These references inform the measurement categories; no external leaderboard result is claimed as our own. Memory estimation; performance methodology.
Owner evidence: M2 Max 64GB
Measured workload, not a hardware ranking.
Owner-supplied oMLX v0.7.0 screenshots show Code (Python), 128 output tokens, and a model label beginning Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Opti… . The full artifact and quantization are not visible.
| Input / batch | Generation tok/s | TTFT ms | E2E seconds | Peak GB reported |
|---|---|---|---|---|
| 1024 / 1× | 81 | 1076.3 | 2.662 | 19.89 |
| 4096 / 1× | 78.4 | 3956.5 | 5.595 | 21.79 |
| 1024 / 2× | 133.2 | 2085.7 | 4.47 | Not shown |
| 1024 / 4× | 213.1 | 3871.2 | 8.526 | Not shown |
At 2× and 4× batching, generation is aggregate throughput, not the rate each user receives. The screenshot reports 1.64× and 2.63× speedup.
All-time serving: a separate view
The All-Time / All Models dashboard reports 215.6 tok/s prompt processing excluding cached tokens and 33.2 tok/s generation. Its date range, model mix and request count are unknown. These are mixed-use averages, not another benchmark or proof of a latency/cost saving. The empty Today history does not invalidate the all-time counters.
The M2 Max specification is 400 GB/s memory bandwidth; the M3 Ultra is 819 GB/s. The supplied tests use different artifacts and oMLX versions (v0.7.0 versus v0.5.4), so their token speeds cannot isolate bandwidth or establish which chip is faster. Inspect both datasets, bandwidth sources and original screenshots →
More memory didn’t fix the model. Finding the right model did.
Even our M3 Ultra Mac Studio with 256GB unified memory could run models that failed to do the work we needed. Qwen3.6 35B MoE became our sweet spot for agentic AI, coding and basic operations.
- Did not meet our needs
Smaller models tried
Frequent hallucinations and insufficient reasoning for our OpenClaw workflows.
- Did not meet our needs
Other Qwen variants
The variants we tried did not sustain the agent workflows we needed.
- Did not meet our needs
“Mistral 70B” — owner’s label
Still unsuccessful in our setup, including on the 256GB M3 Ultra. Exact artifact unconfirmed.
- Our operational sweet spot
Qwen3.6 35B MoE
Worked for our agentic AI, coding and basic operations; our preferred model among those tried.
Running in parallel for months of basic operations, according to the owner’s experience with Qwen3.6 35B MoE.
Our recommendation: test the workflow before buying more RAM.
For an OpenClaw setup like ours, start by evaluating this 35B MoE model against the tasks your agents actually perform. Check reasoning, hallucinations, tool use and completed work, then measure latency and memory. A model fitting into RAM does not establish that it can run the workflow successfully.
Evidence scope and how to read this verdict
This is Fazal Shah’s retrospective account of models tried in his own setup, not a universal claim that other models fail. “Failed” means the model did not meet his operational needs; it does not necessarily mean it failed to load. Smaller models reportedly hallucinated and could not support the reasoning and work required by his OpenClaw agents.
Exact alternative model repositories, quantizations, dates, prompts, failure counts and intervention rates have not been supplied. “Mistral 70B” preserves the owner’s wording, not a verified model identifier. The 16-agent account does not establish 16 simultaneous inference requests, uninterrupted uptime, unattended operation or a measured success rate. Its exact machine allocation and deployment artifact remain unconfirmed.
The screenshot benchmarks test 1×, 2× and 4× batching with 128 output tokens, not the 16-agent operational deployment. They show Qwen3.6-35B-A3B-8bit on the M3 Ultra and a differently named, truncated artifact on the M2 Max. They cannot independently verify months of agent operation or identify the exact deployment artifact.
Next evidence to collect: a redacted OpenClaw agent roster, dated run history, exact model artifact and configuration, representative completed tasks, failed attempts and human interventions. Keep task quality and throughput as separate measurements.
Bring the problem. We’ll scope the next step.
Something in your workflow keeps breaking, or your team is doing the same manual work every week.
Send the current setup, what failed, and the result you need. I can help with software integrations, local AI infrastructure, agent permissions, failure recovery and deployment.
Useful first details: system or runtime, expected workload, data restrictions and one redacted example. Don’t send credentials or private customer data.Fazal Shah builds AI systems, automation and software products. Based in Pakistan, working with a global audience. About Fazal →