Spaces:
Running
Running
Fix: codes sent in the question are no longer injected into the page
Browse files- client/js/chat.js +60 -24
client/js/chat.js
CHANGED
@@ -16,10 +16,6 @@ window.conversation_id = `{{chat_id}}`;
|
|
16 |
|
17 |
hljs.addPlugin(new CopyButtonPlugin());
|
18 |
|
19 |
-
const format = (text) => {
|
20 |
-
return text.replace(/(?:\r\n|\r|\n)/g, "<br>");
|
21 |
-
};
|
22 |
-
|
23 |
message_input.addEventListener("blur", () => {
|
24 |
window.scrollTo(0, 0);
|
25 |
});
|
@@ -72,16 +68,7 @@ const ask_gpt = async (message) => {
|
|
72 |
|
73 |
stop_generating.classList.remove(`stop-generating-hidden`);
|
74 |
|
75 |
-
|
76 |
-
<div class="message">
|
77 |
-
<div class="avatar-container">
|
78 |
-
${user_image}
|
79 |
-
</div>
|
80 |
-
<div class="content" id="user_${token}">
|
81 |
-
${format(message)}
|
82 |
-
</div>
|
83 |
-
</div>
|
84 |
-
`;
|
85 |
|
86 |
message_box.scrollTop = message_box.scrollHeight;
|
87 |
window.scrollTo(0, 0);
|
@@ -199,6 +186,25 @@ const ask_gpt = async (message) => {
|
|
199 |
}
|
200 |
};
|
201 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
const decodeUnicode = (str) => {
|
203 |
return str.replace(/\\u([a-fA-F0-9]{4})/g, function (match, grp) {
|
204 |
return String.fromCharCode(parseInt(grp, 16));
|
@@ -259,16 +265,11 @@ const load_conversation = async (conversation_id) => {
|
|
259 |
console.log(conversation, conversation_id);
|
260 |
|
261 |
for (item of conversation.items) {
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
<div class="content">
|
268 |
-
${item.role == "assistant" ? markdown.render(item.content) : item.content}
|
269 |
-
</div>
|
270 |
-
</div>
|
271 |
-
`;
|
272 |
}
|
273 |
|
274 |
document.querySelectorAll(`code`).forEach((el) => {
|
@@ -282,6 +283,41 @@ const load_conversation = async (conversation_id) => {
|
|
282 |
}, 500);
|
283 |
};
|
284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
const get_conversation = async (conversation_id) => {
|
286 |
let conversation = await JSON.parse(localStorage.getItem(`conversation:${conversation_id}`));
|
287 |
return conversation.items;
|
|
|
16 |
|
17 |
hljs.addPlugin(new CopyButtonPlugin());
|
18 |
|
|
|
|
|
|
|
|
|
19 |
message_input.addEventListener("blur", () => {
|
20 |
window.scrollTo(0, 0);
|
21 |
});
|
|
|
68 |
|
69 |
stop_generating.classList.remove(`stop-generating-hidden`);
|
70 |
|
71 |
+
add_user_message_box(message);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
|
73 |
message_box.scrollTop = message_box.scrollHeight;
|
74 |
window.scrollTo(0, 0);
|
|
|
186 |
}
|
187 |
};
|
188 |
|
189 |
+
const add_user_message_box = (message) => {
|
190 |
+
const messageDiv = document.createElement("div");
|
191 |
+
messageDiv.classList.add("message");
|
192 |
+
|
193 |
+
const avatarContainer = document.createElement("div");
|
194 |
+
avatarContainer.classList.add("avatar-container");
|
195 |
+
avatarContainer.innerHTML = user_image;
|
196 |
+
|
197 |
+
const contentDiv = document.createElement("div");
|
198 |
+
contentDiv.classList.add("content");
|
199 |
+
contentDiv.id = `user_${token}`;
|
200 |
+
contentDiv.textContent = message;
|
201 |
+
|
202 |
+
messageDiv.appendChild(avatarContainer);
|
203 |
+
messageDiv.appendChild(contentDiv);
|
204 |
+
|
205 |
+
message_box.appendChild(messageDiv);
|
206 |
+
};
|
207 |
+
|
208 |
const decodeUnicode = (str) => {
|
209 |
return str.replace(/\\u([a-fA-F0-9]{4})/g, function (match, grp) {
|
210 |
return String.fromCharCode(parseInt(grp, 16));
|
|
|
265 |
console.log(conversation, conversation_id);
|
266 |
|
267 |
for (item of conversation.items) {
|
268 |
+
if (is_assistant(item.role)) {
|
269 |
+
message_box.innerHTML += load_gpt_message_box(item.content);
|
270 |
+
} else {
|
271 |
+
message_box.innerHTML += load_user_message_box(item.content);
|
272 |
+
}
|
|
|
|
|
|
|
|
|
|
|
273 |
}
|
274 |
|
275 |
document.querySelectorAll(`code`).forEach((el) => {
|
|
|
283 |
}, 500);
|
284 |
};
|
285 |
|
286 |
+
const load_user_message_box = (content) => {
|
287 |
+
const messageDiv = document.createElement("div");
|
288 |
+
messageDiv.classList.add("message");
|
289 |
+
|
290 |
+
const avatarContainer = document.createElement("div");
|
291 |
+
avatarContainer.classList.add("avatar-container");
|
292 |
+
avatarContainer.innerHTML = user_image;
|
293 |
+
|
294 |
+
const contentDiv = document.createElement("div");
|
295 |
+
contentDiv.classList.add("content");
|
296 |
+
contentDiv.textContent = content;
|
297 |
+
|
298 |
+
messageDiv.appendChild(avatarContainer);
|
299 |
+
messageDiv.appendChild(contentDiv);
|
300 |
+
|
301 |
+
return messageDiv.outerHTML;
|
302 |
+
};
|
303 |
+
|
304 |
+
const load_gpt_message_box = (content) => {
|
305 |
+
return `
|
306 |
+
<div class="message">
|
307 |
+
<div class="avatar-container">
|
308 |
+
${gpt_image}
|
309 |
+
</div>
|
310 |
+
<div class="content">
|
311 |
+
${markdown.render(content)}
|
312 |
+
</div>
|
313 |
+
</div>
|
314 |
+
`;
|
315 |
+
};
|
316 |
+
|
317 |
+
const is_assistant = (role) => {
|
318 |
+
return role == "assistant";
|
319 |
+
};
|
320 |
+
|
321 |
const get_conversation = async (conversation_id) => {
|
322 |
let conversation = await JSON.parse(localStorage.getItem(`conversation:${conversation_id}`));
|
323 |
return conversation.items;
|