Compare commits

...

9 Commits

Author SHA1 Message Date
Zhongyi Lu ced2055600
Merge 1a3070d464 into be7eb8b2b5 2024-04-26 15:36:48 +00:00
Cohee be7eb8b2b5
Merge pull request #2143 from aisu-wata0/style_mes_block_overflow_y
style: `.mes_block { overflow-y: clip; }`
2024-04-26 18:36:17 +03:00
Cohee 3b6372431a
Merge pull request #2144 from sirius422/fix-json-export-extension
Add json extension to exported oai and LogitBias presets
2024-04-26 18:30:55 +03:00
sirius422 389ee7917f Add json extension to exported oai and LogitBias presets 2024-04-26 23:07:25 +08:00
Cohee 212e61d2a1 Lazy initialization of Claude tokenizer. Add JSDoc for tokenizer handlers 2024-04-26 15:17:02 +03:00
Cohee 1b60e4a013 Init user storage module before server listening 2024-04-26 14:09:40 +03:00
Aisu Wata 93cd93ada3 style: `.mes_block { overflow-y: clip; }` 2024-04-25 21:49:12 -03:00
Zhongyi Lu 1a3070d464 add generating script 2024-04-17 16:00:54 -07:00
Zhongyi Lu 92ad5ca320 add English test 2024-04-16 20:00:43 -07:00
13 changed files with 1150 additions and 74 deletions

View File

@ -1,2 +1,919 @@
{
}
"clickslidertips": "Click slider numbers to input manually.",
"kobldpresets": "Kobold Presets",
"guikoboldaisettings": "GUI KoboldAI Settings",
"novelaipreserts": "NovelAI Presets",
"default": "default",
"openaipresets": "Chat Completion Presets",
"text gen webio(ooba) presets": "Text gen webio(ooba) presets",
"response legth(tokens)": "Response (tokens)",
"select": "Select",
"context size(tokens)": "Context (tokens)",
"unlocked": "Unlocked",
"Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.",
"rep.pen": "Repetition Penalty",
"WI Entry Status:\ud83d\udd35 Constant\ud83d\udfe2 Normal\u274c Disabled": "WI Entry Status:\ud83d\udd35 Constant\ud83d\udfe2 Normal\u274c Disabled",
"rep.pen range": "Repetition Penalty Range",
"Temperature controls the randomness in token selection": "Temperature controls the randomness in token selection",
"temperature": "Temperature",
"Top K sets a maximum amount of top tokens that can be chosen from": "Top K sets a maximum amount of top tokens that can be chosen from",
"Top P (a.k.a. nucleus sampling)": "Top P (a.k.a. nucleus sampling)",
"Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set",
"Min P sets a base minimum probability": "Min P sets a base minimum probability",
"Top A sets a threshold for token selection based on the square of the highest token probability": "Top A sets a threshold for token selection based on the square of the highest token probability",
"Tail-Free Sampling (TFS)": "Tail-Free Sampling (TFS)",
"Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled",
"Scale Temperature dynamically per token, based on the variation of probabilities": "Scale Temperature dynamically per token, based on the variation of probabilities",
"Minimum Temp": "Minimum Temp",
"Maximum Temp": "Maximum Temp",
"Exponent": "Exponent",
"Mirostat Mode": "Mirostat Mode",
"Mirostat Tau": "Mirostat Tau",
"Mirostat Eta": "Mirostat Eta",
"Variability parameter for Mirostat outputs": "Variability parameter for Mirostat outputs",
"Learning rate of Mirostat": "Learning rate of Mirostat",
"Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "Strength of the Contrastive Search regularization term. Set to 0 to disable CS",
"Temperature Last": "Temperature Last",
"Use the temperature sampler last": "Use the temperature sampler last",
"LLaMA / Mistral / Yi models only": "LLaMA / Mistral / Yi models only",
"Example: some text [42, 69, 1337]": "Example: some text [42, 69, 1337]",
"Classifier Free Guidance. More helpful tip coming soon": "Classifier Free Guidance. More helpful tip coming soon",
"Scale": "Scale",
"GBNF Grammar": "GBNF Grammar",
"Usage Stats": "Usage Stats",
"Click for stats!": "Click for stats!",
"Backup": "Backup",
"Backup your personas to a file": "Backup your personas to a file",
"Restore": "Restore",
"Restore your personas from a file": "Restore your personas from a file",
"Type in the desired custom grammar": "Type in the desired custom grammar",
"Encoder Rep. Pen.": "Encoder Rep. Pen.",
"Smoothing Factor": "Smoothing Factor",
"No Repeat Ngram Size": "No Repeat Ngram Size",
"Min Length": "Min Length",
"OpenAI Reverse Proxy": "OpenAI Reverse Proxy",
"Alternative server URL (leave empty to use the default value).": "Alternative server URL (leave empty to use the default value).",
"Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Remove your real OAI API Key from the API panel BEFORE typing anything into this box",
"We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "We cannot provide support for problems encountered while using an unofficial OpenAI proxy",
"Legacy Streaming Processing": "Legacy Streaming Processing",
"Enable this if the streaming doesn't work with your proxy": "Enable this if the streaming doesn't work with your proxy",
"Context Size (tokens)": "Context Size (tokens)",
"Max Response Length (tokens)": "Max Response Length (tokens)",
"Temperature": "Temperature",
"Frequency Penalty": "Frequency Penalty",
"Presence Penalty": "Presence Penalty",
"Top-p": "Top-p",
"Display bot response text chunks as they are generated": "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 mode",
"Top K": "Top K",
"Top P": "Top P",
"Do Sample": "Do Sample",
"Add BOS Token": "Add BOS Token",
"Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative",
"Ban EOS Token": "Ban EOS Token",
"Ban the eos_token. This forces the model to never end the generation prematurely": "Ban the eos_token. This forces the model to never end the generation prematurely",
"Skip Special Tokens": "Skip Special Tokens",
"Beam search": "Beam search",
"Number of Beams": "Number of Beams",
"Length Penalty": "Length Penalty",
"Early Stopping": "Early Stopping",
"Contrastive search": "Contrastive search",
"Penalty Alpha": "Penalty Alpha",
"Seed": "Seed",
"Epsilon Cutoff": "Epsilon Cutoff",
"Eta Cutoff": "Eta Cutoff",
"Negative Prompt": "Negative Prompt",
"Mirostat (mode=1 is only for llama.cpp)": "Mirostat (mode=1 is only for llama.cpp)",
"Mirostat is a thermostat for output perplexity": "Mirostat is a thermostat for output perplexity",
"Add text here that would make the AI generate things you don't want in your outputs.": "Add text here that would make the AI generate things you don't want in your outputs.",
"Phrase Repetition Penalty": "Phrase Repetition Penalty",
"Preamble": "Preamble",
"Use style tags to modify the writing style of the output.": "Use style tags to modify the writing style of the output.",
"Banned Tokens": "Banned Tokens",
"Sequences you don't want to appear in the output. One per line.": "Sequences you don't want to appear in the output. One per line.",
"AI Module": "AI Module",
"Changes the style of the generated text.": "Changes the style of the generated text.",
"Used if CFG Scale is unset globally, per chat or character": "Used if CFG Scale is unset globally, per chat or character",
"Inserts jailbreak as a last system message.": "Inserts jailbreak as a last system message.",
"This tells the AI to ignore its usual content restrictions.": "This tells the AI to ignore its usual content restrictions.",
"NSFW Encouraged": "NSFW Encouraged",
"Tell the AI that NSFW is allowed.": "Tell the AI that NSFW is allowed.",
"NSFW Prioritized": "NSFW Prioritized",
"NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW prompt text goes first in the prompt to emphasize its effect.",
"Streaming": "Streaming",
"Dynamic Temperature": "Dynamic Temperature",
"Restore current preset": "Restore current preset",
"Neutralize Samplers": "Neutralize Samplers",
"Text Completion presets": "Text Completion presets",
"Documentation on sampling parameters": "Documentation on sampling parameters",
"Set all samplers to their neutral/disabled state.": "Set all samplers to their neutral/disabled state.",
"Only enable this if your model supports context sizes greater than 4096 tokens": "Only enable this if your model supports context sizes greater than 4096 tokens",
"Display the response bit by bit as it is generated": "Display the response bit by bit as it is generated",
"Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).",
"Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).",
"Good for story writing, but should not be used for chat and instruct mode.": "Good for story writing, but should not be used for chat and instruct mode.",
"Enhance Definitions": "Enhance Definitions",
"Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Use OAI knowledge base to enhance definitions for public figures and known fictional characters",
"Wrap in Quotes": "Wrap in Quotes",
"Wrap entire user message in quotes before sending.": "Wrap entire user message in quotes before sending.",
"Leave off if you use quotes manually for speech.": "Leave off if you use quotes manually for speech.",
"Main prompt": "Main prompt",
"The main prompt used to set the model behavior": "The main prompt used to set the model behavior",
"NSFW prompt": "NSFW prompt",
"Prompt that is used when the NSFW toggle is on": "Prompt that is used when the NSFW toggle is on",
"Jailbreak prompt": "Jailbreak prompt",
"Prompt that is used when the Jailbreak toggle is on": "Prompt that is used when the Jailbreak toggle is on",
"Impersonation prompt": "Impersonation prompt",
"Prompt that is used for Impersonation function": "Prompt that is used for Impersonation function",
"Logit Bias": "Logit Bias",
"Helps to ban or reenforce the usage of certain words": "Helps to ban or reenforce the usage of certain words",
"View / Edit bias preset": "View / Edit bias preset",
"Add bias entry": "Add bias entry",
"Jailbreak activation message": "Jailbreak activation message",
"Message to send when auto-jailbreak is on.": "Message to send when auto-jailbreak is on.",
"Jailbreak confirmation reply": "Jailbreak confirmation reply",
"Bot must send this back to confirm jailbreak": "Bot must send this back to confirm jailbreak",
"Character Note": "Character Note",
"Influences bot behavior in its responses": "Influences bot behavior in its responses",
"Connect": "Connect",
"Test Message": "Test Message",
"API": "API",
"KoboldAI": "KoboldAI",
"Use Horde": "Use Horde",
"API url": "API url",
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine",
"Register a Horde account for faster queue times": "Register a Horde account for faster queue times",
"Learn how to contribute your idle GPU cycles to the Hord": "Learn how to contribute your idle GPU cycles to the Hord",
"Adjust context size to worker capabilities": "Adjust context size to worker capabilities",
"Adjust response length to worker capabilities": "Adjust response length to worker capabilities",
"API key": "API key",
"Tabby API key": "Tabby API key",
"Get it here:": "Get it here:",
"Register": "Register",
"TogetherAI Model": "TogetherAI Model",
"Example: 127.0.0.1:5001": "Example: 127.0.0.1:5001",
"ggerganov/llama.cpp": "ggerganov/llama.cpp",
"Example: 127.0.0.1:8080": "Example: 127.0.0.1:8080",
"Example: 127.0.0.1:11434": "Example: 127.0.0.1:11434",
"Ollama Model": "Ollama Model",
"Download": "Download",
"TogetherAI API Key": "TogetherAI API Key",
"-- Connect to the API --": "-- Connect to the API --",
"View my Kudos": "View my Kudos",
"Enter": "Enter",
"to use anonymous mode.": "to use anonymous mode.",
"For privacy reasons": "For privacy reasons",
"Models": "Models",
"Hold Control / Command key to select multiple models.": "Hold Control / Command key to select multiple models.",
"Horde models not loaded": "Horde models not loaded",
"Not connected...": "Not connected...",
"Novel API key": "Novel API key",
"Follow": "Follow",
"these directions": "these directions",
"to get your NovelAI API key.": "to get your NovelAI API key.",
"Enter it in the box below": "Enter it in the box below",
"Novel AI Model": "Novel AI Model",
"If you are using:": "If you are using:",
"oobabooga/text-generation-webui": "oobabooga/text-generation-webui",
"Make sure you run it with": "Make sure you run it with",
"flag": "flag",
"API key (optional)": "API key (optional)",
"Server url": "Server url",
"Custom model (optional)": "Custom model (optional)",
"Bypass API status check": "Bypass API status check",
"Mancer AI": "Mancer AI",
"Use API key (Only required for Mancer)": "Use API key (Only required for Mancer)",
"Blocking API url": "Blocking API url",
"Example: 127.0.0.1:5000": "Example: 127.0.0.1:5000",
"Legacy API (pre-OAI, no streaming)": "Legacy API (pre-OAI, no streaming)",
"Bypass status check": "Bypass status check",
"Streaming API url": "Streaming API url",
"Example: ws://127.0.0.1:5005/api/v1/stream": "Example: ws://127.0.0.1:5005/api/v1/stream",
"Mancer API key": "Mancer API key",
"Example: https://neuro.mancer.tech/webui/MODEL/api": "Example: https://neuro.mancer.tech/webui/MODEL/api",
"to get your OpenAI API key.": "to get your OpenAI API key.",
"Window AI Model": "Window AI Model",
"OpenAI Model": "OpenAI Model",
"Claude API Key": "Claude API Key",
"Get your key from": "Get your key from",
"Anthropic's developer console": "Anthropic's developer console",
"Slack and Poe cookies will not work here, do not bother trying.": "Slack and Poe cookies will not work here, do not bother trying.",
"Claude Model": "Claude Model",
"Scale API Key": "Scale API Key",
"Alt Method": "Alt Method",
"AI21 API Key": "AI21 API Key",
"AI21 Model": "AI21 Model",
"View API Usage Metrics": "View API Usage Metrics",
"Show External models (provided by API)": "Show External models (provided by API)",
"Bot": "Bot",
"Allow fallback routes": "Allow fallback routes",
"Allow fallback routes Description": "Allow fallback routes Description",
"OpenRouter API Key": "OpenRouter API Key",
"Connect to the API": "Connect to the API",
"OpenRouter Model": "OpenRouter Model",
"View Remaining Credits": "View Remaining Credits",
"Click Authorize below or get the key from": "Click Authorize below or get the key from",
"Auto-connect to Last Server": "Auto-connect to Last Server",
"View hidden API keys": "View hidden API keys",
"Advanced Formatting": "Advanced Formatting",
"Context Template": "Context Template",
"AutoFormat Overrides": "AutoFormat Overrides",
"Disable description formatting": "Disable description formatting",
"Disable personality formatting": "Disable personality formatting",
"Disable scenario formatting": "Disable scenario formatting",
"Disable example chats formatting": "Disable example chats formatting",
"Disable chat start formatting": "Disable chat start formatting",
"Custom Chat Separator": "Custom Chat Separator",
"Replace Macro in Custom Stopping Strings": "Replace Macro in Custom Stopping Strings",
"Strip Example Messages from Prompt": "Strip Example Messages from Prompt",
"Story String": "Story String",
"Example Separator": "Example Separator",
"Chat Start": "Chat Start",
"Activation Regex": "Activation Regex",
"Instruct Mode": "Instruct Mode",
"Wrap Sequences with Newline": "Wrap Sequences with Newline",
"Include Names": "Include Names",
"Force for Groups and Personas": "Force for Groups and Personas",
"System Prompt": "System Prompt",
"Instruct Mode Sequences": "Instruct Mode Sequences",
"Input Sequence": "Input Sequence",
"Output Sequence": "Output Sequence",
"First Output Sequence": "First Output Sequence",
"Last Output Sequence": "Last Output Sequence",
"System Sequence Prefix": "System Sequence Prefix",
"System Sequence Suffix": "System Sequence Suffix",
"Stop Sequence": "Stop Sequence",
"Context Formatting": "Context Formatting",
"(Saved to Context Template)": "(Saved to Context Template)",
"Tokenizer": "Tokenizer",
"None / Estimated": "None / Estimated",
"Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)",
"Token Padding": "Token Padding",
"Save preset as": "Save preset as",
"Always add character's name to prompt": "Always add character's name to prompt",
"Use as Stop Strings": "Use as Stop Strings",
"Bind to Context": "Bind to Context",
"Generate only one line per request": "Generate only one line per request",
"Misc. Settings": "Misc. Settings",
"Auto-Continue": "Auto-Continue",
"Collapse Consecutive Newlines": "Collapse Consecutive Newlines",
"Allow for Chat Completion APIs": "Allow for Chat Completion APIs",
"Target length (tokens)": "Target length (tokens)",
"Keep Example Messages in Prompt": "Keep Example Messages in Prompt",
"Remove Empty New Lines from Output": "Remove Empty New Lines from Output",
"Disabled for all models": "Disabled for all models",
"Automatic (based on model name)": "Automatic (based on model name)",
"Enabled for all models": "Enabled for all models",
"Anchors Order": "Anchors Order",
"Character then Style": "Character then Style",
"Style then Character": "Style then Character",
"Character Anchor": "Character Anchor",
"Style Anchor": "Style Anchor",
"World Info": "World Info",
"Scan Depth": "Scan Depth",
"Case-Sensitive": "Case-Sensitive",
"Match Whole Words": "Match Whole Words",
"Use global setting": "Use global setting",
"Yes": "Yes",
"No": "No",
"Context %": "Context %",
"Budget Cap": "Budget Cap",
"(0 = disabled)": "(0 = disabled)",
"depth": "depth",
"Token Budget": "Token Budget",
"budget": "budget",
"Recursive scanning": "Recursive scanning",
"None": "None",
"User Settings": "User Settings",
"UI Mode": "UI Mode",
"UI Language": "UI Language",
"MovingUI Preset": "MovingUI Preset",
"UI Customization": "UI Customization",
"Avatar Style": "Avatar Style",
"Circle": "Circle",
"Rectangle": "Rectangle",
"Square": "Square",
"Chat Style": "Chat Style",
"Default": "Default",
"Bubbles": "Bubbles",
"No Blur Effect": "No Blur Effect",
"No Text Shadows": "No Text Shadows",
"Waifu Mode": "Waifu Mode",
"Message Timer": "Message Timer",
"Model Icon": "Model Icon",
"# of messages (0 = disabled)": "# of messages (0 = disabled)",
"Advanced Character Search": "Advanced Character Search",
"Allow {{char}}: in bot messages": "Allow {{char}}: in bot messages",
"Allow {{user}}: in bot messages": "Allow {{user}}: in bot messages",
"Show tags in responses": "Show tags in responses",
"Aux List Field": "Aux List Field",
"Lorebook Import Dialog": "Lorebook Import Dialog",
"MUI Preset": "MUI Preset",
"If set in the advanced character definitions, this field will be displayed in the characters list.": "If set in the advanced character definitions, this field will be displayed in the characters list.",
"Relaxed API URLS": "Relaxed API URLS",
"Custom CSS": "Custom CSS",
"Default (oobabooga)": "Default (oobabooga)",
"Mancer Model": "Mancer Model",
"API Type": "API Type",
"Aphrodite API key": "Aphrodite API key",
"Relax message trim in Groups": "Relax message trim in Groups",
"Characters Hotswap": "Characters Hotswap",
"Request token probabilities": "Request token probabilities",
"Movable UI Panels": "Movable UI Panels",
"Reset Panels": "Reset Panels",
"UI Colors": "UI Colors",
"Main Text": "Main Text",
"Italics Text": "Italics Text",
"Quote Text": "Quote Text",
"Shadow Color": "Shadow Color",
"FastUI BG": "FastUI BG",
"Blur Tint": "Blur Tint",
"Font Scale": "Font Scale",
"Blur Strength": "Blur Strength",
"Text Shadow Width": "Text Shadow Width",
"UI Theme Preset": "UI Theme Preset",
"Power User Options": "Power User Options",
"Swipes": "Swipes",
"Miscellaneous": "Miscellaneous",
"Theme Toggles": "Theme Toggles",
"Background Sound Only": "Background Sound Only",
"Auto-load Last Chat": "Auto-load Last Chat",
"Auto-save Message Edits": "Auto-save Message Edits",
"Auto-fix Markdown": "Auto-fix Markdown",
"Allow : in bot messages": "Allow : in bot messages",
"Auto-scroll Chat": "Auto-scroll Chat",
"Render Formulas": "Render Formulas",
"Send on Enter": "Send on Enter",
"Always disabled": "Always disabled",
"Automatic (desktop)": "Automatic (desktop)",
"Always enabled": "Always enabled",
"Debug Menu": "Debug Menu",
"Restore User Input": "Restore User Input",
"Character Handling": "Character Handling",
"Example Messages Behavior": "Example Messages Behavior",
"Gradual push-out": "Gradual push-out",
"Chat/Message Handling": "Chat/Message Handling",
"Always include examples": "Always include examples",
"Never include examples": "Never include examples",
"Forbid External Media": "Forbid External Media",
"System Backgrounds": "System Backgrounds",
"Name": "Name",
"Your Avatar": "Your Avatar",
"Extensions API:": "Extensions API:",
"SillyTavern-extras": "SillyTavern-extras",
"Auto-connect": "Auto-connect",
"Active extensions": "Active extensions",
"Extension settings": "Extension settings",
"Description": "Description",
"First message": "First message",
"Group Controls": "Group Controls",
"Group reply strategy": "Group reply strategy",
"Natural order": "Natural order",
"List order": "List order",
"Allow self responses": "Allow self responses",
"Auto Mode": "Auto Mode",
"Add Members": "Add Members",
"Current Members": "Current Members",
"text": "text",
"Delete": "Delete",
"Cancel": "Cancel",
"Advanced Defininitions": "Advanced Defininitions",
"Personality summary": "Personality summary",
"A brief description of the personality": "A brief description of the personality",
"Scenario": "Scenario",
"Circumstances and context of the dialogue": "Circumstances and context of the dialogue",
"Talkativeness": "Talkativeness",
"How often the chracter speaks in": "How often the chracter speaks in",
"group chats!": "group chats!",
"Shy": "Shy",
"Normal": "Normal",
"Chatty": "Chatty",
"Examples of dialogue": "Examples of dialogue",
"Forms a personality more clearly": "Forms a personality more clearly",
"Save": "Save",
"World Info Editor": "World Info Editor",
"New summary": "New summary",
"Export": "Export",
"Delete World": "Delete World",
"Chat History": "Chat History",
"Group Chat Scenario Override": "Group Chat Scenario Override",
"All group members will use the following scenario text instead of what is specified in their character cards.": "All group members will use the following scenario text instead of what is specified in their character cards.",
"Keywords": "Keywords",
"Separate with commas": "Separate with commas",
"Secondary Required Keywords": "Secondary Required Keywords",
"Content": "Content",
"What this keyword should mean to the AI": "What this keyword should mean to the AI",
"Memo/Note": "Memo/Note",
"Not sent to AI": "Not sent to AI",
"Constant": "Constant",
"Selective": "Selective",
"Before Char": "Before Char",
"After Char": "After Char",
"Insertion Order": "Insertion Order",
"Tokens:": "Tokens:",
"Disable": "Disable",
"${characterName}": "${characterName}",
"CHAR": "CHAR",
"is typing": "is typing",
"Back to parent chat": "Back to parent chat",
"Save bookmark": "Save bookmark",
"Convert to group": "Convert to group",
"Start new chat": "Start new chat",
"View past chats": "View past chats",
"Delete messages": "Delete messages",
"Impersonate": "Impersonate",
"Regenerate": "Regenerate",
"PNG": "PNG",
"JSON": "JSON",
"presets": "presets",
"Message Sound": "Message Sound",
"Author's Note": "Author's Note",
"Send Jailbreak": "Send Jailbreak",
"Replace empty message": "Replace empty message",
"Send this text instead of nothing when the text box is empty.": "Send this text instead of nothing when the text box is empty.",
"NSFW avoidance prompt": "NSFW avoidance prompt",
"Prompt that is used when the NSFW toggle is off": "Prompt that is used when the NSFW toggle is off",
"Advanced prompt bits": "Advanced prompt bits",
"World Info format": "World Info format",
"Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.",
"Unrestricted maximum value for the context slider": "Unrestricted maximum value for the context slider",
"Chat Completion Source": "Chat Completion Source",
"Avoid sending sensitive information to the Horde.": "Avoid sending sensitive information to the Horde.",
"Review the Privacy statement": "Review the Privacy statement",
"Learn how to contribute your idel GPU cycles to the Horde": "Learn how to contribute your idel GPU cycles to the Horde",
"Trusted workers only": "Trusted workers only",
"For privacy reasons, your API key will be hidden after you reload the page.": "For privacy reasons, your API key will be hidden after you reload the page.",
"-- Horde models not loaded --": "-- Horde models not loaded --",
"Example: http://127.0.0.1:5000/api ": "Example: http://127.0.0.1:5000/api ",
"No connection...": "No connection...",
"Get your NovelAI API Key": "Get your NovelAI API Key",
"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 key",
"Trim spaces": "Trim spaces",
"Trim Incomplete Sentences": "Trim Incomplete Sentences",
"Include Newline": "Include Newline",
"Non-markdown strings": "Non-markdown strings",
"Replace Macro in Sequences": "Replace Macro in Sequences",
"Presets": "Presets",
"Separator": "Separator",
"Start Reply With": "Start Reply With",
"Show reply prefix in chat": "Show reply prefix in chat",
"Worlds/Lorebooks": "Worlds/Lorebooks",
"Active World(s)": "Active World(s)",
"Activation Settings": "Activation Settings",
"Character Lore Insertion Strategy": "Character Lore Insertion Strategy",
"Sorted Evenly": "Sorted Evenly",
"Active World(s) for all chats": "Active World(s) for all chats",
"-- World Info not found --": "-- World Info not found --",
"--- Pick to Edit ---": "--- Pick to Edit ---",
"or": "or",
"New": "New",
"Priority": "Priority",
"Custom": "Custom",
"Title A-Z": "Title A-Z",
"Title Z-A": "Title Z-A",
"Tokens \u2197": "Tokens \u2197",
"Tokens \u2198": "Tokens \u2198",
"Depth \u2197": "Depth \u2197",
"Depth \u2198": "Depth \u2198",
"Order \u2197": "Order \u2197",
"Order \u2198": "Order \u2198",
"UID \u2197": "UID \u2197",
"UID \u2198": "UID \u2198",
"Trigger% \u2197": "Trigger% \u2197",
"Trigger% \u2198": "Trigger% \u2198",
"Order:": "Order:",
"Depth:": "Depth:",
"Character Lore First": "Character Lore First",
"Global Lore First": "Global Lore First",
"Recursive Scan": "Recursive Scan",
"Case Sensitive": "Case Sensitive",
"Match whole words": "Match whole words",
"Alert On Overflow": "Alert On Overflow",
"World/Lore Editor": "World/Lore Editor",
"--- None ---": "--- None ---",
"Comma seperated (ignored if empty)": "Comma seperated (ignored if empty)",
"Use Probability": "Use Probability",
"Exclude from recursion": "Exclude from recursion",
"Entry Title/Memo": "Entry Title/Memo",
"Position:": "Position:",
"T_Position": "T_Position",
"Before Char Defs": "Before Char Defs",
"After Char Defs": "After Char Defs",
"Before AN": "Before AN",
"After AN": "After AN",
"at Depth": "at Depth",
"Order": "Order",
"Probability:": "Probability:",
"Update a theme file": "Update a theme file",
"Save as a new theme": "Save as a new theme",
"Minimum number of blacklisted words detected to trigger an auto-swipe": "Minimum number of blacklisted words detected to trigger an auto-swipe",
"Delete Entry": "Delete Entry",
"User Message Blur Tint": "User Message Blur Tint",
"AI Message Blur Tint": "AI Message Blur Tint",
"Chat Backgrounds": "Chat Backgrounds",
"Chat Background": "Chat Background",
"UI Background": "UI Background",
"Mad Lab Mode": "Mad Lab Mode",
"Show Message Token Count": "Show Message Token Count",
"Compact Input Area (Mobile)": "Compact Input Area (Mobile)",
"Zen Sliders": "Zen Sliders",
"UI Border": "UI Border",
"Chat Style:": "Chat Style:",
"Chat Width (PC)": "Chat Width (PC)",
"Chat Timestamps": "Chat Timestamps",
"Tags as Folders": "Tags as Folders",
"Chat Truncation": "Chat Truncation",
"(0 = unlimited)": "(0 = unlimited)",
"Streaming FPS": "Streaming FPS",
"Gestures": "Gestures",
"Message IDs": "Message IDs",
"Prefer Character Card Prompt": "Prefer Character Card Prompt",
"Prefer Character Card Jailbreak": "Prefer Character Card Jailbreak",
"Press Send to continue": "Press Send to continue",
"Quick 'Continue' button": "Quick 'Continue' button",
"Log prompts to console": "Log prompts to console",
"Never resize avatars": "Never resize avatars",
"Show avatar filenames": "Show avatar filenames",
"Import Card Tags": "Import Card Tags",
"Confirm message deletion": "Confirm message deletion",
"Spoiler Free Mode": "Spoiler Free Mode",
"Auto-swipe": "Auto-swipe",
"Minimum generated message length": "Minimum generated message length",
"Blacklisted words": "Blacklisted words",
"Blacklisted word count to swipe": "Blacklisted word count to swipe",
"Reload Chat": "Reload Chat",
"Search Settings": "Search Settings",
"Disabled": "Disabled",
"Automatic (PC)": "Automatic (PC)",
"Enabled": "Enabled",
"Simple": "Simple",
"Advanced": "Advanced",
"Disables animations and transitions": "Disables animations and transitions",
"removes blur from window backgrounds": "removes blur from window backgrounds",
"Remove text shadow effect": "Remove text shadow effect",
"Reduce chat height, and put a static sprite behind the chat window": "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 '...'": "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": "Alternative UI for numeric sampling parameters with fewer steps",
"Entirely unrestrict all numeric sampling parameters": "Entirely unrestrict all numeric sampling parameters",
"Time the AI's message generation, and show the duration in the chat log": "Time the AI's message generation, and show the duration in the chat log",
"Show a timestamp for each message in the chat log": "Show a timestamp for each message in the chat log",
"Show an icon for the API that generated the message": "Show an icon for the API that generated the message",
"Show sequential message numbers in the chat log": "Show sequential message numbers in the chat log",
"Show the number of tokens in each message 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": "Single-row message input area. Mobile only, no effect on PC",
"In the Character Management panel, show quick selection buttons for favorited characters": "In the Character Management panel, show quick selection buttons for favorited characters",
"Show tagged character folders in the character list": "Show tagged character folders in the character list",
"Play a sound when a message generation finishes": "Play a sound when a message generation finishes",
"Only play a sound when ST's browser tab is unfocused": "Only play a sound when ST's browser tab is unfocused",
"Reduce the formatting requirements on API URLs": "Reduce the formatting requirements on API URLs",
"Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "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": "Restore unsaved user input on page refresh",
"Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile",
"MovingUI preset. Predefined/saved draggable positions": "MovingUI preset. Predefined/saved draggable positions",
"Save movingUI changes to a new file": "Save movingUI changes to a new file",
"Apply a custom CSS style to all of the ST GUI": "Apply a custom CSS style to all of the ST GUI",
"Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "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 prompt override (System Prompt), use that instead",
"If checked and the character card contains a jailbreak override (Post History Instruction), 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": "Avoid cropping and resizing imported character images. When off, crop/resize to 400x600",
"Show actual file names on the disk, in the characters list display only": "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": "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": "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": "Show a button in the input area to ask the AI to continue (extend) its last message",
"Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile",
"Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC",
"Save edits to messages without confirmation as you type": "Save edits to messages without confirmation as you type",
"Render LaTeX and AsciiMath equation notation in chat messages. Powered by KaTeX": "Render LaTeX and AsciiMath equation notation in chat messages. Powered by KaTeX",
"Disalow embedded media from other domains in chat messages": "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": "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown",
"Allow AI messages in groups to contain lines spoken by other group members": "Allow AI messages in groups to contain lines spoken by other group members",
"Requests logprobs from the API for the Token Probabilities feature": "Requests logprobs from the API for the Token Probabilities feature",
"Automatically reject and re-generate AI message based on configurable criteria": "Automatically reject and re-generate AI message based on configurable criteria",
"Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "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": "If the generated message is shorter than this, trigger an auto-swipe",
"Reload and redraw the currently open chat": "Reload and redraw the currently open chat",
"Auto-Expand Message Actions": "Auto-Expand Message Actions",
"Not Connected": "Not Connected",
"Persona Management": "Persona Management",
"Persona Description": "Persona Description",
"Your Persona": "Your Persona",
"Show notifications on switching personas": "Show notifications on switching personas",
"Blank": "Blank",
"In Story String / Chat Completion: Before Character Card": "In Story String / Chat Completion: Before Character Card",
"In Story String / Chat Completion: After Character Card": "In Story String / Chat Completion: After Character Card",
"In Story String / Prompt Manager": "In Story String / Prompt Manager",
"Top of Author's Note": "Top of Author's Note",
"Bottom of Author's Note": "Bottom of Author's Note",
"How do I use this?": "How do I use this?",
"More...": "More...",
"Link to World Info": "Link to World Info",
"Import Card Lore": "Import Card Lore",
"Scenario Override": "Scenario Override",
"Rename": "Rename",
"Character Description": "Character Description",
"Creator's Notes": "Creator's Notes",
"A-Z": "A-Z",
"Z-A": "Z-A",
"Newest": "Newest",
"Oldest": "Oldest",
"Favorites": "Favorites",
"Recent": "Recent",
"Most chats": "Most chats",
"Least chats": "Least chats",
"Back": "Back",
"Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)",
"Insert {{original}} into either box to include the respective default prompt from system settings.": "Insert {{original}} into either box to include the respective default prompt from system settings.",
"Main Prompt": "Main Prompt",
"Jailbreak": "Jailbreak",
"Creator's Metadata (Not sent with the AI prompt)": "Creator's Metadata (Not sent with the AI prompt)",
"Everything here is optional": "Everything here is optional",
"Created by": "Created by",
"Character Version": "Character Version",
"Tags to Embed": "Tags to Embed",
"How often the character speaks in group chats!": "How often the character speaks in group chats!",
"Important to set the character's writing style.": "Important to set the character's writing style.",
"ATTENTION!": "ATTENTION!",
"Samplers Order": "Samplers Order",
"Samplers will be applied in a top-down order. Use with caution.": "Samplers will be applied in a top-down order. Use with caution.",
"Repetition Penalty": "Repetition Penalty",
"Rep. Pen. Range.": "Rep. Pen. Range.",
"Rep. Pen. Freq.": "Rep. Pen. Freq.",
"Rep. Pen. Presence": "Rep. Pen. Presence",
"Enter it in the box below:": "Enter it in the box below:",
"separate with commas w/o space between": "separate with commas w/o space between",
"Document": "Document",
"Suggest replies": "Suggest replies",
"Show suggested replies. Not all bots support this.": "Show suggested replies. Not all bots support this.",
"Use 'Unlocked Context' to enable chunked generation.": "Use 'Unlocked Context' to enable chunked generation.",
"It extends the context window in exchange for reply generation speed.": "It extends the context window in exchange for reply generation speed.",
"Continue": "Continue",
"CFG Scale": "CFG Scale",
"Editing:": "Editing:",
"AI reply prefix": "AI reply prefix",
"Custom Stopping Strings": "Custom Stopping Strings",
"JSON serialized array of strings": "JSON serialized array of strings",
"words you dont want generated separated by comma ','": "words you dont want generated separated by comma ','",
"Extensions URL": "Extensions URL",
"API Key": "API Key",
"Enter your name": "Enter your name",
"Name this character": "Name this character",
"Search / Create Tags": "Search / Create Tags",
"Describe your character's physical and mental traits here.": "Describe your character's physical and mental traits here.",
"This will be the first message from the character that starts every chat.": "This will be the first message from the character that starts every chat.",
"Chat Name (Optional)": "Chat Name (Optional)",
"Filter...": "Filter...",
"Search...": "Search...",
"Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)",
"Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)",
"(Botmaker's name / Contact Info)": "(Botmaker's name / Contact Info)",
"(If you want to track character versions)": "(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.)": "(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)": "(Write a comma-separated list of tags)",
"(A brief description of the personality)": "(A brief description of the personality)",
"(Circumstances and context of the interaction)": "(Circumstances and context of the interaction)",
"(Examples of chat dialog. Begin each example with START on a new line.)": "(Examples of chat dialog. Begin each example with START on a new line.)",
"Injection text (supports parameters)": "Injection text (supports parameters)",
"Injection depth": "Injection depth",
"Type here...": "Type here...",
"Comma separated (required)": "Comma separated (required)",
"Comma separated (ignored if empty)": "Comma separated (ignored if empty)",
"What this keyword should mean to the AI, sent verbatim": "What this keyword should mean to the AI, sent verbatim",
"Filter to Character(s)": "Filter to Character(s)",
"Character Exclusion": "Character Exclusion",
"Inclusion Group": "Inclusion Group",
"Only one entry with the same label will be activated": "Only one entry with the same label will be activated",
"-- Characters not found --": "-- Characters not found --",
"Not sent to the AI": "Not sent to the AI",
"(This will be the first message from the character that starts every chat)": "(This will be the first message from the character that starts every chat)",
"Not connected to API!": "Not connected to API!",
"AI Response Configuration": "AI Response Configuration",
"AI Configuration panel will stay open": "AI Configuration panel will stay open",
"Update current preset": "Update current preset",
"Create new preset": "Create new preset",
"Import preset": "Import preset",
"Export preset": "Export preset",
"Delete the preset": "Delete the preset",
"Auto-select this preset for Instruct Mode": "Auto-select this preset for Instruct Mode",
"Auto-select this preset on API connection": "Auto-select this preset on API connection",
"NSFW block goes first in the resulting prompt": "NSFW block goes first in the resulting prompt",
"Enables OpenAI completion streaming": "Enables OpenAI completion streaming",
"Wrap user messages in quotes before sending": "Wrap user messages in quotes before sending",
"Restore default prompt": "Restore default prompt",
"New preset": "New preset",
"Delete preset": "Delete preset",
"Restore default jailbreak": "Restore default jailbreak",
"Restore default reply": "Restore default reply",
"Restore defaul note": "Restore defaul note",
"API Connections": "API Connections",
"Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Can help with bad responses by queueing only the approved workers. May slowdown the response time.",
"Clear your API key": "Clear your API key",
"Refresh models": "Refresh models",
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai",
"Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!",
"Create New": "Create New",
"Edit": "Edit",
"Locked = World Editor will stay open": "Locked = World Editor will stay open",
"Entries can activate other entries by mentioning their keywords": "Entries can activate other entries by mentioning their keywords",
"Lookup for the entry keys in the context will respect the case": "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": "If the entry key consists of only one word, it would not be matched as part of other words",
"Open all Entries": "Open all Entries",
"Close all Entries": "Close all Entries",
"Create": "Create",
"Import World Info": "Import World Info",
"Export World Info": "Export World Info",
"Delete World Info": "Delete World Info",
"Duplicate World Info": "Duplicate World Info",
"Rename World Info": "Rename World Info",
"Refresh": "Refresh",
"Primary Keywords": "Primary Keywords",
"Logic": "Logic",
"AND ANY": "AND ANY",
"AND ALL": "AND ALL",
"NOT ALL": "NOT ALL",
"NOT ANY": "NOT ANY",
"Optional Filter": "Optional Filter",
"New Entry": "New Entry",
"Fill empty Memo/Titles with Keywords": "Fill empty Memo/Titles with Keywords",
"Save changes to a new theme file": "Save changes to a new theme file",
"removes blur and uses alternative background color for divs": "removes blur and uses alternative background color for divs",
"AI Response Formatting": "AI Response Formatting",
"Change Background Image": "Change Background Image",
"Extensions": "Extensions",
"Click to set a new User Name": "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 lock your selected persona to the current chat. Click again to remove the lock.",
"Click to set user name for all messages": "Click to set user name for all messages",
"Create a dummy persona": "Create a dummy persona",
"Character Management": "Character Management",
"Locked = Character Management panel will stay open": "Locked = Character Management panel will stay open",
"Select/Create Characters": "Select/Create Characters",
"Token counts may be inaccurate and provided just for reference.": "Token counts may be inaccurate and provided just for reference.",
"Click to select a new avatar for this character": "Click to select a new avatar for this character",
"Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Example: [{{user}} is a 28-year-old Romanian cat girl.]",
"Toggle grid view": "Toggle grid view",
"Add to Favorites": "Add to Favorites",
"Advanced Definition": "Advanced Definition",
"Character Lore": "Character Lore",
"Export and Download": "Export and Download",
"Duplicate Character": "Duplicate Character",
"Create Character": "Create Character",
"Delete Character": "Delete Character",
"View all tags": "View all tags",
"Click to set additional greeting messages": "Click to set additional greeting messages",
"Show / Hide Description and First Message": "Show / Hide Description and First Message",
"Click to select a new avatar for this group": "Click to select a new avatar for this group",
"Set a group chat scenario": "Set a group chat scenario",
"Restore collage avatar": "Restore collage avatar",
"Create New Character": "Create New Character",
"Import Character from File": "Import Character from File",
"Import content from external URL": "Import content from external URL",
"Create New Chat Group": "Create New Chat Group",
"Characters sorting order": "Characters sorting order",
"Add chat injection": "Add chat injection",
"Remove injection": "Remove injection",
"Remove": "Remove",
"Select a World Info file for": "Select a World Info file for",
"Primary Lorebook": "Primary Lorebook",
"A selected World Info will be bound to this character as its own 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.": "When generating an AI reply, it will be combined with the entries from a global World Info selector.",
"Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "Exporting a character would also export the selected Lorebook file embedded in the JSON data.",
"Additional Lorebooks": "Additional Lorebooks",
"Associate one or more auxillary Lorebooks with this character.": "Associate one or more auxillary Lorebooks with this character.",
"NOTE: These choices are optional and won't be preserved on character export!": "NOTE: These choices are optional and won't be preserved on character export!",
"Rename chat file": "Rename chat file",
"Export JSONL chat file": "Export JSONL chat file",
"Download chat as plain text document": "Download chat as plain text document",
"Delete chat file": "Delete chat file",
"Delete tag": "Delete tag",
"Translate message": "Translate message",
"Generate Image": "Generate Image",
"Narrate": "Narrate",
"Prompt": "Prompt",
"Create Bookmark": "Create Bookmark",
"Copy": "Copy",
"Open bookmark chat": "Open bookmark chat",
"Confirm": "Confirm",
"Copy this message": "Copy this message",
"Delete this message": "Delete this message",
"Move message up": "Move message up",
"Move message down": "Move message down",
"Enlarge": "Enlarge",
"Temporarily disable automatic replies from this character": "Temporarily disable automatic replies from this character",
"Enable automatic replies from this character": "Enable automatic replies from this character",
"Trigger a message from this character": "Trigger a message from this character",
"Move up": "Move up",
"Move down": "Move down",
"View character card": "View character card",
"Remove from group": "Remove from group",
"Add to group": "Add to group",
"Add": "Add",
"Abort request": "Abort request",
"Send a message": "Send a message",
"Ask AI to write your message for you": "Ask AI to write your message for you",
"Continue the last message": "Continue the last message",
"Bind user name to that avatar": "Bind user name to that avatar",
"Select this as default persona for the new chats.": "Select this as default persona for the new chats.",
"Change persona image": "Change persona image",
"Delete persona": "Delete persona",
"Reduced Motion": "Reduced Motion",
"Auto-select": "Auto-select",
"Automatically select a background based on the chat context": "Automatically select a background based on the chat context",
"Filter": "Filter",
"Exclude message from prompts": "Exclude message from prompts",
"Include message in prompts": "Include message in prompts",
"Create checkpoint": "Create checkpoint",
"Create Branch": "Create Branch",
"Embed file or image": "Embed file or image",
"UI Theme": "UI Theme",
"This message is invisible for the AI": "This message is invisible for the AI",
"Sampler Priority": "Sampler Priority",
"Ooba only. Determines the order of samplers.": "Ooba only. Determines the order of samplers.",
"Load default order": "Load default order",
"Max Tokens Second": "Max Tokens Second",
"CFG": "CFG",
"No items": "No items",
"Extras API key (optional)": "Extras API key (optional)",
"Notify on extension updates": "Notify on extension updates",
"Toggle character grid view": "Toggle character grid view",
"Bulk edit characters": "Bulk edit characters",
"Bulk delete characters": "Bulk delete characters",
"Favorite characters to add them to HotSwaps": "Favorite characters to add them to HotSwaps",
"Underlined Text": "Underlined Text",
"Token Probabilities": "Token Probabilities",
"Close chat": "Close chat",
"Manage chat files": "Manage chat files",
"Import Extension From Git Repo": "Import Extension From Git Repo",
"Install extension": "Install extension",
"Manage extensions": "Manage extensions",
"Tokens persona description": "Tokens persona description",
"Most tokens": "Most tokens",
"Least tokens": "Least tokens",
"Random": "Random",
"Skip Example Dialogues Formatting": "Skip Example Dialogues Formatting",
"Import a theme file": "Import a theme file",
"Export a theme file": "Export a theme file",
"Unlocked Context Size": "Unlocked Context Size",
"Display the response bit by bit as it is generated.": "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.": "When this is off, responses will be displayed all at once when they are complete.",
"Quick Prompts Edit": "Quick Prompts Edit",
"Enable OpenAI completion streaming": "Enable OpenAI completion streaming",
"Main": "Main",
"Utility Prompts": "Utility Prompts",
"Add character names": "Add character names",
"Send names in the message objects. Helps the model to associate messages with characters.": "Send names in the message objects. Helps the model to associate messages with characters.",
"Continue prefill": "Continue prefill",
"Continue sends the last message as assistant role instead of system message with instruction.": "Continue sends the last message as assistant role instead of system message with instruction.",
"Squash system messages": "Squash system messages",
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.",
"Send inline images": "Send inline images",
"Assistant Prefill": "Assistant Prefill",
"Start Claude's answer with...": "Start Claude's answer with...",
"Use system prompt (Claude 2.1+ only)": "Use system prompt (Claude 2.1+ only)",
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.",
"Prompts": "Prompts",
"Total Tokens:": "Total Tokens:",
"Insert prompt": "Insert prompt",
"Delete prompt": "Delete prompt",
"Import a prompt list": "Import a prompt list",
"Export this prompt list": "Export this prompt list",
"Reset current character": "Reset current character",
"New prompt": "New prompt",
"Tokens": "Tokens",
"Want to update?": "Want to update?",
"How to start chatting?": "How to start chatting?",
"Click": "Click",
"and select a": "and select a",
"Chat API": "Chat API",
"and pick a character": "and pick a character",
"in the chat bar": "in the chat bar",
"Confused or lost?": "Confused or lost?",
"click these icons!": "click these icons!",
"SillyTavern Documentation Site": "SillyTavern Documentation Site",
"Extras Installation Guide": "Extras Installation Guide",
"Still have questions?": "Still have questions?",
"Join the SillyTavern Discord": "Join the SillyTavern Discord",
"Post a GitHub issue": "Post a GitHub issue",
"Contact the developers": "Contact the developers",
"Nucleus Sampling": "Nucleus Sampling",
"Typical P": "Typical P",
"Top K Sampling": "Top K Sampling",
"Top A Sampling": "Top A Sampling",
"Off": "Off",
"Very light": "Very light",
"Light": "Light",
"Medium": "Medium",
"Aggressive": "Aggressive",
"Very 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 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.",
"Learn how to contribute your idle GPU cycles to the Horde": "Learn how to contribute your idle GPU cycles to the Horde",
"Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.",
"Load koboldcpp order": "Load koboldcpp order",
"Use Google Tokenizer": "Use Google Tokenizer"
}

View File

@ -0,0 +1,60 @@
from collections import OrderedDict
import json
import os
from bs4 import BeautifulSoup
def extract_i18n_keys(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
i18n_dict = {}
for tag in soup.find_all(attrs={"data-i18n": True}):
i18n_value = tag.attrs.get("data-i18n")
if i18n_value.startswith('['):
end_bracket_pos = i18n_value.find(']')
if end_bracket_pos != -1:
attribute_name = i18n_value[1:end_bracket_pos]
key = i18n_value[end_bracket_pos+1:]
value = tag.attrs.get(attribute_name, '')
i18n_dict[key] = value
else:
key = i18n_value
value = tag.text.strip()
i18n_dict[key] = value
return i18n_dict
def process_html_files(directory):
i18n_data = {}
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.html'):
filepath = os.path.join(root, file)
with open(filepath, 'r', encoding='utf-8') as f:
html_content = f.read()
i18n_data.update(extract_i18n_keys(html_content))
return i18n_data
def update_json(json_file, i18n_dict):
with open(json_file, 'r', encoding='utf-8') as file:
data = json.load(file, object_pairs_hook=OrderedDict)
for key in data.keys():
data[key] = i18n_dict.get(key, "")
with open(json_file, 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
return data
if __name__ == "__main__":
directory_path = "public"
json_file_path = "public/locales/en.json"
all_i18n_data = process_html_files(directory_path)
updated_json = update_json(json_file_path, all_i18n_data)
print(updated_json)

View File

@ -3250,7 +3250,8 @@ async function onExportPresetClick() {
delete preset.proxy_password;
const presetJsonString = JSON.stringify(preset, null, 4);
download(presetJsonString, oai_settings.preset_settings_openai, 'application/json');
const presetFileName = `${oai_settings.preset_settings_openai}.json`;
download(presetJsonString, presetFileName, 'application/json');
}
async function onLogitBiasPresetImportFileChange(e) {
@ -3298,7 +3299,8 @@ function onLogitBiasPresetExportClick() {
}
const presetJsonString = JSON.stringify(oai_settings.bias_presets[oai_settings.bias_preset_selected], null, 4);
download(presetJsonString, oai_settings.bias_preset_selected, 'application/json');
const presetFileName = `${oai_settings.bias_preset_selected}.json`;
download(presetJsonString, presetFileName, 'application/json');
}
async function onDeletePresetClick() {

View File

@ -1000,6 +1000,7 @@ body .panelControlBar {
padding-left: 10px;
width: 100%;
overflow-x: hidden;
overflow-y: clip;
}
.mes_text {

View File

@ -45,7 +45,6 @@ const {
forwardFetchResponse,
} = require('./src/util');
const { ensureThumbnailCache } = require('./src/endpoints/thumbnails');
const { loadTokenizers } = require('./src/endpoints/tokenizers');
// Work around a node v20.0.0, v20.1.0, and v20.2.0 bug. The issue was fixed in v20.3.0.
// https://github.com/nodejs/node/issues/47822#issuecomment-1564708870
@ -543,22 +542,12 @@ const setupTasks = async function () {
}
console.log();
// TODO: do endpoint init functions depend on certain directories existing or not existing? They should be callable
// in any order for encapsulation reasons, but right now it's unknown if that would break anything.
await userModule.initUserStorage(dataRoot);
if (listen && !basicAuthMode && enableAccounts) {
await userModule.checkAccountsProtection();
}
await settingsEndpoint.init();
const directories = await userModule.ensurePublicDirectoriesExist();
await userModule.migrateUserData();
const directories = await userModule.getUserDirectoriesList();
await contentManager.checkForNewContent(directories);
await ensureThumbnailCache();
cleanUploads();
await loadTokenizers();
await settingsEndpoint.init();
await statsEndpoint.init();
const cleanupPlugins = await loadPlugins();
@ -581,7 +570,6 @@ const setupTasks = async function () {
exitProcess();
});
console.log('Launching...');
if (autorun) open(autorunUrl.toString());
@ -601,6 +589,9 @@ const setupTasks = async function () {
}
}
if (listen && !basicAuthMode && enableAccounts) {
await userModule.checkAccountsProtection();
}
};
/**
@ -642,21 +633,27 @@ function setWindowTitle(title) {
}
}
if (cliArguments.ssl) {
https.createServer(
{
cert: fs.readFileSync(cliArguments.certPath),
key: fs.readFileSync(cliArguments.keyPath),
}, app)
.listen(
Number(tavernUrl.port) || 443,
tavernUrl.hostname,
setupTasks,
);
} else {
http.createServer(app).listen(
Number(tavernUrl.port) || 80,
tavernUrl.hostname,
setupTasks,
);
}
// User storage module needs to be initialized before starting the server
userModule.initUserStorage(dataRoot)
.then(userModule.ensurePublicDirectoriesExist)
.then(userModule.migrateUserData)
.finally(() => {
if (cliArguments.ssl) {
https.createServer(
{
cert: fs.readFileSync(cliArguments.certPath),
key: fs.readFileSync(cliArguments.keyPath),
}, app)
.listen(
Number(tavernUrl.port) || 443,
tavernUrl.hostname,
setupTasks,
);
} else {
http.createServer(app).listen(
Number(tavernUrl.port) || 80,
tavernUrl.hostname,
setupTasks,
);
}
});

View File

@ -10,6 +10,10 @@ const { TEXTGEN_TYPES } = require('../constants');
const { jsonParser } = require('../express-common');
const { setAdditionalHeaders } = require('../additional-headers');
/**
* @typedef { (req: import('express').Request, res: import('express').Response) => Promise<any> } TokenizationHandler
*/
/**
* @type {{[key: string]: import("@dqbd/tiktoken").Tiktoken}} Tokenizers cache
*/
@ -48,16 +52,30 @@ const TEXT_COMPLETION_MODELS = [
const CHARS_PER_TOKEN = 3.35;
/**
* Sentencepiece tokenizer for tokenizing text.
*/
class SentencePieceTokenizer {
/**
* @type {import('@agnai/sentencepiece-js').SentencePieceProcessor} Sentencepiece tokenizer instance
*/
#instance;
/**
* @type {string} Path to the tokenizer model
*/
#model;
/**
* Creates a new Sentencepiece tokenizer.
* @param {string} model Path to the tokenizer model
*/
constructor(model) {
this.#model = model;
}
/**
* Gets the Sentencepiece tokenizer instance.
* @returns {Promise<import('@agnai/sentencepiece-js').SentencePieceProcessor|null>} Sentencepiece tokenizer instance
*/
async get() {
if (this.#instance) {
@ -76,18 +94,61 @@ class SentencePieceTokenizer {
}
}
const spp_llama = new SentencePieceTokenizer('src/sentencepiece/llama.model');
const spp_nerd = new SentencePieceTokenizer('src/sentencepiece/nerdstash.model');
const spp_nerd_v2 = new SentencePieceTokenizer('src/sentencepiece/nerdstash_v2.model');
const spp_mistral = new SentencePieceTokenizer('src/sentencepiece/mistral.model');
const spp_yi = new SentencePieceTokenizer('src/sentencepiece/yi.model');
let claude_tokenizer;
/**
* Web tokenizer for tokenizing text.
*/
class WebTokenizer {
/**
* @type {Tokenizer} Web tokenizer instance
*/
#instance;
/**
* @type {string} Path to the tokenizer model
*/
#model;
/**
* Creates a new Web tokenizer.
* @param {string} model Path to the tokenizer model
*/
constructor(model) {
this.#model = model;
}
/**
* Gets the Web tokenizer instance.
* @returns {Promise<Tokenizer|null>} Web tokenizer instance
*/
async get() {
if (this.#instance) {
return this.#instance;
}
try {
const arrayBuffer = fs.readFileSync(this.#model).buffer;
this.#instance = await Tokenizer.fromJSON(arrayBuffer);
console.log('Instantiated the tokenizer for', path.parse(this.#model).name);
return this.#instance;
} catch (error) {
console.error('Web tokenizer failed to load: ' + this.#model, error);
return null;
}
}
}
const spp_llama = new SentencePieceTokenizer('src/tokenizers/llama.model');
const spp_nerd = new SentencePieceTokenizer('src/tokenizers/nerdstash.model');
const spp_nerd_v2 = new SentencePieceTokenizer('src/tokenizers/nerdstash_v2.model');
const spp_mistral = new SentencePieceTokenizer('src/tokenizers/mistral.model');
const spp_yi = new SentencePieceTokenizer('src/tokenizers/yi.model');
const claude_tokenizer = new WebTokenizer('src/tokenizers/claude.json');
const sentencepieceTokenizers = [
'llama',
'nerdstash',
'nerdstash_v2',
'mistral',
'yi',
];
/**
@ -112,6 +173,10 @@ function getSentencepiceTokenizer(model) {
return spp_nerd_v2;
}
if (model.includes('yi')) {
return spp_yi;
}
return null;
}
@ -168,13 +233,23 @@ async function getTiktokenChunks(tokenizer, ids) {
return chunks;
}
async function getWebTokenizersChunks(tokenizer, ids) {
/**
* Gets the token chunks for the given token IDs using the Web tokenizer.
* @param {Tokenizer} tokenizer Web tokenizer instance
* @param {number[]} ids Token IDs
* @returns {string[]} Token chunks
*/
function getWebTokenizersChunks(tokenizer, ids) {
const chunks = [];
for (let i = 0; i < ids.length; i++) {
const id = ids[i];
const chunkText = await tokenizer.decode(new Uint32Array([id]));
for (let i = 0, lastProcessed = 0; i < ids.length; i++) {
const chunkIds = ids.slice(lastProcessed, i + 1);
const chunkText = tokenizer.decode(new Int32Array(chunkIds));
if (chunkText === '<27>') {
continue;
}
chunks.push(chunkText);
lastProcessed = i + 1;
}
return chunks;
@ -237,17 +312,12 @@ function getTiktokenTokenizer(model) {
return tokenizer;
}
async function loadClaudeTokenizer(modelPath) {
try {
const arrayBuffer = fs.readFileSync(modelPath).buffer;
const instance = await Tokenizer.fromJSON(arrayBuffer);
return instance;
} catch (error) {
console.error('Claude tokenizer failed to load: ' + modelPath, error);
return null;
}
}
/**
* Counts the tokens for the given messages using the Claude tokenizer.
* @param {Tokenizer} tokenizer Web tokenizer
* @param {object[]} messages Array of messages
* @returns {number} Number of tokens
*/
function countClaudeTokens(tokenizer, messages) {
// Should be fine if we use the old conversion method instead of the messages API one i think?
const convertedPrompt = convertClaudePrompt(messages, false, '', false, false, '', false);
@ -264,9 +334,14 @@ function countClaudeTokens(tokenizer, messages) {
/**
* Creates an API handler for encoding Sentencepiece tokens.
* @param {SentencePieceTokenizer} tokenizer Sentencepiece tokenizer
* @returns {any} Handler function
* @returns {TokenizationHandler} Handler function
*/
function createSentencepieceEncodingHandler(tokenizer) {
/**
* Request handler for encoding Sentencepiece tokens.
* @param {import('express').Request} request
* @param {import('express').Response} response
*/
return async function (request, response) {
try {
if (!request.body) {
@ -276,7 +351,7 @@ function createSentencepieceEncodingHandler(tokenizer) {
const text = request.body.text || '';
const instance = await tokenizer?.get();
const { ids, count } = await countSentencepieceTokens(tokenizer, text);
const chunks = await instance?.encodePieces(text);
const chunks = instance?.encodePieces(text);
return response.send({ ids, count, chunks });
} catch (error) {
console.log(error);
@ -288,9 +363,14 @@ function createSentencepieceEncodingHandler(tokenizer) {
/**
* Creates an API handler for decoding Sentencepiece tokens.
* @param {SentencePieceTokenizer} tokenizer Sentencepiece tokenizer
* @returns {any} Handler function
* @returns {TokenizationHandler} Handler function
*/
function createSentencepieceDecodingHandler(tokenizer) {
/**
* Request handler for decoding Sentencepiece tokens.
* @param {import('express').Request} request
* @param {import('express').Response} response
*/
return async function (request, response) {
try {
if (!request.body) {
@ -299,6 +379,7 @@ function createSentencepieceDecodingHandler(tokenizer) {
const ids = request.body.ids || [];
const instance = await tokenizer?.get();
if (!instance) throw new Error('Failed to load the Sentencepiece tokenizer');
const ops = ids.map(id => instance.decodeIds([id]));
const chunks = await Promise.all(ops);
const text = chunks.join('');
@ -313,9 +394,14 @@ function createSentencepieceDecodingHandler(tokenizer) {
/**
* Creates an API handler for encoding Tiktoken tokens.
* @param {string} modelId Tiktoken model ID
* @returns {any} Handler function
* @returns {TokenizationHandler} Handler function
*/
function createTiktokenEncodingHandler(modelId) {
/**
* Request handler for encoding Tiktoken tokens.
* @param {import('express').Request} request
* @param {import('express').Response} response
*/
return async function (request, response) {
try {
if (!request.body) {
@ -337,9 +423,14 @@ function createTiktokenEncodingHandler(modelId) {
/**
* Creates an API handler for decoding Tiktoken tokens.
* @param {string} modelId Tiktoken model ID
* @returns {any} Handler function
* @returns {TokenizationHandler} Handler function
*/
function createTiktokenDecodingHandler(modelId) {
/**
* Request handler for decoding Tiktoken tokens.
* @param {import('express').Request} request
* @param {import('express').Response} response
*/
return async function (request, response) {
try {
if (!request.body) {
@ -358,14 +449,6 @@ function createTiktokenDecodingHandler(modelId) {
};
}
/**
* Loads the model tokenizers.
* @returns {Promise<void>} Promise that resolves when the tokenizers are loaded
*/
async function loadTokenizers() {
claude_tokenizer = await loadClaudeTokenizer('src/claude.json');
}
const router = express.Router();
router.post('/ai21/count', jsonParser, async function (req, res) {
@ -446,8 +529,10 @@ router.post('/openai/encode', jsonParser, async function (req, res) {
if (queryModel.includes('claude')) {
const text = req.body.text || '';
const tokens = Object.values(claude_tokenizer.encode(text));
const chunks = await getWebTokenizersChunks(claude_tokenizer, tokens);
const instance = await claude_tokenizer.get();
if (!instance) throw new Error('Failed to load the Claude tokenizer');
const tokens = Object.values(instance.encode(text));
const chunks = getWebTokenizersChunks(instance, tokens);
return res.send({ ids: tokens, count: tokens.length, chunks });
}
@ -481,7 +566,9 @@ router.post('/openai/decode', jsonParser, async function (req, res) {
if (queryModel.includes('claude')) {
const ids = req.body.ids || [];
const chunkText = await claude_tokenizer.decode(new Uint32Array(ids));
const instance = await claude_tokenizer.get();
if (!instance) throw new Error('Failed to load the Claude tokenizer');
const chunkText = instance.decode(new Int32Array(ids));
return res.send({ text: chunkText });
}
@ -503,7 +590,9 @@ router.post('/openai/count', jsonParser, async function (req, res) {
const model = getTokenizerModel(queryModel);
if (model === 'claude') {
num_tokens = countClaudeTokens(claude_tokenizer, req.body);
const instance = await claude_tokenizer.get();
if (!instance) throw new Error('Failed to load the Claude tokenizer');
num_tokens = countClaudeTokens(instance, req.body);
return res.send({ 'token_count': num_tokens });
}
@ -665,7 +754,6 @@ module.exports = {
getTokenizerModel,
getTiktokenTokenizer,
countClaudeTokens,
loadTokenizers,
getSentencepiceTokenizer,
sentencepieceTokenizers,
router,

View File

@ -112,6 +112,16 @@ async function ensurePublicDirectoriesExist() {
return directoriesList;
}
/**
* Gets a list of all user directories.
* @returns {Promise<import('./users').UserDirectoryList[]>} - The list of user directories
*/
async function getUserDirectoriesList() {
const userHandles = await getAllUserHandles();
const directoriesList = userHandles.map(handle => getUserDirectories(handle));
return directoriesList;
}
/**
* Perform migration from the old user data format to the new one.
*/
@ -707,6 +717,7 @@ module.exports = {
toAvatarKey,
initUserStorage,
ensurePublicDirectoriesExist,
getUserDirectoriesList,
getAllUserHandles,
getUserDirectories,
setUserDataMiddleware,