58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
// Enum to differentiate between model providers
|
|
enum ModelProvider: String, Codable, Hashable, CaseIterable {
|
|
case local = "Local"
|
|
case groq = "Groq"
|
|
case elevenLabs = "ElevenLabs"
|
|
case deepgram = "Deepgram"
|
|
// Future providers can be added here
|
|
}
|
|
|
|
// A unified protocol for any transcription model
|
|
protocol TranscriptionModel: Identifiable, Hashable {
|
|
var id: UUID { get }
|
|
var name: String { get }
|
|
var displayName: String { get }
|
|
var description: String { get }
|
|
var provider: ModelProvider { get }
|
|
|
|
// Language capabilities
|
|
var isMultilingualModel: Bool { get }
|
|
var supportedLanguages: [String: String] { get }
|
|
}
|
|
|
|
extension TranscriptionModel {
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
}
|
|
|
|
var language: String {
|
|
isMultilingualModel ? "Multilingual" : "English-only"
|
|
}
|
|
}
|
|
|
|
// A new struct for cloud models
|
|
struct CloudModel: TranscriptionModel {
|
|
let id: UUID
|
|
let name: String
|
|
let displayName: String
|
|
let description: String
|
|
let provider: ModelProvider
|
|
let speed: Double
|
|
let accuracy: Double
|
|
let isMultilingualModel: Bool
|
|
let supportedLanguages: [String: String]
|
|
|
|
init(id: UUID = UUID(), name: String, displayName: String, description: String, provider: ModelProvider, speed: Double, accuracy: Double, isMultilingual: Bool, supportedLanguages: [String: String]) {
|
|
self.id = id
|
|
self.name = name
|
|
self.displayName = displayName
|
|
self.description = description
|
|
self.provider = provider
|
|
self.speed = speed
|
|
self.accuracy = accuracy
|
|
self.isMultilingualModel = isMultilingual
|
|
self.supportedLanguages = supportedLanguages
|
|
}
|
|
} |