Przeglądaj źródła

feat: option to toggle auto title generation

Timothy J. Baek 1 rok temu
rodzic
commit
cfb3f307b4

+ 29 - 0
src/lib/components/chat/SettingsModal.svelte

@@ -38,6 +38,7 @@
 	let pullProgress = null;
 
 	// Addons
+	let titleAutoGenerate = true;
 	let speechAutoSend = false;
 	let gravatarEmail = '';
 	let OPENAI_API_KEY = '';
@@ -91,6 +92,11 @@
 		saveSettings({ speechAutoSend: speechAutoSend });
 	};
 
+	const toggleTitleAutoGenerate = async () => {
+		titleAutoGenerate = !titleAutoGenerate;
+		saveSettings({ titleAutoGenerate: titleAutoGenerate });
+	};
+
 	const toggleAuthHeader = async () => {
 		authEnabled = !authEnabled;
 	};
@@ -226,6 +232,7 @@
 		top_k = settings.top_k ?? 40;
 		top_p = settings.top_p ?? 0.9;
 
+		titleAutoGenerate = settings.titleAutoGenerate ?? true;
 		speechAutoSend = settings.speechAutoSend ?? false;
 		gravatarEmail = settings.gravatarEmail ?? '';
 		OPENAI_API_KEY = settings.OPENAI_API_KEY ?? '';
@@ -851,6 +858,28 @@
 						}}
 					>
 						<div class=" space-y-3">
+							<div>
+								<div class=" py-1 flex w-full justify-between">
+									<div class=" self-center text-sm font-medium">Title Auto Generation</div>
+
+									<button
+										class="p-1 px-3 text-xs flex rounded transition"
+										on:click={() => {
+											toggleTitleAutoGenerate();
+										}}
+										type="button"
+									>
+										{#if titleAutoGenerate === true}
+											<span class="ml-2 self-center">On</span>
+										{:else}
+											<span class="ml-2 self-center">Off</span>
+										{/if}
+									</button>
+								</div>
+							</div>
+
+							<hr class=" dark:border-gray-700" />
+
 							<div>
 								<div class=" py-1 flex w-full justify-between">
 									<div class=" self-center text-sm font-medium">Voice Input Auto-Send</div>

+ 31 - 27
src/routes/(app)/+page.svelte

@@ -415,35 +415,39 @@
 	};
 
 	const generateChatTitle = async (_chatId, userPrompt) => {
-		console.log('generateChatTitle');
-
-		const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/generate`, {
-			method: 'POST',
-			headers: {
-				'Content-Type': 'text/event-stream',
-				...($settings.authHeader && { Authorization: $settings.authHeader }),
-				...($user && { Authorization: `Bearer ${localStorage.token}` })
-			},
-			body: JSON.stringify({
-				model: selectedModels[0],
-				prompt: `Generate a brief 3-5 word title for this question, excluding the term 'title.' Then, please reply with only the title: ${userPrompt}`,
-				stream: false
-			})
-		})
-			.then(async (res) => {
-				if (!res.ok) throw await res.json();
-				return res.json();
+		if ($settings.titleAutoGenerate ?? true) {
+			console.log('generateChatTitle');
+
+			const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/generate`, {
+				method: 'POST',
+				headers: {
+					'Content-Type': 'text/event-stream',
+					...($settings.authHeader && { Authorization: $settings.authHeader }),
+					...($user && { Authorization: `Bearer ${localStorage.token}` })
+				},
+				body: JSON.stringify({
+					model: selectedModels[0],
+					prompt: `Generate a brief 3-5 word title for this question, excluding the term 'title.' Then, please reply with only the title: ${userPrompt}`,
+					stream: false
+				})
 			})
-			.catch((error) => {
-				if ('detail' in error) {
-					toast.error(error.detail);
-				}
-				console.log(error);
-				return null;
-			});
+				.then(async (res) => {
+					if (!res.ok) throw await res.json();
+					return res.json();
+				})
+				.catch((error) => {
+					if ('detail' in error) {
+						toast.error(error.detail);
+					}
+					console.log(error);
+					return null;
+				});
 
-		if (res) {
-			await setChatTitle(_chatId, res.response === '' ? 'New Chat' : res.response);
+			if (res) {
+				await setChatTitle(_chatId, res.response === '' ? 'New Chat' : res.response);
+			}
+		} else {
+			await setChatTitle(_chatId, `${userPrompt}`);
 		}
 	};
 

+ 31 - 27
src/routes/(app)/c/[id]/+page.svelte

@@ -451,35 +451,39 @@
 	};
 
 	const generateChatTitle = async (_chatId, userPrompt) => {
-		console.log('generateChatTitle');
-
-		const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/generate`, {
-			method: 'POST',
-			headers: {
-				'Content-Type': 'text/event-stream',
-				...($settings.authHeader && { Authorization: $settings.authHeader }),
-				...($user && { Authorization: `Bearer ${localStorage.token}` })
-			},
-			body: JSON.stringify({
-				model: selectedModels[0],
-				prompt: `Generate a brief 3-5 word title for this question, excluding the term 'title.' Then, please reply with only the title: ${userPrompt}`,
-				stream: false
-			})
-		})
-			.then(async (res) => {
-				if (!res.ok) throw await res.json();
-				return res.json();
+		if ($settings.titleAutoGenerate ?? true) {
+			console.log('generateChatTitle');
+
+			const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/generate`, {
+				method: 'POST',
+				headers: {
+					'Content-Type': 'text/event-stream',
+					...($settings.authHeader && { Authorization: $settings.authHeader }),
+					...($user && { Authorization: `Bearer ${localStorage.token}` })
+				},
+				body: JSON.stringify({
+					model: selectedModels[0],
+					prompt: `Generate a brief 3-5 word title for this question, excluding the term 'title.' Then, please reply with only the title: ${userPrompt}`,
+					stream: false
+				})
 			})
-			.catch((error) => {
-				if ('detail' in error) {
-					toast.error(error.detail);
-				}
-				console.log(error);
-				return null;
-			});
+				.then(async (res) => {
+					if (!res.ok) throw await res.json();
+					return res.json();
+				})
+				.catch((error) => {
+					if ('detail' in error) {
+						toast.error(error.detail);
+					}
+					console.log(error);
+					return null;
+				});
 
-		if (res) {
-			await setChatTitle(_chatId, res.response === '' ? 'New Chat' : res.response);
+			if (res) {
+				await setChatTitle(_chatId, res.response === '' ? 'New Chat' : res.response);
+			}
+		} else {
+			await setChatTitle(_chatId, `${userPrompt}`);
 		}
 	};