@maximai/maxim-js
Version:
Maxim AI JS SDK. Visit https://getmaxim.ai for more info.
80 lines • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCustomEvaluator = createCustomEvaluator;
exports.createCustomCombinedEvaluatorsFor = createCustomCombinedEvaluatorsFor;
function createCustomEvaluator(name, evaluationFunction, passFailCriteria) {
if (!passFailCriteria) {
throw new Error(`Error while creating evaluator ${name}: passFailCriteria is required`);
}
sanitizePassFailCriteria(name, passFailCriteria);
return {
name,
evaluationFunction,
passFailCriteria,
};
}
function createCustomCombinedEvaluatorsFor(...names) {
return {
build: function (evaluationFunction, passFailCriteria) {
if (!passFailCriteria) {
throw new Error(`Error while creating combined evaluator with evaluators ${names.join(", ")}: passFailCriteria is required`);
}
const missingPassFailCriteriaNames = Object.keys(passFailCriteria).filter((evaluatorName) => {
if (!names.includes(evaluatorName)) {
return true;
}
return false;
});
if (missingPassFailCriteriaNames.length > 0) {
throw new Error(`Error while creating combined evaluator with evaluators ${names.join(", ")}: criteria has evaluator names ${missingPassFailCriteriaNames.join(", ")} which are not in the names array`);
}
const invalidPassFailCriteriaErrors = [];
Object.entries(passFailCriteria).forEach(([evaluatorName, criteria]) => {
try {
sanitizePassFailCriteria(evaluatorName, criteria);
}
catch (err) {
invalidPassFailCriteriaErrors.push(err instanceof Error ? err.message : JSON.stringify(err));
}
});
if (invalidPassFailCriteriaErrors.length > 0) {
throw new Error(`Error while creating combined Evaluator with names ${names} due to invalid pass fail criteria: ${invalidPassFailCriteriaErrors.join(", ")}`);
}
return {
names,
evaluationFunction,
passFailCriteria,
};
},
};
}
function sanitizePassFailCriteria(name, passFailCriteria) {
const allOperators = [">=", "<=", "<", ">", "=", "!="];
const booleanOperators = ["=", "!="];
switch (typeof passFailCriteria.onEachEntry.value) {
case "number":
if (!allOperators.includes(passFailCriteria.onEachEntry.scoreShouldBe)) {
throw new Error(`Error While Creating Evaluator ${name}: Invalid operator for scoreShouldBe, only accepts ` + allOperators.join(", "));
}
break;
case "boolean":
if (!booleanOperators.includes(passFailCriteria.onEachEntry.scoreShouldBe)) {
throw new Error(`Error While Creating Evaluator ${name}: Invalid operator for scoreShouldBe, only accepts ` + booleanOperators.join(", "));
}
break;
default:
throw new Error(`Error While Creating Evaluator ${name}: Invalid type for onEachEntry.value, only accepts number or boolean`);
}
if (typeof passFailCriteria.forTestrunOverall.value === "number") {
if (!allOperators.includes(passFailCriteria.forTestrunOverall.overallShouldBe)) {
throw new Error(`Error While Creating Evaluator ${name}: Invalid operator for overallShouldBe, only accepts ` + allOperators.join(", "));
}
if (passFailCriteria.forTestrunOverall.for !== "average" && passFailCriteria.forTestrunOverall.for !== "percentageOfPassedResults") {
throw new Error(`Error While Creating Evaluator ${name}: Invalid value for \`for\` in forTestrunOverall, only accepts "average" or "percentageOfPassedResults"`);
}
}
else {
throw new Error(`Error While Creating Evaluator ${name}: Invalid type for forTestrunOverall.value, only accepts number`);
}
}
//# sourceMappingURL=evaluators.js.map