Track Piper model bytes in the worker
Build and publish frontend / publish (push) Successful in 47s

This commit is contained in:
Ein Anderssono
2026-10-16 08:02:17 +02:00
parent ab574acd39
commit 7f77b904ac
6 changed files with 95 additions and 8 deletions
+33
View File
@@ -0,0 +1,33 @@
const assert = require('node:assert/strict');
const test = require('node:test');
test('model response progress forwards each downloaded chunk and preserves the response', async () => {
const {trackModelDownload} = await import('../piper-download-progress.mjs');
const source = new ReadableStream({
start(controller) {
controller.enqueue(new Uint8Array([1, 2]));
controller.enqueue(new Uint8Array([3, 4, 5]));
controller.close();
},
});
const response = new Response(source, {headers: {'content-length': '5'}});
const messages = [];
const tracked = trackModelDownload(response, {id: 7, postMessage: message => messages.push(message)});
assert.deepEqual([...new Uint8Array(await tracked.arrayBuffer())], [1, 2, 3, 4, 5]);
assert.deepEqual(messages.map(message => message.progress), [
{loaded: 2, total: 5},
{loaded: 5, total: 5},
]);
assert.ok(messages.every(message => message.id === 7 && message.type === 'progress'));
});
test('model response progress works when content length is absent', async () => {
const {trackModelDownload} = await import('../piper-download-progress.mjs');
const source = new Response(new Uint8Array([1, 2, 3]));
const messages = [];
const tracked = trackModelDownload(source, {id: 9, postMessage: message => messages.push(message)});
assert.equal((await tracked.arrayBuffer()).byteLength, 3);
assert.deepEqual(messages.map(message => message.progress), [{loaded: 3, total: 0}]);
});