diff --git a/Package.swift b/Package.swift index 56d614e..91766e1 100644 --- a/Package.swift +++ b/Package.swift @@ -14,7 +14,7 @@ let package = Package( dependencies: [ .package( url: "https://github.com/FluidInference/FluidAudio.git", - .upToNextMinor(from: "0.12.6") + .upToNextMinor(from: "0.15.5") ), .package(url: "https://github.com/sparkle-project/Sparkle", from: "2.9.1"), ], diff --git a/Sources/MiniWhisper/Features/EditMode/AppState+EditMode.swift b/Sources/MiniWhisper/Features/EditMode/AppState+EditMode.swift index 162e76c..725a3ce 100644 --- a/Sources/MiniWhisper/Features/EditMode/AppState+EditMode.swift +++ b/Sources/MiniWhisper/Features/EditMode/AppState+EditMode.swift @@ -227,7 +227,7 @@ extension AppState { instruction: transcription.text, selection: context.selectedText, settings: customEditProviderSettings) - case .gpt5Mini, .claudeHaiku45: + case .gpt56Luna, .claudeHaiku45: edited = try await editModeProvider.editText( instruction: transcription.text, selection: context.selectedText, diff --git a/Sources/MiniWhisper/Features/Transcription/AppState+Transcription.swift b/Sources/MiniWhisper/Features/Transcription/AppState+Transcription.swift index f832626..00e53d4 100644 --- a/Sources/MiniWhisper/Features/Transcription/AppState+Transcription.swift +++ b/Sources/MiniWhisper/Features/Transcription/AppState+Transcription.swift @@ -50,7 +50,7 @@ extension AppState { } cleaned = try await customEditProvider.cleanupTranscript( rawText, settings: customEditProviderSettings) - case .gpt5Mini, .claudeHaiku45: + case .gpt56Luna, .claudeHaiku45: cleaned = try await editModeProvider.cleanupTranscript( rawText, model: model) } diff --git a/Sources/MiniWhisper/Models/EditModeSettings.swift b/Sources/MiniWhisper/Models/EditModeSettings.swift index 8ea42a3..34d4f71 100644 --- a/Sources/MiniWhisper/Models/EditModeSettings.swift +++ b/Sources/MiniWhisper/Models/EditModeSettings.swift @@ -6,7 +6,7 @@ import Foundation /// `~/.codex/auth.json`); `.custom` routes through `CustomEditProvider` /// to a user-supplied OpenAI-compatible chat-completions endpoint. enum EditModeModel: String, Codable, CaseIterable, Sendable { - case gpt5Mini = "gpt-5.4-mini" + case gpt56Luna = "gpt-5.6-luna" case claudeHaiku45 = "claude-haiku-4-5" case custom = "custom" @@ -15,7 +15,7 @@ enum EditModeModel: String, Codable, CaseIterable, Sendable { var backend: EditModeBackend { switch self { case .claudeHaiku45: return .claudeCli - case .gpt5Mini: return .codexCli + case .gpt56Luna: return .codexCli case .custom: return .customApi } } @@ -25,7 +25,7 @@ enum EditModeModel: String, Codable, CaseIterable, Sendable { var oauthProvider: String { switch self { case .claudeHaiku45: return "anthropic" - case .gpt5Mini: return "openai-codex" + case .gpt56Luna: return "openai-codex" case .custom: return "" } } @@ -38,7 +38,7 @@ enum EditModeModel: String, Codable, CaseIterable, Sendable { var reasoningEffort: String? { switch self { case .claudeHaiku45: return nil - case .gpt5Mini: return "none" + case .gpt56Luna: return "none" case .custom: return nil } } diff --git a/Sources/MiniWhisper/Services/ParakeetProvider.swift b/Sources/MiniWhisper/Services/ParakeetProvider.swift index 33c4e73..6a79860 100644 --- a/Sources/MiniWhisper/Services/ParakeetProvider.swift +++ b/Sources/MiniWhisper/Services/ParakeetProvider.swift @@ -30,7 +30,7 @@ final class ParakeetProvider { } ) let manager = AsrManager(config: .default) - try await manager.initialize(models: models) + try await manager.loadModels(models) asrManager = manager } initializationTask = task @@ -54,7 +54,9 @@ final class ParakeetProvider { let startTime = Date() - let result = try await manager.transcribe(audioURL, source: .microphone) + // Reusing state leaks token context from the previous recording. + var decoderState = try TdtDecoderState() + let result = try await manager.transcribe(audioURL, decoderState: &decoderState) let processingTime = Date().timeIntervalSince(startTime) let segments = convertToSegments(result) @@ -68,7 +70,7 @@ final class ParakeetProvider { ) } - nonisolated private static func mapProgress(_ progress: DownloadUtils.DownloadProgress) -> ModelLoadProgress { + nonisolated private static func mapProgress(_ progress: DownloadProgress) -> ModelLoadProgress { switch progress.phase { case .listing: return ModelLoadProgress(phase: .checking, progress: nil) diff --git a/Sources/MiniWhisper/Views/ModelPickerView.swift b/Sources/MiniWhisper/Views/ModelPickerView.swift index 20fbf60..c702f09 100644 --- a/Sources/MiniWhisper/Views/ModelPickerView.swift +++ b/Sources/MiniWhisper/Views/ModelPickerView.swift @@ -105,11 +105,11 @@ struct ModelPickerView: View { ModelRow( icon: "bolt.horizontal.fill", title: "Codex CLI", - subtitle: "OpenAI · \(EditModeModel.gpt5Mini.rawValue)", + subtitle: "OpenAI · \(EditModeModel.gpt56Luna.rawValue)", badge: nil, - isSelected: editModel == .gpt5Mini + isSelected: editModel == .gpt56Luna ) { - selectEditModel(.gpt5Mini) + selectEditModel(.gpt56Luna) } ModelRow( diff --git a/Sources/MiniWhisperCLI/CLI.swift b/Sources/MiniWhisperCLI/CLI.swift index c2a5a8a..98e8dc9 100644 --- a/Sources/MiniWhisperCLI/CLI.swift +++ b/Sources/MiniWhisperCLI/CLI.swift @@ -23,6 +23,8 @@ enum CLI { return 0 case "transcribe": return await TranscribeCommand.run(arguments: rest) + case "diarize": + return await DiarizeCommand.run(arguments: rest) case "models": return await ModelsCommand.run(arguments: rest) case "paths": @@ -96,6 +98,7 @@ enum Help { Common commands: transcribe