Skip to content

On-device AI, built in the open.

We build apps, models and runtime fixes that bring open models to phones.

OpenWeights
OpenWeights on a phone with LFM2.5 1.2B loaded, ready for a first message
ExecuServe
ExecuServe on a phone, serving: qwen3-1.7b ready in memory with its prefill and decode speed

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
Median time per output token for LFM2.5 1.2B on five phone chips, from OpenWeights' latency report. Shorter is faster; conditions differ between phones.

Get it on Google PlayAbout OpenWeightsOpenWeights SourceiPhone, experimental

OpenWeights' Discover screen: a Hugging Face search box, and Recommended showing the Experimental Machines ExecuTorch builds of LFM2.5 1.2B and 2.6B
Discover searches Hugging Face and recommends our ExecuTorch builds.
OpenWeights' Tools screen: under 'Leaves the device', switches for Search the web, Show pictures and Open a page
Every tool that reaches the internet has its own switch.

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.

ExecuServe's Chat tab on a phone: two haiku from qwen3-1.7b, each with its prefill and decode speed
The app, with a chat for trying any installed model.
ExecuServe's browser chat: a question answered by qwen3-1.7b running on the phone, with its prefill and decode speed
A laptop using the browser chat built into the server, answered by Qwen3 1.7B on the phone.

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
Qwen3 1.7B on a Snapdragon 8 Elite Gen 5, through ExecuServe. The NPU report

Get it on Google PlayAbout ExecuServeExecuServe Source

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.

Published ExecuPack builds by model and target
ModelCPUXNNPACKGPUVulkanQualcomm NPUSM8750MediaTek NPUMT6991
Qwen3 1.7BAnswering in the ExecuServe chat abovePublished, windows 2k–32kPublished, windows 2k–32kPublished, windows 2k–8kPublished, windows 2k–8k
LFM2.5 1.2B InstructRecommended in OpenWeightsPublished, windows 2k–32kNot publishedNot publishedPublished, windows 512–8k
Llama 3.2 1B InstructPublished, windows 2k–32kPublished, windows 2k–32kPublished, windows 2k–4kPublished, windows 2k–16k
SmolLM2 135M InstructPublished, windows 2k–32kPublished, windows 2k–32kPublished, windows 2k–8kPublished, windows 2k–16k
Qwen2.5 1.5B InstructPublished, windows 2k–16kPublished, windows 2k–32kNot publishedNot published
Qwen3 4BPublished, windows 2k–32kPublished, windows 2k–32kNot publishedPublished, windows 2k–4k
Published, with its context windows.Not published. From Hugging Face, October 8, 2026.

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

Research logHugging FaceWhat ExecuTorch can export

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.

Mergedpytorch/executorch #23401, October 8, 2026A new conversation with an LFM2 model could inherit the previous one's state.[LFM2] Clear short-conv state at the start of a new sequenceRead the pull request
  • 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.

The planExecuBench Source

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
Two parts of the same CPU, not a speed difference: why ExecuBench takes each phone's details from the phone. Every probed device

Where we started

Earlier research compared AI hardware across servers, laptops and phones. The reports stay published.

The people behind it.

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