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 } }