UNPKG

@just-every/ensemble

Version:

LLM provider abstraction layer with unified streaming interface

68 lines 2.07 kB
export class SequentialQueue { queues = new Map(); processing = new Map(); async runSequential(agentId, fn) { return new Promise((resolve, reject) => { if (!this.queues.has(agentId)) { this.queues.set(agentId, []); this.processing.set(agentId, false); } const queue = this.queues.get(agentId); queue.push({ execute: fn, resolve, reject, }); if (!this.processing.get(agentId)) { this.processQueue(agentId); } }); } async processQueue(agentId) { const queue = this.queues.get(agentId); if (!queue || queue.length === 0) { this.processing.set(agentId, false); return; } this.processing.set(agentId, true); while (queue.length > 0) { const item = queue.shift(); try { const result = await item.execute(); item.resolve(result); } catch (error) { item.reject(error); } } this.processing.set(agentId, false); } getQueueSize(agentId) { const queue = this.queues.get(agentId); return queue ? queue.length : 0; } isProcessing(agentId) { return this.processing.get(agentId) || false; } clearQueue(agentId) { const queue = this.queues.get(agentId); if (queue) { queue.forEach(item => { item.reject(new Error('Queue cleared')); }); queue.length = 0; } } clearAll() { this.queues.forEach((queue, agentId) => { this.clearQueue(agentId); }); this.queues.clear(); this.processing.clear(); } } export const sequentialQueue = new SequentialQueue(); export async function runSequential(agentId, fn) { return sequentialQueue.runSequential(agentId, fn); } //# sourceMappingURL=sequential_queue.js.map