You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Surfaced while verifying #898 on the public #855 clip 01-validation-request-21.4s.wav (Tests/FluidAudioTests/ASR/Parakeet/SlidingWindow/Fixtures) with the vocabulary terms Codex, follow-up. Pre-existing: reproduces on main before #898.
The sliding-window streaming rescorer replaces an unrelated short word with the term through the spotter-rescue path at near-zero string similarity. Which word depends on the machine's decode, so this is not tied to "Hey":
M5 Pro (local, GPU/ANE): Hey → Codex at the start of window 1.
'validate' vs 'Codex' (sim=0.12, span=1)
-> REPLACE (vocab > original)
[SPOTTER-RESCUE] 'validate' → 'Codex' spotter=-7.77, sim=0.12
Final: Hey, before we go ... can you do me a favor and Codex
and [MULTI] 'Hey, before' vs 'Codex' (sim=0.10) / 'to test with,' vs 'Codex' (sim=0.17) were considered.
In every case the real "codex" later in the sentence is left unchanged and batch decode keeps the original words. The streaming path uses VocabularyRescorer.Config.default; the unified path uses VocabularyBoostingSession.itnDefaultConfig (#702 floors 0.30 / 0.50) precisely to stop short-word rescue over-fire, and #862 recorded the same "rescue-floor WER tax" on the TDT path (recall up, WER 15.70 → 22.25 on .default).
(b) Gate the rescue on the spotter detection's time range. Detections already map to overlapping word timestamps, but VocabularyRescorer+TokenRescoring falls back to the nearest word to the detection centre when no word overlaps, unconditionally — that is how a detection at ~9 s can land on Hey at 0.2 s or validate. Bound the fallback (e.g. within one word / marginSeconds) and log the detection interval so the trace shows which path fired.
Also: the CLI's streaming path drops the rescue-floor flags (--vocab-spotter-min-sim, --vocab-spotter-min-sim-multi, --vocab-disable-spotter-rescue); only batch builds a VocabularyRescorer.Config from them. Pass them through runStreaming so the floors can be A/B'd from the CLI.
Regression guard once fixed: extend SlidingWindowVocabularyBoostingStreamingTests to assert the transcript still starts with "hey" and keeps "validate your findings with codex". Note that test currently cannot prove the rescorer acted (CI's decode already produced "follow-up" with zero replacements), so exposing spotter detections in ctcDetectedTerms even when no replacement is applied would give it something machine-independent to assert.
Surfaced while verifying #898 on the public #855 clip
01-validation-request-21.4s.wav(Tests/FluidAudioTests/ASR/Parakeet/SlidingWindow/Fixtures) with the vocabulary termsCodex,follow-up. Pre-existing: reproduces onmainbefore #898.The sliding-window streaming rescorer replaces an unrelated short word with the term through the spotter-rescue path at near-zero string similarity. Which word depends on the machine's decode, so this is not tied to "Hey":
Hey→Codexat the start of window 1.[MULTI] 'Hey, before' vs 'Codex' (sim=0.10)/'to test with,' vs 'Codex' (sim=0.17)were considered.In every case the real "codex" later in the sentence is left unchanged and batch decode keeps the original words. The streaming path uses
VocabularyRescorer.Config.default; the unified path usesVocabularyBoostingSession.itnDefaultConfig(#702 floors 0.30 / 0.50) precisely to stop short-word rescue over-fire, and #862 recorded the same "rescue-floor WER tax" on the TDT path (recall up, WER 15.70 → 22.25 on.default).Candidates:
.defaultwas kept on this path for brand-name recall.VocabularyRescorer+TokenRescoringfalls back to the nearest word to the detection centre when no word overlaps, unconditionally — that is how a detection at ~9 s can land onHeyat 0.2 s orvalidate. Bound the fallback (e.g. within one word /marginSeconds) and log the detection interval so the trace shows which path fired.--vocab-spotter-min-sim,--vocab-spotter-min-sim-multi,--vocab-disable-spotter-rescue); only batch builds aVocabularyRescorer.Configfrom them. Pass them throughrunStreamingso the floors can be A/B'd from the CLI.Regression guard once fixed: extend
SlidingWindowVocabularyBoostingStreamingTeststo assert the transcript still starts with "hey" and keeps "validate your findings with codex". Note that test currently cannot prove the rescorer acted (CI's decode already produced "follow-up" with zero replacements), so exposing spotter detections inctcDetectedTermseven when no replacement is applied would give it something machine-independent to assert.