# LFM2.5 230M Q4TP on iPhone 16 — interactive throughput report

* **Date:** 2026-10-01
* **Device:** iPhone 16 (A18)
* **App:** Cortiq Mobile TestFlight `1.3.0 (47)`
* **Model:** `lfm2.5-230m-q4tp.cmf` from [infosave/LFM2.5-cmf](https://huggingface.co/infosave/LFM2.5-cmf)
* **Model file:** 132,082,125 bytes (126 MiB in the app); Hub LFS SHA-256 `889fa1e3a133004f9fab273e24a355b51056c5e349f9efd4552892a440c42f9a`
* **App estimate before loading:** about 622 MiB RAM, 14 layers, 128K context

## Result

With the app's GPU toggle **off** and its CPU pool at **Auto (5)**, three warm
interactive completions measured in the phone UI at **144.5–166.0 tok/s**;
the median was **145.7 tok/s**. This is the rate displayed in the chat UI,
based on the full execution interval measured by the engine after generation
starts; it is neither a synthetic core-only decode number nor a total
tap-to-response latency.

The separate public UI capture in the Space, `assets/15_lfm230_iphone_speed.png`,
shows another interactive LFM completion at **162.1 tok/s**.

## Method

1. The Ready CMF file was downloaded and loaded locally in the TestFlight app.
2. A new empty conversation was created. The built-in English suggestion
   `Explain how CMF task masks work` was used unchanged; the app displayed
   seven prompt tokens for every observed run.
3. The first completion was a warm-up and is reported separately.
4. The next three completions were generated with the UI's regenerate action
   in the same loaded-model session.
5. The UI settings were set to `temperature: 0.10`, `top_p: 0.95`,
   `max_tokens: 128`, `CPU Auto (5)`, and GPU toggle off. The original phone settings
   (`temperature: 0.70`, `top_p: 0.95`, `max_tokens: 1024`, GPU toggle off) and
   MiniCPM5-2B as the active model were restored after testing.

The chat screen reports completion tokens, latency and `tok/s` for every
message. The rate divides returned completion tokens by the full execution
interval measured by the engine after generation starts: prompt processing and
the model response are included, while waiting in the engine queue before
timing begins is excluded. The UI rounds its displayed latency and rate; the
rate is calculated from the engine's unrounded timer. The text of the prompt
is a throughput workload only; it is not a quality evaluation of a 230M model
or of CMF task masks.

## Observations

| Run | State | Prompt tokens (UI) | Completion tokens (UI) | Latency shown by UI | UI tok/s |
|---|---|---:|---:|---:|---:|
| 0 | warm-up, excluded from aggregate | 7 | 128 | 0.8 s | 168.4 |
| 1 | warm | 7 | 37 | 0.3 s | 144.5 |
| 2 | warm | 7 | 37 | 0.3 s | 145.7 |
| 3 | warm | 7 | 125 | 0.8 s | 166.0 |

| Aggregate over warm runs | Value |
|---|---:|
| Warm range | **144.5–166.0 tok/s** |
| Warm median | **145.7 tok/s** |
| Warm arithmetic mean | **152.07 tok/s** |
| Runs above 60 tok/s | **3 / 3** |

The UI rounds latency and rate for display. The aggregate uses the displayed
`tok/s` readings; no unobserved millisecond precision is implied.

## Other models checked in the same device session

The shipped Bonsai CMF header has no `tokenizer_config.chat_template`, so the
message-based Chat UI uses its generic ChatML fallback template. These two observations use the same
short built-in prompt, but are explicitly exploratory single runs rather than
the controlled three-run LFM series. Their observed completion counts exceed
the LFM cap of 128, so the LFM sampling and generation-cap configuration did
not apply; its exact separate setting was not recorded. They are not a
controlled comparison with LFM:

| Model / setting | Completion tokens (UI) | UI tok/s | Reading |
|---|---:|---:|---|
| `bonsai-1.7b-q1.cmf`, CPU Auto (5), GPU toggle off | 541 | 47.9 | Generic ChatML fallback template; below the 60 tok/s target in this one observation. |
| `bonsai-1.7b-q1.cmf`, GPU toggle on before reload | 261 | 19.2 | First run after enabling the toggle; backend was not traced and the result is not used for the headline. |

For comparison of a different task class, the existing
[Hy-MT2 Q4TP iPhone report](iphone-hymt2-q4tp-20261001.md) measured short
translation requests at a mean **17.75 tok/s** after warm-up. Translation,
compact general chat, and the Decision API are different workloads; their
numbers are shown side by side for model selection, not as a quality ranking.

## Scope

This is a real-device responsiveness check for a small local model. It does
not measure long contexts, battery use, sustained thermals, tokenization
accuracy, or task quality. Results belong to this iPhone, this TestFlight
build, the stated model, settings and prompt. The high-throughput result is a
property of this LFM2.5 230M configuration, not a promise for every model in
the catalog.
