From f6343436b48b4b2eaf926319b7298f08197cb3fc Mon Sep 17 00:00:00 2001 From: steve green Date: Thu, 9 May 2024 22:29:48 +0800 Subject: [PATCH 1/7] impl `{{char_version}}` https://github.com/SillyTavern/SillyTavern/issues/2111 --- public/scripts/macros.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 05f3f7b66..10a220d07 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -1,4 +1,4 @@ -import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams } from '../script.js'; +import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams, this_chid, characters } from '../script.js'; import { timestampToMoment, isDigitsOnly, getStringHash } from './utils.js'; import { textgenerationwebui_banned_in_macros } from './textgen-settings.js'; import { replaceInstructMacros } from './instruct-mode.js'; @@ -317,6 +317,8 @@ export function evaluateMacros(content, env) { content = content.replace(/{{isotime}}/gi, () => moment().format('HH:mm')); content = content.replace(/{{isodate}}/gi, () => moment().format('YYYY-MM-DD')); + content = content.replace(/{{char_version}}/gi, characters[this_chid]?.data?.character_version); + content = content.replace(/{{datetimeformat +([^}]*)}}/gi, (_, format) => { const formattedTime = moment().format(format); return formattedTime; From 7a2f6fb63f920bda8110189b5dbe220a54886503 Mon Sep 17 00:00:00 2001 From: steve02081504 Date: Fri, 10 May 2024 07:24:05 +0800 Subject: [PATCH 2/7] `{{char_version_url_encoded}}` and macro replace in `creator_notes_spoiler` --- public/script.js | 2 +- public/scripts/macros.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/public/script.js b/public/script.js index 87cd5fdfc..29ce43104 100644 --- a/public/script.js +++ b/public/script.js @@ -6684,7 +6684,7 @@ export function select_selected_character(chid) { $('#description_textarea').val(characters[chid].description); $('#character_world').val(characters[chid].data?.extensions?.world || ''); $('#creator_notes_textarea').val(characters[chid].data?.creator_notes || characters[chid].creatorcomment); - $('#creator_notes_spoiler').html(DOMPurify.sanitize(converter.makeHtml(characters[chid].data?.creator_notes || characters[chid].creatorcomment), { MESSAGE_SANITIZE: true })); + $('#creator_notes_spoiler').html(DOMPurify.sanitize(converter.makeHtml(substituteParams(characters[chid].data?.creator_notes) || characters[chid].creatorcomment), { MESSAGE_SANITIZE: true })); $('#character_version_textarea').val(characters[chid].data?.character_version || ''); $('#system_prompt_textarea').val(characters[chid].data?.system_prompt || ''); $('#post_history_instructions_textarea').val(characters[chid].data?.post_history_instructions || ''); diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 10a220d07..d38b1b163 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -318,6 +318,7 @@ export function evaluateMacros(content, env) { content = content.replace(/{{isodate}}/gi, () => moment().format('YYYY-MM-DD')); content = content.replace(/{{char_version}}/gi, characters[this_chid]?.data?.character_version); + content = content.replace(/{{char_version_url_encoded}}/gi, encodeURIComponent(characters[this_chid]?.data?.character_version)); content = content.replace(/{{datetimeformat +([^}]*)}}/gi, (_, format) => { const formattedTime = moment().format(format); From 45a080016e23e24547951e1f0cb0d1012316b0a0 Mon Sep 17 00:00:00 2001 From: steve02081504 Date: Sun, 12 May 2024 09:01:30 +0800 Subject: [PATCH 3/7] move to env --- public/script.js | 1 + public/scripts/macros.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/public/script.js b/public/script.js index 84d84a06d..354559962 100644 --- a/public/script.js +++ b/public/script.js @@ -2311,6 +2311,7 @@ export function substituteParams(content, _name1, _name2, _original, _group, _re environment.char = _name2 ?? name2; environment.group = environment.charIfNotGroup = getGroupValue(); environment.model = getGeneratingModel(); + environment.char_version = characters.filter(x => x.name === environment.char).map(x => x.data.character_version)[0]; return evaluateMacros(content, environment); } diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 759d91ed1..d1b8057b7 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -337,8 +337,8 @@ export function evaluateMacros(content, env) { content = content.replace(/{{isotime}}/gi, () => moment().format('HH:mm')); content = content.replace(/{{isodate}}/gi, () => moment().format('YYYY-MM-DD')); - content = content.replace(/{{char_version}}/gi, characters[this_chid]?.data?.character_version); - content = content.replace(/{{char_version_url_encoded}}/gi, encodeURIComponent(characters[this_chid]?.data?.character_version)); + content = content.replace(/{{char_version}}/gi, env.char_version); + content = content.replace(/{{char_version_url_encoded}}/gi, encodeURIComponent(env.char_version)); content = content.replace(/{{datetimeformat +([^}]*)}}/gi, (_, format) => { const formattedTime = moment().format(format); From 15ff8de45c7f9a702deec06204c6ffc71fea090b Mon Sep 17 00:00:00 2001 From: steve02081504 Date: Sun, 12 May 2024 09:04:03 +0800 Subject: [PATCH 4/7] add template --- public/scripts/templates/macros.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/scripts/templates/macros.html b/public/scripts/templates/macros.html index 3d5fa6937..cc9032a67 100644 --- a/public/scripts/templates/macros.html +++ b/public/scripts/templates/macros.html @@ -18,6 +18,8 @@
  • {{mesExamplesRaw}} – unformatted Dialogue Examples (only for Story String)
  • {{user}} – your current Persona username
  • {{char}} – the Character's name
  • +
  • {{char_version}} – the Character's version number
  • +
  • {{char_version_url_encoded}} – the Character's version number URL encoded
  • {{group}} – a comma-separated list of group member names or the character name in solo chats. Alias: {{charIfNotGroup}}
  • {{model}} – a text generation model name for the currently selected API. Can be inaccurate!
  • {{lastMessage}} - the text of the latest chat message.
  • From d1933be86a0eb48f020fa0f2c2fc8a45cd28d73f Mon Sep 17 00:00:00 2001 From: steve02081504 Date: Sun, 12 May 2024 09:04:50 +0800 Subject: [PATCH 5/7] remove `{{char_version_url_encoded}}` --- public/scripts/macros.js | 1 - public/scripts/templates/macros.html | 1 - 2 files changed, 2 deletions(-) diff --git a/public/scripts/macros.js b/public/scripts/macros.js index d1b8057b7..77ec5de52 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -338,7 +338,6 @@ export function evaluateMacros(content, env) { content = content.replace(/{{isodate}}/gi, () => moment().format('YYYY-MM-DD')); content = content.replace(/{{char_version}}/gi, env.char_version); - content = content.replace(/{{char_version_url_encoded}}/gi, encodeURIComponent(env.char_version)); content = content.replace(/{{datetimeformat +([^}]*)}}/gi, (_, format) => { const formattedTime = moment().format(format); diff --git a/public/scripts/templates/macros.html b/public/scripts/templates/macros.html index cc9032a67..d6436abe9 100644 --- a/public/scripts/templates/macros.html +++ b/public/scripts/templates/macros.html @@ -19,7 +19,6 @@
  • {{user}} – your current Persona username
  • {{char}} – the Character's name
  • {{char_version}} – the Character's version number
  • -
  • {{char_version_url_encoded}} – the Character's version number URL encoded
  • {{group}} – a comma-separated list of group member names or the character name in solo chats. Alias: {{charIfNotGroup}}
  • {{model}} – a text generation model name for the currently selected API. Can be inaccurate!
  • {{lastMessage}} - the text of the latest chat message.
  • From 0ba600bb2b6316737f0b3a37d48373b42cb5ae90 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 12 May 2024 17:53:38 +0300 Subject: [PATCH 6/7] Code clean-up --- public/script.js | 8 +++++--- public/scripts/macros.js | 2 -- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/script.js b/public/script.js index 354559962..eccac9c0c 100644 --- a/public/script.js +++ b/public/script.js @@ -2304,6 +2304,8 @@ export function substituteParams(content, _name1, _name2, _original, _group, _re environment.scenario = fields.scenario || ''; environment.persona = fields.persona || ''; environment.mesExamples = fields.mesExamples || ''; + environment.charVersion = fields.version || ''; + environment.char_version = fields.version || ''; } // Must be substituted last so that they're replaced inside {{description}} @@ -2311,7 +2313,6 @@ export function substituteParams(content, _name1, _name2, _original, _group, _re environment.char = _name2 ?? name2; environment.group = environment.charIfNotGroup = getGroupValue(); environment.model = getGeneratingModel(); - environment.char_version = characters.filter(x => x.name === environment.char).map(x => x.data.character_version)[0]; return evaluateMacros(content, environment); } @@ -2602,10 +2603,10 @@ export function baseChatReplace(value, name1, name2) { /** * Returns the character card fields for the current character. - * @returns {{system: string, mesExamples: string, description: string, personality: string, persona: string, scenario: string, jailbreak: string}} + * @returns {{system: string, mesExamples: string, description: string, personality: string, persona: string, scenario: string, jailbreak: string, version: string}} */ export function getCharacterCardFields() { - const result = { system: '', mesExamples: '', description: '', personality: '', persona: '', scenario: '', jailbreak: '' }; + const result = { system: '', mesExamples: '', description: '', personality: '', persona: '', scenario: '', jailbreak: '', version: '' }; const character = characters[this_chid]; if (!character) { @@ -2620,6 +2621,7 @@ export function getCharacterCardFields() { result.persona = baseChatReplace(power_user.persona_description?.trim(), name1, name2); result.system = power_user.prefer_character_prompt ? baseChatReplace(characters[this_chid].data?.system_prompt?.trim(), name1, name2) : ''; result.jailbreak = power_user.prefer_character_jailbreak ? baseChatReplace(characters[this_chid].data?.post_history_instructions?.trim(), name1, name2) : ''; + result.version = characters[this_chid].data?.character_version ?? ''; if (selected_group) { const groupCards = getGroupCharacterCards(selected_group, Number(this_chid)); diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 77ec5de52..7e4ca1228 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -337,8 +337,6 @@ export function evaluateMacros(content, env) { content = content.replace(/{{isotime}}/gi, () => moment().format('HH:mm')); content = content.replace(/{{isodate}}/gi, () => moment().format('YYYY-MM-DD')); - content = content.replace(/{{char_version}}/gi, env.char_version); - content = content.replace(/{{datetimeformat +([^}]*)}}/gi, (_, format) => { const formattedTime = moment().format(format); return formattedTime; From 4bb463dd56d8164fbb2c84d745bf66c16b77ef2f Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 12 May 2024 17:55:00 +0300 Subject: [PATCH 7/7] Remove unused macros --- public/scripts/macros.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 7e4ca1228..aa683c7f1 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -1,4 +1,4 @@ -import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams, this_chid, characters } from '../script.js'; +import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams } from '../script.js'; import { timestampToMoment, isDigitsOnly, getStringHash } from './utils.js'; import { textgenerationwebui_banned_in_macros } from './textgen-settings.js'; import { replaceInstructMacros } from './instruct-mode.js';