Opt-in auto-naming for voice memos via on-device Foundation Models #53
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios#53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Voice memos currently land with timestamp-hash filenames. Add an opt-in setting that generates a short human-readable title from the on-device transcript.
Approach
Use Apple's Foundation Models framework (iOS 26+). The ~3B Apple Intelligence model is already resident on qualifying devices, so this costs nothing in bundle size and adds no second inference runtime.
@Generableconstrains decoding to a typed struct, so the result is aStringrather than prose that needs parsing.Scope
TitleGeneratorservice that takes VTT cue text and returns a titleSystemLanguageModel.default.availabilitycheck gating the settings toggle. The three unavailable cases (no supporting hardware / Apple Intelligence disabled / model still downloading) need distinct UI copy — do not collapse them into one "unavailable" stateNLTaggernoun-phrase and named-entity extraction over the transcript, top few terms joined. No model, no download, works back to iOS 12. Produces keyword-style titles ("boiler contractor Spectrum quote") rather than sentences, which for a filename is fineConstraints
Not validated
Title quality has not been tested against real recordings. Hold the PR until Wes has run it on-device against actual memos — that is the only way this feature's quality shows up.
Alternative considered and rejected
A Core ML conversion of Qwen3.5-0.8B (
mlboydaisuke/qwen3.5-0.8B-CoreML). Rejected: 128-token max sequence length means titling from the opening ~90 words only, a 754 MB.mlpackageto ship or download for a five-word filename, and no bundled tokenizer.