From 8a7ad5ef9164e50f8ecbdb3ccb13449dffcb9fb5 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 24 Mar 2024 02:19:10 +0200 Subject: [PATCH] Indicate overridden prompts --- public/css/promptmanager.css | 7 +++++++ public/scripts/PromptManager.js | 17 ++++++++++++++--- public/scripts/openai.js | 20 +++++++++++++++++--- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/public/css/promptmanager.css b/public/css/promptmanager.css index 89e11dbff..6cf4dd0d0 100644 --- a/public/css/promptmanager.css +++ b/public/css/promptmanager.css @@ -241,6 +241,13 @@ font-weight: 600; } +#completion_prompt_manager #completion_prompt_manager_list .completion_prompt_manager_prompt .completion_prompt_manager_prompt_name .fa-solid.prompt-manager-overridden { + margin-left: 5px; + color: var(--SmartThemeQuoteColor); + cursor: pointer; + opacity: 0.8; +} + #completion_prompt_manager_footer_append_prompt { font-size: 16px; } diff --git a/public/scripts/PromptManager.js b/public/scripts/PromptManager.js index 30e128d46..bf73b7265 100644 --- a/public/scripts/PromptManager.js +++ b/public/scripts/PromptManager.js @@ -104,6 +104,7 @@ class Prompt { */ class PromptCollection { collection = []; + overriddenPrompts = []; /** * Create a new PromptCollection instance. @@ -178,6 +179,11 @@ class PromptCollection { has(identifier) { return this.index(identifier) !== -1; } + + override(prompt, position) { + this.set(prompt, position); + this.overriddenPrompts.push(prompt.identifier); + } } class PromptManager { @@ -194,6 +200,8 @@ class PromptManager { 'jailbreak', ]; + this.overriddenPrompts = []; + this.configuration = { version: 1, prefix: '', @@ -1290,7 +1298,7 @@ class PromptManager { /** * Setter for messages property * - * @param {MessageCollection} messages + * @param {import('./openai.js').MessageCollection} messages */ setMessages(messages) { this.messages = messages; @@ -1299,19 +1307,20 @@ class PromptManager { /** * Set and process a finished chat completion object * - * @param {ChatCompletion} chatCompletion + * @param {import('./openai.js').ChatCompletion} chatCompletion */ setChatCompletion(chatCompletion) { const messages = chatCompletion.getMessages(); this.setMessages(messages); this.populateTokenCounts(messages); + this.overriddenPrompts = chatCompletion.getOverriddenPrompts(); } /** * Populates the token handler * - * @param {MessageCollection} messages + * @param {import('./openai.js').MessageCollection} messages */ populateTokenCounts(messages) { this.tokenHandler.resetCounts(); @@ -1525,6 +1534,7 @@ class PromptManager { const isImportantPrompt = !prompt.marker && prompt.system_prompt && prompt.injection_position !== INJECTION_POSITION.ABSOLUTE && prompt.forbid_overrides; const isUserPrompt = !prompt.marker && !prompt.system_prompt && prompt.injection_position !== INJECTION_POSITION.ABSOLUTE; const isInjectionPrompt = !prompt.marker && prompt.injection_position === INJECTION_POSITION.ABSOLUTE; + const isOverriddenPrompt = Array.isArray(this.overriddenPrompts) && this.overriddenPrompts.includes(prompt.identifier); const importantClass = isImportantPrompt ? `${prefix}prompt_manager_important` : ''; listItemHtml += `