vOOice/VoiceInk/Whisper/WhisperState+ModelQueries.swift

36 lines
1.3 KiB
Swift

import Foundation
extension WhisperState {
var usableModels: [any TranscriptionModel] {
allAvailableModels.filter { model in
switch model.provider {
case .local:
return availableModels.contains { $0.name == model.name }
case .parakeet:
return isParakeetModelDownloaded(named: model.name)
case .nativeApple:
if #available(macOS 26, *) {
return true
} else {
return false
}
case .groq:
return APIKeyManager.shared.hasAPIKey(forProvider: "Groq")
case .elevenLabs:
return APIKeyManager.shared.hasAPIKey(forProvider: "ElevenLabs")
case .deepgram:
return APIKeyManager.shared.hasAPIKey(forProvider: "Deepgram")
case .mistral:
return APIKeyManager.shared.hasAPIKey(forProvider: "Mistral")
case .gemini:
return APIKeyManager.shared.hasAPIKey(forProvider: "Gemini")
case .soniox:
return APIKeyManager.shared.hasAPIKey(forProvider: "Soniox")
case .custom:
// Custom models are always usable since they contain their own API keys
return true
}
}
}
}