From 29de0967d9816ffe424b48e62505cbb1b892e6b2 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Mon, 16 Jun 2025 18:44:52 +0200 Subject: [PATCH 1/5] Update MessageInput.svelte --- src/lib/components/chat/MessageInput.svelte | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index f384c5b8f..2b2637b3b 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -42,6 +42,7 @@ import FilesOverlay from './MessageInput/FilesOverlay.svelte'; import Commands from './MessageInput/Commands.svelte'; import ToolServersModal from './ToolServersModal.svelte'; + import VariableInputModal from './VariableInputModal.svelte'; import RichTextInput from '../common/RichTextInput.svelte'; import Tooltip from '../common/Tooltip.svelte'; @@ -89,6 +90,10 @@ export let webSearchEnabled = false; export let codeInterpreterEnabled = false; + let showVariableInputModal = false; + let activePromptVariables = []; + const RESERVED_VARIABLES = ['CLIPBOARD', 'USER_LOCATION', 'USER_NAME', 'USER_LANGUAGE', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_DATETIME', 'CURRENT_TIMEZONE', 'CURRENT_WEEKDAY']; + $: onChange({ prompt, files: files @@ -453,6 +458,18 @@ shiftKey = false; }; + const extractCustomVariables = (text: string): string[] => { + const regex = /{{\s*(.*?)\s*}}/g; + const matches = []; + let match; + while ((match = regex.exec(text)) !== null) { + matches.push(match[1]); + } + return [...new Set(matches)].filter(v => !RESERVED_VARIABLES.includes(v.toUpperCase())); + }; + + const variableModalSubtitle = $i18n.t('Your prompt uses variables as placeholders. You may replace individual variables with values here:'); + onMount(async () => { loaded = true; @@ -496,6 +513,30 @@ + { + const submittedValues = e.detail; + let currentPrompt = prompt; + for (const variable in submittedValues) { + const value = submittedValues[variable]; + const regex = new RegExp(`{{\\s*${variable}\\s*}}`, 'g'); + currentPrompt = currentPrompt.replace(regex, value); + } + prompt = currentPrompt; + showVariableInputModal = false; + activePromptVariables = []; + + tick().then(() => { + const chatInput = document.getElementById('chat-input'); + if (chatInput) { + chatInput.focus(); + } + }); + }} +/> {#if loaded}
@@ -586,6 +627,15 @@ const chatInputElement = document.getElementById('chat-input'); chatInputElement?.focus(); }} + on:promptselectionprocessed={(e) => { + const customVars = extractCustomVariables(prompt); + if (customVars.length > 0) { + activePromptVariables = customVars; + showVariableInputModal = true; + } + const chatInputElement = document.getElementById('chat-input'); + chatInputElement?.focus(); + }} />
From 6e10c3f37dcb7370e9dc6232cf4a440aeb8f6c73 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Mon, 16 Jun 2025 18:45:28 +0200 Subject: [PATCH 2/5] Update Commands.svelte --- src/lib/components/chat/MessageInput/Commands.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/MessageInput/Commands.svelte b/src/lib/components/chat/MessageInput/Commands.svelte index bcea28d1e..4339456aa 100644 --- a/src/lib/components/chat/MessageInput/Commands.svelte +++ b/src/lib/components/chat/MessageInput/Commands.svelte @@ -56,7 +56,8 @@ {#if show} {#if !loading} {#if command?.charAt(0) === '/'} - + dispatch('promptselectionprocessed', e.detail)} /> {:else if (command?.charAt(0) === '#' && command.startsWith('#') && !command.includes('# ')) || ('\\#' === command.slice(0, 2) && command.startsWith('#') && !command.includes('# '))} Date: Mon, 16 Jun 2025 18:45:51 +0200 Subject: [PATCH 3/5] Update Prompts.svelte --- .../chat/MessageInput/Commands/Prompts.svelte | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/MessageInput/Commands/Prompts.svelte b/src/lib/components/chat/MessageInput/Commands/Prompts.svelte index c6d8bcb82..bd5126cb3 100644 --- a/src/lib/components/chat/MessageInput/Commands/Prompts.svelte +++ b/src/lib/components/chat/MessageInput/Commands/Prompts.svelte @@ -9,9 +9,10 @@ getUserTimezone, getWeekday } from '$lib/utils'; - import { tick, getContext } from 'svelte'; + import { tick, getContext, createEventDispatcher } from 'svelte'; import { toast } from 'svelte-sonner'; + const dispatch = createEventDispatcher(); const i18n = getContext('i18n'); export let files; @@ -166,11 +167,16 @@ prompt = fullPrompt; await tick(); - chatInputElement.setSelectionRange(word?.startIndex, word.endIndex + 1); + if (chatInputElement instanceof HTMLInputElement || chatInputElement instanceof HTMLTextAreaElement) { + chatInputElement.setSelectionRange(word?.startIndex, word.endIndex + 1); + } } else { chatInputElement.scrollTop = chatInputElement.scrollHeight; } } + + await tick(); + dispatch('promptapplied', { finalPromptContent: prompt }); }; From 86125ebf21cfae6840f2ce548d7fa2f1ebc02d5b Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Mon, 16 Jun 2025 18:46:19 +0200 Subject: [PATCH 4/5] Create VariableInputModal.svelte --- .../components/chat/VariableInputModal.svelte | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/lib/components/chat/VariableInputModal.svelte diff --git a/src/lib/components/chat/VariableInputModal.svelte b/src/lib/components/chat/VariableInputModal.svelte new file mode 100644 index 000000000..32ee72cea --- /dev/null +++ b/src/lib/components/chat/VariableInputModal.svelte @@ -0,0 +1,104 @@ + + + +
+
+

{$i18n.t('Enter Variable Values')}

+ +
+ {#if subtitle} +

{@html subtitle}

+ {/if} + +
+ {#each variables as variable (variable)} +
+
+ {@html $i18n.t('Insert a value for {{variable}}', { variable })} +
+