Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/just-cameron/letta-libre. A fork of libre chat for Letta.
Something went wrong. Try again.
1.4 kB · 58 lines
JavaScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859/** * A leaky bucket queue structure to manage API requests. * @type {{queue: Array, interval: NodeJS.Timer | null}} */const _LB = { queue: [], interval: null,};
/** * Interval in milliseconds to control the rate of API requests. * Adjust the interval according to your rate limit needs. */const _LB_INTERVAL_MS = Math.ceil(1000 / 60); // 60 req/s
/** * Executes the next function in the leaky bucket queue. * This function is called at regular intervals defined by _LB_INTERVAL_MS. */const _LB_EXEC_NEXT = async () => { if (_LB.queue.length === 0) { clearInterval(_LB.interval); _LB.interval = null; return; }
const next = _LB.queue.shift(); if (!next) { return; }
const { asyncFunc, args, callback } = next;
try { const data = await asyncFunc(...args); callback(null, data); } catch (e) { callback(e); }};
/** * Adds an async function call to the leaky bucket queue. * @param {Function} asyncFunc - The async function to be executed. * @param {Array} args - Arguments to pass to the async function. * @param {Function} callback - Callback function for handling the result or error. */function LB_QueueAsyncCall(asyncFunc, args, callback) { _LB.queue.push({ asyncFunc, args, callback });
if (_LB.interval === null) { _LB.interval = setInterval(_LB_EXEC_NEXT, _LB_INTERVAL_MS); }}
module.exports = { LB_QueueAsyncCall,};