Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| // place files you want to import through the `$lib` alias in this folder. | |
| interface BandwidthCallback { | |
| ( | |
| elapsedMs: number, | |
| loadedBytes: number, | |
| totalBytes: number, | |
| bytesPerSecond: number, | |
| done: boolean | |
| ): void; | |
| } | |
| export async function bandwidthTest( | |
| onProgress: BandwidthCallback, | |
| onLatency: (latency: number) => void | |
| ) { | |
| performance.setResourceTimingBufferSize(100); | |
| performance.clearResourceTimings(); | |
| // start timer | |
| const startTime = performance.now(); | |
| // const url = 'https://cdn-test-cloudfront.hf.co/140gb.safetensors'; | |
| const url = 'https://cdn-test-cloudfront.hf.co/15mb.json'; | |
| const response = await fetch(url); | |
| if (!response.ok) { | |
| throw new Error(`Network response was not ok: ${response.status}`); | |
| } | |
| // setTimeout(() => { | |
| // const entries = performance.getEntriesByType('resource'); | |
| // const resourceEntry = entries.find((e) => e.name === url); | |
| // if (!resourceEntry) { | |
| // return | |
| // } | |
| // console.log(resourceEntry); | |
| // const { requestStart, responseStart } = resourceEntry; | |
| // const latency = responseStart - requestStart; | |
| // onLatency(latency); | |
| // }, 2000); | |
| const latency = performance.now() - startTime; | |
| onLatency(latency); | |
| const contentLengthHeader = response.headers.get('Content-Length'); | |
| const totalBytes = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0; | |
| const reader = response.body.getReader(); | |
| let loadedBytes = 0; | |
| let lastTimestamp = performance.now(); | |
| let lastLoaded = 0; | |
| const REPORT_INTERVAL_MS = 500; | |
| onProgress(latency, loadedBytes, totalBytes, 0, false); | |
| let bytesPerSecond= 0; | |
| while (true) { | |
| const { done, value } = await reader.read(); | |
| if (done) { | |
| // stream is finished | |
| const elapsedMs = performance.now() - startTime; | |
| onProgress(elapsedMs, loadedBytes, totalBytes, bytesPerSecond, true); | |
| break; | |
| } | |
| // `value` is a Uint8Array for this chunk | |
| loadedBytes += value.byteLength; | |
| // Current time | |
| const now = performance.now(); | |
| const deltaMs = now - lastTimestamp; | |
| if (deltaMs >= REPORT_INTERVAL_MS) { | |
| // compute bytes downloaded since last report | |
| const deltaBytes = loadedBytes - lastLoaded; | |
| // convert ms to seconds | |
| const deltaSeconds = deltaMs / 1000; | |
| bytesPerSecond = deltaBytes / deltaSeconds; | |
| // Invoke callback | |
| const elapsedMs = performance.now() - startTime; | |
| onProgress(elapsedMs, loadedBytes, totalBytes, bytesPerSecond, false); | |
| // Reset our “last” markers | |
| lastLoaded = loadedBytes; | |
| lastTimestamp = now; | |
| } | |
| } | |
| } | |
| export async function counter(callback: BandwidthCallback) { | |
| // start timer | |
| const startTime = performance.now(); | |
| let counter = 0; | |
| // set a random value between 50 and 150 | |
| const interval = setInterval(() => { | |
| counter = Math.floor(Math.random() * 100) + 50; | |
| // Calculate elapsed time in milliseconds | |
| const elapsedMs = performance.now() - startTime; | |
| callback(elapsedMs, 100, 100, counter, false); | |
| }, 1000); | |
| // Stop the counter after 3600 seconds | |
| setTimeout(() => { | |
| clearInterval(interval); | |
| const elapsedMs = performance.now() - startTime; | |
| callback(elapsedMs, 100, 100, counter, true); | |
| }, 3600 * 1000); | |
| } | |