@@ -22,6 +22,7 @@ pub enum TranscriptionModelId {
2222 ParakeetV3 ,
2323 WhisperLargeV3Turbo ,
2424 Qwen3Asr06B ,
25+ ArkAsr06B ,
2526 SenseVoiceSmall ,
2627 CohereTranscribe ,
2728 AppleSpeech ,
@@ -35,6 +36,7 @@ impl TranscriptionModelId {
3536 Self :: ParakeetV3 => "parakeet_v3" ,
3637 Self :: WhisperLargeV3Turbo => "whisper_large_v3_turbo" ,
3738 Self :: Qwen3Asr06B => "qwen3_asr06_b" ,
39+ Self :: ArkAsr06B => "ark_asr06_b" ,
3840 Self :: SenseVoiceSmall => "sense_voice_small" ,
3941 Self :: CohereTranscribe => "cohere_transcribe" ,
4042 Self :: AppleSpeech => "apple_speech" ,
@@ -52,6 +54,7 @@ impl FromStr for TranscriptionModelId {
5254 "parakeet_v3" => Ok ( Self :: ParakeetV3 ) ,
5355 "whisper_large_v3_turbo" => Ok ( Self :: WhisperLargeV3Turbo ) ,
5456 "qwen3_asr06_b" => Ok ( Self :: Qwen3Asr06B ) ,
57+ "ark_asr06_b" => Ok ( Self :: ArkAsr06B ) ,
5558 "sense_voice_small" => Ok ( Self :: SenseVoiceSmall ) ,
5659 "cohere_transcribe" => Ok ( Self :: CohereTranscribe ) ,
5760 "apple_speech" => Ok ( Self :: AppleSpeech ) ,
@@ -110,6 +113,7 @@ impl Default for TranscriptionSelection {
110113
111114#[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
112115pub enum Recommendation {
116+ Alternative ,
113117 Recommended ,
114118 Fastest ,
115119 MostAccurate ,
@@ -119,6 +123,7 @@ pub enum Recommendation {
119123impl Recommendation {
120124 pub const fn label ( self ) -> & ' static str {
121125 match self {
126+ Self :: Alternative => "Alternative" ,
122127 Self :: Recommended => "Recommended" ,
123128 Self :: Fastest => "Fastest" ,
124129 Self :: MostAccurate => "Most accurate" ,
@@ -303,6 +308,20 @@ const COHERE_ARTIFACT: GgufArtifact = GgufArtifact {
303308 variant : "cohere-transcribe-03-2026" ,
304309} ;
305310
311+ const ARK_LANGUAGES : & [ & str ] = & [
312+ "zh" , "en" , "de" , "ja" , "fr" , "ko" , "es" , "pl" , "it" , "ro" , "hu" , "cs" , "nl" , "fi" , "hr" , "sk" ,
313+ "sl" , "et" , "lt" ,
314+ ] ;
315+ const ARK_ARTIFACT : GgufArtifact = GgufArtifact {
316+ filename : "ark-asr-0.6b-Q8_0.gguf" ,
317+ revision : "aa2af66f16bb8f04c2da550ce07880e0c3a7e7d4" ,
318+ repository : "maxffarrell/ARK-ASR-0.6B-GGUF" ,
319+ bytes : 1_372_881_664 ,
320+ sha256 : "ceca6bacd9cab3b52892de6703562aeeb62dc8a4b14aab0b020706637dd127dc" ,
321+ architecture : "arkasr" ,
322+ variant : "ark-asr-0.6b" ,
323+ } ;
324+
306325pub const MODELS : & [ ModelDefinition ] = & [
307326 ModelDefinition {
308327 id : TranscriptionModelId :: ParakeetUnifiedEnglish ,
@@ -380,6 +399,21 @@ pub const MODELS: &[ModelDefinition] = &[
380399 supports_language_detection : true ,
381400 supports_recognition_hints : false ,
382401 } ,
402+ ModelDefinition {
403+ id : TranscriptionModelId :: ArkAsr06B ,
404+ name : "ARK-ASR 0.6B" ,
405+ realtime : "Unmeasured" ,
406+ realtime_context : "no dictation benchmark" ,
407+ quality : "1.87%" ,
408+ quality_context : "upstream LibriSpeech clean WER" ,
409+ coverage : "19 languages · automatic detection" ,
410+ timestamps : "No timestamps" ,
411+ runtime : ModelRuntime :: Gguf ( & ARK_ARTIFACT ) ,
412+ languages : ARK_LANGUAGES ,
413+ accepts_language_hint : false ,
414+ supports_language_detection : true ,
415+ supports_recognition_hints : false ,
416+ } ,
383417 ModelDefinition {
384418 id : TranscriptionModelId :: SenseVoiceSmall ,
385419 name : "SenseVoice Small" ,
@@ -491,7 +525,7 @@ pub(crate) fn choices_for_runtime(language: &str) -> Vec<ModelChoice> {
491525 model : definition ( id) ,
492526 recommendation,
493527 } ;
494- match language {
528+ let mut choices = match language {
495529 AUTO_LANGUAGE => vec ! [
496530 choice(
497531 TranscriptionModelId :: WhisperLargeV3Turbo ,
@@ -558,7 +592,14 @@ pub(crate) fn choices_for_runtime(language: &str) -> Vec<ModelChoice> {
558592 TranscriptionModelId :: WhisperLargeV3Turbo ,
559593 Recommendation :: Recommended ,
560594 ) ] ,
595+ } ;
596+ if definition ( TranscriptionModelId :: ArkAsr06B ) . supports_language ( language) {
597+ choices. push ( choice (
598+ TranscriptionModelId :: ArkAsr06B ,
599+ Recommendation :: Alternative ,
600+ ) ) ;
561601 }
602+ choices
562603}
563604
564605pub fn validate ( selection : & TranscriptionSelection ) -> Result < & ' static ModelDefinition > {
@@ -1025,6 +1066,7 @@ mod tests {
10251066 "whisper_large_v3_turbo" ,
10261067 ) ,
10271068 ( TranscriptionModelId :: Qwen3Asr06B , "qwen3_asr06_b" ) ,
1069+ ( TranscriptionModelId :: ArkAsr06B , "ark_asr06_b" ) ,
10281070 ( TranscriptionModelId :: SenseVoiceSmall , "sense_voice_small" ) ,
10291071 ( TranscriptionModelId :: CohereTranscribe , "cohere_transcribe" ) ,
10301072 ( TranscriptionModelId :: AppleSpeech , "apple_speech" ) ,
@@ -1036,6 +1078,49 @@ mod tests {
10361078 assert ! ( "unknown" . parse:: <TranscriptionModelId >( ) . is_err( ) ) ;
10371079 }
10381080
1081+ #[ test]
1082+ fn ark_choices_use_detection_without_claiming_language_steering ( ) {
1083+ let ark = definition ( TranscriptionModelId :: ArkAsr06B ) ;
1084+ for language in ARK_LANGUAGES . iter ( ) . copied ( ) . chain ( [ AUTO_LANGUAGE ] ) {
1085+ assert ! (
1086+ validate( & TranscriptionSelection {
1087+ model: ark. id,
1088+ language: language. into( ) ,
1089+ recognition_hints: String :: new( ) ,
1090+ } )
1091+ . is_ok( )
1092+ ) ;
1093+ assert_eq ! ( ark. runtime_language_hint( language) , None ) ;
1094+ assert_eq ! (
1095+ choices_for_runtime( language) . last( ) . unwrap( ) . model. id,
1096+ ark. id
1097+ ) ;
1098+ }
1099+ for language in [ "yue" , "pt" , "ru" , "ar" ] {
1100+ assert ! (
1101+ validate( & TranscriptionSelection {
1102+ model: ark. id,
1103+ language: language. into( ) ,
1104+ recognition_hints: String :: new( ) ,
1105+ } )
1106+ . is_err( )
1107+ ) ;
1108+ assert ! (
1109+ choices_for_runtime( language)
1110+ . iter( )
1111+ . all( |choice| choice. model. id != ark. id)
1112+ ) ;
1113+ }
1114+ assert ! (
1115+ validate( & TranscriptionSelection {
1116+ model: ark. id,
1117+ language: AUTO_LANGUAGE . into( ) ,
1118+ recognition_hints: "preferred spelling" . into( ) ,
1119+ } )
1120+ . is_err( )
1121+ ) ;
1122+ }
1123+
10391124 #[ test]
10401125 fn apple_speech_is_retained_only_for_persisted_selection_migration ( ) {
10411126 assert ! (
0 commit comments