vOOice/VoiceInk/Models/TranscriptionModel.swift

57 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"
// 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
}
}