This commit is contained in:
SillyLossy
2023-05-28 13:42:09 +03:00
6 changed files with 105 additions and 6 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@ public/characters/
public/User Avatars/
public/backgrounds/
public/groups/
public/group chats/
public/worlds/
public/css/bg_load.css
public/themes/

View File

@ -2363,6 +2363,7 @@
</div>
<div class="flex-container height100pSpaceEvenly">
<div class="renameChatButton fa-solid fa-pen"></div>
<div class="exportChatButton fa-solid fa-file-export"></div>
<div file_name="" class="PastChat_cross fa-solid fa-circle-xmark"></div>
</div>
</div>

View File

@ -1866,8 +1866,10 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
coreChat.pop();
}
if (extension_settings.chromadb.n_results !== 0) {
await runGenerationInterceptors(coreChat);
console.log(`Core/all messages: ${coreChat.length}/${chat.length}`);
}
if (main_api === 'openai') {
message_already_generated = ''; // OpenAI doesn't have multigen
@ -5815,6 +5817,43 @@ $(document).ready(function () {
}
});
$(document).on("click", ".exportChatButton", async function () {
const filenamefull = $(this).closest('.select_chat_block_wrapper').find('.select_chat_block_filename').text();
const filename = filenamefull.replace('.jsonl', '');
const body = {
is_group: !!selected_group,
avatar_url: characters[this_chid]?.avatar,
file: `${filename}.jsonl`,
exportfilename: `${filename}.txt`,
}
console.log(body);
try {
const response = await fetch('/exportchat', {
method: 'POST',
body: JSON.stringify(body),
headers: getRequestHeaders(),
});
const data = await response.json();
if (!response.ok) {
// display error message
console.log(data.message);
await delay(250);
toastr.error(`Error: ${data.message}`);
return;
} else {
// success, handle response data
console.log(data);
await delay(250);
toastr.success(data.message);
}
} catch (error) {
// display error message
console.log(`An error has occurred: ${error.message}`);
await delay(250);
toastr.error(`Error: ${error.message}`);
}
});
$("#talkativeness_slider").on("input", function () {
if (menu_type == "create") {
create_save_talkativeness = $("#talkativeness_slider").val();

View File

@ -15,7 +15,7 @@ const defaultSettings = {
keep_context_step: 1,
n_results: 20,
n_results_min: 1,
n_results_min: 0,
n_results_max: 100,
n_results_step: 1,

View File

@ -2620,7 +2620,8 @@ h5 {
flex: 1
}
.renameChatButton {
.renameChatButton,
.exportChatButton {
cursor: pointer;
}

View File

@ -1593,6 +1593,63 @@ app.post("/dupecharacter", jsonParser, async function (request, response) {
}
});
app.post("/exportchat", jsonParser, async function (request, response) {
if (!request.body.file || (!request.body.avatar_url && request.body.is_group === false)) {
return response.sendStatus(400);
}
const pathToFolder = request.body.is_group
? directories.groupChats
: path.join(directories.chats, String(request.body.avatar_url).replace('.png', ''));
//let charname = String(sanitize(request.body.avatar_url)).replace('.png', '');
let filename = path.join(pathToFolder, request.body.file);
let exportfilename = path.join(pathToFolder, request.body.exportfilename)
if (!fs.existsSync(filename)) {
const errorMessage = {
message: `Could not find JSONL file to export. Source chat file: ${filename}. Intended destination file: ${exportfilename}.`
}
console.log(errorMessage.message);
return response.status(404).json(errorMessage);
}
if (fs.existsSync(exportfilename)) {
const errorMessage = {
message: `File by that name already exists. Export chat aborted.`
}
console.log(errorMessage.message);
return response.status(400).json(errorMessage);
}
try {
const readline = require('readline');
const fs = require('fs');
const readStream = fs.createReadStream(filename);
const writeStream = fs.createWriteStream(exportfilename);
const rl = readline.createInterface({
input: readStream,
});
rl.on('line', (line) => {
const data = JSON.parse(line);
if (data.mes) {
const name = data.name;
const message = data.mes.replace(/\r?\n/g, '\n');
writeStream.write(`${name}: ${message}\n\n`);
}
});
rl.on('close', () => {
writeStream.end();
});
//fs.promises.copyFile(filename, exportfilename)
const successMessage = {
message: `Chat exported as ${exportfilename}`
}
console.log(`Chat exported as ${exportfilename}`);
return response.status(200).json(successMessage);
}
catch (err) {
console.log("chat export failed.")
console.log(err);
return response.sendStatus(400);
}
})
app.post("/exportcharacter", jsonParser, async function (request, response) {
if (!request.body.format || !request.body.avatar_url) {
return response.sendStatus(400);