df1c5ff32c
Replace MLX GPU inference with CoreML bundles so transcription continues while the host app is backgrounded. Adds model download and warm-up, vendored Qwen3Speech, and updates onboarding, settings, and copy for the ~1.6 GB CoreML package (iOS 18+).
46 lines
1.5 KiB
Swift
46 lines
1.5 KiB
Swift
// EngineServiceLabel.swift
|
|
// OSGKeyboard · Shared
|
|
//
|
|
// Human-readable summary of the active engine / AI provider for UI hints.
|
|
|
|
import Foundation
|
|
|
|
public enum EngineServiceLabel {
|
|
public static func summary(
|
|
engineMode: String,
|
|
providerId: String,
|
|
model: String,
|
|
localASRBackend: LocalASRBackend = .speechAnalyzer,
|
|
language: AppUILanguage? = nil
|
|
) -> String {
|
|
let lang = language ?? AppGroupStore().uiLanguage
|
|
if engineMode == "local" {
|
|
let asrName = asrDisplayName(for: localASRBackend, language: lang)
|
|
return SharedL10n.format("engine.summary.local", language: lang, asrName)
|
|
}
|
|
let providerName = ProviderDisplayName.name(for: providerId, language: lang)
|
|
let trimmedModel = model.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
if trimmedModel.isEmpty {
|
|
return SharedL10n.format("engine.summary.cloud", language: lang, providerName)
|
|
}
|
|
return SharedL10n.format(
|
|
"engine.summary.cloudWithModel",
|
|
language: lang,
|
|
providerName,
|
|
trimmedModel
|
|
)
|
|
}
|
|
|
|
private static func asrDisplayName(
|
|
for backend: LocalASRBackend,
|
|
language: AppUILanguage
|
|
) -> String {
|
|
switch backend {
|
|
case .speechAnalyzer:
|
|
return SharedL10n.string("engine.asr.appleSpeech", language: language)
|
|
case .qwen3ASR:
|
|
return SharedL10n.string("model.qwen3asr.name", language: language)
|
|
}
|
|
}
|
|
}
|