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:
1 parent
4e33e7d84c
commit
40709b257d
2 files changed
+13
-7
No files matched your search
@@ -76,7 +76,8 @@ fn resolve_language(requested: Option<&str>, multilingual: bool) -> Option<Strin
|
|||||||
match requested {
|
match requested {
|
||||||
None => None,
|
None => None,
|
||||||
Some(l) if l.eq_ignore_ascii_case("auto") => 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!(
|
tracing::warn!(
|
||||||
"language '{l}' requested but the loaded model is English-only; forcing 'en'"
|
"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
|
_ => BackendId::Intel, // use_gpu = true for any non-CPU backend
|
||||||
};
|
};
|
||||||
let t0 = std::time::Instant::now();
|
let t0 = std::time::Instant::now();
|
||||||
let transcriber =
|
let transcriber = WhisperTranscriber::load(Path::new(&model), backend, None).expect("load");
|
||||||
WhisperTranscriber::load(Path::new(&model), backend, None).expect("load");
|
|
||||||
let load_ms = t0.elapsed().as_millis();
|
let load_ms = t0.elapsed().as_millis();
|
||||||
let t1 = std::time::Instant::now();
|
let t1 = std::time::Instant::now();
|
||||||
let segments = transcriber
|
let segments = transcriber
|
||||||
@@ -474,7 +474,10 @@ mod tests {
|
|||||||
eprintln!("[spike] language={language} text={text:?}");
|
eprintln!("[spike] language={language} text={text:?}");
|
||||||
assert!(!text.trim().is_empty(), "transcript was empty");
|
assert!(!text.trim().is_empty(), "transcript was empty");
|
||||||
// whisper.cpp reports back whichever language it actually decoded in.
|
// 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
|
/// "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)
|
let transcriber = WhisperTranscriber::load(Path::new(&model), BackendId::Cpu, None)
|
||||||
.expect("load multilingual model");
|
.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");
|
assert_eq!(transcriber.detected_language(), None, "nothing decoded yet");
|
||||||
|
|
||||||
transcriber
|
transcriber
|
||||||
|
|||||||
@@ -524,8 +524,7 @@ mod tests {
|
|||||||
_ => BackendId::Intel,
|
_ => BackendId::Intel,
|
||||||
};
|
};
|
||||||
let t0 = std::time::Instant::now();
|
let t0 = std::time::Instant::now();
|
||||||
let t =
|
let t = OnnxTranscriber::load(Path::new(&model_dir), backend, None).expect("load DirectML");
|
||||||
OnnxTranscriber::load(Path::new(&model_dir), backend, None).expect("load DirectML");
|
|
||||||
let load_ms = t0.elapsed().as_millis();
|
let load_ms = t0.elapsed().as_millis();
|
||||||
let t1 = std::time::Instant::now();
|
let t1 = std::time::Instant::now();
|
||||||
let segs = t.transcribe_file(Path::new(&wav)).expect("transcribe");
|
let segs = t.transcribe_file(Path::new(&wav)).expect("transcribe");
|
||||||
|
|||||||
Reference in new issue
Block a user