VoiceInput/Sources/Utils/Config.swift

71 lines
2.0 KiB
Swift

import Foundation
enum RecognitionLanguage: String, CaseIterable {
case chineseSimplified = "zh-CN"
case english = "en-US"
case chineseTraditional = "zh-TW"
case japanese = "ja-JP"
case korean = "ko-KR"
var displayName: String {
switch self {
case .chineseSimplified: return "简体中文"
case .english: return "English"
case .chineseTraditional: return "繁體中文"
case .japanese: return "日本語"
case .korean: return "한국어"
}
}
}
struct Config {
static var shared = Config()
private let defaults = UserDefaults.standard
private enum Keys {
static let language = "recognition_language"
static let llmEnabled = "llm_enabled"
static let llmBaseURL = "llm_base_url"
static let llmAPIKey = "llm_api_key"
static let llmModel = "llm_model"
}
var language: RecognitionLanguage {
get {
guard let raw = defaults.string(forKey: Keys.language),
let lang = RecognitionLanguage(rawValue: raw) else {
return .chineseSimplified
}
return lang
}
set {
defaults.set(newValue.rawValue, forKey: Keys.language)
}
}
var llmEnabled: Bool {
get { defaults.bool(forKey: Keys.llmEnabled) }
set { defaults.set(newValue, forKey: Keys.llmEnabled) }
}
var llmBaseURL: String {
get { defaults.string(forKey: Keys.llmBaseURL) ?? "" }
set { defaults.set(newValue, forKey: Keys.llmBaseURL) }
}
var llmAPIKey: String {
get { defaults.string(forKey: Keys.llmAPIKey) ?? "" }
set { defaults.set(newValue, forKey: Keys.llmAPIKey) }
}
var llmModel: String {
get { defaults.string(forKey: Keys.llmModel) ?? "" }
set { defaults.set(newValue, forKey: Keys.llmModel) }
}
var isLLMConfigured: Bool {
!llmBaseURL.isEmpty && !llmAPIKey.isEmpty && !llmModel.isEmpty
}
}