Skip to content

On-device AI, built in the open.

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

Research.

What we measured, on which hardware, and how. Every study links to its committed results.

All research

1%

of its writing speed left: the app's engine at 4 threads, with six of its eight cores taken out of use by hand

Newest: 3 to 11 November 2026

Why CPU decode stalls when a phone throttles

When a Snapdragon 8 Elite Gen 5 phone overheats, it stops using six of its eight cores, and llama.cpp, the engine that runs the model, nearly stops writing the reply if it uses more than two threads. Why, the fix OpenWeights now carries, and whether ordinary chat gets that hot.

  • 9 of 9

    models were fastest with NPU prefill

    OpenWeights, 2 to 10 November 2026

    Prefill and decode on CPU, GPU and NPU

    A model reads the prompt (prefill), then writes the reply a token at a time (decode). Nine models on a Snapdragon 8 Elite Gen 5, with each job on the CPU, the GPU or the NPU, the chip built for AI.

  • 42%

    of 24 real tasks with Qwen3.6 on an RTX 4090, against 92% on Copilot Pro+ Auto

    GGUF, October 2026

    When is local Copilot worth it?

    The same Copilot CLI agent on the same real coding tasks: downloadable models running locally on an RTX 4090 and a MacBook Air M5, against hosted Copilot.

  • 8 agents

    in a simulated coding workload, at a 4.9 s wait per turn on vLLM with no errors. At 16, waits reach 16.5 s

    Hardware, 23 and 24 September 2026

    How many coding agents can one RTX 4090 serve?

    Qwen3.8-27B on one rented RTX 4090, through five engine setups, rising load and real coding agents.

Conferences.

Where we take what we measured. Every talk links to its listing and the evidence behind it.

All conferences
  • PyTorch Day Japan

    27×

    faster prefill on a second turn: Qwen3-1.7B on ExecuTorch, reusing 1,192 tokens

    Tokyo, 10 December 2026

    When the KV Cache Cannot Roll Back

    How a phone skips re-reading a 2,050-token agent prompt, built twice because the app's two runtimes have different cache constraints.

    Alpha Romer Coma and Arjhine Ty

  • PyTorch Day Korea

    1 in 5

    replies from the compiled 1.2B cited a search it never made, on our first test set. As a GGUF, none of 640

    Seoul, 21 November 2026

    The Search It Never Made

    Whether a small model on a phone searches when it must, on 160 public questions, four phones and two builds of the same weights.

    Xynil Jhed Lacap

  • GitHub Universe

    24 tasks

    of real work on ten setups. Each bar is tasks finished; the bright ones ran locally

    San Francisco, 28 October 2026

    When is local Copilot worth it?

    The same Copilot CLI agent on the same real tasks: open-weight models you serve yourself against hosted Copilot.

    Alpha Romer Coma

  • PyTorch Conference Europe

    Compiler Tax

    what surprises developers moving PyTorch workloads to ASICs

    Paris, 8 April 2026

    De-mystifying PyTorch for ASICs

    A code-first check on moving PyTorch from GPUs to Google TPUs and AWS Trainium, and when it is worth doing.

    Alpha Romer Coma

OpenWeightsOn Google Play

Find a model. Run it here.

Search Hugging Face, see whether a model fits your phone, and run it there. No account.

ExecuTorch buildGGUF in llama.cpp

  • Dimensity 9500s25 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.
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.

A local AI server on your Android phone, behind the OpenAI and Anthropic APIs.

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.
API

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

ExecuPackOn Hugging Face

Models built for phone chips.

Open models built for phone CPUs, GPUs, and Qualcomm and MediaTek NPUs.

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–16kPublished, 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–16kPublished, 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–32kPublished, 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, November 9, 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

Fixes shared with ExecuTorch.

Our apps turn up bugs in the runtime underneath. We report them to the ExecuTorch team, 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.

  • 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.

Built by six people.

Work with us

Test what others assume.

Everyone has a theory about what a phone can run. Bring yours, and we'll put it on real hardware and find out.

  • You have a hunch.

    We'll test it on real phones and show the numbers, as we did for which processor should prefill and which should decode.

    See the study
  • You have a model.

    We'll build it for phone CPUs, GPUs and Qualcomm and MediaTek NPUs, and tell you which context windows fit.

    See the builds
  • You have an Android app.

    We'll run the model on the phone behind the OpenAI and Anthropic APIs, so your app calls it like a cloud model.

    See ExecuServe
  • You want to build.

    Our apps and build tools are open source. Ship something with us and your name goes on this page.

    See the code

Three lines is enough: what you want to test, on what, and why. It goes straight to Alpha, not a form.

alpha@experimentalmachines.org