@maximai/maxim-js
Version:
Maxim AI JS SDK. Visit https://getmaxim.ai for more info.
134 lines • 5.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cliAsciiColors = void 0;
exports.buildErrorMessage = buildErrorMessage;
exports.calculatePollingInterval = calculatePollingInterval;
exports.getLocalEvaluatorNameToIdAndPassFailCriteriaMap = getLocalEvaluatorNameToIdAndPassFailCriteriaMap;
exports.createStatusTable = createStatusTable;
const utils_1 = require("../utils/utils");
function buildErrorMessage(error, isCause) {
let message = "";
if (!isCause)
message += "\n";
if (error instanceof Error) {
if (!isCause) {
message += `❌ ${error.message}:\n`;
}
else {
message += `\t\t=> ${error.message}\n`;
}
if (!isCause && error.stack) {
message += `\tStack: ${error.stack}\n`;
}
if (error.cause) {
if (!isCause) {
message += `\tCaused by:\n`;
}
message += buildErrorMessage(error.cause, true);
}
}
else {
message += `❌ ${JSON.stringify(error)}\n`;
}
if (!isCause)
message += "\n";
return message;
}
function calculatePollingInterval(timeoutMinutes, isAIEvaluatorInUse = false) {
const points = [
[10, 5],
[15, 5],
[30, 10],
[60, 15],
[120, 30],
[1440, 120],
];
let lowerPoint = points[0];
let upperPoint = points[points.length - 1];
for (let i = 0; i < points.length - 1; i++) {
if (timeoutMinutes >= points[i][0] && timeoutMinutes <= points[i + 1][0]) {
lowerPoint = points[i];
upperPoint = points[i + 1];
break;
}
}
const [x1, y1] = lowerPoint;
const [x2, y2] = upperPoint;
if (x1 === x2)
return y1;
const t = (timeoutMinutes - x1) / (x2 - x1);
const p = 2;
const interpolatedValue = y1 + (y2 - y1) * Math.pow(t, p);
return Math.min(Math.max(Math.round(interpolatedValue), isAIEvaluatorInUse ? 15 : 5), 120);
}
function getLocalEvaluatorNameToIdAndPassFailCriteriaMap(evaluators) {
const allEvalNames = new Set(evaluators
.filter((e) => typeof e !== "string")
.map((evaluator) => ("names" in evaluator ? evaluator.names : [evaluator.name]))
.flat());
const allPassFailCriteria = evaluators
.filter((e) => typeof e !== "string")
.reduce((acc, evaluator) => {
if ("names" in evaluator) {
return Object.assign(acc, evaluator.passFailCriteria);
}
else {
acc[evaluator.name] = evaluator.passFailCriteria;
return acc;
}
}, {});
const nameToIdAndPassFailCriteriaMap = new Map();
allEvalNames.forEach((evalName) => {
nameToIdAndPassFailCriteriaMap.set(evalName, { id: (0, utils_1.generateCuid)(), passFailCriteria: allPassFailCriteria[evalName] });
});
return nameToIdAndPassFailCriteriaMap;
}
exports.cliAsciiColors = {
reset: "\x1b[0m",
red: "\x1b[31m",
green: "\x1b[32m",
yellow: "\x1b[33m",
blue: "\x1b[34m",
magenta: "\x1b[35m",
cyan: "\x1b[36m",
brightRed: "\x1b[91m",
brightGreen: "\x1b[92m",
brightYellow: "\x1b[93m",
brightBlue: "\x1b[94m",
bold: "\x1b[1m",
dim: "\x1b[2m",
};
function createStatusTable(data) {
const statusConfig = {
running: { emoji: "🟢", color: exports.cliAsciiColors.brightGreen },
queued: { emoji: "⏳", color: exports.cliAsciiColors.brightYellow },
completed: { emoji: "✅", color: exports.cliAsciiColors.green },
failed: { emoji: "❌", color: exports.cliAsciiColors.brightRed },
stopped: { emoji: "✋", color: exports.cliAsciiColors.dim },
total: { emoji: "📊", color: exports.cliAsciiColors.brightBlue },
};
const maxKeyLength = Math.max(...Object.keys(data).map((key) => key.length));
const NUMBER_WIDTH = 5;
const borderChars = {
topLeft: "╭",
topRight: "╮",
bottomLeft: "╰",
bottomRight: "╯",
horizontal: "─",
vertical: "│",
};
const contentWidth = maxKeyLength + NUMBER_WIDTH + 7;
const totalWidth = contentWidth;
const header = `${borderChars.topLeft}${borderChars.horizontal.repeat(totalWidth)}${borderChars.topRight}`;
const footer = `${borderChars.bottomLeft}${borderChars.horizontal.repeat(totalWidth)}${borderChars.bottomRight}`;
const rows = Object.entries(data)
.map(([key, value]) => {
const config = statusConfig[key] || { emoji: "•", color: exports.cliAsciiColors.dim };
const paddedKey = key.padEnd(maxKeyLength);
const paddedValue = value.toString().padStart(NUMBER_WIDTH);
return `${borderChars.vertical} ${config.emoji} ${config.color}${exports.cliAsciiColors.bold}${paddedKey}${exports.cliAsciiColors.reset} ${exports.cliAsciiColors.brightBlue}${paddedValue}${exports.cliAsciiColors.reset} ${borderChars.vertical}`;
})
.join("\n");
return `${header}\n${rows}\n${footer}`;
}
//# sourceMappingURL=utils.js.map