+
-
`;
@@ -126,7 +211,7 @@ const ask_gpt = async (message) => {
meta: {
id: window.token,
content: {
- conversation: await get_conversation(window.conversation_id),
+ conversation: (await get_conversation(window.conversation_id)).map(({cmid, role, content}) => ({role, content})),
internet_access: document.getElementById("switch").checked,
content_type: "text",
parts: [
@@ -139,7 +224,6 @@ const ask_gpt = async (message) => {
},
}),
});
-
const reader = response.body.getReader();
while (true) {
@@ -187,8 +271,8 @@ const ask_gpt = async (message) => {
"An error occured, please reload / refresh cache and try again.";
}
- add_message(window.conversation_id, "user", message);
- add_message(window.conversation_id, "assistant", text);
+ add_message(window.conversation_id, "user", message, "user_" + window.token);
+ add_message(window.conversation_id, "assistant", text, "gpt_" + window.token);
message_box.scrollTop = message_box.scrollHeight;
await remove_cancel_button();
@@ -197,7 +281,7 @@ const ask_gpt = async (message) => {
await load_conversations(20, 0);
window.scrollTo(0, 0);
} catch (e) {
- add_message(window.conversation_id, "user", message);
+ add_message(window.conversation_id, "user", message, "user_" + window.token);
message_box.scrollTop = message_box.scrollHeight;
await remove_cancel_button();
@@ -214,16 +298,120 @@ const ask_gpt = async (message) => {
let error_message = `oops ! something went wrong, please try again / reload. [stacktrace in console]`;
document.getElementById(`gpt_${window.token}`).innerHTML = error_message;
- add_message(window.conversation_id, "assistant", error_message);
+ add_message(window.conversation_id, "assistant", error_message, "gpt_" + window.token);
} else {
document.getElementById(`gpt_${window.token}`).innerHTML += ` [aborted]`;
- add_message(window.conversation_id, "assistant", text + ` [aborted]`);
+ add_message(window.conversation_id, "assistant", text + ` [aborted]`, "gpt_" + window.token);
}
window.scrollTo(0, 0);
}
};
+const ask_gpt_regenerate = async (contentElement) => {
+ let conversation = await JSON.parse(
+ localStorage.getItem(`conversation:${conversation_id}`)
+ );
+ let itemIndex = conversation.items.findIndex((el) => { return el.cmid === contentElement.id; });
+ let contents = conversation.items.slice(0, itemIndex);
+ contents = contents.map(({cmid, role, content}) => ({role, content}));
+ contentElement.innerHTML = `
`;
+ try {
+ window.controller = new AbortController();
+
+ jailbreak = document.getElementById("jailbreak");
+ model = document.getElementById("model");
+ prompt_lock = true;
+ window.text = ``;
+
+ stop_generating.classList.remove(`stop_generating-hidden`);
+ const response = await fetch(`/backend-api/v2/conversation`, {
+ method: `POST`,
+ signal: window.controller.signal,
+ headers: {
+ "content-type": `application/json`,
+ accept: `text/event-stream`,
+ },
+ body: JSON.stringify({
+ conversation_id: window.conversation_id,
+ action: `_ask`,
+ model: model.options[model.selectedIndex].value,
+ jailbreak: jailbreak.options[jailbreak.selectedIndex].value,
+ meta: {
+ id: contentElement.id.replace(/^gpt_|^user_/i, ''),
+ content: {
+ conversation: contents,
+ internet_access: document.getElementById("switch").checked,
+ content_type: "text",
+ parts: [
+ {
+ content: "",
+ role: "user",
+ },
+ ],
+ },
+ },
+ }),
+ });
+ const reader = response.body.getReader();
+ while (true) {
+ const {value, done} = await reader.read();
+ if (done) break;
+
+ chunk = new TextDecoder().decode(value);
+
+ if (
+ chunk.includes(
+ `