mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b359dd1e81 | ||
|
cdaa14964e | ||
|
747567466f | ||
|
d95786fb25 | ||
|
e0fdd1513c | ||
|
3f9ccff2bc | ||
|
c9c82537a7 | ||
|
ed74eedc5b | ||
|
8fdfb272a4 | ||
|
b1927d454c |
4
package-lock.json
generated
4
package-lock.json
generated
@@ -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",
|
||||
|
@@ -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 ."
|
||||
|
@@ -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 };
|
||||
|
@@ -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 () {
|
||||
|
@@ -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) {
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user