mongodb-chatbot-server
Version:
A chatbot server for retrieval augmented generation (RAG).
60 lines • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.retryAsyncOperation = exports.sendErrorResponse = exports.logRequest = exports.getRequestId = void 0;
const mongodb_rag_core_1 = require("mongodb-rag-core");
const common_tags_1 = require("common-tags");
/**
Checks for req-id Request Header. Returns an empty string if the header is not
a truthy string.
@param req
*/
function getRequestId(req) {
const reqId = req.header("req-id");
if (!reqId) {
return "";
}
return reqId;
}
exports.getRequestId = getRequestId;
const logRequest = ({ reqId, message, type = "info", }) => {
mongodb_rag_core_1.logger[type]({ reqId, message });
};
exports.logRequest = logRequest;
const sendErrorResponse = ({ reqId, res, httpStatus, errorMessage, errorDetails, }) => {
(0, exports.logRequest)({
reqId,
type: "error",
message: (0, common_tags_1.stripIndent) `Responding with ${httpStatus} status and error message: ${errorMessage}.
${errorDetails ? `Error details: ${errorDetails}` : ""}`,
});
if (!res.writableEnded) {
return res.status(httpStatus).json({ error: errorMessage });
}
};
exports.sendErrorResponse = sendErrorResponse;
function retryAsyncOperation(promise, retries = 4, delayMs = 3000) {
return new Promise((resolve, reject) => {
const operation = promise;
const timeout = new Promise((_, rejectTimeout) => {
setTimeout(() => {
rejectTimeout(new Error("Timed out"));
}, delayMs);
});
Promise.race([operation, timeout])
.then((result) => {
resolve(result);
})
.catch((error) => {
if (retries === 0) {
reject(error);
}
else {
console.log(`Retrying... ${retries} attempts left`);
console.log(promise);
resolve(retryAsyncOperation(promise, retries - 1, delayMs));
}
});
});
}
exports.retryAsyncOperation = retryAsyncOperation;
//# sourceMappingURL=utils.js.map