Jelajahi Sumber

Merge pull request #781 from open-webui/prompt-clipboard

feat: CLIPBOARD variable for prompt preset
Timothy Jaeryang Baek 1 tahun lalu
induk
melakukan
9c3be59015

+ 13 - 1
src/lib/components/chat/MessageInput/PromptCommands.svelte

@@ -2,6 +2,7 @@
 	import { prompts } from '$lib/stores';
 	import { prompts } from '$lib/stores';
 	import { findWordIndices } from '$lib/utils';
 	import { findWordIndices } from '$lib/utils';
 	import { tick } from 'svelte';
 	import { tick } from 'svelte';
+	import toast from 'svelte-french-toast';
 
 
 	export let prompt = '';
 	export let prompt = '';
 	let selectedCommandIdx = 0;
 	let selectedCommandIdx = 0;
@@ -24,7 +25,18 @@
 	};
 	};
 
 
 	const confirmCommand = async (command) => {
 	const confirmCommand = async (command) => {
-		prompt = command.content;
+		let text = command.content;
+
+		if (command.content.includes('{{CLIPBOARD}}')) {
+			const clipboardText = await navigator.clipboard.readText().catch((err) => {
+				toast.error('Failed to read clipboard contents');
+				return '{{CLIPBOARD}}';
+			});
+
+			text = command.content.replaceAll('{{CLIPBOARD}}', clipboardText);
+		}
+
+		prompt = text;
 
 
 		const chatInputElement = document.getElementById('chat-textarea');
 		const chatInputElement = document.getElementById('chat-textarea');
 
 

+ 8 - 2
src/routes/(app)/prompts/create/+page.svelte

@@ -171,12 +171,18 @@
 						</div>
 						</div>
 
 
 						<div class="text-xs text-gray-400 dark:text-gray-500">
 						<div class="text-xs text-gray-400 dark:text-gray-500">
-							Format your variables using square brackets like this: <span
+							Format your variables using square brackets like this: <span
 								class=" text-gray-600 dark:text-gray-300 font-medium">[variable]</span
 								class=" text-gray-600 dark:text-gray-300 font-medium">[variable]</span
 							>
 							>
 							. Make sure to enclose them with
 							. Make sure to enclose them with
 							<span class=" text-gray-600 dark:text-gray-300 font-medium">'['</span>
 							<span class=" text-gray-600 dark:text-gray-300 font-medium">'['</span>
-							and <span class=" text-gray-600 dark:text-gray-300 font-medium">']'</span> .
+							and <span class=" text-gray-600 dark:text-gray-300 font-medium">']'</span>.
+						</div>
+
+						<div class="text-xs text-gray-400 dark:text-gray-500">
+							Utilize <span class=" text-gray-600 dark:text-gray-300 font-medium"
+								>{`{{CLIPBOARD}}`}</span
+							> variable to have them replaced with clipboard content.
 						</div>
 						</div>
 					</div>
 					</div>
 				</div>
 				</div>