blessingmwiti's picture
Sanitize streamed local model output
d256fda
let currentTokens = [];
let streamBuffer = "";
export function appendToken(token) {
streamBuffer += token;
currentTokens.push(token);
const display = document.getElementById("stream-display");
if (display) {
display.textContent = cleanVisibleStream(streamBuffer);
display.scrollTop = display.scrollHeight;
}
}
export function setStatus(text, type = "neutral") {
const el = document.getElementById("status-text");
const phase = document.getElementById("stream-phase");
if (el) {
el.textContent = text;
el.className = `status-${type}`;
}
if (phase) {
phase.textContent = text;
phase.className = `status-${type}`;
}
}
export function setVerifierStatus(verdict) {
const el = document.getElementById("verifier-status");
if (!el) return;
const labels = {
IDLE: "Verifier idle",
PASS: "Verified",
FIX: "Fixed",
REWRITE: "Rewritten",
ERROR: "Verifier error",
CHECKING: "Verifying...",
};
el.textContent = labels[verdict] || "";
el.className = `verdict-${String(verdict || "idle").toLowerCase()}`;
}
export async function rollbackAndReplace(correctedCode, reason, verdict = "FIX") {
const display = document.getElementById("stream-display");
if (!display) return;
display.classList.add("rollback-flash");
setVerifierStatus(verdict);
setStatus(`Verifier corrected: ${reason}`, "warning");
await sleep(450);
display.classList.remove("rollback-flash");
display.textContent = "";
streamBuffer = correctedCode;
currentTokens = [];
for (let i = 0; i < correctedCode.length; i += 1) {
display.textContent += correctedCode[i];
if (i % 5 === 0) await sleep(8);
}
setVerifierStatus("PASS");
setStatus("Corrected block verified", "success");
}
export function getCurrentCode() {
return cleanVisibleStream(streamBuffer);
}
export function setCode(code) {
streamBuffer = code;
currentTokens = [];
const display = document.getElementById("stream-display");
if (display) {
display.textContent = code;
display.scrollTop = display.scrollHeight;
}
}
export function reset() {
streamBuffer = "";
currentTokens = [];
const display = document.getElementById("stream-display");
if (display) display.textContent = "";
const tokenCount = document.getElementById("token-count");
if (tokenCount) tokenCount.textContent = "0 tok/s";
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function cleanVisibleStream(code) {
if (typeof window.stripMarkdownCodeFence === "function") {
return window.stripMarkdownCodeFence(code);
}
return code;
}
Object.assign(window, {
appendToken,
setStatus,
setVerifierStatus,
rollbackAndReplace,
getCurrentCode,
setCode,
reset,
});