diff --git a/public/script.js b/public/script.js index 057c5b22d..716c9f86f 100644 --- a/public/script.js +++ b/public/script.js @@ -242,7 +242,7 @@ import { BulkEditOverlay, CharacterContextMenu } from './scripts/BulkEditOverlay import { loadFeatherlessModels, loadMancerModels, loadOllamaModels, loadTogetherAIModels, loadInfermaticAIModels, loadOpenRouterModels, loadVllmModels, loadAphroditeModels, loadDreamGenModels, initTextGenModels, loadTabbyModels } from './scripts/textgen-models.js'; import { appendFileContent, hasPendingFileAttachment, populateFileAttachment, decodeStyleTags, encodeStyleTags, isExternalMediaAllowed, getCurrentEntityId, preserveNeutralChat, restoreNeutralChat } from './scripts/chats.js'; import { initPresetManager } from './scripts/preset-manager.js'; -import { MacrosParser, evaluateMacros, getLastMessageId } from './scripts/macros.js'; +import { MacrosParser, evaluateMacros, getLastMessageId, initMacros } from './scripts/macros.js'; import { currentUser, setUserControls } from './scripts/user.js'; import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup, fixToastrForDialogs } from './scripts/popup.js'; import { renderTemplate, renderTemplateAsync } from './scripts/templates.js'; @@ -957,6 +957,7 @@ async function firstLoadInit() { initDynamicStyles(); initTags(); initBookmarks(); + initMacros(); await getUserAvatars(true, user_avatar); await getCharacters(); await getBackgrounds(); diff --git a/public/scripts/macros.js b/public/scripts/macros.js index 1efd42a14..0e4d7a8da 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -1,5 +1,5 @@ import { Handlebars, moment, seedrandom, droll } from '../lib.js'; -import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams } from '../script.js'; +import { chat, chat_metadata, main_api, getMaxContextSize, getCurrentChatId, substituteParams, eventSource, event_types } from '../script.js'; import { timestampToMoment, isDigitsOnly, getStringHash, escapeRegex, uuidv4 } from './utils.js'; import { textgenerationwebui_banned_in_macros } from './textgen-settings.js'; import { getInstructMacros } from './instruct-mode.js'; @@ -521,3 +521,22 @@ export function evaluateMacros(content, env, postProcessFn) { return content; } + +export function initMacros() { + function initLastGenerationType() { + let lastGenerationType = ''; + + MacrosParser.registerMacro('lastGenerationType', () => lastGenerationType); + + eventSource.on(event_types.GENERATION_STARTED, (type, _params, isDryRun) => { + if (isDryRun) return; + lastGenerationType = type || 'normal'; + }); + + eventSource.on(event_types.CHAT_CHANGED, () => { + lastGenerationType = ''; + }); + } + + initLastGenerationType(); +} diff --git a/public/scripts/templates/macros.html b/public/scripts/templates/macros.html index 6e96ae4fa..38f6dec0c 100644 --- a/public/scripts/templates/macros.html +++ b/public/scripts/templates/macros.html @@ -8,6 +8,7 @@
  • {{noop}}no operation, just an empty string.
  • {{original}}global prompts defined in API settings. Only valid in Advanced Definitions prompt overrides.
  • {{input}}the user input
  • +
  • {{lastGenerationType}} - the type of the last queued generation request. Empty if no generations were performed yet or the active chat was switched. Possible values: "normal", "impersonate", "regenerate", "quiet", "swipe", "continue".
  • {{charPrompt}}the Character's Main Prompt override
  • {{charInstruction}}the Character's Post-History Instructions override
  • {{description}}the Character's Description