sillytavern 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -46,7 +46,7 @@
46
46
  "type": "git",
47
47
  "url": "https://github.com/Cohee1207/SillyTavern.git"
48
48
  },
49
- "version": "1.6.0",
49
+ "version": "1.6.2",
50
50
  "scripts": {
51
51
  "start": "node server.js",
52
52
  "pkg": "pkg --compress Gzip --no-bytecode --public ."
package/poe-client.js CHANGED
@@ -318,14 +318,14 @@ class Client {
318
318
  if (!viewer.availableBots) {
319
319
  throw new Error('Invalid token.');
320
320
  }
321
- const botList = viewer.availableBots;
321
+ const botList = viewer.viewerBotList;
322
322
  const retries = 2;
323
323
  const bots = {};
324
324
  for (const bot of botList.filter(x => x.deletionState == 'not_deleted')) {
325
325
  try {
326
326
  const url = `https://poe.com/_next/data/${this.next_data.buildId}/${bot.displayName}.json`;
327
327
  let r;
328
-
328
+
329
329
  if (this.use_cached_bots && cached_bots[url]) {
330
330
  r = cached_bots[url];
331
331
  }
@@ -334,7 +334,7 @@ class Client {
334
334
  r = await request_with_retries(() => this.session.get(url), retries);
335
335
  cached_bots[url] = r;
336
336
  }
337
-
337
+
338
338
  const chatData = r.data.pageProps.payload.chatOfBotDisplayName;
339
339
  bots[chatData.defaultBotObject.nickname] = chatData;
340
340
  }
@@ -640,4 +640,4 @@ class Client {
640
640
 
641
641
  load_queries();
642
642
 
643
- module.exports = { Client };
643
+ module.exports = { Client };
package/public/script.js CHANGED
@@ -1104,6 +1104,14 @@ function getMessageFromTemplate({ mesId, characterName, isUser, avatarImg, bias,
1104
1104
  return mes;
1105
1105
  }
1106
1106
 
1107
+ export function updateMessageBlock(messageId, message) {
1108
+ const messageElement = $(`#chat [mesid="${messageId}"]`);
1109
+ const text = message?.extra?.display_text ?? message.mes;
1110
+ messageElement.find('.mes_text').html(messageFormatting(text, message.name, message.is_system, message.is_user));
1111
+ addCopyToCodeBlocks(messageElement)
1112
+ appendImageToMessage(message, messageElement);
1113
+ }
1114
+
1107
1115
  export function appendImageToMessage(mes, messageElement) {
1108
1116
  if (mes.extra?.image) {
1109
1117
  const image = messageElement.find('.mes_img');
@@ -1117,7 +1125,7 @@ export function appendImageToMessage(mes, messageElement) {
1117
1125
  }
1118
1126
  }
1119
1127
 
1120
- function addCopyToCodeBlocks(messageElement) {
1128
+ export function addCopyToCodeBlocks(messageElement) {
1121
1129
  const codeBlocks = $(messageElement).find("pre code");
1122
1130
  for (let i = 0; i < codeBlocks.length; i++) {
1123
1131
  hljs.highlightElement(codeBlocks.get(i));
@@ -4013,8 +4021,8 @@ function setCharacterBlockHeight() {
4013
4021
 
4014
4022
  // Common code for message editor done and auto-save
4015
4023
  function updateMessage(div) {
4016
- let mesBlock = div.closest(".mes_block");
4017
- var text = mesBlock.find(".edit_textarea").val().trim();
4024
+ const mesBlock = div.closest(".mes_block");
4025
+ const text = mesBlock.find(".edit_textarea").val().trim();
4018
4026
  const bias = extractMessageBias(text);
4019
4027
  const mes = chat[this_edit_mes_id];
4020
4028
  mes["mes"] = text;
@@ -4070,7 +4078,7 @@ async function messageEditDone(div) {
4070
4078
  await eventSource.emit(event_types.MESSAGE_EDITED, this_edit_mes_id);
4071
4079
 
4072
4080
  this_edit_mes_id = undefined;
4073
- saveChatConditional();
4081
+ await saveChatConditional();
4074
4082
  }
4075
4083
 
4076
4084
  async function getPastCharacterChats() {
@@ -6257,7 +6265,7 @@ $(document).ready(function () {
6257
6265
 
6258
6266
  //********************
6259
6267
  //***Message Editor***
6260
- $(document).on("click", ".mes_edit", function () {
6268
+ $(document).on("click", ".mes_edit", async function () {
6261
6269
  if (this_chid !== undefined || selected_group) {
6262
6270
  // Previously system messages we're allowed to be edited
6263
6271
  /*const message = $(this).closest(".mes");
@@ -6268,12 +6276,8 @@ $(document).ready(function () {
6268
6276
 
6269
6277
  let chatScrollPosition = $("#chat").scrollTop();
6270
6278
  if (this_edit_mes_id !== undefined) {
6271
- let mes_edited = $("#chat")
6272
- .children()
6273
- .filter('[mesid="' + this_edit_mes_id + '"]')
6274
- .find(".mes_block")
6275
- .find(".mes_edit_done");
6276
- if (edit_mes_id == count_view_mes - 1) { //if the generating swipe (...)
6279
+ let mes_edited = $(`#chat [mesid="${this_edit_mes_id}"]`).find(".mes_edit_done");
6280
+ if (Number(edit_mes_id) == count_view_mes - 1) { //if the generating swipe (...)
6277
6281
  if (chat[edit_mes_id]['swipe_id'] !== undefined) {
6278
6282
  if (chat[edit_mes_id]['swipes'].length === chat[edit_mes_id]['swipe_id']) {
6279
6283
  run_edit = false;
@@ -6283,7 +6287,7 @@ $(document).ready(function () {
6283
6287
  hideSwipeButtons();
6284
6288
  }
6285
6289
  }
6286
- messageEditDone(mes_edited);
6290
+ await messageEditDone(mes_edited);
6287
6291
  }
6288
6292
  $(this).closest(".mes_block").find(".mes_text").empty();
6289
6293
  $(this).closest(".mes_block").find(".mes_buttons").css("display", "none");
@@ -6454,8 +6458,8 @@ $(document).ready(function () {
6454
6458
  showSwipeButtons();
6455
6459
  });
6456
6460
 
6457
- $(document).on("click", ".mes_edit_done", function () {
6458
- messageEditDone($(this));
6461
+ $(document).on("click", ".mes_edit_done", async function () {
6462
+ await messageEditDone($(this));
6459
6463
  });
6460
6464
 
6461
6465
  $("#your_name_button").click(function () {
@@ -230,7 +230,7 @@ async function onExportClick() {
230
230
  const exportResult = await fetch(url, {
231
231
  method: 'POST',
232
232
  headers: postHeaders,
233
- body: JSON.stringify({ currentChatId }),
233
+ body: JSON.stringify({ chat_id: currentChatId }),
234
234
  });
235
235
 
236
236
  if (exportResult.ok) {
@@ -3,10 +3,10 @@ import {
3
3
  eventSource,
4
4
  event_types,
5
5
  getRequestHeaders,
6
- messageFormatting,
7
6
  reloadCurrentChat,
8
7
  saveSettingsDebounced,
9
8
  substituteParams,
9
+ updateMessageBlock,
10
10
  } from "../../../script.js";
11
11
  import { extension_settings, getContext } from "../../extensions.js";
12
12
 
@@ -168,7 +168,7 @@ async function translateIncomingMessage(messageId) {
168
168
  const translation = await translate(textToTranslate, extension_settings.translate.target_language);
169
169
  message.extra.display_text = translation;
170
170
 
171
- $(`#chat .mes[mesid="${messageId}"] .mes_text`).html(messageFormatting(translation, message.name, message.is_system, message.is_user));
171
+ updateMessageBlock(messageId, message);
172
172
  }
173
173
 
174
174
  async function translateProviderGoogle(text, lang) {
@@ -211,8 +211,8 @@ async function translateOutgoingMessage(messageId) {
211
211
 
212
212
  const originalText = message.mes;
213
213
  message.extra.display_text = originalText;
214
- $(`#chat .mes[mesid="${messageId}"] .mes_text`).html(messageFormatting(originalText, message.name, message.is_system, message.is_user));
215
214
  message.mes = await translate(originalText, extension_settings.translate.internal_language);
215
+ updateMessageBlock(messageId, message);
216
216
 
217
217
  console.log('translateOutgoingMessage', messageId);
218
218
  }
@@ -291,6 +291,24 @@ async function translateMessageEdit(messageId) {
291
291
  }
292
292
  }
293
293
 
294
+ async function onMessageTranslateClick() {
295
+ const context = getContext();
296
+ const messageId = $(this).closest('.mes').attr('mesid');
297
+ const message = context.chat[messageId];
298
+
299
+ // If the message is already translated, revert it back to the original text
300
+ if (message?.extra?.display_text) {
301
+ delete message.extra.display_text;
302
+ updateMessageBlock(messageId, message);
303
+ }
304
+ // If the message is not translated, translate it
305
+ else {
306
+ await translateIncomingMessage(messageId);
307
+ }
308
+
309
+ await context.saveChat();
310
+ }
311
+
294
312
  const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
295
313
  const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
296
314
  const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
@@ -352,12 +370,7 @@ jQuery(() => {
352
370
  extension_settings.translate.target_language = event.target.value;
353
371
  saveSettingsDebounced();
354
372
  });
355
- $(document).on('click', '.mes_translate', function () {
356
- const context = getContext();
357
- const messageId = $(this).closest('.mes').attr('mesid');
358
- translateIncomingMessage(messageId);
359
- context.saveChat();
360
- });
373
+ $(document).on('click', '.mes_translate', onMessageTranslateClick);
361
374
 
362
375
  loadSettings();
363
376
 
package/readme.md CHANGED
@@ -56,6 +56,7 @@ Get in touch with the developers directly:
56
56
  * Chat bookmarks / branching (duplicates the dialogue in its current state)
57
57
  * Advanced KoboldAI / TextGen generation settings with a lot of community-made presets
58
58
  * World Info support: create a rich lore or save tokens on your character card
59
+ * Window AI browser extension support (run models like Claude, GPT 4): https://windowai.io/
59
60
  * [Oobabooga's TextGen WebUI](https://github.com/oobabooga/text-generation-webui) API connection
60
61
  * [AI Horde](https://horde.koboldai.net/) connection
61
62
  * [Poe.com](https://poe.com) (ChatGPT / Claude) connection