|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function removeTag(txt) { |
|
txt = txt.replace(/<<</g, "").replace(/>>>/g, ""); |
|
txt = txt.replace(/<</g, "").replace(/>>/g, ""); |
|
return txt; |
|
} |
|
|
|
function cleanDoc(s) { |
|
try { |
|
s = s.replace(/`/g, ""); |
|
s = removeTag(s); |
|
|
|
|
|
s = s.replace(/(\w+)-\s*\n(\w+)/g, "$1$2"); |
|
|
|
|
|
const charsRm = /[\u00AD\u200B\u200C\u200D\u2060\uFEFF\u0008]/g; |
|
s = s.replace(charsRm, ""); |
|
|
|
|
|
const charsSrp = /[\u00A0\u2000-\u200A\u202F\u205F\u3000\t\r\f\v]/g; |
|
s = s.replace(charsSrp, " "); |
|
|
|
|
|
s = s.replace(/\\([nrtfb])/g, "$1"); |
|
|
|
|
|
s = s.replace(/\\(u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2})/g, "$1"); |
|
|
|
|
|
s = s.replace(/\\([a-zA-Z]:\\|\\\\[a-zA-Z0-9_]+\\)/g, "\\$1"); |
|
|
|
|
|
s = s.replace(/\\/g, ""); |
|
|
|
|
|
s = s.replace(/(.)\1{3,}/g, ""); |
|
|
|
|
|
s = s.replace(/“/g, '"').replace(/”/g, '"'); |
|
|
|
|
|
s = s.replace(/\n/g, " "); |
|
|
|
|
|
s = s.replace(/ +([.,;:!?])/g, "$1"); |
|
|
|
|
|
s = s.replace(/ +/g, " "); |
|
|
|
return s.trim(); |
|
} catch (e) { |
|
console.error(e); |
|
return "Errore di codifica del documento"; |
|
} |
|
} |
|
|
|
function cleanResponse(s) { |
|
try { |
|
|
|
|
|
const charsRm = /[\u00AD\u200B\u200C\u200D\u2060\uFEFF]/g; |
|
s = s.replace(charsRm, ""); |
|
|
|
const charsSrp = /[\u00A0\u2000-\u200A\u202F\u205F\u3000\t\r\f\v]/g; |
|
s = s.replace(charsSrp, " "); |
|
|
|
s = s.replace(/\\([nrtfb])/g, "$1"); |
|
|
|
s = s.replace(/\\(u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2})/g, "$1"); |
|
|
|
s = s.replace(/\\([a-zA-Z]:\\|\\\\[a-zA-Z0-9_]+\\)/g, "\\\\$1"); |
|
|
|
s = s.replace(/\\/g, ""); |
|
|
|
s = s.replace(/\n{3,}/g, "\n\n"); |
|
|
|
s = s.replace(/ +/g, " "); |
|
return s.trim(); |
|
} catch (e) { |
|
console.error(e); |
|
return `Errore di codifica nella risposta\n${e}`; |
|
} |
|
} |
|
|
|
function answerFormtter(inputText) { |
|
if (inputText.trim() == "") return ""; |
|
|
|
|
|
const hasUserTag = inputText.includes("# User:"); |
|
const hasAssistantTag = inputText.includes("# Assistant:"); |
|
|
|
if (!hasUserTag || !hasAssistantTag) { |
|
|
|
return `<div class="assistant"><b>Assistant:</b><br>${inputText.split("\n").join("<br>")}</div>`; |
|
} |
|
|
|
|
|
const lines = inputText.split("\n"); |
|
let currentSpeaker = null; |
|
let resultHtml = ""; |
|
|
|
lines.forEach((line) => { |
|
line = line.trim(); |
|
if (line.startsWith("# User:")) { |
|
if (currentSpeaker) { |
|
resultHtml += `</div>`; |
|
} |
|
currentSpeaker = "user"; |
|
resultHtml += `<div class="${currentSpeaker}"><b>User:</b>`; |
|
} else if (line.startsWith("# Assistant:")) { |
|
if (currentSpeaker) { |
|
resultHtml += `</div>`; |
|
} |
|
currentSpeaker = "assistant"; |
|
resultHtml += `<div class="${currentSpeaker}"><b>Assistant:</b>`; |
|
} else if (line.length > 0) { |
|
if (currentSpeaker) { |
|
resultHtml += `<br>${line}`; |
|
} |
|
} |
|
}); |
|
|
|
if (currentSpeaker) { |
|
resultHtml += `</div>`; |
|
} |
|
|
|
return resultHtml; |
|
} |
|
|
|
function textFormatter(txt) { |
|
let plainText = txt.replace(/<[^>]*>/g, ""); |
|
let sentences = plainText.split(/([.!?:])(?=\s|$)/); |
|
let text = ""; |
|
for (let i = 0; i < sentences.length; i += 2) { |
|
let sentence = sentences[i]; |
|
let delimiter = sentences[i + 1] || ""; |
|
if (sentence.trim().length > 0) { |
|
text += " " + sentence.trim() + delimiter; |
|
} |
|
if (i < sentences.length - 2) { |
|
text += "\n"; |
|
} |
|
} |
|
text = text.replace(/User:/g, "\n\nUSER:\n"); |
|
text = text.replace(/Assistant:/g, "\n\nASSISTANT:\n"); |
|
return text.trim(); |
|
} |
|
|