zon-format
Version:
ZON: The most token-efficient serialization format for LLMs - beats CSV, TOON, JSON, and all competitors
126 lines (125 loc) • 4.34 kB
JavaScript
;
/**
* Storage for Evaluation Results
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultStorage = exports.MemoryEvalStorage = exports.FileEvalStorage = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
/**
* File-based storage for evaluation results
*/
class FileEvalStorage {
constructor(storageDir = './eval-results') {
this.storageDir = storageDir;
this.ensureDir();
}
/**
* Ensure storage directory exists
*/
ensureDir() {
if (!fs_1.default.existsSync(this.storageDir)) {
fs_1.default.mkdirSync(this.storageDir, { recursive: true });
}
}
/**
* Save evaluation result
*/
async save(result) {
const filename = `${result.testId}.json`;
const filepath = path_1.default.join(this.storageDir, filename);
fs_1.default.writeFileSync(filepath, JSON.stringify(result, null, 2), 'utf-8');
const latestFilename = `${result.config.name}-latest.json`;
const latestFilepath = path_1.default.join(this.storageDir, latestFilename);
fs_1.default.writeFileSync(latestFilepath, JSON.stringify(result, null, 2), 'utf-8');
}
/**
* Load evaluation result by test ID
*/
async load(testId) {
const filename = `${testId}.json`;
const filepath = path_1.default.join(this.storageDir, filename);
if (!fs_1.default.existsSync(filepath)) {
return null;
}
const content = fs_1.default.readFileSync(filepath, 'utf-8');
return JSON.parse(content);
}
/**
* Get latest result for a config
*/
async getLatest(configName) {
const filename = `${configName}-latest.json`;
const filepath = path_1.default.join(this.storageDir, filename);
if (!fs_1.default.existsSync(filepath)) {
return null;
}
const content = fs_1.default.readFileSync(filepath, 'utf-8');
return JSON.parse(content);
}
/**
* List all results
*/
async list(filter) {
const files = fs_1.default.readdirSync(this.storageDir)
.filter(f => f.endsWith('.json') && !f.endsWith('-latest.json'));
let results = [];
for (const file of files) {
const filepath = path_1.default.join(this.storageDir, file);
const content = fs_1.default.readFileSync(filepath, 'utf-8');
const result = JSON.parse(content);
if ((filter === null || filter === void 0 ? void 0 : filter.configName) && result.config.name !== filter.configName) {
continue;
}
results.push(result);
}
results.sort((a, b) => b.timestamp - a.timestamp);
if (filter === null || filter === void 0 ? void 0 : filter.limit) {
results = results.slice(0, filter.limit);
}
return results;
}
}
exports.FileEvalStorage = FileEvalStorage;
/**
* In-memory storage for evaluation results (useful for testing)
*/
class MemoryEvalStorage {
constructor() {
this.results = new Map();
this.latest = new Map();
}
async save(result) {
this.results.set(result.testId, result);
this.latest.set(result.config.name, result);
}
async load(testId) {
return this.results.get(testId) || null;
}
async getLatest(configName) {
return this.latest.get(configName) || null;
}
async list(filter) {
let results = Array.from(this.results.values());
if (filter === null || filter === void 0 ? void 0 : filter.configName) {
results = results.filter(r => r.config.name === filter.configName);
}
results.sort((a, b) => b.timestamp - a.timestamp);
if (filter === null || filter === void 0 ? void 0 : filter.limit) {
results = results.slice(0, filter.limit);
}
return results;
}
clear() {
this.results.clear();
this.latest.clear();
}
}
exports.MemoryEvalStorage = MemoryEvalStorage;
/**
* Default storage instance
*/
exports.defaultStorage = new FileEvalStorage();