diff --git a/public/script.js b/public/script.js
index b5d38d6d3..e0e0f2ab9 100644
--- a/public/script.js
+++ b/public/script.js
@@ -150,6 +150,7 @@ import {
humanFileSize,
Stopwatch,
isValidUrl,
+ ensureImageFormatSupported,
} from './scripts/utils.js';
import { ModuleWorkerWrapper, doDailyExtensionUpdatesCheck, extension_settings, getContext, loadExtensionSettings, renderExtensionTemplate, runGenerationInterceptors, saveMetadataDebounced, writeExtensionField } from './scripts/extensions.js';
@@ -5713,6 +5714,12 @@ async function uploadUserAvatar(e) {
}
}
+ const rawFile = formData.get('avatar');
+ if (rawFile instanceof File){
+ const convertedFile = await ensureImageFormatSupported(rawFile);
+ formData.set('avatar', convertedFile);
+ }
+
jQuery.ajax({
type: 'POST',
url: url,
@@ -7212,8 +7219,15 @@ function addAlternateGreeting(template, greeting, index, getArray) {
async function createOrEditCharacter(e) {
$('#rm_info_avatar').html('');
- var formData = new FormData($('#form_create').get(0));
+ const formData = new FormData($('#form_create').get(0));
formData.set('fav', fav_ch_checked);
+
+ const rawFile = formData.get('avatar');
+ if (rawFile instanceof File){
+ const convertedFile = await ensureImageFormatSupported(rawFile);
+ formData.set('avatar', convertedFile);
+ }
+
if ($('#form_create').attr('actiontype') == 'createcharacter') {
if ($('#character_name_pole').val().length > 0) {
if (is_group_generating || is_send_press) {
diff --git a/public/scripts/utils.js b/public/scripts/utils.js
index 4f825d4b2..0b309c4f0 100644
--- a/public/scripts/utils.js
+++ b/public/scripts/utils.js
@@ -1047,15 +1047,51 @@ export function loadFileToDocument(url, type) {
});
}
+/**
+ * Ensure that we can import war crime image formats like WEBP and AVIF.
+ * @param {File} file Input file
+ * @returns {Promise
} A promise that resolves to the supported file.
+ */
+export async function ensureImageFormatSupported(file) {
+ const supportedTypes = [
+ 'image/jpeg',
+ 'image/png',
+ 'image/bmp',
+ 'image/tiff',
+ 'image/gif',
+ 'image/apng',
+ ];
+
+ if (supportedTypes.includes(file.type) || !file.type.startsWith('image/')) {
+ return file;
+ }
+
+ return await convertImageFile(file, 'image/png');
+}
+
+/**
+ * Converts an image file to a given format.
+ * @param {File} inputFile File to convert
+ * @param {string} type Target file type
+ * @returns {Promise} A promise that resolves to the converted file.
+ */
+export async function convertImageFile(inputFile, type = 'image/png') {
+ const base64 = await getBase64Async(inputFile);
+ const thumbnail = await createThumbnail(base64, null, null, type);
+ const blob = await fetch(thumbnail).then(res => res.blob());
+ const outputFile = new File([blob], inputFile.name, { type });
+ return outputFile;
+}
+
/**
* Creates a thumbnail from a data URL.
* @param {string} dataUrl The data URL encoded data of the image.
- * @param {number} maxWidth The maximum width of the thumbnail.
- * @param {number} maxHeight The maximum height of the thumbnail.
+ * @param {number|null} maxWidth The maximum width of the thumbnail.
+ * @param {number|null} maxHeight The maximum height of the thumbnail.
* @param {string} [type='image/jpeg'] The type of the thumbnail.
* @returns {Promise} A promise that resolves to the thumbnail data URL.
*/
-export function createThumbnail(dataUrl, maxWidth, maxHeight, type = 'image/jpeg') {
+export function createThumbnail(dataUrl, maxWidth = null, maxHeight = null, type = 'image/jpeg') {
// Someone might pass in a base64 encoded string without the data URL prefix
if (!dataUrl.includes('data:')) {
dataUrl = `data:image/jpeg;base64,${dataUrl}`;
@@ -1073,6 +1109,16 @@ export function createThumbnail(dataUrl, maxWidth, maxHeight, type = 'image/jpeg
let thumbnailWidth = maxWidth;
let thumbnailHeight = maxHeight;
+ if (maxWidth === null) {
+ thumbnailWidth = img.width;
+ maxWidth = img.width;
+ }
+
+ if (maxHeight === null) {
+ thumbnailHeight = img.height;
+ maxHeight = img.height;
+ }
+
if (img.width > img.height) {
thumbnailHeight = maxWidth / aspectRatio;
} else {
From 6fe1b0f0e286c968d057ab39797e42fdca12ae4e Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 19:25:54 +0200
Subject: [PATCH 17/43] #1933 Gemini 1.5 Pro
---
public/index.html | 1 +
public/scripts/openai.js | 3 +++
2 files changed, 4 insertions(+)
diff --git a/public/index.html b/public/index.html
index 24cd3db85..7c82d0b1b 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2572,6 +2572,7 @@
Google Model
+ Gemini 1.5 Pro
Gemini Pro
Gemini Pro Vision
Bison Text
diff --git a/public/scripts/openai.js b/public/scripts/openai.js
index 20ed56f00..118a4f45a 100644
--- a/public/scripts/openai.js
+++ b/public/scripts/openai.js
@@ -115,6 +115,7 @@ const max_16k = 16383;
const max_32k = 32767;
const max_128k = 128 * 1000;
const max_200k = 200 * 1000;
+const max_1mil = 1000 * 1000;
const scale_max = 8191;
const claude_max = 9000; // We have a proper tokenizer, so theoretically could be larger (up to 9k)
const claude_100k_max = 99000;
@@ -3434,6 +3435,8 @@ async function onModelChange() {
if (oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE) {
if (oai_settings.max_context_unlocked) {
$('#openai_max_context').attr('max', unlocked_max);
+ } else if (value === 'gemini-1.5-pro') {
+ $('#openai_max_context').attr('max', max_1mil);
} else if (value === 'gemini-pro') {
$('#openai_max_context').attr('max', max_32k);
} else if (value === 'gemini-pro-vision') {
From c46c6f6c372224d87feb03a2e206b0ad0d2ef17f Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 19:59:19 +0200
Subject: [PATCH 18/43] Delag prompt manager operations
---
public/scripts/PromptManager.js | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/public/scripts/PromptManager.js b/public/scripts/PromptManager.js
index c506ba18f..888a912f1 100644
--- a/public/scripts/PromptManager.js
+++ b/public/scripts/PromptManager.js
@@ -310,7 +310,8 @@ class PromptManager {
counts[promptID] = null;
promptOrderEntry.enabled = !promptOrderEntry.enabled;
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
};
// Open edit form and load selected prompt
@@ -350,7 +351,8 @@ class PromptManager {
this.detachPrompt(prompt, this.activeCharacter);
this.hidePopup();
this.clearEditForm();
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
};
// Save prompt edit form to settings and close form.
@@ -374,7 +376,8 @@ class PromptManager {
this.hidePopup();
this.clearEditForm();
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
};
// Reset prompt should it be a system prompt
@@ -420,7 +423,8 @@ class PromptManager {
if (prompt) {
this.appendPrompt(prompt, this.activeCharacter);
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
}
};
@@ -437,7 +441,8 @@ class PromptManager {
this.hidePopup();
this.clearEditForm();
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
}
};
@@ -541,7 +546,8 @@ class PromptManager {
this.removePromptOrderForCharacter(this.activeCharacter);
this.addPromptOrderForCharacter(this.activeCharacter, promptManagerDefaultPromptOrder);
- this.saveServiceSettings().then(() => this.render());
+ this.render();
+ this.saveServiceSettings();
});
};
From 06787774606ff355aa939326a3152560d90c794c Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 20:12:36 +0200
Subject: [PATCH 19/43] Preserve selected prompt index on render
---
public/scripts/PromptManager.js | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/public/scripts/PromptManager.js b/public/scripts/PromptManager.js
index 888a912f1..cc0beac7b 100644
--- a/public/scripts/PromptManager.js
+++ b/public/scripts/PromptManager.js
@@ -1303,6 +1303,11 @@ class PromptManager {
* Empties, then re-assembles the container containing the prompt list.
*/
renderPromptManager() {
+ let selectedPromptIndex = 0;
+ const existingAppendSelect = document.getElementById(`${this.configuration.prefix}prompt_manager_footer_append_prompt`);
+ if (existingAppendSelect instanceof HTMLSelectElement) {
+ selectedPromptIndex = existingAppendSelect.selectedIndex;
+ }
const promptManagerDiv = this.containerElement;
promptManagerDiv.innerHTML = '';
@@ -1332,13 +1337,21 @@ class PromptManager {
if (null !== this.activeCharacter) {
const prompts = [...this.serviceSettings.prompts]
.filter(prompt => prompt && !prompt?.system_prompt)
- .sort((promptA, promptB) => promptA.name.localeCompare(promptB.name))
- .reduce((acc, prompt) => acc + `${escapeHtml(prompt.name)} `, '');
+ .sort((promptA, promptB) => promptA.name.localeCompare(promptB.name));
+ const promptsHtml = prompts.reduce((acc, prompt) => acc + `${escapeHtml(prompt.name)} `, '');
+
+ if (selectedPromptIndex > 0) {
+ selectedPromptIndex = Math.min(selectedPromptIndex, prompts.length - 1);
+ }
+
+ if (selectedPromptIndex === -1 && prompts.length) {
+ selectedPromptIndex = 0;
+ }
const footerHtml = `
- ${'global' === this.configuration.promptOrder.strategy ? '' : exportForCharacter }
+ ${'global' === this.configuration.promptOrder.strategy ? '' : exportForCharacter}
`;
From b0fbe9434daceeacac9b69a83180a15d2e51ed09 Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 20:18:02 +0200
Subject: [PATCH 20/43] Fix token counter chunk sanitation
---
public/scripts/extensions/token-counter/index.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/public/scripts/extensions/token-counter/index.js b/public/scripts/extensions/token-counter/index.js
index 5dc794f2b..aaa1d58e2 100644
--- a/public/scripts/extensions/token-counter/index.js
+++ b/public/scripts/extensions/token-counter/index.js
@@ -101,7 +101,9 @@ function drawChunks(chunks, ids) {
}
const color = pastelRainbow[i % pastelRainbow.length];
- const chunkHtml = $(`
${chunk}
`);
+ const chunkHtml = $('
');
+ chunkHtml.css('background-color', color);
+ chunkHtml.text(chunk);
chunkHtml.attr('title', ids[i]);
$('#tokenized_chunks_display').append(chunkHtml);
}
From 0021055f5cbe06a85955c4025ec7f802f1f36beb Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 21:47:18 +0200
Subject: [PATCH 21/43] Null has an object type
---
public/script.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/public/script.js b/public/script.js
index e0e0f2ab9..ac2146f50 100644
--- a/public/script.js
+++ b/public/script.js
@@ -4750,7 +4750,7 @@ async function saveReply(type, getMessage, fromStreaming, title, swipes) {
type = 'normal';
}
- if (chat.length && typeof chat[chat.length - 1]['extra'] !== 'object') {
+ if (chat.length && !chat[chat.length - 1]['extra']) {
chat[chat.length - 1]['extra'] = {};
}
From efe54086cede5687506d40d28774fab25b27697b Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Thu, 21 Mar 2024 21:53:47 +0200
Subject: [PATCH 22/43] +1 less improper null check
---
public/script.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/public/script.js b/public/script.js
index ac2146f50..5f2e92c4d 100644
--- a/public/script.js
+++ b/public/script.js
@@ -4750,7 +4750,7 @@ async function saveReply(type, getMessage, fromStreaming, title, swipes) {
type = 'normal';
}
- if (chat.length && !chat[chat.length - 1]['extra']) {
+ if (chat.length && (!chat[chat.length - 1]['extra'] || typeof chat[chat.length - 1]['extra'] !== 'object')) {
chat[chat.length - 1]['extra'] = {};
}
@@ -4899,7 +4899,7 @@ async function saveReply(type, getMessage, fromStreaming, title, swipes) {
function saveImageToMessage(img, mes) {
if (mes && img.image) {
- if (typeof mes.extra !== 'object') {
+ if (!mes.extra || typeof mes.extra !== 'object') {
mes.extra = {};
}
mes.extra.image = img.image;
From e0219d640f2e15ac673c64d5af1587df56c60041 Mon Sep 17 00:00:00 2001
From: blueswolf <160055096+blueswolf@users.noreply.github.com>
Date: Sat, 23 Mar 2024 04:39:52 +0800
Subject: [PATCH 23/43] =?UTF-8?q?Modify=20=E4=B8=AD=E5=9B=BD=E4=BA=BAto=20?=
=?UTF-8?q?=E7=AE=80=E4=BD=93=E4=B8=AD=E6=96=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Modify 中国人 to 简体中文,中国人means people 简体中文means language in chinese
---
public/locales/lang.json | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/public/locales/lang.json b/public/locales/lang.json
index 0e239b0f7..295721ea0 100644
--- a/public/locales/lang.json
+++ b/public/locales/lang.json
@@ -1,16 +1,16 @@
-[
- { "lang": "ar-sa", "display": "عربي (Arabic)" },
- { "lang": "zh-cn", "display": "中国人 (Chinese) (Simplified)" },
- { "lang": "nl-nl", "display": "Nederlands (Dutch)" },
- { "lang": "de-de", "display": "Deutsch (German)" },
- { "lang": "fr-fr", "display": "Français (French)" },
- { "lang": "is-is", "display": "íslenska (Icelandic)" },
- { "lang": "it-it", "display": "Italiano (Italian)" },
- { "lang": "ja-jp", "display": "日本語 (Japanese)" },
- { "lang": "ko-kr", "display": "한국어 (Korean)" },
- { "lang": "pt-pt", "display": "Português (Portuguese brazil)" },
- { "lang": "ru-ru", "display": "Русский (Russian)" },
- { "lang": "es-es", "display": "Español (Spanish)" },
- { "lang": "uk-ua", "display": "Yкраїнська (Ukrainian)" },
- { "lang": "vi-vn", "display": "Tiếng Việt (Vietnamese)" }
+[
+ { "lang": "ar-sa", "display": "عربي (Arabic)" },
+ { "lang": "zh-cn", "display": "简体中文 (Chinese) (Simplified)" },
+ { "lang": "nl-nl", "display": "Nederlands (Dutch)" },
+ { "lang": "de-de", "display": "Deutsch (German)" },
+ { "lang": "fr-fr", "display": "Français (French)" },
+ { "lang": "is-is", "display": "íslenska (Icelandic)" },
+ { "lang": "it-it", "display": "Italiano (Italian)" },
+ { "lang": "ja-jp", "display": "日本語 (Japanese)" },
+ { "lang": "ko-kr", "display": "한국어 (Korean)" },
+ { "lang": "pt-pt", "display": "Português (Portuguese brazil)" },
+ { "lang": "ru-ru", "display": "Русский (Russian)" },
+ { "lang": "es-es", "display": "Español (Spanish)" },
+ { "lang": "uk-ua", "display": "Yкраїнська (Ukrainian)" },
+ { "lang": "vi-vn", "display": "Tiếng Việt (Vietnamese)" }
]
\ No newline at end of file
From c3579c0dab6f1d5ba2c0f81ab3b2ba499235fbf4 Mon Sep 17 00:00:00 2001
From: blueswolf <160055096+blueswolf@users.noreply.github.com>
Date: Sat, 23 Mar 2024 05:45:54 +0800
Subject: [PATCH 24/43] Fixed some Chinese translation errors
Fixed some Chinese translation errors
---
public/locales/zh-cn.json | 1471 +++++++++++++++++++++++--------------
1 file changed, 919 insertions(+), 552 deletions(-)
diff --git a/public/locales/zh-cn.json b/public/locales/zh-cn.json
index fe430219d..b354a6df8 100644
--- a/public/locales/zh-cn.json
+++ b/public/locales/zh-cn.json
@@ -1,552 +1,919 @@
-{
- "UI Language": "语言",
- "clickslidertips": "点击滑块右侧数字可手动输入",
- "kobldpresets": "Kobold 预设",
- "guikoboldaisettings": "KoboldAI GUI 设置",
- "novelaipreserts": "NovelAI 预设",
- "default": "默认",
- "openaipresets": "OpenAI 预设",
- "text gen webio(ooba) presets": "Text generation web UI 预设",
- "response legth(tokens)": "响应长度(Tokens)",
- "select": "选择 ",
- "context size(tokens)": "上下文大小(Tokens)",
- "unlocked": "解锁",
- "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "只有在选定的模型支持大于 4096 个Token时可以选择启用。在启用该选项时,你应该知道自己在做什么。",
- "rep.pen": "重复惩罚",
- "rep.pen range": "重复惩罚范围",
- "temperature": "温度",
- "Encoder Rep. Pen.": "编码器重复惩罚",
- "No Repeat Ngram Size": "不重复N元语法大小",
- "Min Length": "最小长度",
- "OpenAI Reverse Proxy": "OpenAI API 反向代理",
- "Alternative server URL (leave empty to use the default value).": "自定义 OpenAI API 的反向代理地址 (留空时使用 OpenAI 默认服务器)。",
- "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "在输入内容之前,从 API 面板中删除 OpenAI API 密钥",
- "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "我们无法为使用自定义 OpenAI API 反向代理时遇到的问题提供支持",
- "Legacy Streaming Processing": "传统流式处理",
- "Enable this if the streaming doesn't work with your proxy": "如果流式回复与您的代理不兼容,请启用此功能",
- "Context Size (tokens)": "上下文大小(Tokens)",
- "Max Response Length (tokens)": "最大响应长度(Tokens)",
- "Temperature": "温度",
- "Frequency Penalty": "频率惩罚",
- "Presence Penalty": "存在惩罚",
- "Top-p": "Top P",
- "Display bot response text chunks as they are generated": "显示机器人生成的响应文本块",
- "Top A": "Top A",
- "Typical Sampling": "典型采样",
- "Tail Free Sampling": "无尾采样",
- "Rep. Pen. Slope": "重复惩罚梯度",
- "Single-line mode": "单行模式",
- "Top K": "Top-K",
- "Top P": "Top-P",
- "Typical P": "典型 P",
- "Do Sample": "样本测试",
- "Add BOS Token": "添加 BOS Token",
- "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "在提示的开头添加 bos_token,禁用此功能可以让回复更加创造性。",
- "Ban EOS Token": "禁止 EOS Token",
- "Ban the eos_token. This forces the model to never end the generation prematurely": "禁止 EOS Token,这会迫使模型不会过早结束生成。",
- "Skip Special Tokens": "跳过特殊 Tokens",
- "Beam search": "Beam 搜索",
- "Number of Beams": "Beams 的数量",
- "Length Penalty": "长度惩罚",
- "Early Stopping": "提前终止",
- "Contrastive search": "对比搜索",
- "Penalty Alpha": "惩罚系数",
- "Seed": "随机种子",
- "Inserts jailbreak as a last system message.": "插入越狱作为最后一个系统消息",
- "This tells the AI to ignore its usual content restrictions.": "这告诉人工智能忽略其通常的内容限制",
- "NSFW Encouraged": "NSFW鼓励",
- "Tell the AI that NSFW is allowed.": "告诉人工智能,NSFW 是允许的。",
- "NSFW Prioritized": "NSFW 优先",
- "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW 提示文本排在提示的顶部,以强调其效果",
- "Streaming": "流式生成",
- "Display the response bit by bit as it is generated.": "在生成响应时逐字显示。",
- "When this is off, responses will be displayed all at once when they are complete.": "关闭此选项后,响应将在全部完成后立即显示。",
- "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "每个请求仅生成一行(仅限 KoboldAI,被 KoboldCpp 忽略)。",
- "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "禁止序列结束 (EOS) token(使用 KoboldCpp,也可能使用 KoboldAI 禁止其他 token)。",
- "Good for story writing, but should not be used for chat and instruct mode.": "适合故事写作,但不应用于聊天和指导模式。",
- "Enhance Definitions": "增强定义",
- "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "使用 OpenAI 知识库增强公众人物和已知虚构人物的定义",
- "Wrap in Quotes": "用引号包裹",
- "Wrap entire user message in quotes before sending.": "在发送之前将整个用户消息包裹在引号中,",
- "Leave off if you use quotes manually for speech.": "如果您手动使用引号表示言论,请省略。",
- "Main prompt": "主提示",
- "The main prompt used to set the model behavior": "用于设置模型行为的主要提示",
- "NSFW prompt": "NSFW 提示",
- "Prompt that is used when the NSFW toggle is on": "NSFW 打开时使用的提示",
- "Jailbreak prompt": "越狱提示",
- "Prompt that is used when the Jailbreak toggle is on": "越狱开关打开时使用的提示",
- "Impersonation prompt": "扮演提示",
- "Prompt that is used for Impersonation function": "用于扮演功能的提示",
- "Logit Bias": "对数偏置",
- "Helps to ban or reenforce the usage of certain words": "有助于禁止或加强某些单词的使用",
- "View / Edit bias preset": "查看/编辑偏置预设",
- "Add bias entry": "添加偏置条目",
- "Jailbreak activation message": "越狱激活消息",
- "Message to send when auto-jailbreak is on.": "自动越狱开启时要发送的消息。",
- "Jailbreak confirmation reply": "越狱确认回复",
- "Bot must send this back to confirm jailbreak": "机器人必须将其发回以确认越狱",
- "Character Note": "人物注释",
- "Influences bot behavior in its responses": "影响机器人响应中的行为",
- "API": "API",
- "KoboldAI": "KoboldAI",
- "Use Horde": "使用 Horde",
- "API url": "API 地址",
- "Register a Horde account for faster queue times": "注册帐户以加快排队时间",
- "Learn how to contribute your idle GPU cycles to the Hord": "学习如何将闲置的显卡计算资源贡献给Hord",
- "Adjust context size to worker capabilities": "根据辅助角色功能调整上下文大小",
- "Adjust response length to worker capabilities": "根据辅助角色功能调整响应长度",
- "API key": "API 密钥",
- "Register": "注册",
- "For privacy reasons": "出于隐私原因,您的 API 密钥将在您重新加载页面后隐藏",
- "Model": "模型",
- "Hold Control / Command key to select multiple models.": "按住控制/命令键选择多个模型。",
- "Horde models not loaded": "未加载 Horde 模型。",
- "Not connected": "未连接",
- "Novel API key": "NovelAI API 密钥",
- "Follow": "跟随",
- "these directions": " 这篇指南 ",
- "to get your NovelAI API key.": "以获取您的 NovelAI API 密钥。",
- "Enter it in the box below": "将其输入到下面的输入框中",
- "Novel AI Model": "NovelAI 模型",
- "No connection": "无连接",
- "oobabooga/text-generation-webui": "",
- "Make sure you run it with": "确保启动时包含 --api 参数",
- "Blocking API url": "阻塞式 API 地址",
- "Streaming API url": "流式传输 API 地址",
- "to get your OpenAI API key.": "获取您的 OpenAI API 密钥。",
- "OpenAI Model": "OpenAI模型",
- "View API Usage Metrics": "查看 API 使用情况",
- "Bot": "Bot",
- "Connect to the API": "连接到 API",
- "Auto-connect to Last Server": "自动连接到最后设置的 API 服务器",
- "View hidden API keys": "查看隐藏的 API 密钥",
- "Advanced Formatting": "高级格式化",
- "AutoFormat Overrides": "覆盖自动格式化",
- "Disable description formatting": "禁用描述格式",
- "Disable personality formatting": "禁用人设格式",
- "Disable scenario formatting": "禁用场景格式",
- "Disable example chats formatting": "禁用聊天示例格式",
- "Disable chat start formatting": "禁用聊天开始格式",
- "Custom Chat Separator": "自定义聊天分隔符",
- "Instruct Mode": "指示模式",
- "Enabled": "启用",
- "Wrap Sequences with Newline": "用换行符换行序列",
- "Include Names": "包括名称",
- "System Prompt": "系统提示",
- "Instruct Mode Sequences": "指示模式序列",
- "Input Sequence": "输入序列",
- "Output Sequence": "输出序列",
- "First Output Sequence": "第一个输出序列",
- "Last Output Sequence": "最后输出序列",
- "System Sequence Prefix": "系统序列前缀",
- "System Sequence Suffix": "系统序列后缀",
- "Stop Sequence": "停止序列",
- "Context Formatting": "上下文格式",
- "Tokenizer": "Tokenizer",
- "None / Estimated": "无/估计",
- "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)",
- "Token Padding": "Token 填充",
- "Always add character's name to prompt": "始终将角色名称添加到提示中",
- "Keep Example Messages in Prompt": "在提示中保留示例消息",
- "Remove Empty New Lines from Output": "从输出中删除空的新行",
- "Disabled for all models": "对所有模型禁用",
- "Automatic (based on model name)": "自动(基于模型名称)",
- "Enabled for all models": "对所有模型启用",
- "Anchors Order": "锚点顺序",
- "Character then Style": "字符然后样式",
- "Style then Character": "样式然后字符",
- "Character Anchor": "字符锚点",
- "Style Anchor": "样式锚点",
- "Scan Depth": "扫描深度",
- "depth": "深度",
- "Token Budget": "Token 预算",
- "budget": "预算",
- "Recursive scanning": "递归扫描",
- "None": "没有",
- "User Settings": "聊天窗口设置",
- "UI Customization": "聊天窗口自定义",
- "Avatar Style": "头像风格",
- "Circle": "圆形",
- "Rectangle": "长方形",
- "Chat Style": "聊天窗口样式:",
- "Default": "默认",
- "Bubbles": "气泡",
- "Chat Width (PC)": "聊天窗口宽度(电脑):",
- "No Blur Effect": "关闭模糊效果",
- "No Text Shadows": "关闭文字阴影",
- "Waifu Mode": "♡ 老 婆 模 式 ♡",
- "Message Timer": "消息计时器",
- "Characters Hotswap": "角色热插拔",
- "Movable UI Panels": "可移动的UI面板",
- "Reset Panels": "重置面板",
- "UI Colors": "UI颜色",
- "Main Text": "正文",
- "Italics Text": "斜体文字",
- "Quote Text": "引用文字",
- "Shadow Color": "阴影颜色",
- "FastUI BG": "快速UI背景",
- "Blur Tint": "模糊色调",
- "Font Scale": "字体缩放",
- "Blur Strength": "模糊强度",
- "Text Shadow Width": "文字阴影宽度",
- "UI Theme Preset": "UI主题预设",
- "Power User Options": "高级用户选项",
- "Swipes": "滑动",
- "Background Sound Only": "仅背景声音",
- "Auto-load Last Chat": "自动加载上次聊天",
- "Auto-save Message Edits": "自动保存已编辑的消息",
- "Auto-fix Markdown": "自动修复 Markdown 格式",
- "Allow {{char}}: in bot messages": "允许 {{char}}:在机器人消息中",
- "Allow {{user}}: in bot messages": "允许 {{user}}:在机器人消息中",
- "Auto-scroll Chat": "自动滚动聊天界面",
- "Render Formulas": "渲染公式",
- "Send on Enter": "按下回车键发送",
- "Always disabled": "始终禁用",
- "Automatic (desktop)": "自动(电脑)",
- "Always enabled": "始终启用",
- "Name": "用户名称",
- "Your Avatar": "用户头像",
- "Extensions API:": "扩展API:",
- "SillyTavern-extras": "SillyTavern 扩展",
- "Auto-connect": "自动连接",
- "Active extensions": "启用扩展",
- "Extension settings": "扩展设置",
- "Description": "描述",
- "First message": "第一条消息",
- "Group Controls": "群组控制",
- "Group reply strategy": "群组回复策略",
- "Natural order": "自然顺序",
- "List order": "列表顺序",
- "Allow self responses": "允许自我响应",
- "Auto Mode": "自动模式",
- "Add Members": "添加成员",
- "Current Members": "现有成员",
- "text": "文本",
- "Delete": "删除",
- "Cancel": "取消",
- "Advanced Defininitions": "高级定义",
- "Personality summary": "人设总结",
- "A brief description of the personality": "人设的简要描述",
- "Scenario": "场景",
- "Circumstances and context of the dialogue": "对话的情况和背景",
- "Talkativeness": "回复频率",
- "How often the chracter speaks in": "说话频率",
- "group chats!": "群聊!",
- "Shy": "羞涩 ",
- "Normal": "正常",
- "Chatty": "健谈",
- "Examples of dialogue": "对话示例",
- "Forms a personality more clearly": "更清晰地形成人设",
- "Save": "保存",
- "World Info Editor": "世界背景编辑器",
- "New Entry": "新条目",
- "Export": "导出",
- "Delete World": "删除文本",
- "Chat History": "聊天记录",
- "Group Chat Scenario Override": "群聊场景覆盖",
- "All group members will use the following scenario text instead of what is specified in their character cards.": "所有群组成员都将使用以下场景文本,而不是其角色卡中指定的内容。",
- "Keywords": "关键字",
- "Separate with commas": "用逗号分隔",
- "Secondary Required Keywords": "次要必填关键字",
- "Content": "内容",
- "What this keyword should mean to the AI": "这个关键词对 AI 意味着什么",
- "Memo/Note": "笔记",
- "Not sent to AI": "未发送到 AI",
- "Constant": "常数 ",
- "Selective": "选择",
- "Before Char": "在Char之前",
- "After Char": "在Char之后",
- "Insertion Order": "插入顺序",
- "Tokens:": "Tokens",
- "Disable": "禁用",
- "${characterName}": "${角色名}",
- "CHAR": "角色",
- "is typing": "正在输入...",
- "Back to parent chat": "返回聊天",
- "Save bookmark": "保存书签",
- "Convert to group": "转换为群组",
- "Start new chat": "开始新聊天",
- "View past chats": "查看过去的聊天",
- "Delete messages": "删除消息",
- "Impersonate": "冒充",
- "Regenerate": "重新生成",
- "PNG": "PNG",
- "JSON": "JSON",
- "presets": "预设",
- "Message Sound": "AI 消息提示音",
- "Author's Note": "作者注释",
- "Send Jailbreak": "发送越狱",
- "Replace empty message": "替换空消息",
- "Send this text instead of nothing when the text box is empty.": "当文本框中为空时将会发送此文本,而不是空白消息",
- "NSFW avoidance prompt": "NSFW 避免提示",
- "Prompt that is used when the NSFW toggle is off": "当 NSFW 切换关闭时使用的提示",
- "Advanced prompt bits": "高级提示",
- "World Info format template": "世界背景格式模板",
- "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "在插入提示之前,包装已激活的世界背景条目。使用 {0} 来标记内容插入的位置。",
- "Unrestricted maximum value for the context slider": "上下文滑块的无限制最大值",
- "Chat Completion Source": "聊天补全源",
- "Avoid sending sensitive information to the Horde.": "避免向 Horde 发送敏感信息",
- "Review the Privacy statement": "查看隐私声明",
- "Learn how to contribute your idel GPU cycles to the Horde": "学习如何将闲置的显卡计算资源贡献给Horde",
- "Trusted workers only": "仅限可信赖的 Workers",
- "For privacy reasons, your API key will be hidden after you reload the page.": "出于隐私原因,重新加载页面后,您的 API 密钥将被隐藏。",
- "-- Horde models not loaded --": "Horde 模型未加载",
- "Example: http://127.0.0.1:5000/api ": "示例: http://127.0.0.1:5000/api",
- "No connection...": "没有连接",
- "Get your NovelAI API Key": "获取您的 NovelAI API 密钥",
- "KoboldAI Horde": "KoboldAI Horde",
- "Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)",
- "NovelAI": "NovelAI",
- "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)",
- "OpenAI API key": "OpenAI API 密钥",
- "Trim spaces": "修剪空格",
- "Trim Incomplete Sentences": "修剪不完整的句子",
- "Include Newline": "包括换行",
- "Non-markdown strings": "非markdown字符串",
- "Replace Macro in Sequences": "替换序列中的宏",
- "Presets": "预设",
- "Separator": "分隔符",
- "Start Reply With": "回复前缀",
- "Show reply prefix in chat": "在聊天中显示回复前缀",
- "Worlds/Lorebooks": "世界/Lorebooks",
- "Active World(s)": "激活的世界",
- "Character Lore Insertion Strategy": "角色背景插入策略",
- "Sorted Evenly": "均匀排序",
- "Character Lore First": "角色背景优先",
- "Global Lore First": "全局背景优先",
- "-- World Info not found --": "-- 世界背景未找到 --",
- "Recursive Scan": "归递扫描",
- "Case Sensitive": "区分大小写",
- "Match whole words": "匹配整个单词",
- "World/Lore Editor": "世界/Lore 编辑",
- "--- None ---": "--- 全无 ---",
- "Comma seperated (ignored if empty)": "逗号分隔 (如果为空则忽略)",
- "Use Probability": "使用概率",
- "Exclude from recursion": "从递归中排除",
- "Position:": "插入位置:",
- "Before Char Defs": "角色定义之前",
- "After Char Defs": "角色定义之后",
- "Before AN": "作者注释之前",
- "After AN": "作者注释之后",
- "Order:": "排序",
- "Probability:": "概率",
- "Delete Entry": "删除条目",
- "User Message Blur Tint": "用户消息模糊颜色",
- "AI Message Blur Tint": "AI 消息模糊颜色",
- "Chat Style:": "聊天窗口样式:",
- "Chat Width (PC):": "聊天窗口宽度 (电脑):",
- "Chat Timestamps": "聊天时间戳",
- "Message IDs": "消息 ID",
- "Prefer Character Card Prompt": "首选角色卡提示",
- "Prefer Character Card Jailbreak": "首选角色卡越狱",
- "Press Send to continue": "按下发送按钮继续",
- "Log prompts to console": "将提示记录到控制台",
- "Never resize avatars": "不要调整头像大小",
- "Show avatar filenames": "显示头像文件名",
- "Import Card Tags": "导入卡片标签",
- "Confirm message deletion": "确认删除消息",
- "Spoiler Free Mode": "无剧透模式",
- "Auto-swipe": "自动右滑生成",
- "Minimum generated message length": "消息生成的最小长度",
- "Blacklisted words": "黑名单词汇",
- "Blacklisted word count to swipe": "自动滑动触发的累计黑名单词汇数",
- "Reload Chat": "重新加载聊天窗口",
- "Not Connected": "未连接",
- "Persona Management": "用户角色设置",
- "Persona Description": "用户角色描述",
- "In Story String / Chat Completion: Before Character Card": "在故事字符串 / 聊天补全中: 角色卡之前",
- "In Story String / Chat Completion: After Character Card": "在故事字符串 / 聊天补全中: 角色卡之后",
- "Top of Author's Note": "作者注释之前",
- "Bottom of Author's Note": "作者注释之后",
- "How do I use this?": "用户角色设置说明",
- "More...": "更多...",
- "Link to World Info": "链接到世界背景",
- "Import Card Lore": "导入卡片背景",
- "Scenario Override": "场景覆盖",
- "Rename": "重命名",
- "Character Description": "角色描述",
- "Creator's Notes": "创建者的注释",
- "A-Z": "A-Z",
- "Z-A": "Z-A",
- "Newest": "最新",
- "Oldest": "最旧",
- "Favorites": "收藏",
- "Recent": "最近",
- "Most chats": "聊天次数最多",
- "Least chats": "聊天次数最少",
- "Back": "返回",
- "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "提示覆盖(适用于OpenAI/Claude/Scale APIs、Window/OpenRouter和Instruct模式)",
- "Insert {{original}} into either box to include the respective default prompt from system settings.": "将{{original}}插入任意一个框中,即可包含来自系统设置的默认提示。",
- "Main Prompt": "主要提示",
- "Jailbreak": "越狱",
- "Creator's Metadata (Not sent with the AI prompt)": "创建者的元数据(不会与 AI 提示一起发送)",
- "Everything here is optional": "这里的一切都是可选的",
- "Created by": "创建者",
- "Character Version": "角色版本",
- "Tags to Embed": "要嵌入的标签",
- "How often the character speaks in group chats!": "角色在群聊中说话的频率!",
- "Important to set the character's writing style.": "要设置角色的写作风格,它很重要。",
- "ATTENTION!": "注意!",
- "Samplers Order": "采样器顺序",
- "Samplers will be applied in a top-down order. Use with caution.": "采样器将按从上到下的顺序应用。谨慎使用。",
- "Repetition Penalty": "重复惩罚",
- "Epsilon Cutoff": "Epsilon 切断",
- "Eta Cutoff": "Eta 切断",
- "Rep. Pen. Range.": "重复惩罚范围",
- "Rep. Pen. Freq.": "重复频率惩罚",
- "Rep. Pen. Presence": "重复存在惩罚",
- "Enter it in the box below:": "在下面的框中输入:",
- "separate with commas w/o space between": "用逗号分隔,不要空格",
- "Document": "文档",
- "Continue": "继续",
- "Editing:": "正在编辑:",
- "AI reply prefix": "AI回复前缀",
- "Custom Stopping Strings": "自定义停止字符串",
- "JSON serialized array of strings": "字符串的JSON序列化数组",
- "words you dont want generated separated by comma ','": "你不想生成的词汇,用逗号 ',' 分隔",
- "Extensions URL": "扩展URL",
- "API Key": "API密钥",
- "Enter your name": "输入你的名字",
- "Name this character": "给这个角色起个名字",
- "Search / Create Tags": "搜索 / 创建标签",
- "Describe your character's physical and mental traits here.": "在这里描述你的角色的身体和精神特点。",
- "This will be the first message from the character that starts every chat.": "这将是角色开始每个聊天的第一条消息。",
- "Chat Name (Optional)": "聊天名称(可选)",
- "Filter...": "筛选...",
- "Search...": "搜索...",
- "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "这里的任何内容都将替换用于此角色的默认主要提示。(v2规范:system_prompt)",
- "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "这里的任何内容都将替换用于此角色的默认越狱提示。 (v2规范:post_history_instructions)",
- "(Botmaker's name / Contact Info)": "(Bot制作者的名字/联系信息)",
- "(If you want to track character versions)": "(如果你想跟踪角色版本)",
- "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(描述机器人,给出使用提示,或列出用它测试过的聊天模型。这将显示在角色列表中)",
- "(Write a comma-separated list of tags)": "(编写逗号分隔的标签列表)",
- "(A brief description of the personality)": "(人设的简要描述)",
- "(Circumstances and context of the interaction)": "(互动的情况和上下文)",
- "(Examples of chat dialog. Begin each example with START on a new line.)": "(聊天对话的示例。每个示例都以新行的START开始)",
- "Injection text (supports parameters)": "注入文本(支持参数)",
- "Injection depth": "注入深度",
- "Type here...": "在此处输入...",
- "Comma separated (required)": "逗号分隔(必需)",
- "Comma separated (ignored if empty)": "逗号分隔(如果为空则被忽略)",
- "What this keyword should mean to the AI, sent verbatim": "这个关键词对AI来说应该是什么意思,逐字递送",
- "Not sent to the AI": "不发送给AI",
- "(This will be the first message from the character that starts every chat)": "(这将是角色开始每个聊天的第一条消息)",
- "Not connected to API!": "未连接到API!",
- "AI Response Configuration": "AI响应配置",
- "AI Configuration panel will stay open": "AI配置面板将保持打开状态",
- "Update current preset": "更新当前预设",
- "Create new preset": "创建新预设",
- "Import preset": "导入预设",
- "Export preset": "导出预设",
- "Delete the preset": "删除该预设",
- "Inserts jailbreak as a last system message": "将越狱插入为最后一个系统消息",
- "NSFW block goes first in the resulting prompt": "在生成的提示中,NSFW部分排在首位",
- "Enables OpenAI completion streaming": "启用OpenAI补全流",
- "Wrap user messages in quotes before sending": "发送前用引号括起用户消息",
- "Restore default prompt": "恢复默认提示",
- "New preset": "新预设",
- "Delete preset": "删除预设",
- "Restore default jailbreak": "恢复默认越狱",
- "Restore default reply": "恢复默认回复",
- "Restore defaul note": "恢复默认注释",
- "API Connections": "API连接",
- "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "通过只排队已批准的worker来帮助处理不良响应。可能会减慢响应时间。",
- "Clear your API key": "清除你的API密钥",
- "Refresh models": "刷新模型",
- "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用OAuth流程获取您的OpenRouter API令牌。您将被重定向到openrouter.ai",
- "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "通过发送一个短测试消息验证您的API连接。请注意,这将会计入你的使用额度!",
- "Create New": "创建新的",
- "Edit": "编辑",
- "World Info": "世界背景",
- "Locked = World Editor will stay open": "锁定=世界编辑器将保持打开状态",
- "Entries can activate other entries by mentioning their keywords": "条目可以通过提及其关键字来激活其他条目",
- "Lookup for the entry keys in the context will respect the case": "在上下文中查找条目关键词将遵守大小写",
- "If the entry key consists of only one word, it would not be matched as part of other words": "如果条目键仅包含一个词,它将不会被匹配为其他词汇的一部分",
- "Open all Entries": "打开所有条目",
- "Close all Entries": "关闭所有条目",
- "Create": "创建",
- "Import World Info": "导入世界背景",
- "Export World Info": "导出世界背景",
- "Delete World Info": "删除世界背景",
- "Rename World Info": "重命名世界背景",
- "Save changes to a new theme file": "将更改保存到新主题文件中",
- "removes blur and uses alternative background color for divs": "去除模糊并为div使用替代的背景颜色",
- "If checked and the character card contains a prompt override (System Prompt), use that instead.": "如果选中并且角色卡包含提示覆盖(系统提示),请改用该选项。",
- "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "如果选中并且角色卡包含越狱覆盖(发布历史指令),请改用该选项。",
- "AI Response Formatting": "AI 回复格式",
- "Change Background Image": "更改背景图片",
- "Extensions": "扩展",
- "Click to set a new User Name": "点击设置新用户名",
- "Click to lock your selected persona to the current chat. Click again to remove the lock.": "点击将选择的角色锁定到当前聊天。再次单击以解除锁定。",
- "Click to set user name for all messages": "点击为所有消息设置用户名称",
- "Create a dummy persona": "创建一个虚拟个人角色",
- "Character Management": "角色管理",
- "Locked = Character Management panel will stay open": "锁定=角色管理面板将保持打开状态",
- "Select/Create Characters": "选择/创建角色",
- "Token counts may be inaccurate and provided just for reference.": "Token 计数可能不准确,仅供参考。",
- "Click to select a new avatar for this character": "点击选择此角色的新头像",
- "Add to Favorites": "添加到收藏夹",
- "Advanced Definition": "高级定义",
- "Character Lore": "角色背景",
- "Export and Download": "导出并下载",
- "Duplicate Character": "复制角色",
- "Create Character": "创建角色",
- "Delete Character": "删除角色",
- "View all tags": "查看所有标签",
- "Click to set additional greeting messages": "单击设置其他的问候消息",
- "Show / Hide Description and First Message": "显示/隐藏描述和第一条消息",
- "Click to select a new avatar for this group": "单击选择此群组的新头像",
- "Set a group chat scenario": "设置群聊场景",
- "Restore collage avatar": "恢复拼贴头像",
- "Create New Character": "创建新角色",
- "Import Character from File": "从文件中导入角色",
- "Import content from external URL": "从外部URL导入内容",
- "Create New Chat Group": "创建新的聊天群组",
- "Characters sorting order": "角色排序顺序",
- "Add chat injection": "添加聊天中断",
- "Remove injection": "移除中断",
- "Remove": "移除",
- "Select a World Info file for": "为角色选择一个世界背景",
- "Primary Lorebook": "主要的 Lorebook",
- "A selected World Info will be bound to this character as its own Lorebook.": "所选择的世界背景将作为其自己的 Lorebook 绑定到此角色。",
- "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "在生成AI回复时,它将与全局世界背景选择器中的条目结合。",
- "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "导出角色也会导出嵌入在JSON数据中的 Lorebook 文件。",
- "Additional Lorebooks": "其他 Lorebook",
- "Associate one or more auxillary Lorebooks with this character.": "将一个或多个辅助的 Lorebook 与这个角色关联。",
- "NOTE: These choices are optional and won't be preserved on character export!": "注意:这些选择是可选的,不会在导出角色时保留!",
- "Rename chat file": "重命名聊天文件",
- "Export JSONL chat file": "导出 JSONL 聊天文件",
- "Download chat as plain text document": "将聊天内容下载为纯文本文档",
- "Delete chat file": "删除聊天文件",
- "Delete tag": "删除标签",
- "Translate message": "翻译消息",
- "Generate Image": "生成图片",
- "Narrate": "讲述",
- "Prompt": "提示",
- "Create Bookmark": "创建书签",
- "Copy": "复制",
- "Open bookmark chat": "打开书签聊天",
- "Confirm": "确认",
- "Copy this message": "复制此消息",
- "Delete this message": "删除此消息",
- "Move message up": "将消息上移",
- "Move message down": "将消息下移",
- "Enlarge": "放大",
- "Temporarily disable automatic replies from this character": "暂时禁用此角色的自动回复",
- "Enable automatic replies from this character": "启用此角色的自动回复",
- "Trigger a message from this character": "触发这个角色的一条消息",
- "Move up": "上移",
- "Move down": "下移",
- "View character card": "查看角色卡",
- "Remove from group": "从群组中移除",
- "Add to group": "添加到群组",
- "Add": "添加",
- "Abort request": "取消请求",
- "Send a message": "发送消息",
- "Ask AI to write your message for you": "让 AI 代替你写消息",
- "Continue the last message": "继续上一条消息",
- "Bind user name to that avatar": "将用户名绑定到该头像",
- "Select this as default persona for the new chats.": "将此选择为新聊天的默认角色。",
- "Change persona image": "更改角色形象",
- "Delete persona": "删除角色"
-}
+{
+ "clickslidertips": "单击滑块以手动输入值。",
+ "kobldpresets": "Kobold 预设",
+ "guikoboldaisettings": "KoboldAI 用户界面设置",
+ "novelaipreserts": "NovelAI 预设",
+ "default": "默认",
+ "openaipresets": "OpenAI 预设",
+ "text gen webio(ooba) presets": "WebUI(ooba) 预设",
+ "response legth(tokens)": "响应长度(令牌)",
+ "select": "选择",
+ "context size(tokens)": "上下文长度(令牌)",
+ "unlocked": "已解锁",
+ "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "仅选择的模型支持大于 4096 个令牌的上下文大小。只有在知道自己在做什么的情况下才增加。",
+ "rep.pen": "重复惩罚",
+ "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "WI 输入状态:\n🔵 恒定\n🟢 正常\n❌ 禁用",
+ "rep.pen range": "重复惩罚范围",
+ "Temperature controls the randomness in token selection": "温度控制令牌选择中的随机性:\n- 低温(<1.0)导致更可预测的文本,优先选择高概率的令牌。\n- 高温(>1.0)鼓励创造性和输出的多样性,更多地选择低概率的令牌。\n将值设置为 1.0 以使用原始概率。",
+ "temperature": "温度",
+ "Top K sets a maximum amount of top tokens that can be chosen from": "Top K 设置可以从中选择的顶级令牌的最大数量。",
+ "Top P (a.k.a. nucleus sampling)": "Top P(又称核心采样)将所有必需的顶级令牌合并到一个特定百分比中。\n换句话说,如果前两个令牌代表 25%,而 Top-P 为 0.50,则只考虑这两个令牌。\n将值设置为 1.0 以禁用。",
+ "Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "典型的 P 采样根据它们与集合平均熵的偏差对令牌进行优先排序。\n保留概率累积接近指定阈值(例如 0.5)的令牌,区分包含平均信息的那些。\n将值设置为 1.0 以禁用。",
+ "Min P sets a base minimum probability": "Min P 设置基本最小概率。它根据顶级令牌的概率进行优化。\n如果顶级令牌的概率为 80%,而 Min P 为 0.1,则只考虑概率高于 8% 的令牌。\n将值设置为 0 以禁用。",
+ "Top A sets a threshold for token selection based on the square of the highest token probability": "Top A 根据最高令牌概率的平方设置令牌选择的阈值。\n如果 Top A 为 0.2,最高令牌概率为 50%,则排除概率低于 5% 的令牌(0.2 * 0.5^2)。\n将值设置为 0 以禁用。",
+ "Tail-Free Sampling (TFS)": "无尾采样(TFS)查找分布中概率较低的尾部令牌,\n 通过分析令牌概率的变化率以及二阶导数。 令牌保留到阈值(例如 0.3),取决于统一的二阶导数。\n值越接近 0,被拒绝的令牌数量就越多。将值设置为 1.0 以禁用。",
+ "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "ε 截止设置了一个概率下限,低于该下限的令牌将被排除在样本之外。\n以 1e-4 单位;合适的值为 3。将其设置为 0 以禁用。",
+ "Scale Temperature dynamically per token, based on the variation of probabilities": "根据概率的变化动态地按令牌缩放温度。",
+ "Minimum Temp": "最小温度",
+ "Maximum Temp": "最大温度",
+ "Exponent": "指数",
+ "Mirostat Mode": "Mirostat 模式",
+ "Mirostat Tau": "Mirostat Tau",
+ "Mirostat Eta": "Mirostat Eta",
+ "Variability parameter for Mirostat outputs": "Mirostat 输出的变异性参数。",
+ "Learning rate of Mirostat": "Mirostat 的学习率。",
+ "Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "对比搜索正则化项的强度。 将值设置为 0 以禁用 CS。",
+ "Temperature Last": "最后温度",
+ "Use the temperature sampler last": "最后使用温度采样器。 通常是合理的。\n当启用时:首先进行潜在令牌的选择,然后应用温度来修正它们的相对概率(技术上是对数似然)。\n当禁用时:首先应用温度来修正所有令牌的相对概率,然后从中选择潜在令牌。\n禁用最后的温度。",
+ "LLaMA / Mistral / Yi models only": "仅限 LLaMA / Mistral / Yi 模型。 确保首先选择适当的分析师。\n结果中不应出现串。\n每行一个串。 文本或 [令牌标识符]。\n许多令牌以空格开头。 如果不确定,请使用令牌计数器。",
+ "Example: some text [42, 69, 1337]": "例如:\n一些文本\n[42, 69, 1337]",
+ "Classifier Free Guidance. More helpful tip coming soon": "免费的分类器指导。 更多有用的提示词即将推出。",
+ "Scale": "比例",
+ "GBNF Grammar": "GBNF 语法",
+ "Usage Stats": "使用统计",
+ "Click for stats!": "点击查看统计!",
+ "Backup": "备份",
+ "Backup your personas to a file": "将您的人设备份到文件中",
+ "Restore": "恢复",
+ "Restore your personas from a file": "从文件中恢复您的人设",
+ "Type in the desired custom grammar": "输入所需的自定义语法",
+ "Encoder Rep. Pen.": "编码器重复惩罚",
+ "Smoothing Factor": "平滑系数",
+ "No Repeat Ngram Size": "无重复 n-gram 大小",
+ "Min Length": "最小长度",
+ "OpenAI Reverse Proxy": "OpenAI 反向代理",
+ "Alternative server URL (leave empty to use the default value).": "备用服务器 URL(留空以使用默认值)。",
+ "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "在键入任何内容之前,从 API 面板中删除您的真实 OAI API 密钥",
+ "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "我们无法为使用非官方 OpenAI 代理时遇到的问题提供支持",
+ "Legacy Streaming Processing": "传统流处理",
+ "Enable this if the streaming doesn't work with your proxy": "如果流媒体与您的代理不兼容,请启用此选项",
+ "Context Size (tokens)": "上下文长度(令牌)",
+ "Max Response Length (tokens)": "最大回复长度(令牌)",
+ "Frequency Penalty": "Frequency Penalty 频率惩罚",
+ "Presence Penalty": "Presence Penalty 存在惩罚",
+ "Top-p": "Top-p",
+ "Display bot response text chunks as they are generated": "生成时显示机器人响应文本片段",
+ "Top A": "Top A",
+ "Typical Sampling": "Typical Sampling 典型采样",
+ "Tail Free Sampling": "Tail Free Sampling 无尾采样",
+ "Rep. Pen. Slope": "Rep. Pen. Slope 重复惩罚斜率",
+ "Single-line mode": "Single-line 单行模式",
+ "Top K": "Top K",
+ "Top P": "Top P",
+ "Do Sample": "进行采样",
+ "Add BOS Token": "添加 BOS 令牌",
+ "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "在提示词词的开头添加 bos_token。 禁用此功能可以使回复更具创意",
+ "Ban EOS Token": "禁止 EOS 令牌",
+ "Ban the eos_token. This forces the model to never end the generation prematurely": "禁止 eos_token。 这将强制模型永远不会提前结束生成",
+ "Skip Special Tokens": "跳过特殊令牌",
+ "Beam search": "束搜索",
+ "Number of Beams": "束数量",
+ "Length Penalty": "长度惩罚",
+ "Early Stopping": "提前停止",
+ "Contrastive search": "对比搜索",
+ "Penalty Alpha": "惩罚 Alpha",
+ "Seed": "Seed 种子",
+ "Epsilon Cutoff": "Epsilon Cutoff",
+ "Eta Cutoff": "Eta Cutoff",
+ "Negative Prompt": "负面提示词",
+ "Mirostat (mode=1 is only for llama.cpp)": "Mirostat(mode=1 仅用于 llama.cpp)",
+ "Mirostat is a thermostat for output perplexity": "Mirostat 是输出困惑度的恒温器",
+ "Add text here that would make the AI generate things you don't want in your outputs.": "在这里添加文本,使 AI 生成您不希望在输出中出现的内容。",
+ "Phrase Repetition Penalty": "短语重复惩罚",
+ "Preamble": "序文",
+ "Use style tags to modify the writing style of the output.": "使用样式标签修改输出的写作风格。",
+ "Banned Tokens": "禁用的令牌",
+ "Sequences you don't want to appear in the output. One per line.": "您不希望出现在输出中的序列。 每行一个。",
+ "AI Module": "AI 模块",
+ "Changes the style of the generated text.": "更改生成文本的样式。",
+ "Used if CFG Scale is unset globally, per chat or character": "如果 CFG Scal在全局未设置、它将作用于每个聊天或每个角色",
+ "Inserts jailbreak as a last system message.": "将 jailbreak 插入为最后一个系统消息。",
+ "This tells the AI to ignore its usual content restrictions.": "这告诉 AI 忽略其通常的内容限制。",
+ "NSFW Encouraged": "鼓励 NSFW",
+ "Tell the AI that NSFW is allowed.": "告诉 AI NSFW 是允许的。",
+ "NSFW Prioritized": "优先考虑 NSFW",
+ "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW 提示词文本首先出现在提示词中以强调其效果。",
+ "Streaming": "Streaming 流式传输",
+ "Dynamic Temperature": "Dynamic Temperature 动态温度",
+ "Restore current preset": "恢复当前预设",
+ "Neutralize Samplers": "Neutralize Samplers 中和采样器",
+ "Text Completion presets": "文本补全预设",
+ "Documentation on sampling parameters": "有关采样参数的文档",
+ "Set all samplers to their neutral/disabled state.": "将所有采样器设置为中性/禁用状态。",
+ "Only enable this if your model supports context sizes greater than 4096 tokens": "仅在您的模型支持大于4096个标记的上下文大小时启用此选项",
+ "Display the response bit by bit as it is generated": "逐位显示生成的响应",
+ "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "每个请求仅生成一行(仅限KoboldAI,KoboldCpp不支持)。",
+ "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "禁止序列末尾(EOS)标记(与KoboldCpp一起,可能还有其他与KoboldAI的标记)。",
+ "Good for story writing, but should not be used for chat and instruct mode.": "适用于写故事,但不应用于聊天和指导模式。",
+ "Enhance Definitions": "增强定义",
+ "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "使用OAI知识库来增强公众人物和已知虚构角色的定义",
+ "Wrap in Quotes": "用引号括起来",
+ "Wrap entire user message in quotes before sending.": "在发送之前用引号括起整个用户消息。",
+ "Leave off if you use quotes manually for speech.": "如果您手动使用引号进行讲话,请省略。",
+ "Main prompt": "主提示词",
+ "The main prompt used to set the model behavior": "用于设置模型行为的主提示词",
+ "NSFW prompt": "NSFW提示词",
+ "Prompt that is used when the NSFW toggle is on": "在NSFW开关打开时使用的提示词",
+ "Jailbreak prompt": "越狱提示词",
+ "Prompt that is used when the Jailbreak toggle is on": "在越狱开关打开时使用的提示词",
+ "Impersonation prompt": "冒名顶替提示词",
+ "Prompt that is used for Impersonation function": "用于冒名顶替功能的提示词",
+ "Logit Bias": "对数偏差",
+ "Helps to ban or reenforce the usage of certain words": "有助于禁止或加强某些单词的使用",
+ "View / Edit bias preset": "查看/编辑偏置预设",
+ "Add bias entry": "添加偏置条目",
+ "Jailbreak activation message": "越狱激活消息",
+ "Message to send when auto-jailbreak is on.": "自动越狱时发送的消息。",
+ "Jailbreak confirmation reply": "越狱确认回复",
+ "Bot must send this back to confirm jailbreak": "机器人必须发送此内容以确认越狱",
+ "Character Note": "角色注记",
+ "Influences bot behavior in its responses": "影响机器人在其响应中的行为",
+ "Connect": "连接",
+ "Test Message": "发送测试消息",
+ "API": "API",
+ "KoboldAI": "KoboldAI",
+ "Use Horde": "使用部落",
+ "API url": "API地址",
+ "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine(用于OpenAI API的包装器)",
+ "Register a Horde account for faster queue times": "注册Horde部落帐户以加快排队时间",
+ "Learn how to contribute your idle GPU cycles to the Hord": "了解如何将闲置的GPU周期贡献给部落",
+ "Adjust context size to worker capabilities": "根据工作人员的能力调整上下文大小",
+ "Adjust response length to worker capabilities": "根据工作人员的能力调整响应长度",
+ "API key": "API密钥",
+ "Tabby API key": "Tabby API密钥",
+ "Get it here:": "在此获取:",
+ "Register": "注册",
+ "TogetherAI Model": "TogetherAI模型",
+ "Example: 127.0.0.1:5001": "示例:127.0.0.1:5001",
+ "ggerganov/llama.cpp": "ggerganov/llama.cpp",
+ "Example: 127.0.0.1:8080": "示例:127.0.0.1:8080",
+ "Example: 127.0.0.1:11434": "示例:127.0.0.1:11434",
+ "Ollama Model": "Ollama模型",
+ "Download": "下载",
+ "TogetherAI API Key": "TogetherAI API密钥",
+ "-- Connect to the API --": "-- 连接到API --",
+ "View my Kudos": "查看我的赞誉",
+ "Enter": "输入",
+ "to use anonymous mode.": "使用匿名模式。",
+ "For privacy reasons": "出于隐私考虑",
+ "Models": "模型",
+ "Hold Control / Command key to select multiple models.": "按住Control / Command键选择多个模型。",
+ "Horde models not loaded": "部落模型未加载",
+ "Not connected...": "未连接...",
+ "Novel API key": "Novel AI API密钥",
+ "Follow": "跟随",
+ "these directions": "这些说明",
+ "to get your NovelAI API key.": "获取您的NovelAI API密钥。",
+ "Enter it in the box below": "在下面的框中输入",
+ "Novel AI Model": "Novel AI模型",
+ "If you are using:": "如果您正在使用:",
+ "oobabooga/text-generation-webui": "oobabooga/text-generation-webui",
+ "Make sure you run it with": "确保您用以下方式运行它",
+ "flag": "标志",
+ "API key (optional)": "API密钥(可选)",
+ "Server url": "服务器地址",
+ "Custom model (optional)": "自定义模型(可选)",
+ "Bypass API status check": "绕过API状态检查",
+ "Mancer AI": "Mancer AI",
+ "Use API key (Only required for Mancer)": "使用API密钥(仅Mancer需要)",
+ "Blocking API url": "阻止API地址",
+ "Example: 127.0.0.1:5000": "示例:127.0.0.1:5000",
+ "Legacy API (pre-OAI, no streaming)": "传统API(OAI之前,无流式传输)",
+ "Bypass status check": "绕过状态检查",
+ "Streaming API url": "流式API地址",
+ "Example: ws://127.0.0.1:5005/api/v1/stream": "示例:ws://127.0.0.1:5005/api/v1/stream",
+ "Mancer API key": "Mancer API密钥",
+ "Example: https://neuro.mancer.tech/webui/MODEL/api": "示例:https://neuro.mancer.tech/webui/MODEL/api",
+ "to get your OpenAI API key.": "获取您的OpenAI API密钥。",
+ "Window AI Model": "Window AI模型",
+ "OpenAI Model": "OpenAI模型",
+ "Claude API Key": "Claude API密钥",
+ "Get your key from": "从以下位置获取您的密钥",
+ "Anthropic's developer console": "Anthropic的开发者控制台",
+ "Slack and Poe cookies will not work here, do not bother trying.": "Slack和Poe的cookie在这里不起作用,请不要尝试。",
+ "Claude Model": "Claude模型",
+ "Scale API Key": "Scale API密钥",
+ "Alt Method": "备用方法",
+ "AI21 API Key": "AI21 API密钥",
+ "AI21 Model": "AI21模型",
+ "View API Usage Metrics": "查看API使用指标",
+ "Show External models (provided by API)": "显示外部模型(由API提供)",
+ "Bot": "机器人",
+ "Allow fallback routes": "允许后备路由",
+ "Allow fallback routes Description": "如果所选模型无法响应您的请求,则自动选择备用模型。",
+ "OpenRouter API Key": "OpenRouter API密钥",
+ "Connect to the API": "连接到API",
+ "OpenRouter Model": "OpenRouter模型",
+ "View Remaining Credits": "查看剩余信用额",
+ "Click Authorize below or get the key from": "点击下方授权或从以下位置获取密钥",
+ "Auto-connect to Last Server": "自动连接到上次的服务器",
+ "View hidden API keys": "查看隐藏的API密钥",
+ "Advanced Formatting": "高级格式设置",
+ "Context Template": "上下文模板",
+ "AutoFormat Overrides": "自动格式覆盖",
+ "Disable description formatting": "禁用描述格式",
+ "Disable personality formatting": "禁用人格格式",
+ "Disable scenario formatting": "禁用情景格式",
+ "Disable example chats formatting": "禁用示例聊天格式",
+ "Disable chat start formatting": "禁用聊天开始格式",
+ "Custom Chat Separator": "自定义聊天分隔符",
+ "Replace Macro in Custom Stopping Strings": "自定义停止字符串替换宏",
+ "Strip Example Messages from Prompt": "从提示词中删除示例消息",
+ "Story String": "Story String 故事字符串",
+ "Example Separator": "示例分隔符",
+ "Chat Start": "聊天开始",
+ "Activation Regex": "激活正则表达式",
+ "Instruct Mode": "指导模式",
+ "Wrap Sequences with Newline": "用换行符包装序列",
+ "Include Names": "包括名称",
+ "Force for Groups and Personas": "强制适配群组和人物",
+ "System Prompt": "系统提示词",
+ "Instruct Mode Sequences": "Instruct Mode Sequences 指导模式序列",
+ "Input Sequence": "输入序列",
+ "Output Sequence": "输出序列",
+ "First Output Sequence": "第一个输出序列",
+ "Last Output Sequence": "最后一个输出序列",
+ "System Sequence Prefix": "系统序列前缀",
+ "System Sequence Suffix": "系统序列后缀",
+ "Stop Sequence": "停止序列",
+ "Context Formatting": "上下文格式",
+ "(Saved to Context Template)": "(保存到上下文模板)",
+ "Tokenizer": "分词器",
+ "None / Estimated": "无 / 估计",
+ "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)",
+ "Token Padding": "令牌填充",
+ "Save preset as": "另存预设为",
+ "Always add character's name to prompt": "始终将角色名称添加到提示词",
+ "Use as Stop Strings": "用作停止字符串",
+ "Bind to Context": "绑定到上下文",
+ "Generate only one line per request": "每个请求只生成一行",
+ "Misc. Settings": "其他设置",
+ "Auto-Continue": "自动继续",
+ "Collapse Consecutive Newlines": "折叠连续的换行符",
+ "Allow for Chat Completion APIs": "允许聊天完成API",
+ "Target length (tokens)": "目标长度(令牌)",
+ "Keep Example Messages in Prompt": "在提示词中保留示例消息",
+ "Remove Empty New Lines from Output": "从输出中删除空行",
+ "Disabled for all models": "对所有模型禁用",
+ "Automatic (based on model name)": "自动(根据模型名称)",
+ "Enabled for all models": "对所有模型启用",
+ "Anchors Order": "锚定顺序",
+ "Character then Style": "角色然后样式",
+ "Style then Character": "样式然后角色",
+ "Character Anchor": "角色锚点",
+ "Style Anchor": "样式锚点",
+ "World Info": "世界信息",
+ "Scan Depth": "扫描深度",
+ "Case-Sensitive": "区分大小写",
+ "Match Whole Words": "匹配整个单词",
+ "Use global setting": "使用全局设置",
+ "Yes": "是",
+ "No": "否",
+ "Context %": "上下文百分比",
+ "Budget Cap": "预算上限",
+ "(0 = disabled)": "(0 = 禁用)",
+ "depth": "深度",
+ "Token Budget": "令牌预算",
+ "budget": "预算",
+ "Recursive scanning": "递归扫描",
+ "None": "无",
+ "User Settings": "用户设置",
+ "UI Mode": "UI 模式",
+ "UI Language": "语言",
+ "MovingUI Preset": "MovingUI 预设",
+ "UI Customization": "UI 自定义",
+ "Avatar Style": "头像样式",
+ "Circle": "圆形",
+ "Rectangle": "矩形",
+ "Square": "正方形",
+ "Chat Style": "聊天样式",
+ "Default": "默认",
+ "Bubbles": "气泡",
+ "No Blur Effect": "禁用模糊效果",
+ "No Text Shadows": "禁用文本阴影",
+ "Waifu Mode": "AI老婆模式",
+ "Message Timer": "AI回复消息计时器",
+ "Model Icon": "模型图标",
+ "# of messages (0 = disabled)": "消息数量(0 = 禁用)",
+ "Advanced Character Search": "高级角色搜索",
+ "Allow {{char}}: in bot messages": "在机器人消息中允许 {{char}}:",
+ "Allow {{user}}: in bot messages": "在机器人消息中允许 {{user}}:",
+ "Show tags in responses": "在响应中显示标签",
+ "Aux List Field": "辅助列表字段",
+ "Lorebook Import Dialog": "Lorebook 导入对话框",
+ "MUI Preset": "可移动UI 预设",
+ "If set in the advanced character definitions, this field will be displayed in the characters list.": "如果在高级角色定义中设置,此字段将显示在角色列表中。",
+ "Relaxed API URLS": "宽松的API URL",
+ "Custom CSS": "自定义 CSS",
+ "Default (oobabooga)": "默认(oobabooga)",
+ "Mancer Model": "Mancer 模型",
+ "API Type": "API 类型",
+ "Aphrodite API key": "Aphrodite API 密钥",
+ "Relax message trim in Groups": "放松群组中的消息修剪",
+ "Characters Hotswap": "收藏角色卡置顶显示",
+ "Request token probabilities": "请求令牌概率",
+ "Movable UI Panels": "可移动的 UI 面板",
+ "Reset Panels": "重置面板",
+ "UI Colors": "UI 颜色",
+ "Main Text": "主要文本",
+ "Italics Text": "斜体文本",
+ "Quote Text": "引用文本",
+ "Shadow Color": "阴影颜色",
+ "FastUI BG": "FastUI 背景",
+ "Blur Tint": "模糊色调",
+ "Font Scale": "字体比例",
+ "Blur Strength": "模糊强度",
+ "Text Shadow Width": "文本阴影宽度",
+ "UI Theme Preset": "UI 主题预设",
+ "Power User Options": "高级用户选项",
+ "Swipes": "刷新回复按钮",
+ "Miscellaneous": "杂项",
+ "Theme Toggles": "主题切换",
+ "Background Sound Only": "仅背景声音",
+ "Auto-load Last Chat": "自动加载上次聊天",
+ "Auto-save Message Edits": "自动保存消息编辑",
+ "Auto-fix Markdown": "自动修复 Markdown",
+ "Allow : in bot messages": "在机器人消息中允许 :",
+ "Auto-scroll Chat": "自动滚动聊天",
+ "Render Formulas": "渲染公式",
+ "Send on Enter": "按 Enter 发送",
+ "Always disabled": "始终禁用",
+ "Automatic (desktop)": "自动(桌面)",
+ "Always enabled": "始终启用",
+ "Debug Menu": "调试菜单",
+ "Restore User Input": "恢复用户输入",
+ "Character Handling": "角色处理",
+ "Example Messages Behavior": "示例消息行为",
+ "Gradual push-out": "逐渐推出",
+ "Chat/Message Handling": "聊天/消息处理",
+ "Always include examples": "始终包含示例",
+ "Never include examples": "永远不包含示例",
+ "Forbid External Media": "禁止外部媒体",
+ "System Backgrounds": "系统背景",
+ "Name": "名称",
+ "Your Avatar": "您的头像",
+ "Extensions API:": "插件 API地址:",
+ "SillyTavern-extras": "SillyTavern-额外功能",
+ "Auto-connect": "自动连接",
+ "Active extensions": "激活插件",
+ "Extension settings": "插件设置",
+ "Description": "描述",
+ "First message": "第一条消息",
+ "Group Controls": "群组控制",
+ "Group reply strategy": "群组回复策略",
+ "Natural order": "自然顺序",
+ "List order": "列表顺序",
+ "Allow self responses": "允许自我回复",
+ "Auto Mode": "自动模式",
+ "Add Members": "添加成员",
+ "Current Members": "当前成员",
+ "text": "文本",
+ "Delete": "删除",
+ "Cancel": "取消",
+ "Advanced Defininitions": "高级定义",
+ "Personality summary": "个性摘要",
+ "A brief description of the personality": "个性的简要描述",
+ "Scenario": "情景",
+ "Circumstances and context of the dialogue": "对话的情况和背景",
+ "Talkativeness": "健谈",
+ "How often the chracter speaks in": "角色在其中讲话的频率",
+ "group chats!": "群聊中!",
+ "Shy": "害羞",
+ "Normal": "正常",
+ "Chatty": "话多",
+ "Examples of dialogue": "对话示例",
+ "Forms a personality more clearly": "更清晰地形成个性",
+ "Save": "保存",
+ "World Info Editor": "世界信息编辑器",
+ "New summary": "新摘要",
+ "Export": "导出",
+ "Delete World": "删除世界",
+ "Chat History": "聊天记录",
+ "Group Chat Scenario Override": "群组聊天情景替代",
+ "All group members will use the following scenario text instead of what is specified in their character cards.": "所有群组成员将使用以下情景文本,而不是在其角色卡中指定的内容。",
+ "Keywords": "关键词",
+ "Separate with commas": "用逗号分隔",
+ "Secondary Required Keywords": "次要必需关键词",
+ "Content": "内容",
+ "What this keyword should mean to the AI": "这个关键词对 AI 的含义",
+ "Memo/Note": "备忘录/注释",
+ "Not sent to AI": "不发送给 AI",
+ "Constant": "常量",
+ "Selective": "选择性",
+ "Before Char": "角色之前",
+ "After Char": "角色之后",
+ "Insertion Order": "插入顺序",
+ "Tokens:": "令牌:",
+ "Disable": "禁用",
+ "${characterName}": "${角色名称}",
+ "CHAR": "角色",
+ "is typing": "正在输入...",
+ "Back to parent chat": "返回到父级聊天",
+ "Save bookmark": "保存书签",
+ "Convert to group": "转换为群组",
+ "Start new chat": "开始新聊天",
+ "View past chats": "查看过去的聊天记录",
+ "Delete messages": "删除消息",
+ "Impersonate": "冒充",
+ "Regenerate": "重新生成",
+ "PNG": "PNG",
+ "JSON": "JSON",
+ "presets": "预设",
+ "Message Sound": "消息声音",
+ "Author's Note": "作者注释",
+ "Send Jailbreak": "发送越狱",
+ "Replace empty message": "替换空消息",
+ "Send this text instead of nothing when the text box is empty.": "当文本框为空时,发送此文本而不是空白。",
+ "NSFW avoidance prompt": "禁止 NSFW 提示词",
+ "Prompt that is used when the NSFW toggle is off": "NSFW 开关关闭时使用的提示词",
+ "Advanced prompt bits": "高级提示词位",
+ "World Info format": "世界信息格式",
+ "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "在插入到提示词中之前包装激活的世界信息条目。使用 {0} 标记内容插入的位置。",
+ "Unrestricted maximum value for the context slider": "AI可见的最大上下文长度",
+ "Chat Completion Source": "聊天补全来源",
+ "Avoid sending sensitive information to the Horde.": "避免向 Horde 发送敏感信息。",
+ "Review the Privacy statement": "查看隐私声明",
+ "Learn how to contribute your idel GPU cycles to the Horde": "了解如何将您的空闲 GPU 周期贡献给 Horde",
+ "Trusted workers only": "仅信任的工作人员",
+ "For privacy reasons, your API key will be hidden after you reload the page.": "出于隐私原因,重新加载页面后您的 API 密钥将被隐藏。",
+ "-- Horde models not loaded --": "-- Horde 模型未加载 --",
+ "Example: http://127.0.0.1:5000/api ": "示例:http://127.0.0.1:5000/api",
+ "No connection...": "没有连接...",
+ "Get your NovelAI API Key": "获取您的 NovelAI API 密钥",
+ "KoboldAI Horde": "KoboldAI Horde",
+ "Text Gen WebUI (ooba)": "文本生成 WebUI(ooba)",
+ "NovelAI": "NovelAI",
+ "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "聊天补全(OpenAI、Claude、Window/OpenRouter、Scale)",
+ "OpenAI API key": "OpenAI API 密钥",
+ "Trim spaces": "修剪空格",
+ "Trim Incomplete Sentences": "修剪不完整的句子",
+ "Include Newline": "包括换行符",
+ "Non-markdown strings": "非 Markdown 字符串",
+ "Replace Macro in Sequences": "在序列中替换宏",
+ "Presets": "预设",
+ "Separator": "分隔符",
+ "Start Reply With": "以...开始回复",
+ "Show reply prefix in chat": "在聊天中显示回复前缀",
+ "Worlds/Lorebooks": "世界/传说书",
+ "Active World(s)": "活动世界",
+ "Activation Settings": "激活配置",
+ "Character Lore Insertion Strategy": "角色传说插入策略",
+ "Sorted Evenly": "均匀排序",
+ "Active World(s) for all chats": "已启用的世界书(全局有效)",
+ "-- World Info not found --": "-- 未找到世界信息 --",
+ "--- Pick to Edit ---": "--- 选择以编辑 ---",
+ "or": "或",
+ "New": "新",
+ "Priority": "优先级",
+ "Custom": "自定义",
+ "Title A-Z": "标题 A-Z",
+ "Title Z-A": "标题 Z-A",
+ "Tokens ↗": "令牌 ↗",
+ "Tokens ↘": "令牌 ↘",
+ "Depth ↗": "深度 ↗",
+ "Depth ↘": "深度 ↘",
+ "Order ↗": "顺序 ↗",
+ "Order ↘": "顺序 ↘",
+ "UID ↗": "UID ↗",
+ "UID ↘": "UID ↘",
+ "Trigger% ↗": "触发器% ↗",
+ "Trigger% ↘": "触发器% ↘",
+ "Order:": "顺序:",
+ "Depth:": "深度:",
+ "Character Lore First": "角色传说优先",
+ "Global Lore First": "全局传说优先",
+ "Recursive Scan": "递归扫描",
+ "Case Sensitive": "区分大小写",
+ "Match whole words": "完整匹配单词",
+ "Alert On Overflow": "溢出警报",
+ "World/Lore Editor": "世界/传说编辑器",
+ "--- None ---": "--- 无 ---",
+ "Use Probability": "使用概率",
+ "Exclude from recursion": "排除递归",
+ "Entry Title/Memo": "条目标题/备忘录",
+ "Position:": "位置:",
+ "T_Position": "↑Char:在角色定义之前\n↓Char:在角色定义之后\n↑AN:在作者注释之前\n↓AN:在作者注释之后\n@D:在深度处",
+ "Before Char Defs": "角色定义之前",
+ "After Char Defs": "角色定义之后",
+ "Before AN": "作者注释之前",
+ "After AN": "作者注释之后",
+ "at Depth": "在深度",
+ "Order": "顺序:",
+ "Probability:": "概率:",
+ "Update a theme file": "更新主题文件",
+ "Save as a new theme": "另存为新主题",
+ "Minimum number of blacklisted words detected to trigger an auto-swipe": "检测到触发自动滑动的黑名单词语的最小数量",
+ "Delete Entry": "删除条目",
+ "User Message Blur Tint": "用户消息模糊色调",
+ "AI Message Blur Tint": "AI 消息模糊色调",
+ "Chat Backgrounds": "聊天背景",
+ "Chat Background": "聊天背景",
+ "UI Background": "UI 背景",
+ "Mad Lab Mode": "疯狂实验室模式",
+ "Show Message Token Count": "显示消息令牌计数",
+ "Compact Input Area (Mobile)": "紧凑输入区域(移动端)",
+ "Zen Sliders": "禅滑块",
+ "UI Border": "UI 边框",
+ "Chat Style:": "聊天风格:",
+ "Chat Width (PC)": "聊天宽度(PC)",
+ "Chat Timestamps": "聊天时间戳",
+ "Tags as Folders": "标签作为文件夹",
+ "Chat Truncation": "聊天截断",
+ "(0 = unlimited)": "(0 = 无限制)",
+ "Streaming FPS": "流媒体帧速率",
+ "Gestures": "手势",
+ "Message IDs": "显示消息编号",
+ "Prefer Character Card Prompt": "角色卡提示词词优先",
+ "Prefer Character Card Jailbreak": "角色卡越狱优先",
+ "Press Send to continue": "按发送键继续",
+ "Quick 'Continue' button": "快速“继续”按钮",
+ "Log prompts to console": "将提示词记录到控制台",
+ "Never resize avatars": "不调整头像大小",
+ "Show avatar filenames": "显示头像文件名",
+ "Import Card Tags": "导入卡片标签",
+ "Confirm message deletion": "确认删除消息",
+ "Spoiler Free Mode": "隐藏角色卡信息",
+ "Auto-swipe": "自动滑动",
+ "Minimum generated message length": "生成的消息的最小长度",
+ "Blacklisted words": "黑名单词语",
+ "Blacklisted word count to swipe": "滑动的黑名单词语数量",
+ "Reload Chat": "重新加载聊天",
+ "Search Settings": "搜索设置",
+ "Disabled": "已禁用",
+ "Automatic (PC)": "自动(PC)",
+ "Enabled": "已启用",
+ "Simple": "简单",
+ "Advanced": "高级",
+ "Disables animations and transitions": "禁用动画和过渡效果",
+ "removes blur from window backgrounds": "从窗口背景中移除模糊效果",
+ "Remove text shadow effect": "移除文本阴影效果",
+ "Reduce chat height, and put a static sprite behind the chat window": "减少聊天高度,并在聊天窗口后放置静态精灵",
+ "Always show the full list of the Message Actions context items for chat messages, instead of hiding them behind '...'": "始终显示聊天消息的操作菜单完整列表,而不是隐藏它们在“…”后面",
+ "Alternative UI for numeric sampling parameters with fewer steps": "用于数字采样参数的备用用户界面,步骤较少",
+ "Entirely unrestrict all numeric sampling parameters": "完全取消限制所有数字采样参数",
+ "Time the AI's message generation, and show the duration in the chat log": "记录AI消息生成的时间,并在聊天日志中显示持续时间",
+ "Show a timestamp for each message in the chat log": "在聊天日志中为每条消息显示时间戳",
+ "Show an icon for the API that generated the message": "为生成消息的API显示图标",
+ "Show sequential message numbers in the chat log": "在聊天日志中显示连续的消息编号",
+ "Show the number of tokens in each message in the chat log": "在聊天日志中显示每条消息中的令牌数",
+ "Single-row message input area. Mobile only, no effect on PC": "单行消息输入区域。仅适用于移动设备,对PC无影响",
+ "In the Character Management panel, show quick selection buttons for favorited characters": "在角色管理面板中,显示快速选择按钮以选择收藏的角色",
+ "Show tagged character folders in the character list": "在角色列表中显示已标记的角色文件夹",
+ "Play a sound when a message generation finishes": "当消息生成完成时播放声音",
+ "Only play a sound when ST's browser tab is unfocused": "仅在ST的浏览器选项卡未聚焦时播放声音",
+ "Reduce the formatting requirements on API URLs": "减少API URL的格式要求",
+ "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "询问是否为每个具有嵌入式传说书的新角色导入世界信息/传说书。如果未选中,则会显示简短的消息",
+ "Restore unsaved user input on page refresh": "在页面刷新时恢复未保存的用户输入",
+ "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "允许通过拖动重新定位某些UI元素。仅适用于PC,对移动设备无影响",
+ "MovingUI preset. Predefined/saved draggable positions": "MovingUI预设。预定义/保存的可拖动位置",
+ "Save movingUI changes to a new file": "将movingUI更改保存到新文件中",
+ "Apply a custom CSS style to all of the ST GUI": "将自定义CSS样式应用于所有ST GUI",
+ "Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "使用模糊匹配,在列表中通过所有数据字段搜索字符,而不仅仅是名称子字符串",
+ "If checked and the character card contains a prompt override (System Prompt), use that instead": "如果角色卡包含提示词词,则使用它替代系统提示词词",
+ "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead": "如果角色卡包含越狱(后置历史记录指令),则使用它替代系统越狱",
+ "Avoid cropping and resizing imported character images. When off, crop/resize to 400x600": "避免裁剪和放大导入的角色图像。关闭时,裁剪/放大为400x600",
+ "Show actual file names on the disk, in the characters list display only": "仅在磁盘上显示实际文件名,在角色列表显示中",
+ "Prompt to import embedded card tags on character import. Otherwise embedded tags are ignored": "在导入角色时提示词导入嵌入式卡片标签。否则,嵌入式标签将被忽略",
+ "Hide character definitions from the editor panel behind a spoiler button": "将角色定义从编辑面板隐藏在一个剧透按钮后面",
+ "Show a button in the input area to ask the AI to continue (extend) its last message": "在输入区域中显示一个按钮,询问AI是否继续(延长)其上一条消息",
+ "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "在最后一条聊天消息上显示箭头按钮以生成替代的AI响应。PC和移动设备均可",
+ "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "允许在最后一条聊天消息上使用滑动手势触发滑动生成。仅适用于移动设备,对PC无影响",
+ "Save edits to messages without confirmation as you type": "在键入时保存对消息的编辑而无需确认",
+ "Render LaTeX and AsciiMath equation notation in chat messages. Powered by KaTeX": "在聊天消息中渲染LaTeX和AsciiMath方程式符号。由KaTeX提供支持",
+ "Disalow embedded media from other domains in chat messages": "在聊天消息中禁止来自其他域的嵌入式媒体",
+ "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "跳过消息文本中的编码和字符,允许一部分HTML标记以及Markdown",
+ "Allow AI messages in groups to contain lines spoken by other group members": "允许组中的AI消息包含其他组成员说的话",
+ "Requests logprobs from the API for the Token Probabilities feature": "为Token Probabilities功能从API请求logprobs",
+ "Automatically reject and re-generate AI message based on configurable criteria": "根据可配置的条件自动拒绝并重新生成AI消息",
+ "Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "启用自动滑动功能。仅当启用自动滑动时,本节中的设置才会生效",
+ "If the generated message is shorter than this, trigger an auto-swipe": "如果生成的消息短于此长度,则触发自动滑动",
+ "Reload and redraw the currently open chat": "重新加载和重绘当前打开的聊天",
+ "Auto-Expand Message Actions": "自动展开消息操作菜单",
+ "Not Connected": "未连接",
+ "Persona Management": "角色管理",
+ "Persona Description": "角色描述",
+ "Your Persona": "您的角色",
+ "Show notifications on switching personas": "切换角色时显示通知",
+ "Blank": "空白",
+ "In Story String / Chat Completion: Before Character Card": "故事模式/聊天补全模式:在角色卡之前",
+ "In Story String / Chat Completion: After Character Card": "故事模式/聊天补全模式:在角色卡之后",
+ "In Story String / Prompt Manager": "在故事字符串/提示词词管理器",
+ "Top of Author's Note": "作者注的顶部",
+ "Bottom of Author's Note": "作者注的底部",
+ "How do I use this?": "怎样使用?",
+ "More...": "更多...",
+ "Link to World Info": "链接到世界信息",
+ "Import Card Lore": "导入卡片知识",
+ "Scenario Override": "场景覆盖",
+ "Rename": "重命名",
+ "Character Description": "角色描述",
+ "Creator's Notes": "创作者的注释",
+ "A-Z": "A-Z",
+ "Z-A": "Z-A",
+ "Newest": "最新",
+ "Oldest": "最旧",
+ "Favorites": "收藏夹",
+ "Recent": "最近",
+ "Most chats": "最多聊天",
+ "Least chats": "最少聊天",
+ "Back": "返回",
+ "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "提示词词覆盖(适用于OpenAI/Claude/Scale API、Window/OpenRouter和Instruct模式)",
+ "Insert {{original}} into either box to include the respective default prompt from system settings.": "将{{original}}插入到任一框中,以包含系统设置中的相应默认提示词。",
+ "Main Prompt": "主要提示词词",
+ "Jailbreak": "越狱",
+ "Creator's Metadata (Not sent with the AI prompt)": "创作者的元数据(不与AI提示词一起发送)",
+ "Everything here is optional": "这里的一切都是可选的",
+ "Created by": "作者",
+ "Character Version": "角色版本",
+ "Tags to Embed": "嵌入的标签",
+ "How often the character speaks in group chats!": "角色在群聊中说话的频率!",
+ "Important to set the character's writing style.": "设置角色的写作风格,很重要!",
+ "ATTENTION!": "注意!",
+ "Samplers Order": "采样器顺序",
+ "Samplers will be applied in a top-down order. Use with caution.": "采样器将按自上而下的顺序应用。请谨慎使用。",
+ "Repetition Penalty": "重复惩罚",
+ "Rep. Pen. Range.": "重复惩罚范围。",
+ "Rep. Pen. Freq.": "重复惩罚频率",
+ "Rep. Pen. Presence": "重复惩罚存在",
+ "Enter it in the box below:": "在下面的框中输入它:",
+ "separate with commas w/o space between": "用逗号分隔,不要空格",
+ "Document": "文档",
+ "Suggest replies": "建议回复",
+ "Show suggested replies. Not all bots support this.": "显示建议的回复。并非所有机器人都支持此功能。",
+ "Use 'Unlocked Context' to enable chunked generation.": "使用'Unlocked Context'启用分块生成。",
+ "It extends the context window in exchange for reply generation speed.": "它扩展了上下文窗口,以换取回复生成速度。",
+ "Continue": "继续",
+ "CFG Scale": "CFG规模",
+ "Editing:": "编辑:",
+ "AI reply prefix": "AI回复前缀",
+ "Custom Stopping Strings": "自定义停止字符串",
+ "JSON serialized array of strings": "JSON序列化的字符串数组",
+ "words you dont want generated separated by comma ','": "不想生成的单词,用逗号','分隔",
+ "Extensions URL": "插件URL",
+ "API Key": "API密钥",
+ "Enter your name": "输入您的名字",
+ "Name this character": "为这个角色命名",
+ "Search / Create Tags": "搜索/创建标签",
+ "Describe your character's physical and mental traits here.": "在这里描述您角色的身体和精神特征。",
+ "This will be the first message from the character that starts every chat.": "这将是每次开始的角色的第一条消息。",
+ "Chat Name (Optional)": "聊天名称(可选)",
+ "Filter...": "过滤...",
+ "Search...": "搜索...",
+ "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "此处的任何内容都将替换用于此角色的默认主提示词。(v2规范:system_prompt)",
+ "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "此处的任何内容都将替换用于此角色的默认越狱提示词。(v2规范:post_history_instructions)",
+ "(Botmaker's name / Contact Info)": "(机器人制作者的姓名/联系信息)",
+ "(If you want to track character versions)": "(如果您想跟踪角色版本)",
+ "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(描述机器人,提供使用技巧,或列出已经测试过的聊天模型。这将显示在角色列表中。)",
+ "(Write a comma-separated list of tags)": "(编写逗号分隔的标签列表)",
+ "(A brief description of the personality)": "(性格的简要描述)",
+ "(Circumstances and context of the interaction)": "(交互的情况和背景)",
+ "(Examples of chat dialog. Begin each example with START on a new line.)": "(聊天对话的示例。每个示例都以新行上的START开头。)",
+ "Injection text (supports parameters)": "注入文本(支持参数)",
+ "Injection depth": "注入深度",
+ "Type here...": "在此处输入...",
+ "Comma separated (required)": "逗号分隔(必填)",
+ "Comma separated (ignored if empty)": "逗号分隔(如果为空则忽略)",
+ "What this keyword should mean to the AI, sent verbatim": "这个关键词对AI的含义,逐字发送",
+ "Filter to Character(s)": "过滤到角色",
+ "Character Exclusion": "角色排除",
+ "Inclusion Group": "包含组",
+ "Only one entry with the same label will be activated": "只有一个带有相同标签的条目将被激活",
+ "-- Characters not found --": "-- 未找到角色 --",
+ "Not sent to the AI": "不发送到AI",
+ "(This will be the first message from the character that starts every chat)": "(这将是每次开始的角色的第一条消息)",
+ "Not connected to API!": "未连接到API!",
+ "AI Response Configuration": "AI响应配置",
+ "AI Configuration panel will stay open": "AI配置面板将保持打开状态",
+ "Update current preset": "更新当前预设",
+ "Create new preset": "创建新预设",
+ "Import preset": "导入预设",
+ "Export preset": "导出预设",
+ "Delete the preset": "删除预设",
+ "Auto-select this preset for Instruct Mode": "自动选择此预设以进行指示模式",
+ "Auto-select this preset on API connection": "在API连接时自动选择此预设",
+ "NSFW block goes first in the resulting prompt": "结果提示词中首先是NSFW块",
+ "Enables OpenAI completion streaming": "启用OpenAI完成流",
+ "Wrap user messages in quotes before sending": "在发送之前将用户消息用引号括起来",
+ "Restore default prompt": "恢复默认提示词",
+ "New preset": "新预设",
+ "Delete preset": "删除预设",
+ "Restore default jailbreak": "恢复默认越狱",
+ "Restore default reply": "恢复默认回复",
+ "Restore defaul note": "恢复默认备注",
+ "API Connections": "API连接",
+ "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "可以通过仅排队批准的工作人员来帮助处理不良响应。可能会减慢响应时间。",
+ "Clear your API key": "清除您的API密钥",
+ "Refresh models": "刷新模型",
+ "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用OAuth流程获取您的OpenRouter API令牌。您将被重定向到openrouter.ai",
+ "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "通过发送简短的测试消息验证您的API连接。请注意,您将因此而获得信用!",
+ "Create New": "创建新",
+ "Edit": "编辑",
+ "Locked = World Editor will stay open": "锁定=世界编辑器将保持打开状态",
+ "Entries can activate other entries by mentioning their keywords": "条目可以通过提及它们的关键字来激活其他条目",
+ "Lookup for the entry keys in the context will respect the case": "在上下文中查找条目键将保持大小写敏感",
+ "If the entry key consists of only one word, it would not be matched as part of other words": "如果条目键只由一个单词组成,则不会作为其他单词的一部分匹配",
+ "Open all Entries": "打开所有条目",
+ "Close all Entries": "关闭所有条目",
+ "Create": "创建",
+ "Import World Info": "导入世界信息",
+ "Export World Info": "导出世界信息",
+ "Delete World Info": "删除世界信息",
+ "Duplicate World Info": "复制世界信息",
+ "Rename World Info": "重命名世界信息",
+ "Refresh": "刷新",
+ "Primary Keywords": "主要关键字",
+ "Logic": "逻辑",
+ "AND ANY": "和任意",
+ "AND ALL": "和所有",
+ "NOT ALL": "不是所有",
+ "NOT ANY": "没有任何",
+ "Optional Filter": "可选过滤器",
+ "New Entry": "新条目",
+ "Fill empty Memo/Titles with Keywords": "使用关键字填充空的备忘录/标题",
+ "Save changes to a new theme file": "将更改保存到新的主题文件",
+ "removes blur and uses alternative background color for divs": "消除模糊并为div使用替代背景颜色",
+ "AI Response Formatting": "AI响应格式",
+ "Change Background Image": "更改背景图片",
+ "Extensions": "插件管理",
+ "Click to set a new User Name": "点击设置新的用户名",
+ "Click to lock your selected persona to the current chat. Click again to remove the lock.": "单击以将您选择的角色锁定到当前聊天。再次单击以移除锁定。",
+ "Click to set user name for all messages": "点击为所有消息设置用户名",
+ "Create a dummy persona": "创建虚拟角色",
+ "Character Management": "角色管理",
+ "Locked = Character Management panel will stay open": "已锁定=角色管理面板将保持打开状态",
+ "Select/Create Characters": "选择/创建角色",
+ "Token counts may be inaccurate and provided just for reference.": "令牌计数可能不准确,仅供参考。",
+ "Click to select a new avatar for this character": "单击以为此角色选择新的头像",
+ "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "示例:[{{user}}是一个28岁的罗马尼亚猫女孩。]",
+ "Toggle grid view": "切换网格视图",
+ "Add to Favorites": "添加到收藏夹",
+ "Advanced Definition": "高级定义",
+ "Character Lore": "角色传说",
+ "Export and Download": "导出并下载",
+ "Duplicate Character": "复制角色",
+ "Create Character": "创建角色",
+ "Delete Character": "删除角色",
+ "View all tags": "查看所有标签",
+ "Click to set additional greeting messages": "单击以设置其他问候消息",
+ "Show / Hide Description and First Message": "显示/隐藏描述和第一条消息",
+ "Click to select a new avatar for this group": "单击以为该组选择新的头像",
+ "Set a group chat scenario": "设置群组聊天场景",
+ "Restore collage avatar": "恢复拼贴头像",
+ "Create New Character": "创建新角色",
+ "Import Character from File": "从文件导入角色",
+ "Import content from external URL": "从外部URL导入内容",
+ "Create New Chat Group": "创建新的聊天组",
+ "Characters sorting order": "角色排序顺序",
+ "Add chat injection": "添加聊天注入",
+ "Remove injection": "移除注入",
+ "Remove": "移除",
+ "Select a World Info file for": "为...选择一个世界信息文件",
+ "Primary Lorebook": "主要传说书",
+ "A selected World Info will be bound to this character as its own Lorebook.": "所选的世界信息将作为该角色自己的传说书绑定到此角色。",
+ "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "在生成AI回复时,它将与全局世界信息选择器中的条目结合。",
+ "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "导出角色还将导出嵌入在JSON数据中的所选传说书文件。",
+ "Additional Lorebooks": "附加传说书",
+ "Associate one or more auxillary Lorebooks with this character.": "将一个或多个辅助传说书与此角色关联。",
+ "NOTE: These choices are optional and won't be preserved on character export!": "注意:这些选择是可选的,并且不会在角色导出时保留!",
+ "Rename chat file": "重命名聊天文件",
+ "Export JSONL chat file": "导出JSONL聊天文件",
+ "Download chat as plain text document": "将聊天下载为纯文本文档",
+ "Delete chat file": "删除聊天文件",
+ "Delete tag": "删除标签",
+ "Translate message": "翻译消息",
+ "Generate Image": "生成图片",
+ "Narrate": "叙述",
+ "Prompt": "提示词",
+ "Create Bookmark": "创建书签",
+ "Copy": "复制",
+ "Open bookmark chat": "打开书签聊天",
+ "Confirm": "确认",
+ "Copy this message": "复制此消息",
+ "Delete this message": "删除此消息",
+ "Move message up": "将消息上移",
+ "Move message down": "将消息下移",
+ "Enlarge": "放大",
+ "Temporarily disable automatic replies from this character": "暂时禁用此角色的自动回复",
+ "Enable automatic replies from this character": "启用此角色的自动回复",
+ "Trigger a message from this character": "从此角色触发消息",
+ "Move up": "向上移动",
+ "Move down": "向下移动",
+ "View character card": "查看角色卡片",
+ "Remove from group": "从组中移除",
+ "Add to group": "添加到组中",
+ "Add": "添加",
+ "Abort request": "中止请求",
+ "Send a message": "发送消息",
+ "Ask AI to write your message for you": "请求AI为您撰写消息",
+ "Continue the last message": "继续上一条消息",
+ "Bind user name to that avatar": "将用户名称绑定到该头像",
+ "Select this as default persona for the new chats.": "选择此项作为新聊天的默认人物。",
+ "Change persona image": "更改人物形象",
+ "Delete persona": "删除人物",
+ "Reduced Motion": "减少动态效果",
+ "Auto-select": "自动选择",
+ "Automatically select a background based on the chat context": "根据聊天上下文自动选择背景",
+ "Filter": "过滤器",
+ "Exclude message from prompts": "从提示词中排除消息",
+ "Include message in prompts": "将消息包含在提示词中",
+ "Create checkpoint": "创建检查点",
+ "Create Branch": "创建分支",
+ "Embed file or image": "嵌入文件或图像",
+ "UI Theme": "UI主题",
+ "This message is invisible for the AI": "此消息对AI不可见",
+ "Sampler Priority": "采样器优先级",
+ "Ooba only. Determines the order of samplers.": "仅适用于Ooba。确定采样器的顺序。",
+ "Load default order": "加载默认顺序",
+ "Max Tokens Second": "每秒最大令牌数",
+ "CFG": "CFG",
+ "No items": "无项目",
+ "Extras API key (optional)": "插件API密钥(可选)",
+ "Notify on extension updates": "在插件更新时通知",
+ "Toggle character grid view": "切换角色网格视图",
+ "Bulk edit characters": "批量编辑角色",
+ "Bulk delete characters": "批量删除角色",
+ "Favorite characters to add them to HotSwaps": "将角色收藏以将它们添加到HotSwaps",
+ "Underlined Text": "下划线文本",
+ "Token Probabilities": "令牌概率",
+ "Close chat": "关闭聊天",
+ "Manage chat files": "管理聊天文件",
+ "Import Extension From Git Repo": "从Git存储库导入插件",
+ "Install extension": "安装插件",
+ "Manage extensions": "管理插件",
+ "Tokens persona description": "令牌人物描述",
+ "Most tokens": "大多数令牌",
+ "Least tokens": "最少令牌",
+ "Random": "随机",
+ "Skip Example Dialogues Formatting": "跳过示例对话格式",
+ "Import a theme file": "导入主题文件",
+ "Export a theme file": "导出主题文件",
+ "Unlocked Context Size": "解锁上下文长度",
+ "Display the response bit by bit as it is generated.": "逐位显示生成的响应。",
+ "When this is off, responses will be displayed all at once when they are complete.": "当此选项关闭时,响应将在完成时一次性显示。",
+ "Quick Prompts Edit": "快速提示词词编辑",
+ "Enable OpenAI completion streaming": "启用OpenAI完成流",
+ "Main": "主要",
+ "Utility Prompts": "Utility Prompts 实用提示词",
+ "Add character names": "添加角色名称",
+ "Send names in the message objects. Helps the model to associate messages with characters.": "在消息对象中发送名称。有助于模型将消息与角色关联起来。",
+ "Continue prefill": "继续预填充",
+ "Continue sends the last message as assistant role instead of system message with instruction.": "继续将上一条消息发送为助手角色,而不是带有说明的系统消息。",
+ "Squash system messages": "压缩系统消息",
+ "Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "将连续的系统消息合并为一条(不包括示例对话)。可能会提高一些模型的连贯性。",
+ "Send inline images": "发送内联图像",
+ "Assistant Prefill": "助手预填充",
+ "Start Claude's answer with...": "以以下内容开始Claude克劳德的回答...",
+ "Use system prompt (Claude 2.1+ only)": "仅使用系统提示词词(仅适用于Claude 2.1+)",
+ "Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "为支持的模型发送系统提示词。如果禁用,则用户消息将添加到提示词词的开头。",
+ "Prompts": "提示词词",
+ "Total Tokens:": "总令牌数:",
+ "Insert prompt": "插入提示词",
+ "Delete prompt": "删除提示词",
+ "Import a prompt list": "导入提示词词列表",
+ "Export this prompt list": "导出此提示词词列表",
+ "Reset current character": "重置当前角色",
+ "New prompt": "新提示词词",
+ "Tokens": "Tokens 令牌",
+ "Want to update?": "获取最新版本",
+ "How to start chatting?": "如何快速开始使用酒馆?",
+ "Click": "点击",
+ "and select a": "并选择一个",
+ "Chat API": "聊天API",
+ "and pick a character": "并选择一个角色",
+ "in the chat bar": "在聊天框中",
+ "Confused or lost?": "获取更多帮助?",
+ "click these icons!": "点击这个图标",
+ "SillyTavern Documentation Site": "SillyTavern帮助文档",
+ "Extras Installation Guide": "插件安装指南",
+ "Still have questions?": "仍有疑问?",
+ "Join the SillyTavern Discord": "加入SillyTavern Discord",
+ "Post a GitHub issue": "发布GitHub问题",
+ "Contact the developers": "联系开发人员",
+ "Nucleus Sampling": "核心采样",
+ "Typical P": "Typical P 典型P",
+ "Top K Sampling": "Top K 采样",
+ "Top A Sampling": "Top A 采样",
+ "Off": "关闭",
+ "Very light": "非常轻",
+ "Light": "轻",
+ "Medium": "中",
+ "Aggressive": "激进",
+ "Very aggressive": "非常激进",
+ "Eta cutoff is the main parameter of the special Eta Sampling technique.
In units of 1e-4; a reasonable value is 3.
Set to 0 to disable.
See the paper Truncation Sampling as Language Model Desmoothing by Hewitt et al. (2022) for details.": "Eta截止是特殊Eta采样技术的主要参数。
以1e-4为单位;合理的值为3。
设置为0以禁用。
有关详细信息,请参阅Hewitt等人的论文《Truncation Sampling as Language Model Desmoothing》(2022年)。",
+ "Learn how to contribute your idle GPU cycles to the Horde": "了解如何将您的空闲GPU时间分享给Horde",
+ "Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "通过其API为Google模型使用适当的标记器。处理速度较慢,但提供更准确的令牌计数。",
+ "Load koboldcpp order": "加载koboldcpp顺序",
+ "Use Google Tokenizer": "使用Google标记器"
+
+
+}
\ No newline at end of file
From 76cde592ade8cfa061f52a35165ea3b3c2d34100 Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Sat, 23 Mar 2024 00:57:33 +0200
Subject: [PATCH 25/43] #1940 Allow both random syntaxes in one message
---
public/scripts/macros.js | 46 ++++++++++++++++++----------------------
1 file changed, 21 insertions(+), 25 deletions(-)
diff --git a/public/scripts/macros.js b/public/scripts/macros.js
index e8954f874..63da09b0c 100644
--- a/public/scripts/macros.js
+++ b/public/scripts/macros.js
@@ -185,31 +185,27 @@ function randomReplace(input, emptyListPlaceholder = '') {
const randomPatternNew = /{{random\s?::\s?([^}]+)}}/gi;
const randomPatternOld = /{{random\s?:\s?([^}]+)}}/gi;
- if (randomPatternNew.test(input)) {
- return input.replace(randomPatternNew, (match, listString) => {
- //split on double colons instead of commas to allow for commas inside random items
- const list = listString.split('::').filter(item => item.length > 0);
- if (list.length === 0) {
- return emptyListPlaceholder;
- }
- var rng = new Math.seedrandom('added entropy.', { entropy: true });
- const randomIndex = Math.floor(rng() * list.length);
- //trim() at the end to allow for empty random values
- return list[randomIndex].trim();
- });
- } else if (randomPatternOld.test(input)) {
- return input.replace(randomPatternOld, (match, listString) => {
- const list = listString.split(',').map(item => item.trim()).filter(item => item.length > 0);
- if (list.length === 0) {
- return emptyListPlaceholder;
- }
- var rng = new Math.seedrandom('added entropy.', { entropy: true });
- const randomIndex = Math.floor(rng() * list.length);
- return list[randomIndex];
- });
- } else {
- return input;
- }
+ input = input.replace(randomPatternNew, (match, listString) => {
+ //split on double colons instead of commas to allow for commas inside random items
+ const list = listString.split('::').filter(item => item.length > 0);
+ if (list.length === 0) {
+ return emptyListPlaceholder;
+ }
+ const rng = new Math.seedrandom('added entropy.', { entropy: true });
+ const randomIndex = Math.floor(rng() * list.length);
+ //trim() at the end to allow for empty random values
+ return list[randomIndex].trim();
+ });
+ input = input.replace(randomPatternOld, (match, listString) => {
+ const list = listString.split(',').map(item => item.trim()).filter(item => item.length > 0);
+ if (list.length === 0) {
+ return emptyListPlaceholder;
+ }
+ const rng = new Math.seedrandom('added entropy.', { entropy: true });
+ const randomIndex = Math.floor(rng() * list.length);
+ return list[randomIndex];
+ });
+ return input;
}
function diceRollReplace(input, invalidRollPlaceholder = '') {
From 607df2f5550a4356be22fce87a51f46d3c9fa1f1 Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Sat, 23 Mar 2024 17:36:43 +0200
Subject: [PATCH 26/43] Add ability to insert role-typed prompt injections
---
public/index.html | 28 ++++-
public/script.js | 233 ++++++++++++++++++++---------------
public/scripts/openai.js | 16 ++-
public/scripts/world-info.js | 38 +++++-
src/endpoints/characters.js | 1 +
5 files changed, 201 insertions(+), 115 deletions(-)
diff --git a/public/index.html b/public/index.html
index 7c82d0b1b..9398adbe4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -4646,12 +4646,28 @@
diff --git a/public/script.js b/public/script.js
index b1485f425..b6157c34a 100644
--- a/public/script.js
+++ b/public/script.js
@@ -2454,7 +2454,7 @@ function addPersonaDescriptionExtensionPrompt() {
? `${power_user.persona_description}\n${originalAN}`
: `${originalAN}\n${power_user.persona_description}`;
- setExtensionPrompt(NOTE_MODULE_NAME, ANWithDesc, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth], extension_settings.note.allowWIScan);
+ setExtensionPrompt(NOTE_MODULE_NAME, ANWithDesc, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth], extension_settings.note.allowWIScan, chat_metadata[metadata_keys.role]);
}
}
diff --git a/public/scripts/authors-note.js b/public/scripts/authors-note.js
index 6642f998b..24e73b278 100644
--- a/public/scripts/authors-note.js
+++ b/public/scripts/authors-note.js
@@ -3,6 +3,7 @@ import {
chat_metadata,
eventSource,
event_types,
+ extension_prompt_roles,
saveSettingsDebounced,
this_chid,
} from '../script.js';
@@ -22,6 +23,7 @@ export const metadata_keys = {
interval: 'note_interval',
depth: 'note_depth',
position: 'note_position',
+ role: 'note_role',
};
const chara_note_position = {
@@ -140,6 +142,16 @@ async function onDefaultIntervalInput() {
saveSettingsDebounced();
}
+function onExtensionFloatingRoleInput(e) {
+ chat_metadata[metadata_keys.role] = Number(e.target.value);
+ updateSettings();
+}
+
+function onExtensionDefaultRoleInput(e) {
+ extension_settings.note.defaultRole = Number(e.target.value);
+ saveSettingsDebounced();
+}
+
async function onExtensionFloatingCharPositionInput(e) {
const value = e.target.value;
const charaNote = extension_settings.note.chara.find((e) => e.name === getCharaFilename());
@@ -217,6 +229,7 @@ function loadSettings() {
const DEFAULT_DEPTH = 4;
const DEFAULT_POSITION = 1;
const DEFAULT_INTERVAL = 1;
+ const DEFAULT_ROLE = extension_prompt_roles.SYSTEM;
if (extension_settings.note.defaultPosition === undefined) {
extension_settings.note.defaultPosition = DEFAULT_POSITION;
@@ -230,14 +243,20 @@ function loadSettings() {
extension_settings.note.defaultInterval = DEFAULT_INTERVAL;
}
+ if (extension_settings.note.defaultRole === undefined) {
+ extension_settings.note.defaultRole = DEFAULT_ROLE;
+ }
+
chat_metadata[metadata_keys.prompt] = chat_metadata[metadata_keys.prompt] ?? extension_settings.note.default ?? '';
chat_metadata[metadata_keys.interval] = chat_metadata[metadata_keys.interval] ?? extension_settings.note.defaultInterval ?? DEFAULT_INTERVAL;
chat_metadata[metadata_keys.position] = chat_metadata[metadata_keys.position] ?? extension_settings.note.defaultPosition ?? DEFAULT_POSITION;
chat_metadata[metadata_keys.depth] = chat_metadata[metadata_keys.depth] ?? extension_settings.note.defaultDepth ?? DEFAULT_DEPTH;
+ chat_metadata[metadata_keys.role] = chat_metadata[metadata_keys.role] ?? extension_settings.note.defaultRole ?? DEFAULT_ROLE;
$('#extension_floating_prompt').val(chat_metadata[metadata_keys.prompt]);
$('#extension_floating_interval').val(chat_metadata[metadata_keys.interval]);
$('#extension_floating_allow_wi_scan').prop('checked', extension_settings.note.allowWIScan ?? false);
$('#extension_floating_depth').val(chat_metadata[metadata_keys.depth]);
+ $('#extension_floating_role').val(chat_metadata[metadata_keys.role]);
$(`input[name="extension_floating_position"][value="${chat_metadata[metadata_keys.position]}"]`).prop('checked', true);
if (extension_settings.note.chara && getContext().characterId) {
@@ -255,6 +274,7 @@ function loadSettings() {
$('#extension_floating_default').val(extension_settings.note.default);
$('#extension_default_depth').val(extension_settings.note.defaultDepth);
$('#extension_default_interval').val(extension_settings.note.defaultInterval);
+ $('#extension_default_role').val(extension_settings.note.defaultRole);
$(`input[name="extension_default_position"][value="${extension_settings.note.defaultPosition}"]`).prop('checked', true);
}
@@ -274,6 +294,10 @@ export function setFloatingPrompt() {
------
lastMessageNumber = ${lastMessageNumber}
metadata_keys.interval = ${chat_metadata[metadata_keys.interval]}
+ metadata_keys.position = ${chat_metadata[metadata_keys.position]}
+ metadata_keys.depth = ${chat_metadata[metadata_keys.depth]}
+ metadata_keys.role = ${chat_metadata[metadata_keys.role]}
+ ------
`);
// interval 1 should be inserted no matter what
@@ -313,7 +337,14 @@ export function setFloatingPrompt() {
}
}
}
- context.setExtensionPrompt(MODULE_NAME, prompt, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth], extension_settings.note.allowWIScan);
+ context.setExtensionPrompt(
+ MODULE_NAME,
+ prompt,
+ chat_metadata[metadata_keys.position],
+ chat_metadata[metadata_keys.depth],
+ extension_settings.note.allowWIScan,
+ chat_metadata[metadata_keys.role],
+ );
$('#extension_floating_counter').text(shouldAddPrompt ? '0' : messagesTillInsertion);
}
@@ -410,6 +441,8 @@ export function initAuthorsNote() {
$('#extension_default_depth').on('input', onDefaultDepthInput);
$('#extension_default_interval').on('input', onDefaultIntervalInput);
$('#extension_floating_allow_wi_scan').on('input', onAllowWIScanCheckboxChanged);
+ $('#extension_floating_role').on('input', onExtensionFloatingRoleInput);
+ $('#extension_default_role').on('input', onExtensionDefaultRoleInput);
$('input[name="extension_floating_position"]').on('change', onExtensionFloatingPositionInput);
$('input[name="extension_default_position"]').on('change', onDefaultPositionInput);
$('input[name="extension_floating_char_position"]').on('change', onExtensionFloatingCharPositionInput);
diff --git a/public/scripts/world-info.js b/public/scripts/world-info.js
index 5ffd9e3c3..29582a1f0 100644
--- a/public/scripts/world-info.js
+++ b/public/scripts/world-info.js
@@ -2285,7 +2285,7 @@ async function checkWorldInfo(chat, maxContext) {
if (shouldWIAddPrompt) {
const originalAN = context.extensionPrompts[NOTE_MODULE_NAME].value;
const ANWithWI = `${ANTopEntries.join('\n')}\n${originalAN}\n${ANBottomEntries.join('\n')}`;
- context.setExtensionPrompt(NOTE_MODULE_NAME, ANWithWI, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth], extension_settings.note.allowWIScan);
+ context.setExtensionPrompt(NOTE_MODULE_NAME, ANWithWI, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth], extension_settings.note.allowWIScan, chat_metadata[metadata_keys.role]);
}
return { worldInfoBefore, worldInfoAfter, WIDepthEntries, allActivatedEntries };
From 67e78fa4567dd00e3e09750830b4f479f09f1825 Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Sat, 23 Mar 2024 19:18:43 +0200
Subject: [PATCH 30/43] Add roles to summary injects
---
public/scripts/extensions/memory/index.js | 23 ++++++++++++++++++++---
public/scripts/openai.js | 22 ++++++++++++++++++++--
2 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/public/scripts/extensions/memory/index.js b/public/scripts/extensions/memory/index.js
index 778ef5caa..19003052e 100644
--- a/public/scripts/extensions/memory/index.js
+++ b/public/scripts/extensions/memory/index.js
@@ -1,6 +1,6 @@
import { getStringHash, debounce, waitUntilCondition, extractAllWords } from '../../utils.js';
import { getContext, getApiUrl, extension_settings, doExtrasFetch, modules } from '../../extensions.js';
-import { animation_duration, eventSource, event_types, extension_prompt_types, generateQuietPrompt, is_send_press, saveSettingsDebounced, substituteParams } from '../../../script.js';
+import { animation_duration, eventSource, event_types, extension_prompt_roles, extension_prompt_types, generateQuietPrompt, is_send_press, saveSettingsDebounced, substituteParams } from '../../../script.js';
import { is_group_generating, selected_group } from '../../group-chats.js';
import { registerSlashCommand } from '../../slash-commands.js';
import { loadMovingUIState } from '../../power-user.js';
@@ -49,6 +49,7 @@ const defaultSettings = {
prompt: defaultPrompt,
template: defaultTemplate,
position: extension_prompt_types.IN_PROMPT,
+ role: extension_prompt_roles.SYSTEM,
depth: 2,
promptWords: 200,
promptMinWords: 25,
@@ -83,6 +84,7 @@ function loadSettings() {
$('#memory_prompt_interval').val(extension_settings.memory.promptInterval).trigger('input');
$('#memory_template').val(extension_settings.memory.template).trigger('input');
$('#memory_depth').val(extension_settings.memory.depth).trigger('input');
+ $('#memory_role').val(extension_settings.memory.role).trigger('input');
$(`input[name="memory_position"][value="${extension_settings.memory.position}"]`).prop('checked', true).trigger('input');
$('#memory_prompt_words_force').val(extension_settings.memory.promptForceWords).trigger('input');
switchSourceControls(extension_settings.memory.source);
@@ -148,6 +150,13 @@ function onMemoryDepthInput() {
saveSettingsDebounced();
}
+function onMemoryRoleInput() {
+ const value = $(this).val();
+ extension_settings.memory.role = Number(value);
+ reinsertMemory();
+ saveSettingsDebounced();
+}
+
function onMemoryPositionChange(e) {
const value = e.target.value;
extension_settings.memory.position = value;
@@ -480,11 +489,12 @@ function reinsertMemory() {
function setMemoryContext(value, saveToMessage) {
const context = getContext();
- context.setExtensionPrompt(MODULE_NAME, formatMemoryValue(value), extension_settings.memory.position, extension_settings.memory.depth);
+ context.setExtensionPrompt(MODULE_NAME, formatMemoryValue(value), extension_settings.memory.position, extension_settings.memory.depth, false, extension_settings.memory.role);
$('#memory_contents').val(value);
console.log('Summary set to: ' + value);
console.debug('Position: ' + extension_settings.memory.position);
console.debug('Depth: ' + extension_settings.memory.depth);
+ console.debug('Role: ' + extension_settings.memory.role);
if (saveToMessage && context.chat.length) {
const idx = context.chat.length - 2;
@@ -560,6 +570,7 @@ function setupListeners() {
$('#memory_force_summarize').off('click').on('click', forceSummarizeChat);
$('#memory_template').off('click').on('input', onMemoryTemplateInput);
$('#memory_depth').off('click').on('input', onMemoryDepthInput);
+ $('#memory_role').off('click').on('input', onMemoryRoleInput);
$('input[name="memory_position"]').off('click').on('change', onMemoryPositionChange);
$('#memory_prompt_words_force').off('click').on('input', onMemoryPromptWordsForceInput);
$('#summarySettingsBlockToggle').off('click').on('click', function () {
@@ -620,9 +631,15 @@ jQuery(function () {
After Main Prompt / Story String
-