hugbot
Version:
Chatbot maker for HuggingFace Inference API and other AI API providers and backends.
92 lines • 5.27 kB
JavaScript
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _IObuffer_instances, _a, _IObuffer_queue, _IObuffer_callStack, _IObuffer_bot, _IObuffer_processing, _IObuffer_delay, _IObuffer_process, _IObuffer_sleep, _IObuffer_rnd;
import { FCFSqueue } from "./FCFS_queue";
/**
* This is used for async user message processing.
* The bot instance is injected in constructor/with set method in the builder function and its
* respondTo method is used to process the queued messages one by one with sleep intervals
* set with rateLimit property.
* Add event listeners with onResponse methods then push messages to the queue with pushMessage method.
*/
export class IObuffer {
constructor(rateLimit = 5000, bot) {
_IObuffer_instances.add(this);
_IObuffer_queue.set(this, new FCFSqueue());
_IObuffer_callStack.set(this, new Map());
_IObuffer_bot.set(this, null);
_IObuffer_processing.set(this, false);
_IObuffer_delay.set(this, void 0);
__classPrivateFieldSet(this, _IObuffer_delay, rateLimit, "f");
if (bot) {
__classPrivateFieldSet(this, _IObuffer_bot, bot, "f");
}
}
set setBot(bot) {
__classPrivateFieldSet(this, _IObuffer_bot, bot, "f");
}
onResponse(...cb) {
cb.forEach(cb => __classPrivateFieldGet(this, _IObuffer_callStack, "f").set(cb.name, cb));
}
removeEventListener(name) {
if (name === "all") {
__classPrivateFieldGet(this, _IObuffer_callStack, "f").clear();
}
else if (__classPrivateFieldGet(this, _IObuffer_callStack, "f").has(name)) {
__classPrivateFieldGet(this, _IObuffer_callStack, "f").delete(name);
}
}
pushMessage(msg) {
__classPrivateFieldGet(this, _IObuffer_queue, "f").push(msg);
if (!__classPrivateFieldGet(this, _IObuffer_processing, "f")) {
__classPrivateFieldSet(this, _IObuffer_processing, true, "f");
setTimeout(() => __classPrivateFieldGet(this, _IObuffer_instances, "m", _IObuffer_process).call(this), 0);
}
}
}
_a = IObuffer, _IObuffer_queue = new WeakMap(), _IObuffer_callStack = new WeakMap(), _IObuffer_bot = new WeakMap(), _IObuffer_processing = new WeakMap(), _IObuffer_delay = new WeakMap(), _IObuffer_instances = new WeakSet(), _IObuffer_process = async function _IObuffer_process() {
const t1 = performance.now();
__classPrivateFieldSet(this, _IObuffer_processing, true, "f");
if (__classPrivateFieldGet(this, _IObuffer_queue, "f").len <= 0) {
__classPrivateFieldSet(this, _IObuffer_processing, false, "f");
return;
}
else if (!__classPrivateFieldGet(this, _IObuffer_bot, "f") || !__classPrivateFieldGet(this, _IObuffer_bot, "f").respondTo) {
console.error("IOBuffer: Can't access HugBot instance.");
__classPrivateFieldSet(this, _IObuffer_processing, false, "f");
return;
}
else {
try {
const msg = __classPrivateFieldGet(this, _IObuffer_queue, "f").popLeft();
if (msg) {
const res = await __classPrivateFieldGet(this, _IObuffer_bot, "f").respondTo(__classPrivateFieldGet(this, _IObuffer_bot, "f"), msg);
__classPrivateFieldGet(this, _IObuffer_callStack, "f").forEach(cb => cb(res));
}
}
catch (what) {
console.error(what);
}
}
const t2 = performance.now();
const deltaT = t2 - t1;
if (deltaT < __classPrivateFieldGet(this, _IObuffer_delay, "f")) {
await __classPrivateFieldGet(_a, _a, "m", _IObuffer_sleep).call(_a, __classPrivateFieldGet(this, _IObuffer_delay, "f") - deltaT);
}
__classPrivateFieldSet(this, _IObuffer_delay, __classPrivateFieldGet(_a, _a, "m", _IObuffer_rnd).call(_a, __classPrivateFieldGet(this, _IObuffer_delay, "f") / 1.2, __classPrivateFieldGet(this, _IObuffer_delay, "f")), "f");
__classPrivateFieldGet(this, _IObuffer_instances, "m", _IObuffer_process).call(this);
}, _IObuffer_sleep = function _IObuffer_sleep(ms) {
return new Promise((res) => setTimeout(res, ms));
}, _IObuffer_rnd = function _IObuffer_rnd(min, max) {
return Math.floor(Math.random() * (max - min) + min);
};
//# sourceMappingURL=IObuffer.js.map