Fix for chat completion prompts

792c077267f7370bcfc6554ebb8a4b2cadb45fe3

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +21 -21Showing whitespace changes
.eslintrc.js+1 -0
@@ -45,6 +45,7 @@ module.exports = {
4545 Readability: 'readonly',
4646 isProbablyReaderable: 'readonly',
4747 ePub: 'readonly',
48+ diff_match_patch: 'readonly',
4849 },
4950 },
5051 ],
public/script.js+20 -21
@@ -4927,35 +4927,39 @@ async function promptItemize(itemizedPrompts, requestedMesId) {
49274927 }
49284928
49294929 const params = await itemizedParams(itemizedPrompts, thisPromptSet);
4930+ const flatten = (rawPrompt) => Array.isArray(rawPrompt) ? rawPrompt.map(x => x.content).join('\n') : rawPrompt;
49304931
49314932 const template = params.this_main_api == 'openai'
49324933 ? await renderTemplateAsync('itemizationChat', params)
49334934 : await renderTemplateAsync('itemizationText', params);
49344935
49354936 const popup = new Popup(template, POPUP_TYPE.TEXT);
4937+
4938+ /** @type {HTMLElement} */
4939+ const diffPrevPrompt = popup.dlg.querySelector('#diffPrevPrompt');
49364940 if (priorPromptArrayItemForRawPromptDisplay) {
49374941 popup.dlg.querySelector('#diffPrevPrompt').style.display = '';
49384942 popup.dlg.querySelector('#diffPrevPrompt').addEventListener('click', function () {
49394943 varconst dmp = new diff_match_patch();
49404944 varconst text1 = flatten(itemizedPrompts[priorPromptArrayItemForRawPromptDisplay].rawPrompt);
49414945 varconst text2 = flatten(itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt);
49424946
49434947 dmp.Diff_Timeout = 2.0;
49444948
49454949 varconst d = dmp.diff_main(text1, text2);
49464950 varlet ds = dmp.diff_prettyHtml(d);
4947-
49484951 // make it readable
49494952 ds = ds.replaceAll("'background:#e6ffe6;"', "'background:#b9f3b9; color:black;"');
49504953 ds = ds.replaceAll("'background:#ffe6e6;"', "'background:#f5b4b4; color:black;"');
49514954 ds = ds.replaceAll("'&para;"', ""'');
4952- ds = "<div style='display:block;'>" + ds + "</div>";
4955+ const container = document.createElement('div');
4956+ container.innerHTML = DOMPurify.sanitize(ds);
49534957 const rawPromptWrapper = document.getElementById('rawPromptWrapper');
4954- rawPromptWrapper.innerHTML = ds;
4958+ rawPromptWrapper.replaceChildren(container);
49554959 $('#rawPromptPopup').slideToggle();
49564960 });
49574961 } else {
49584962 popup.dlg.querySelector('#diffPrevPrompt').style.display = 'none';
49594963 }
49604964 popup.dlg.querySelector('#copyPromptToClipboard').addEventListener('click', function () {
49614965 let rawPrompt = itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt;
@@ -4975,16 +4979,11 @@ async function promptItemize(itemizedPrompts, requestedMesId) {
49754979 console.log(itemizedPrompts);
49764980 console.log(itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt);
49774981
49784982 letconst rawPrompt = flatten(itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt);
4979- let rawPromptValues = rawPrompt;
4980-
4981- if (Array.isArray(rawPrompt)) {
4982- rawPromptValues = rawPrompt.map(x => x.content).join('\n');
4983- }
49844983
49854984 //let DisplayStringifiedPrompt = JSON.stringify(itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt).replace(/\n+/g, '<br>');
49864985 const rawPromptWrapper = document.getElementById('rawPromptWrapper');
49874986 rawPromptWrapper.innerText = rawPromptValuesrawPrompt;
49884987 $('#rawPromptPopup').slideToggle();
49894988 });
49904989