fix(transcription): resolve_language normalizes case-insensitive "en" match (T8.7, M4.2)

resolve_language(Some("EN"), false) was passed through unchanged instead of
being normalized to lowercase "en" - the English-only-model guard only fired
when the requested language *differed* from English, not when it matched with
different casing. Also fixes cargo fmt drift in mod.rs/npu.rs left over from
the M4.2 worktree (stopped mid-verification per session instruction before
running fmt).
This commit is contained in:
iamdoubz committed 2026-07-07 13:59:55 -05:00
1 parent 4e33e7d84c
commit 40709b257d
2 files changed
+13 -7

No files matched your search

+12 -5
View File
@@ -76,7 +76,8 @@ fn resolve_language(requested: Option<&str>, multilingual: bool) -> Option<Strin
match requested {
None => None,
Some(l) if l.eq_ignore_ascii_case("auto") => None,
Some(l) if !multilingual && !l.eq_ignore_ascii_case("en") => {
Some(l) if l.eq_ignore_ascii_case("en") => Some("en".to_string()),
Some(l) if !multilingual => {
tracing::warn!(
"language '{l}' requested but the loaded model is English-only; forcing 'en'"
);
@@ -399,8 +400,7 @@ mod tests {
_ => BackendId::Intel, // use_gpu = true for any non-CPU backend
};
let t0 = std::time::Instant::now();
let transcriber =
WhisperTranscriber::load(Path::new(&model), backend, None).expect("load");
let transcriber = WhisperTranscriber::load(Path::new(&model), backend, None).expect("load");
let load_ms = t0.elapsed().as_millis();
let t1 = std::time::Instant::now();
let segments = transcriber
@@ -474,7 +474,10 @@ mod tests {
eprintln!("[spike] language={language} text={text:?}");
assert!(!text.trim().is_empty(), "transcript was empty");
// whisper.cpp reports back whichever language it actually decoded in.
assert_eq!(transcriber.detected_language().as_deref(), Some(language.as_str()));
assert_eq!(
transcriber.detected_language().as_deref(),
Some(language.as_str())
);
}
/// "Auto" acceptance spike (opt-in): confirms auto-detection actually
@@ -488,7 +491,11 @@ mod tests {
let transcriber = WhisperTranscriber::load(Path::new(&model), BackendId::Cpu, None)
.expect("load multilingual model");
assert_eq!(transcriber.effective_language(), None, "auto should stay unset");
assert_eq!(
transcriber.effective_language(),
None,
"auto should stay unset"
);
assert_eq!(transcriber.detected_language(), None, "nothing decoded yet");
transcriber
+1 -2
View File
@@ -524,8 +524,7 @@ mod tests {
_ => BackendId::Intel,
};
let t0 = std::time::Instant::now();
let t =
OnnxTranscriber::load(Path::new(&model_dir), backend, None).expect("load DirectML");
let t = OnnxTranscriber::load(Path::new(&model_dir), backend, None).expect("load DirectML");
let load_ms = t0.elapsed().as_millis();
let t1 = std::time::Instant::now();
let segs = t.transcribe_file(Path::new(&wav)).expect("transcribe");