Track ONNX WebAssembly asset downloads
Build and publish frontend / publish (push) Failing after 3s

This commit is contained in:
Ein Anderssono
2026-10-16 08:44:38 +02:00
parent 8e7c74bb41
commit 04bac2ba30
6 changed files with 78 additions and 20 deletions
+17 -7
View File
@@ -1,5 +1,5 @@
import {TtsSession} from '@mintplex-labs/piper-tts-web';
import {trackModelDownload} from './piper-download-progress.mjs';
import {trackDownloadProgress} from './piper-download-progress.mjs';
import {localPiperModelUrl} from './piper-model-routing.mjs';
import {createOnnxWasmPaths} from './piper-onnx-config.mjs';
@@ -7,8 +7,8 @@ const VOICE_ID = 'sv_SE-nst-medium';
const ASSET_ROOT = '/static/piper-wasm-v1';
const localFetch = self.fetch.bind(self);
function reportStage(id, stage) {
if (Number.isSafeInteger(id)) self.postMessage({id, type: 'progress', progress: {stage}});
function reportStage(id, stage, details = {}) {
if (Number.isSafeInteger(id)) self.postMessage({id, type: 'progress', progress: {stage, ...details}});
}
// Keep the TTS library's OPFS cache logic, but serve models/config from the
@@ -17,10 +17,20 @@ self.fetch = async (resource, options) => {
const requestedUrl = resource instanceof Request ? resource.url : String(resource);
const localModelUrl = localPiperModelUrl(requestedUrl, self.location.origin);
if (!localModelUrl) {
if (activeRequestId && requestedUrl.includes('/static/piper-wasm-v1/onnx/')) {
reportStage(activeRequestId, 'loading-runtime-assets');
const runtimeAsset = requestedUrl.includes('/static/piper-wasm-v1/onnx/');
const runtimeFile = runtimeAsset ? new URL(requestedUrl, self.location.origin).pathname.split('/').pop() : undefined;
if (activeRequestId && runtimeAsset) {
reportStage(activeRequestId, 'loading-runtime-assets', {file: runtimeFile});
}
return localFetch(resource, options);
const response = await localFetch(resource, options);
if (!activeRequestId || !runtimeAsset) return response;
reportStage(activeRequestId, 'reading-runtime-assets', {file: runtimeFile});
return trackDownloadProgress(response, {
id: activeRequestId,
asset: 'runtime',
file: runtimeFile,
postMessage: message => self.postMessage(message),
});
}
const isModel = localModelUrl.endsWith('.onnx');
if (activeRequestId) reportStage(activeRequestId, isModel ? 'loading-model' : 'loading-model-info');
@@ -28,7 +38,7 @@ self.fetch = async (resource, options) => {
const response = await localFetch(redirected, options);
if (!activeRequestId || !isModel) return response;
reportStage(activeRequestId, 'reading-model');
return trackModelDownload(response, {
return trackDownloadProgress(response, {
id: activeRequestId,
postMessage: message => self.postMessage(message),
});