Download src/queue.js from pigracing/wq: direct link, hf CLI and curl.
- Browser
- Download file 1.13 kB
-
https://huggingface.co/spaces/pigracing/wq/resolve/main/src/queue.js
- Command line
-
hf download hf://spaces/pigracing/wq/src/queue.js
-
curl -L -o queue.js https://huggingface.co/spaces/pigracing/wq/resolve/main/src/queue.js
1.13 kB
| import { acquireToken } from './auth.js'; | |
| const MAX_QUEUE_SIZE = 100; | |
| const queue = []; | |
| export function enqueueRequest(timeoutMs = 30000) { | |
| return new Promise((resolve, reject) => { | |
| const timer = setTimeout(() => { | |
| const idx = queue.findIndex(e => e.resolve === resolve); | |
| if (idx !== -1) queue.splice(idx, 1); | |
| reject(new Error('Request timed out waiting for available token')); | |
| }, timeoutMs); | |
| const slot = acquireToken(); | |
| if (slot) { | |
| clearTimeout(timer); | |
| resolve(slot); | |
| return; | |
| } | |
| if (queue.length >= MAX_QUEUE_SIZE) { | |
| clearTimeout(timer); | |
| reject(new Error('Too many queued requests')); | |
| return; | |
| } | |
| queue.push({ resolve: (slot) => { clearTimeout(timer); resolve(slot); }, reject: (err) => { clearTimeout(timer); reject(err); } }); | |
| }); | |
| } | |
| export function dispatchQueued() { | |
| while (queue.length > 0) { | |
| const next = queue[0]; | |
| const slot = acquireToken(); | |
| if (!slot) break; | |
| queue.shift(); | |
| next.resolve(slot); | |
| } | |
| } | |
| export function getQueueInfo() { | |
| return { queued: queue.length, maxQueueSize: MAX_QUEUE_SIZE }; | |
| } | |