On-device AI, built in the open.
We build apps, models and runtime fixes that bring open models to phones.


- OpenWeightsOn Google PlayFind open models on Hugging Face and chat with them on your phone
- ExecuServeOn Google PlayTurn your phone into a local AI server for your apps
- ExecuPackOn Hugging FaceOpen models built for phone CPUs, GPUs and NPUs
- ExecuBenchIn developmentMeasurements of those models on real phones
OpenWeightsOn Google Play
Find a model. Run it here.
OpenWeights searches Hugging Face for GGUF and ExecuTorch models, estimates whether one fits your phone before you download it, and runs it on the device. No account.
ExecuTorch buildGGUF in llama.cpp
- Dimensity 940025 ms with the ExecuTorch build,31 ms with the GGUF
- Snapdragon 8 Gen 327 ms with the ExecuTorch build,43 ms with the GGUF
- Snapdragon 8 Elite18 ms with the ExecuTorch build,27 ms with the GGUF
- Tensor G546 ms with the ExecuTorch build,106 ms with the GGUF
- Exynos 240038 ms with the ExecuTorch build,59 ms with the GGUF
Get it on Google PlayAbout OpenWeightsOpenWeights SourceiPhone, experimental


ExecuServeOn Google Play
Your phone is the server.
ExecuServe turns an Android phone into a local AI server. It keeps compiled models loaded and answers the OpenAI and Anthropic APIs, for apps on the phone or, if you allow it, on your network. It runs CPU and GPU builds, and NPU builds made for the phone's own chip.


Call it with the OpenAI SDK you already use: set OPENAI_BASE_URL to the address the app shows, and OPENAI_API_KEY to its key.
from openai import OpenAI
client = OpenAI() # reads OPENAI_BASE_URL and OPENAI_API_KEY
reply = client.chat.completions.create(
model="qwen3-1.7b",
messages=[{"role": "user", "content": "Hello"}],
)Time to the first token, ~700-token prompt
- NPU (Qualcomm)0.41 s
- GPU1.0 s
- CPU2.0 s
ExecuPackOn Hugging Face
Models built for phone chips.
ExecuPack turns open checkpoints on Hugging Face into ExecuTorch programs for phone CPUs and GPUs, and for the NPUs in Qualcomm and MediaTek chips. Each one is published with its recipe, at several context windows.
Scroll sideways for all four targets.
| Model | CPUXNNPACK | GPUVulkan | Qualcomm NPUSM8750 | MediaTek NPUMT6991 |
|---|---|---|---|---|
| Qwen3 1.7BAnswering in the ExecuServe chat above | Published, windows 2k–32k | Published, windows 2k–32k | Published, windows 2k–8k | Published, windows 2k–8k |
| LFM2.5 1.2B InstructRecommended in OpenWeights | Published, windows 2k–32k | Not published | Not published | Published, windows 512–8k |
| Llama 3.2 1B Instruct | Published, windows 2k–32k | Published, windows 2k–32k | Published, windows 2k–4k | Published, windows 2k–16k |
| SmolLM2 135M Instruct | Published, windows 2k–32k | Published, windows 2k–32k | Published, windows 2k–8k | Published, windows 2k–16k |
| Qwen2.5 1.5B Instruct | Published, windows 2k–16k | Published, windows 2k–32k | Not published | Not published |
| Qwen3 4B | Published, windows 2k–32k | Published, windows 2k–32k | Not published | Published, windows 2k–4k |
What making them run took
MediaTek position encoding
MediaTek's stock export scripts built Qwen and Llama position tables at the wrong base. After our patch, three models matched the Hugging Face reference in a 301-token CPU test before quantization.
Finding 37 in the research log
Embeddings that differed by machine
The same model built on two machines decoded different text. The cause was a platform-dependent search in embedding quantization; new exports use a deterministic method.
Finding 27 in the research log
Fixes shared with ExecuTorch.
Running these models in our own apps turns up bugs in the runtime underneath. We report them to the ExecuTorch team at PyTorch, and fix them where we can.
Fixed
On Android, a default temperature of 0.8 overrode the one the app set.
Our report; the maintainers' fix merged September 30, 2026. On GitHub
Open
The exporter and the runner disagreed by one token about the prompt limit, so some prompts failed to prefill.
Our report and fix, opened October 10, 2026. On GitHub
ExecuBenchIn development, no results yet
Next: measurements on real phones.
ExecuBench will measure the speed, memory, heat and answer quality of compiled models on real phones in AWS Device Farm, and record what each phone reports about itself beside every number. Probing the phones is done; the pilot is next.
Google Pixel 10, Tensor G5
One of 83 Android device models probed on October 4, 2026
- Device Farm's catalogue
- 2,246 MHz
- The clock of its first cluster, two Cortex-A520 cores
- What the phone reports
- 3,782 MHz
- The top clock of its fastest core, a Cortex-X4
Where we started
Earlier research compared AI hardware across servers, laptops and phones. The reports stay published.
The people behind it.
Alpha Romer Coma
Co-Founder
LinkedIn, Alpha Romer ComaJohn Andrew Balbarosa
Co-Founder
Arjhine Ty
Co-Founder
LinkedIn, Arjhine TyXynil Jhed Lacap
Co-Founder
GitHub, Xynil Jhed LacapJC Diamante
Core Contributor
GitHub, JC Diamante
Work with us.
ExecuPack
Put a model on phones
Name an open model, or the phone it has to run on. We build it for phone CPUs, GPUs and Qualcomm and MediaTek NPUs, and tell you which context windows fit.
ExecuServe
Run it inside your app
The model stays on the phone behind the OpenAI and Anthropic APIs, so your Android app calls it like a cloud model.
ExecuTorch
Trace a problem to its cause
A crash, wrong output or a slow phone. We find the cause and take it upstream, as we did with LFM2's carried-over state and Android's temperature default.
Tell us the model, the phone or chip, and what you are seeing.
Email us