test: execute AI evaluation report normalization
parent
bed1cc47cd
commit
33b113e9cb
@ -0,0 +1,68 @@
|
|||||||
|
function safeParseJson(value) {
|
||||||
|
if (typeof value !== "string" || !value.trim()) return null;
|
||||||
|
try {
|
||||||
|
const parsed = JSON.parse(value);
|
||||||
|
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null;
|
||||||
|
} catch (error) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatReport(value) {
|
||||||
|
if (value == null) return "";
|
||||||
|
const parsed = typeof value === "string" ? safeParseJson(value) : value;
|
||||||
|
if (parsed == null) return typeof value === "string" ? value : "";
|
||||||
|
try {
|
||||||
|
return JSON.stringify(parsed, null, 2);
|
||||||
|
} catch (error) {
|
||||||
|
return String(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeCriteria(value) {
|
||||||
|
if (!Array.isArray(value)) return [];
|
||||||
|
return value.map((item) => {
|
||||||
|
if (typeof item === "string") return { name: item, score: "", description: "" };
|
||||||
|
return {
|
||||||
|
name: String(item?.name || item?.criterion || item?.title || "评分项"),
|
||||||
|
score: item?.score ?? item?.weight ?? "",
|
||||||
|
description: String(item?.description || item?.detail || ""),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeOperation(operation, root, type) {
|
||||||
|
const value = operation && typeof operation === "object" ? operation : {};
|
||||||
|
const prefix = type === "help" ? "help" : "assessment";
|
||||||
|
const flatReportKey = type === "help" ? "helpReportJson" : "assessmentReportJson";
|
||||||
|
return {
|
||||||
|
...value,
|
||||||
|
status: String(value.status || root?.[`${prefix}Status`] || "PENDING").toUpperCase(),
|
||||||
|
report: value.report || root?.[flatReportKey] || root?.[`${prefix}Report`] || "",
|
||||||
|
scoreCriteria: value.scoreCriteria || root?.scoreCriteria || [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeEvaluationReports(evaluation) {
|
||||||
|
const root = evaluation && typeof evaluation === "object" ? evaluation : {};
|
||||||
|
const help = normalizeOperation(root.help || root.helpEvaluation, root, "help");
|
||||||
|
const assessment = normalizeOperation(root.assessment || root.assessmentEvaluation, root, "assessment");
|
||||||
|
const assessmentReportData = safeParseJson(root.assessmentReportJson);
|
||||||
|
|
||||||
|
return {
|
||||||
|
help,
|
||||||
|
assessment,
|
||||||
|
helpReport: formatReport(help.report || help.content || help.suggestion),
|
||||||
|
assessmentReport: formatReport(assessment.report || assessment.content || assessment.feedback),
|
||||||
|
score: root.assessmentScore ?? assessment.score ?? assessmentReportData?.score ?? root.score ?? null,
|
||||||
|
scoreCriteria: normalizeCriteria(assessmentReportData?.criteria || assessment.scoreCriteria || root.scoreCriteria),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
formatReport,
|
||||||
|
normalizeCriteria,
|
||||||
|
normalizeEvaluationReports,
|
||||||
|
normalizeOperation,
|
||||||
|
safeParseJson,
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue