From 289a99237be9c1b35a7a93e3713f8d274391b70c Mon Sep 17 00:00:00 2001 From: Beingpax Date: Fri, 14 Mar 2025 11:35:45 +0545 Subject: [PATCH] Improve Whisper model loading reliability --- VoiceInk/Whisper/WhisperState.swift | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/VoiceInk/Whisper/WhisperState.swift b/VoiceInk/Whisper/WhisperState.swift index 38bb7bb..7820a9b 100644 --- a/VoiceInk/Whisper/WhisperState.swift +++ b/VoiceInk/Whisper/WhisperState.swift @@ -339,9 +339,22 @@ class WhisperState: NSObject, ObservableObject, AVAudioRecorderDelegate { return } + if whisperContext == nil { + logger.notice("🔄 Model not loaded yet, attempting to load now: \(currentModel.name)") + do { + try await loadModel(currentModel) + } catch { + logger.error("❌ Failed to load model: \(currentModel.name) - \(error.localizedDescription)") + messageLog += "Failed to load transcription model. Please try again.\n" + currentError = .modelLoadFailed + await cleanupResources() + return + } + } + guard let whisperContext = whisperContext else { - logger.error("❌ Cannot transcribe: Model not loaded") - messageLog += "Cannot transcribe: Model not loaded.\n" + logger.error("❌ Cannot transcribe: Model could not be loaded") + messageLog += "Cannot transcribe: Model could not be loaded after retry.\n" currentError = .modelLoadFailed return } @@ -538,7 +551,7 @@ class WhisperState: NSObject, ObservableObject, AVAudioRecorderDelegate { } private func showRecorderPanel() { - logger.notice("📱 Showing \(recorderType) recorder") + logger.notice("📱 Showing \(self.recorderType) recorder") if recorderType == "notch" { if notchWindowManager == nil { notchWindowManager = NotchWindowManager(whisperState: self, recorder: recorder) @@ -589,7 +602,7 @@ class WhisperState: NSObject, ObservableObject, AVAudioRecorderDelegate { } func dismissMiniRecorder() async { - logger.notice("📱 Dismissing \(recorderType) recorder") + logger.notice("📱 Dismissing \(self.recorderType) recorder") shouldCancelRecording = true if isRecording { await recorder.stopRecording()