Voice → Mail latency demo (`<700 ms` TTFSW)
Voice → Mail latency demo (<700 ms TTFSW)
Reproducible check that a spoken “draft an email…” turn reaches first-spoken-word in under 700 ms with the Mail app pre-warmed. This is the publishable number behind the “fast voice → action” claim.
Why this is a manual runbook, not a unit test: TTFSW is measured from real push-to-talk release to the first TTS dispatch on real hardware. The unit suite injects synthetic transcripts and cannot observe capture/render timing. Run this on the Mac you demo from.
xcodebuildis banned for dev (TCC) — build + run from Xcode (Cmd+R).
One-time setup
- Enable Mail prewarm. In
leanring-buddy/Info.plistsetPrewarmMailForDraftstotrue(default isfalseso normal installs don’t launch Mail at startup). This makesprewarmMailForFastDraftsIfNeeded()(leanring_buddyApp.swift) launch + warm Mail so the first draft turn isn’t paying cold-launch cost. - Sign in to Mail so a compose window can actually open.
- Grant Pace mic + screen-recording + accessibility once (normal first-run).
Run
-
Build + launch from Xcode (Cmd+R) so TCC grants persist. Wait for Mail to finish pre-warming (log line
📬 Pace: Mail prewarmed for drafts …). -
Do 8–10 voice-to-Mail turns, e.g. hold ctrl+option and say: “Draft an email to Alex saying I’ll be five minutes late.” Vary the recipient/body so you’re not measuring a cache.
-
Aggregate the metrics from the unified log (scope the window to just your run):
bash scripts/benchmark_ttfsw.sh --last 10mEach turn emits
TTFSW=NNNms(PTT-release → first TTS dispatch) viaPaceTelemetryLog(OSLogcom.pace.app/metrics), which is what the script queries.
Read the result
The script prints a markdown table (n, min, p50, p95, max, mean).
- Pass:
p50 TTFSW < 700 msacross the run (and ideallyp95 < 700 ms). - If
p50is over budget, checkSTTandVLMcolumns — a Mail-draft turn should be.tool-actionintent and normally skips the VLM (see the VLM-skip heuristic), so the budget is dominated by STT + planner first token. - Record the
p50/p95you measured and the machine (chip, RAM, macOS version) alongside the number — do not publish a latency claim without the local numbers (fleet rule).
Cleanup
Set PrewarmMailForDrafts back to false before committing/releasing — it’s
a demo-only setting, not a shipping default.
Publish
Put the measured p50/p95 (with hardware) on the landing latency claim and
in PROJECT_STATUS.md. Then close Planned item #4.