vOOice/VoiceInk/Views/AI Models/ModelCardRowView.swift

79 lines
2.9 KiB
Swift

import SwiftUI
import AppKit
struct ModelCardRowView: View {
let model: any TranscriptionModel
@ObservedObject var whisperState: WhisperState
let isDownloaded: Bool
let isCurrent: Bool
let downloadProgress: [String: Double]
let modelURL: URL?
// Actions
var deleteAction: () -> Void
var setDefaultAction: () -> Void
var downloadAction: () -> Void
var editAction: ((CustomCloudModel) -> Void)?
var body: some View {
Group {
switch model.provider {
case .local:
if let localModel = model as? LocalModel {
LocalModelCardView(
model: localModel,
isDownloaded: isDownloaded,
isCurrent: isCurrent,
downloadProgress: downloadProgress,
modelURL: modelURL,
deleteAction: deleteAction,
setDefaultAction: setDefaultAction,
downloadAction: downloadAction
)
} else if let importedModel = model as? ImportedLocalModel {
ImportedLocalModelCardView(
model: importedModel,
isDownloaded: isDownloaded,
isCurrent: isCurrent,
modelURL: modelURL,
deleteAction: deleteAction,
setDefaultAction: setDefaultAction
)
}
case .parakeet:
if let parakeetModel = model as? ParakeetModel {
ParakeetModelCardRowView(
model: parakeetModel,
whisperState: whisperState
)
}
case .nativeApple:
if let nativeAppleModel = model as? NativeAppleModel {
NativeAppleModelCardView(
model: nativeAppleModel,
isCurrent: isCurrent,
setDefaultAction: setDefaultAction
)
}
case .groq, .elevenLabs, .deepgram, .mistral:
if let cloudModel = model as? CloudModel {
CloudModelCardView(
model: cloudModel,
isCurrent: isCurrent,
setDefaultAction: setDefaultAction
)
}
case .custom:
if let customModel = model as? CustomCloudModel {
CustomModelCardView(
model: customModel,
isCurrent: isCurrent,
setDefaultAction: setDefaultAction,
deleteAction: deleteAction,
editAction: editAction ?? { _ in }
)
}
}
}
}
}