NODEDC_1C/llm_normalizer/backend/dist/services/traceLogger.js

113 lines
3.8 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.saveTrace = saveTrace;
exports.listTraces = listTraces;
exports.getTrace = getTrace;
exports.savePreset = savePreset;
exports.listPresets = listPresets;
exports.saveEvalCase = saveEvalCase;
exports.redactRequestPayload = redactRequestPayload;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const config_1 = require("../config");
const files_1 = require("../utils/files");
function redactSecrets(payload) {
const output = { ...payload };
delete output.apiKey;
return output;
}
function isNoSpaceError(error) {
const code = error?.code;
return code === "ENOSPC";
}
function saveTrace(record) {
try {
(0, files_1.ensureDir)(config_1.TRACES_DIR);
const target = path_1.default.resolve(config_1.TRACES_DIR, `${record.trace_id}.json`);
(0, files_1.writeJsonFile)(target, record);
}
catch (error) {
if (isNoSpaceError(error)) {
return;
}
throw error;
}
}
function listTraces(limit = 100) {
(0, files_1.ensureDir)(config_1.TRACES_DIR);
const files = fs_1.default
.readdirSync(config_1.TRACES_DIR)
.filter((item) => item.endsWith(".json"))
.sort((a, b) => {
const pa = path_1.default.resolve(config_1.TRACES_DIR, a);
const pb = path_1.default.resolve(config_1.TRACES_DIR, b);
return fs_1.default.statSync(pb).mtimeMs - fs_1.default.statSync(pa).mtimeMs;
})
.slice(0, limit);
return files.map((fileName) => {
const raw = fs_1.default.readFileSync(path_1.default.resolve(config_1.TRACES_DIR, fileName), "utf-8");
const item = JSON.parse(raw);
return {
trace_id: item.trace_id,
timestamp: item.timestamp,
model: item.model,
question_short: item.user_question_raw.slice(0, 110),
confidence: item.confidence,
validation_passed: item.validation_result.passed,
route_hint: item.route_hint,
save_status: "saved"
};
});
}
function getTrace(traceId) {
(0, files_1.ensureDir)(config_1.TRACES_DIR);
const target = path_1.default.resolve(config_1.TRACES_DIR, `${traceId}.json`);
if (!fs_1.default.existsSync(target)) {
return null;
}
const raw = fs_1.default.readFileSync(target, "utf-8");
return JSON.parse(raw);
}
function savePreset(preset) {
try {
(0, files_1.ensureDir)(config_1.PRESETS_DIR);
(0, files_1.writeJsonFile)(path_1.default.resolve(config_1.PRESETS_DIR, `${preset.id}.json`), preset);
}
catch (error) {
if (isNoSpaceError(error)) {
return;
}
throw error;
}
}
function listPresets() {
(0, files_1.ensureDir)(config_1.PRESETS_DIR);
return fs_1.default
.readdirSync(config_1.PRESETS_DIR)
.filter((item) => item.endsWith(".json"))
.map((fileName) => {
const raw = fs_1.default.readFileSync(path_1.default.resolve(config_1.PRESETS_DIR, fileName), "utf-8");
return JSON.parse(raw);
})
.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
}
function saveEvalCase(casePayload) {
const id = String(casePayload.case_id ?? `NQ-${Date.now()}`);
try {
(0, files_1.ensureDir)(config_1.EVAL_CASES_DIR);
(0, files_1.writeJsonFile)(path_1.default.resolve(config_1.EVAL_CASES_DIR, `${id}.json`), casePayload);
}
catch (error) {
if (!isNoSpaceError(error)) {
throw error;
}
}
return id;
}
function redactRequestPayload(payload) {
return redactSecrets(payload);
}