Measured with the ort-web-under-Bun harness: no reliable speed difference on
clean, language-matched audio. On out-of-distribution audio (wrong/undetected
language), the multilingual model's extra forced task token measurably
changes how long its repetition-loop hallucination runs before EOS (434 vs 67
tokens on the da_festuge fixture), which is where the reported slowness comes
from. Both models resolve to identical, merged, KV-cache-enabled decoders at
the same dtype — no catalog/config fix applies here. Documents the mechanism
and flags a future no_repeat_ngram_size/repetition_penalty mitigation as the
actionable follow-up if this recurs.
startLive()'s browser-engine branch flipped liveStatus to "listening" (the
red live-dot, "Listening..." hint) the instant the mic was granted, even if
the Whisper pipeline was still loading — the user saw an active-looking
session while nothing was being transcribed yet. transcribeLiveSegment()
already correctly awaits the model-ready gate before posting a segment, so
this was purely a misleading-status bug.
Adds a "loading-model" LiveStatus between "starting" and "listening";
startLive() now waits on the same browserModelReady() gate the transcribe
path uses before claiming "listening", with race-safe cleanup if the load
fails while waiting. Server-engine live is unaffected.
Adds Decisions.md D-034; updates tests/live.md's manual verification steps.
Transformers.js's progress_callback always fires status:"download" regardless
of whether the file is actually served from the Cache API — there's no
cacheHit signal for the worker to forward. Since App.tsx already tracks which
models are downloaded (for ModelPicker's badges), it now checks that before
starting a load and threads a loadedFromCache flag into ModelLoadProgress, so
the heading/hint reflect reality for the common already-cached case.
Adds Decisions.md D-033.
- Fix: index.html <link> hrefs must be relative for Bun's HTML loader
(absolute URLs failed the build and dev serve); ensureIcons() now runs
before bundling in both scripts/build.ts and src/index.ts
- tests/offline.md: manual airplane-mode verification procedure
- WorkBreakdown: M3 checked ([~] on the manual browser run), M4 all done
with notes; M5 retargeted to faster-whisper sidecar
- Architecture/CLAUDE.md/Decisions: server engine = faster-whisper
(CTranslate2 Python sidecar, D-013); browser stays Transformers.js
(no WASM build of CTranslate2 exists)
- bun test: 83 pass, tsc clean, production curl smoke-test green
Co-Authored-By: Claude Fable 5 <[email protected]>