@@ -330,6 +330,10 @@ private struct MLXASRConfigurationSheetView: View {
330330 ) . language ?? AppLocalization . localizedString ( " Automatic " )
331331 }
332332
333+ private var senseVoiceSupportedLanguageSummary : String {
334+ AppLocalization . localizedString ( " Automatic, zh, en, yue, ja, ko " )
335+ }
336+
333337 var body : some View {
334338 VStack ( alignment: . leading, spacing: 14 ) {
335339 Text ( localized ( " MLX ASR Configuration " ) )
@@ -341,26 +345,28 @@ private struct MLXASRConfigurationSheetView: View {
341345 . font ( . subheadline)
342346 . foregroundStyle ( . secondary)
343347
344- VStack ( alignment: . leading, spacing: 8 ) {
345- Text ( localized ( " Preset " ) )
346- . font ( . subheadline. weight ( . medium) )
347- SettingsMenuPicker (
348- selection: Binding (
349- get: { tuningSettings. preset. rawValue } ,
350- set: { rawValue in
351- guard let preset = LocalASRRecognitionPreset ( rawValue: rawValue) else { return }
352- tuningSettings. preset = preset
353- }
354- ) ,
355- options: LocalASRRecognitionPreset . allCases. map {
356- SettingsMenuOption ( value: $0. rawValue, title: $0. title)
357- } ,
358- selectedTitle: tuningSettings. preset. title,
359- width: 220
360- )
361- Text ( tuningSettings. preset. summary)
362- . font ( . caption)
363- . foregroundStyle ( . secondary)
348+ if family. supportsRecognitionPreset {
349+ VStack ( alignment: . leading, spacing: 8 ) {
350+ Text ( localized ( " Preset " ) )
351+ . font ( . subheadline. weight ( . medium) )
352+ SettingsMenuPicker (
353+ selection: Binding (
354+ get: { tuningSettings. preset. rawValue } ,
355+ set: { rawValue in
356+ guard let preset = LocalASRRecognitionPreset ( rawValue: rawValue) else { return }
357+ tuningSettings. preset = preset
358+ }
359+ ) ,
360+ options: LocalASRRecognitionPreset . allCases. map {
361+ SettingsMenuOption ( value: $0. rawValue, title: $0. title)
362+ } ,
363+ selectedTitle: tuningSettings. preset. title,
364+ width: 220
365+ )
366+ Text ( tuningSettings. preset. summary)
367+ . font ( . caption)
368+ . foregroundStyle ( . secondary)
369+ }
364370 }
365371
366372 Toggle ( localized ( " Follow User Main Language " ) , isOn: $hintSettings. followsUserMainLanguage)
@@ -373,6 +379,16 @@ private struct MLXASRConfigurationSheetView: View {
373379
374380 localInfoRow ( label: localized ( " Other languages " ) , value: secondaryLanguageSummary)
375381
382+ if family == . senseVoice {
383+ localInfoRow (
384+ label: localized ( " Supported routes " ) ,
385+ value: senseVoiceSupportedLanguageSummary
386+ )
387+ Text ( localized ( " SenseVoice only accepts explicit language routing for zh, en, yue, ja, and ko here. Any other primary language falls back to Automatic. " ) )
388+ . font ( . caption)
389+ . foregroundStyle ( . secondary)
390+ }
391+
376392 if family. supportsContextBias {
377393 Text ( localized ( " Recognition Context " ) )
378394 . font ( . subheadline. weight ( . medium) )
@@ -406,6 +422,10 @@ private struct MLXASRConfigurationSheetView: View {
406422 Text ( localized ( " This model family only exposes preset and language controls. " ) )
407423 . font ( . caption)
408424 . foregroundStyle ( . secondary)
425+ } else if family == . senseVoice {
426+ Text ( localized ( " SenseVoice only exposes language routing and ITN here. Recognition presets are not used by this model path. " ) )
427+ . font ( . caption)
428+ . foregroundStyle ( . secondary)
409429 }
410430 }
411431 . frame ( maxWidth: . infinity, alignment: . topLeading)
0 commit comments