A hand lifting a small, friendly Mac toward a blue seaside sky, printed in cobalt and pink.

Run language models
on your Mac.

Mei runs language models on Apple Silicon and makes them available to your apps through an OpenAI-compatible API.

Uses MLX. Tested on an M1 Max with 32 GB of memory.

Get started Apple Silicon · macOS 15+ · MIT licensed

What you can use it for

Mei runs the model on your Mac. Your app provides the tools and carries out the actions the model requests.

Tool-using agents

Let a model request actions through your app’s APIs, read the results, and decide what to do next.

Local assistants

Build assistants that search information supplied by your app, summarize it, or extract data from text.

Light coding

Write small scripts, process data, or make changes to a few lines of code.

Recommended models

Mei includes tested settings for these three models. The descriptions below explain the differences we found in the same set of tests.

Groot

19B parameters · text-only · 4.5 bits/weight

We suggest starting with Groot on a 32 GB M1 Max. It passed 22 of 24 assistant tasks and all 6 Python tasks. It also had the lowest measured memory increase of these three models.

22/24assistant tasks passed
Model files and version ↗
Configuration namegroot-19b-a3b-text

Qwen3.6

35B parameters · text-only · 4-bit weights

Qwen finished the test tasks faster on average than Groot and Ornith. It passed 18 of 24 assistant tasks and all 6 Python tasks. Its measured memory increase was higher than Groot’s.

18/24assistant tasks passed
Model files and version ↗
Configuration nameqwen3.6-35b-a3b-text

Ornith 1.5

35B parameters · MLX · 4-bit weights

Ornith passed 19 of 24 assistant tasks and 4 of 6 Python tasks. It took longer per task on average than Qwen and Groot. Mei includes separate settings for running this model.

19/24assistant tasks passed
Model files and version ↗
Configuration nameornith-1.5-35b-a3b

All three are mixture-of-experts models: they use about 3 billion parameters for each token, but the full set of weights must be stored. Weight storage in these tests was about 11.45 GiB for Groot and 18.17 GiB for Qwen and Ornith. Running a model also needs memory for the prompt, generated text and calculations.

We keep testing new models

We use test results to choose models and adjust their settings. In the latest tests, Gemma passed the same 22 of 24 assistant tasks as Groot, but passed 3 of 6 Python tasks and averaged 72.27 seconds per task. Our current recommendations remain Groot, Qwen and Ornith.

Read the latest model tests ↗

Test results

Compare task results, time per task, memory measurements and text generation speed for the three models.

M1 Max · 32 GB · Mei 0.11.0
Tested 7 November 2026 · two runs per model

Tasks completed successfully

Passed tasks · more is better

Assistant tasks out of 24 attempts

Groot22/24
Qwen3.618/24
Ornith 1.519/24

Python tasks out of 6 attempts

Groot6/6
Qwen3.66/6
Ornith 1.54/6

We tested each model twice. Each run used 12 simulated household-assistant tasks and 3 small Python tasks. Failed attempts count too. The results measure each model with its Mei settings; they do not tell us how well it will work in your application.

Test setup and full results ↗
How we tested

We used test suite benchmark-v9.11.5 with random seeds 17 and 29. Each model ran 12 simulated household-assistant tasks and 3 small Python tasks per run. We gave both runs equal weight when calculating averages. Each model used its own sampling and cache settings. Two runs are too few to show that one model will consistently outperform another or to predict how it will work in your app.

Results from two runs per model
ModelAssistantPythonTask timeWired increase
Groot22/246/638.90 s13.72 GiB
Qwen3.618/246/629.44 s20.34 GiB
Ornith 1.519/244/644.24 s19.86 GiB

The memory figures show changes in the Mac’s wired memory, not total memory used by each model. Task times include failures. Text generation speed was tested separately and does not show whether longer prompts produced correct answers. These charts show the three recommended Mei models; the full report includes other models and engines.

Download the chart data ↗

How Mei runs models

Mei is written in Swift and uses MLX through vMLX to run models on Apple Silicon. Each server process loads one model and responds to HTTP requests from your app.

It can stream generated text, return tool calls and produce JSON using supported schema rules. It reads long prompts in chunks to limit memory use and can reuse calculations from earlier requests.

We test on an M1 Max with 32 GB of memory. Other Apple Silicon Macs can run Mei too. The model you can run and its speed depend on your Mac’s memory, the length of the prompt and the work you ask it to do.

Supported API features and limits ↗

Install and run Mei

Mei is a command-line server. Install it, download a model, then connect your own app or send an API request. Mei does not include a chat interface.

01

Install Mei

This installs the stable release. You need an Apple Silicon Mac running macOS 15 or later.

Install Mei
brew install tijs/tap/mei
02

Download and start Groot

These commands use Groot, our suggested first model for the 32 GB M1 Max. Install the Hugging Face download tool first. If you already have the hf command, skip that first block.

Install the download helper
brew install uv
uv tool install huggingface_hub
Download and run Groot
mei pull groot-19b-a3b-text

mei \
  --model-dir ~/.cache/mei/models/Groot-19B-A3B-261023-rco-role-4.5bpw-textonly \
  --model-profile groot-19b-a3b-text \
  --served-model-id groot

Mei downloads a fixed version of the model. mei pull groot-19b-a3b-text --dry-run previews what it would download. Each server runs one model; stop it with Ctrl-C before switching models.

03

Send a request

Set your OpenAI-compatible client’s base URL to http://127.0.0.1:8024/v1 and use the served model ID groot.

Make a first request
curl http://127.0.0.1:8024/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "groot",
    "messages": [{
      "role": "user",
      "content": "Hello, Mei."
    }]
  }'

Use Mei with CoCore

CoCore supports Mei as an external model server. When it connects, it checks whether the selected model can handle tool calls and structured responses.

CoCore setup instructions ↗