evalite
Version:
Test your LLM-powered apps with a TypeScript-native, Vitest-based eval runner. No API key required.
44 lines • 1.44 kB
JavaScript
import { fileTypeFromBuffer } from "file-type";
import path from "path";
export const sum = (arr, fn) => {
return arr.reduce((a, b) => a + (fn(b) || 0), 0);
};
export const average = (arr, fn) => {
return sum(arr, fn) / arr.length;
};
export const createEvaliteFileIfNeeded = async (opts) => {
if (!(opts.input instanceof Uint8Array)) {
return opts.input;
}
const { createHash } = await import("node:crypto");
const hash = createHash("sha256").update(opts.input).digest("hex");
const result = await fileTypeFromBuffer(opts.input);
if (!result) {
throw new Error(`Cannot determine file type of buffer passed in.`);
}
const extension = result.ext;
const fileName = `${hash}.${extension}`;
const filePath = path.join(opts.rootDir, fileName);
const { writeFile } = await import("node:fs/promises");
await writeFile(filePath, opts.input);
return EvaliteFile.fromPath(filePath);
};
export const max = (arr, fn) => {
return arr.reduce((a, b) => Math.max(a, fn(b) || 0), 0);
};
const isEvaliteFile = (file) => {
return (typeof file === "object" &&
file !== null &&
"__EvaliteFile" in file &&
file.__EvaliteFile === true);
};
export const EvaliteFile = {
fromPath: (path) => {
return {
__EvaliteFile: true,
path,
};
},
isEvaliteFile: isEvaliteFile,
};
//# sourceMappingURL=utils.js.map