Message translate on edit

This commit is contained in:
SillyLossy
2023-05-28 22:43:31 +03:00
parent 73fa174165
commit b74939bf65
3 changed files with 59 additions and 57 deletions

View File

@ -417,6 +417,7 @@ export const event_types = {
MESSAGE_SWIPED: 'message_swiped',
MESSAGE_SENT: 'message_sent',
MESSAGE_RECEIVED: 'message_received',
MESSAGE_EDITED: 'message_edited',
IMPERSONATE_READY: 'impersonate_ready',
}
@ -4042,39 +4043,8 @@ function setCharacterBlockHeight() {
//should be set to an onload for rm_print_characters or windows?
}
function messageEditAuto(div) {
let mesBlock = div.closest(".mes_block");
var text = mesBlock.find(".edit_textarea").val().trim();
const bias = extractMessageBias(text);
const mes = chat[this_edit_mes_id];
mes["mes"] = text;
if (mes["swipe_id"] !== undefined) {
mes["swipes"][mes["swipe_id"]] = text;
}
// editing old messages
if (!mes["extra"]) {
mes["extra"] = {};
}
if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
mes.extra.bias = bias ?? null;
}
else {
mes.extra.bias = null;
}
mesBlock.find(".mes_text").val('');
mesBlock.find(".mes_text").val(messageFormatting(
text,
this_edit_mes_chname,
mes.is_system,
mes.is_user,
));
saveChatDebounced();
}
function messageEditDone(div) {
// Common code for message editor done and auto-save
function updateMessage(div) {
let mesBlock = div.closest(".mes_block");
var text = mesBlock.find(".edit_textarea").val().trim();
const bias = extractMessageBias(text);
@ -4091,11 +4061,29 @@ function messageEditDone(div) {
if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
mes.extra.bias = bias ?? null;
}
else {
} else {
mes.extra.bias = null;
}
return { mesBlock, text, mes, bias };
}
function messageEditAuto(div) {
const { mesBlock, text, mes } = updateMessage(div);
mesBlock.find(".mes_text").val('');
mesBlock.find(".mes_text").val(messageFormatting(
text,
this_edit_mes_chname,
mes.is_system,
mes.is_user,
));
saveChatDebounced();
}
async function messageEditDone(div) {
const { mesBlock, text, mes, bias } = updateMessage(div);
mesBlock.find(".mes_text").empty();
mesBlock.find(".mes_edit_buttons").css("display", "none");
mesBlock.find(".mes_buttons").css("display", "");
@ -4111,6 +4099,8 @@ function messageEditDone(div) {
mesBlock.find(".mes_bias").append(messageFormatting(bias));
appendImageToMessage(mes, div.closest(".mes"));
addCopyToCodeBlocks(div.closest(".mes"));
await eventSource.emit(event_types.MESSAGE_EDITED, this_edit_mes_id);
this_edit_mes_id = undefined;
saveChatConditional();
}

View File

@ -17,6 +17,9 @@ const autoModeOptions = {
BOTH: 'both',
};
const incomingTypes = [autoModeOptions.RESPONSES, autoModeOptions.BOTH];
const outgoingTypes = [autoModeOptions.INPUT, autoModeOptions.BOTH];
const defaultSettings = {
target_language: 'en',
internal_language: 'en',
@ -274,6 +277,25 @@ async function onTranslationsClearClick() {
await reloadCurrentChat();
}
async function translateMessageEdit(messageId) {
const context = getContext();
const chat = context.chat;
const message = chat[messageId];
if (message.is_system || extension_settings.translate.auto_mode == autoModeOptions.NONE) {
return;
}
if ((message.is_user && shouldTranslate(outgoingTypes)) || (!message.is_user && shouldTranslate(incomingTypes))) {
await translateIncomingMessage(messageId);
}
}
const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
const handleMessageEdit = createEventHandler(translateMessageEdit, () => true);
jQuery(() => {
const html = `
<div class="translation_settings">
@ -339,17 +361,11 @@ jQuery(() => {
loadSettings();
const incomingTypes = [autoModeOptions.RESPONSES, autoModeOptions.BOTH];
const outgoingTypes = [autoModeOptions.INPUT, autoModeOptions.BOTH];
const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
eventSource.on(event_types.MESSAGE_RECEIVED, handleIncomingMessage);
eventSource.on(event_types.MESSAGE_SWIPED, handleIncomingMessage);
eventSource.on(event_types.MESSAGE_SENT, handleOutgoingMessage);
eventSource.on(event_types.IMPERSONATE_READY, handleImpersonateReady);
eventSource.on(event_types.MESSAGE_EDITED, handleMessageEdit);
document.body.classList.add('translate');
});

View File

@ -3034,7 +3034,6 @@ app.post('/horde_generateimage', jsonParser, async (request, response) => {
app.post('/google_translate', jsonParser, async (request, response) => {
const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser');
const https = require('https');
const text = request.body.text;
const lang = request.body.lang;
@ -3045,24 +3044,21 @@ app.post('/google_translate', jsonParser, async (request, response) => {
console.log('Input text: ' + text);
try {
const url = generateRequestUrl(text, { to: lang });
const resp = await fetch(url);
https.get(url, (resp) => {
let data = '';
if (!resp.ok) {
throw new Error(resp.statusText);
}
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
const result = normaliseResponse(JSON.parse(data));
const result = normaliseResponse(await resp.json());
console.log('Translated text: ' + result.text);
return response.send(result.text);
});
}).on("error", (err) => {
} catch (err) {
console.log("Translation error: " + err.message);
return response.sendStatus(500);
});
}
});
function writeSecret(key, value) {