-
Notifications
You must be signed in to change notification settings - Fork 1
Model Management
All three on-device models share one install/manage pattern, so users learn it once.
| Manager | Model | Location |
|---|---|---|
WhisperModelManager |
Whisper (STT) | …/WhisperModels/ |
KokoroModelManager |
Kokoro (TTS) | …/TTSModels/ |
LocalLLMModelManager |
Gemma (LLM) | …/LLMModels/ |
Each is an @MainActor singleton exposing isInstalled, isDownloading, downloadProgress, download(), delete(), and a prewarmIfNeeded() that loads the model in the background on launch.
All models live under ~/Library/Application Support/com.arcusis.zerm/, outside the .app bundle — so they survive app updates and reinstalls.
stateDiagram-v2
[*] --> NotInstalled
NotInstalled --> Downloading: Download
Downloading --> Installed: complete
Downloading --> NotInstalled: cancel / fail
Installed --> NotInstalled: Delete
Installed --> Warm: prewarmIfNeeded()
LocalLLMModelCardView is a single reusable SwiftUI card (download / progress % / installed / delete) used by both the AI Models screen and Read Aloud settings. The voice and Whisper cards follow the same shape.
- Whisper — AI Models / transcription model picker.
- Kokoro — Read Aloud settings → voice provider = Kokoro → download card.
- Gemma — Read Aloud settings (Smart reading) and AI Models screen (provider = On-Device). Both use the same shared model.
The LLM bridge reads each GGUF's built-in chat template, so advanced users can drop in other instruct models. Cloud providers remain available per task for users who prefer them.