Reza2kn commited on
Commit
a821180
·
verified ·
1 Parent(s): 96f08e1

Encoder: try INT8 first, auto-fallback to INT4 if ConvInteger unsupported in browser

Browse files
Files changed (1) hide show
  1. mega-asr.js +18 -8
mega-asr.js CHANGED
@@ -234,14 +234,24 @@ async function loadAll() {
234
  setProgress(30);
235
 
236
  // 3. ONNX sessions
237
- // INT8 audio encoder + INT4 decoders gives the best size/quality tradeoff
238
- // (91.9% vs 87.8% INT4-only on VITW). Encoder is single-file (no .data sidecar).
239
- setLoaderStatus("audio encoder INT8 (~320 MB)...");
240
- state.encoder = await createSessionSimple(
241
- `${HF_ROOT}/onnx/audio_encoder_int8.onnx`,
242
- "audio_encoder INT8",
243
- p => setProgress(30 + p * 10),
244
- );
 
 
 
 
 
 
 
 
 
 
245
  setProgress(40);
246
 
247
  setLoaderStatus("decoder prefill (~970 MB)...");
 
234
  setProgress(30);
235
 
236
  // 3. ONNX sessions
237
+ // Try INT8 encoder first (highest quality in browser); fall back to INT4
238
+ // encoder if the browser ORT lacks the ConvInteger op (which it does in
239
+ // both WebGPU and WASM backends as of 1.20).
240
+ setLoaderStatus("audio encoder (INT8 INT4 fallback) ...");
241
+ let encLabel = "audio_encoder INT8";
242
+ let encUrl = `${HF_ROOT}/onnx/audio_encoder_int8.onnx`;
243
+ try {
244
+ state.encoder = await createSessionSimple(encUrl, encLabel, p => setProgress(30 + p * 10));
245
+ } catch (e) {
246
+ log(`INT8 encoder unsupported in browser (${e.message}); falling back to INT4 + sidecar`);
247
+ encLabel = "audio_encoder INT4";
248
+ state.encoder = await createSession(
249
+ `${HF_ROOT}/onnx/audio_encoder_int4.onnx`,
250
+ `${HF_ROOT}/onnx/audio_encoder_int4.onnx.data`,
251
+ encLabel,
252
+ p => setProgress(30 + p * 10),
253
+ );
254
+ }
255
  setProgress(40);
256
 
257
  setLoaderStatus("decoder prefill (~970 MB)...");