From cfb3f307b4e31a077aa4f583e0a7c9196c1a60e8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Wed, 22 Nov 2023 13:20:41 -0800 Subject: [PATCH] feat: option to toggle auto title generation --- src/lib/components/chat/SettingsModal.svelte | 29 ++++++++++ src/routes/(app)/+page.svelte | 56 +++++++++++--------- src/routes/(app)/c/[id]/+page.svelte | 56 +++++++++++--------- 3 files changed, 89 insertions(+), 52 deletions(-) diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index c1aa80c5..9f447b90 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/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 @@ }} >
+
+
+
Title Auto Generation
+ + +
+
+ +
+
Voice Input Auto-Send
diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte index 3df52bee..9cc3e55c 100644 --- a/src/routes/(app)/+page.svelte +++ b/src/routes/(app)/+page.svelte @@ -415,35 +415,39 @@ }; const generateChatTitle = async (_chatId, userPrompt) => { - console.log('generateChatTitle'); + 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 + 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(); - }) - .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}`); } }; diff --git a/src/routes/(app)/c/[id]/+page.svelte b/src/routes/(app)/c/[id]/+page.svelte index 00070f90..d1b68e52 100644 --- a/src/routes/(app)/c/[id]/+page.svelte +++ b/src/routes/(app)/c/[id]/+page.svelte @@ -451,35 +451,39 @@ }; const generateChatTitle = async (_chatId, userPrompt) => { - console.log('generateChatTitle'); + 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 + 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(); - }) - .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}`); } };