77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
import { parseWorkflow } from "../utils/utils.js";
|
|
import { PromptStatus } from "../core/constants.js";
|
|
|
|
export function normalizeQueueItem(p, defaultIndex = 0) {
|
|
let pid = null;
|
|
let seq = defaultIndex;
|
|
let rawWorkflow = null;
|
|
let outputs = {};
|
|
|
|
if (Array.isArray(p)) {
|
|
seq = typeof p[0] === "number" ? p[0] : defaultIndex;
|
|
pid = p[1] ? String(p[1]) : null;
|
|
const extraData = p[3] || {};
|
|
rawWorkflow = extraData.extra_pnginfo?.workflow || extraData.workflow || null;
|
|
outputs = p[4] || {};
|
|
} else if (p && typeof p === "object") {
|
|
pid = (p.prompt_id || p.id || p.uuid) ? String(p.prompt_id || p.id || p.uuid) : null;
|
|
seq = typeof p.number === "number" ? p.number : (typeof p.prompt_number === "number" ? p.prompt_number : defaultIndex);
|
|
const extraData = p.extra_data || {};
|
|
rawWorkflow = extraData.extra_pnginfo?.workflow || extraData.workflow || null;
|
|
outputs = p.outputs || {};
|
|
}
|
|
|
|
return {
|
|
pid,
|
|
seq,
|
|
workflow: parseWorkflow(rawWorkflow),
|
|
outputs,
|
|
promptGraph: Array.isArray(p) ? (p[2] || null) : (p.prompt || null)
|
|
};
|
|
}
|
|
|
|
export function normalizeHistoryItem(pidKey, rawData) {
|
|
const pid = String(pidKey);
|
|
let item = rawData;
|
|
|
|
if (Array.isArray(item)) {
|
|
item = {
|
|
prompt: item[0],
|
|
outputs: item[1] || {},
|
|
status: item[2] || {}
|
|
};
|
|
} else if (!item || typeof item !== "object") {
|
|
item = { outputs: {}, status: {} };
|
|
}
|
|
|
|
const extraData = item.extra_data || item.prompt?.[3] || {};
|
|
const rawWf = extraData.extra_pnginfo?.workflow || extraData.workflow || null;
|
|
const workflow = parseWorkflow(rawWf);
|
|
const outputs = item.outputs || {};
|
|
const queueNumber = item.prompt?.[0] ?? 0;
|
|
|
|
const serverStatus = item.status?.status_str || "completed";
|
|
const isInterrupted = serverStatus === "interrupted" ||
|
|
(item.status?.messages && JSON.stringify(item.status.messages).toLowerCase().includes("interrupted"));
|
|
|
|
let status = PromptStatus.COMPLETED;
|
|
if (serverStatus === "success" || serverStatus === "completed") {
|
|
status = PromptStatus.COMPLETED;
|
|
} else if (isInterrupted) {
|
|
status = PromptStatus.CANCELLED;
|
|
} else if (serverStatus === "error") {
|
|
status = PromptStatus.ERROR;
|
|
} else {
|
|
status = PromptStatus.CANCELLED;
|
|
}
|
|
|
|
return {
|
|
pid,
|
|
queueNumber,
|
|
workflow,
|
|
outputs,
|
|
status,
|
|
serverStatus
|
|
};
|
|
}
|