Problem
When the Whisper engine fails to initialize or transcription fails, the app gives zero visual feedback to the user. This makes the app appear completely broken with no way to diagnose what went wrong.
Failure chain
1. Engine initialization failure is silent (TranscriptionService.swift:60-64)
} catch {
await MainActor.run {
self.isLoading = false
print("Failed to load engine: \(error)") // only printed to console
}
}
currentEngine stays nil
isLoading is set to false
- The record button appears enabled and clickable
- User has no idea the engine never loaded
2. User can record without a loaded engine
Recording works independently of the transcription engine, so the user can click the record button, see it turn red, speak, and think everything is working.
3. Transcription failure is silent (ContentView.swift:237-240)
} catch {
print("Error transcribing audio: \(error)") // only printed to console
try? FileManager.default.removeItem(at: tempURL) // recording deleted
}
await MainActor.run {
self.state = .idle // silently resets to idle
self.recordingDuration = 0
}
- The error is only
print()ed
- The temp recording is deleted
- State resets to idle — user sees nothing
User experience
- Open app → model fails to load (no indication)
- Click record → turns red, mic appears in menu bar (looks normal)
- Speak → app appears to be recording fine
- Click stop → app briefly processes, then goes back to idle
- No transcription, no error message, no recording saved, nothing
This is especially problematic with large models like large-v3-turbo (1.5GB) where initialization is more likely to fail or take a long time.
Suggested improvements
- Show an error state when engine fails to load — e.g., a red label or disabled button with tooltip explaining the model couldn't be loaded
- Disable the record button when
currentEngine is nil (not just when isLoading)
- Show an error message when transcription fails — toast/alert instead of silently resetting to idle
- Don't delete the temp recording on failure — let the user retry
Related
Problem
When the Whisper engine fails to initialize or transcription fails, the app gives zero visual feedback to the user. This makes the app appear completely broken with no way to diagnose what went wrong.
Failure chain
1. Engine initialization failure is silent (
TranscriptionService.swift:60-64)currentEnginestaysnilisLoadingis set tofalse2. User can record without a loaded engine
Recording works independently of the transcription engine, so the user can click the record button, see it turn red, speak, and think everything is working.
3. Transcription failure is silent (
ContentView.swift:237-240)print()edUser experience
This is especially problematic with large models like
large-v3-turbo(1.5GB) where initialization is more likely to fail or take a long time.Suggested improvements
currentEngineis nil (not just whenisLoading)Related