Compare commits

..

10 Commits
1.6.0 ... 1.6.2

Author SHA1 Message Date
SillyLossy
b359dd1e81 Bump package version 2023-05-31 02:09:54 +03:00
SillyLossy
cdaa14964e Fix async race condition in message editor 2023-05-31 02:09:08 +03:00
SillyLossy
747567466f Bump package version 2023-05-31 01:24:20 +03:00
SillyLossy
d95786fb25 Merge branch 'main' of https://github.com/SillyLossy/TavernAI 2023-05-31 01:18:49 +03:00
SillyLossy
e0fdd1513c #411 Fix Poe bot list loading 2023-05-31 01:18:47 +03:00
Cohee
3f9ccff2bc Merge pull request #413 from BlipRanger/dev
Hotfix for Chromadb export.
2023-05-31 01:18:13 +03:00
BlipRanger
c9c82537a7 Hotfix for Chromadb export.
Missing key which causes export to fail.
2023-05-30 17:53:36 -04:00
SillyLossy
ed74eedc5b Display code blocks in translated messages 2023-05-30 23:57:56 +03:00
SillyLossy
8fdfb272a4 #407 Add two-state message translation button 2023-05-30 23:47:09 +03:00
Cohee
b1927d454c Update readme.md 2023-05-30 21:05:56 +03:00
7 changed files with 49 additions and 31 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "sillytavern",
"version": "1.6.0",
"version": "1.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "sillytavern",
"version": "1.6.0",
"version": "1.6.2",
"license": "AGPL-3.0",
"dependencies": {
"@dqbd/tiktoken": "^1.0.2",

View File

@@ -46,7 +46,7 @@
"type": "git",
"url": "https://github.com/Cohee1207/SillyTavern.git"
},
"version": "1.6.0",
"version": "1.6.2",
"scripts": {
"start": "node server.js",
"pkg": "pkg --compress Gzip --no-bytecode --public ."

View File

@@ -318,14 +318,14 @@ class Client {
if (!viewer.availableBots) {
throw new Error('Invalid token.');
}
const botList = viewer.availableBots;
const botList = viewer.viewerBotList;
const retries = 2;
const bots = {};
for (const bot of botList.filter(x => x.deletionState == 'not_deleted')) {
try {
const url = `https://poe.com/_next/data/${this.next_data.buildId}/${bot.displayName}.json`;
let r;
if (this.use_cached_bots && cached_bots[url]) {
r = cached_bots[url];
}
@@ -334,7 +334,7 @@ class Client {
r = await request_with_retries(() => this.session.get(url), retries);
cached_bots[url] = r;
}
const chatData = r.data.pageProps.payload.chatOfBotDisplayName;
bots[chatData.defaultBotObject.nickname] = chatData;
}
@@ -640,4 +640,4 @@ class Client {
load_queries();
module.exports = { Client };
module.exports = { Client };

View File

@@ -1104,6 +1104,14 @@ function getMessageFromTemplate({ mesId, characterName, isUser, avatarImg, bias,
return mes;
}
export function updateMessageBlock(messageId, message) {
const messageElement = $(`#chat [mesid="${messageId}"]`);
const text = message?.extra?.display_text ?? message.mes;
messageElement.find('.mes_text').html(messageFormatting(text, message.name, message.is_system, message.is_user));
addCopyToCodeBlocks(messageElement)
appendImageToMessage(message, messageElement);
}
export function appendImageToMessage(mes, messageElement) {
if (mes.extra?.image) {
const image = messageElement.find('.mes_img');
@@ -1117,7 +1125,7 @@ export function appendImageToMessage(mes, messageElement) {
}
}
function addCopyToCodeBlocks(messageElement) {
export function addCopyToCodeBlocks(messageElement) {
const codeBlocks = $(messageElement).find("pre code");
for (let i = 0; i < codeBlocks.length; i++) {
hljs.highlightElement(codeBlocks.get(i));
@@ -4013,8 +4021,8 @@ function setCharacterBlockHeight() {
// 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 mesBlock = div.closest(".mes_block");
const text = mesBlock.find(".edit_textarea").val().trim();
const bias = extractMessageBias(text);
const mes = chat[this_edit_mes_id];
mes["mes"] = text;
@@ -4070,7 +4078,7 @@ async function messageEditDone(div) {
await eventSource.emit(event_types.MESSAGE_EDITED, this_edit_mes_id);
this_edit_mes_id = undefined;
saveChatConditional();
await saveChatConditional();
}
async function getPastCharacterChats() {
@@ -6257,7 +6265,7 @@ $(document).ready(function () {
//********************
//***Message Editor***
$(document).on("click", ".mes_edit", function () {
$(document).on("click", ".mes_edit", async function () {
if (this_chid !== undefined || selected_group) {
// Previously system messages we're allowed to be edited
/*const message = $(this).closest(".mes");
@@ -6268,12 +6276,8 @@ $(document).ready(function () {
let chatScrollPosition = $("#chat").scrollTop();
if (this_edit_mes_id !== undefined) {
let mes_edited = $("#chat")
.children()
.filter('[mesid="' + this_edit_mes_id + '"]')
.find(".mes_block")
.find(".mes_edit_done");
if (edit_mes_id == count_view_mes - 1) { //if the generating swipe (...)
let mes_edited = $(`#chat [mesid="${this_edit_mes_id}"]`).find(".mes_edit_done");
if (Number(edit_mes_id) == count_view_mes - 1) { //if the generating swipe (...)
if (chat[edit_mes_id]['swipe_id'] !== undefined) {
if (chat[edit_mes_id]['swipes'].length === chat[edit_mes_id]['swipe_id']) {
run_edit = false;
@@ -6283,7 +6287,7 @@ $(document).ready(function () {
hideSwipeButtons();
}
}
messageEditDone(mes_edited);
await messageEditDone(mes_edited);
}
$(this).closest(".mes_block").find(".mes_text").empty();
$(this).closest(".mes_block").find(".mes_buttons").css("display", "none");
@@ -6454,8 +6458,8 @@ $(document).ready(function () {
showSwipeButtons();
});
$(document).on("click", ".mes_edit_done", function () {
messageEditDone($(this));
$(document).on("click", ".mes_edit_done", async function () {
await messageEditDone($(this));
});
$("#your_name_button").click(function () {

View File

@@ -230,7 +230,7 @@ async function onExportClick() {
const exportResult = await fetch(url, {
method: 'POST',
headers: postHeaders,
body: JSON.stringify({ currentChatId }),
body: JSON.stringify({ chat_id: currentChatId }),
});
if (exportResult.ok) {

View File

@@ -3,10 +3,10 @@ import {
eventSource,
event_types,
getRequestHeaders,
messageFormatting,
reloadCurrentChat,
saveSettingsDebounced,
substituteParams,
updateMessageBlock,
} from "../../../script.js";
import { extension_settings, getContext } from "../../extensions.js";
@@ -168,7 +168,7 @@ async function translateIncomingMessage(messageId) {
const translation = await translate(textToTranslate, extension_settings.translate.target_language);
message.extra.display_text = translation;
$(`#chat .mes[mesid="${messageId}"] .mes_text`).html(messageFormatting(translation, message.name, message.is_system, message.is_user));
updateMessageBlock(messageId, message);
}
async function translateProviderGoogle(text, lang) {
@@ -211,8 +211,8 @@ async function translateOutgoingMessage(messageId) {
const originalText = message.mes;
message.extra.display_text = originalText;
$(`#chat .mes[mesid="${messageId}"] .mes_text`).html(messageFormatting(originalText, message.name, message.is_system, message.is_user));
message.mes = await translate(originalText, extension_settings.translate.internal_language);
updateMessageBlock(messageId, message);
console.log('translateOutgoingMessage', messageId);
}
@@ -291,6 +291,24 @@ async function translateMessageEdit(messageId) {
}
}
async function onMessageTranslateClick() {
const context = getContext();
const messageId = $(this).closest('.mes').attr('mesid');
const message = context.chat[messageId];
// If the message is already translated, revert it back to the original text
if (message?.extra?.display_text) {
delete message.extra.display_text;
updateMessageBlock(messageId, message);
}
// If the message is not translated, translate it
else {
await translateIncomingMessage(messageId);
}
await context.saveChat();
}
const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
@@ -352,12 +370,7 @@ jQuery(() => {
extension_settings.translate.target_language = event.target.value;
saveSettingsDebounced();
});
$(document).on('click', '.mes_translate', function () {
const context = getContext();
const messageId = $(this).closest('.mes').attr('mesid');
translateIncomingMessage(messageId);
context.saveChat();
});
$(document).on('click', '.mes_translate', onMessageTranslateClick);
loadSettings();

View File

@@ -56,6 +56,7 @@ Get in touch with the developers directly:
* Chat bookmarks / branching (duplicates the dialogue in its current state)
* Advanced KoboldAI / TextGen generation settings with a lot of community-made presets
* World Info support: create a rich lore or save tokens on your character card
* Window AI browser extension support (run models like Claude, GPT 4): https://windowai.io/
* [Oobabooga's TextGen WebUI](https://github.com/oobabooga/text-generation-webui) API connection
* [AI Horde](https://horde.koboldai.net/) connection
* [Poe.com](https://poe.com) (ChatGPT / Claude) connection