feat: convo mode

This commit is contained in:
Timothy J. Baek 2024-02-09 17:09:14 -08:00
parent cb5520c519
commit 3015bb766d
3 changed files with 34 additions and 2 deletions

View file

@ -674,6 +674,7 @@
{#if messages.length == 0 || messages.at(-1).done == true} {#if messages.length == 0 || messages.at(-1).done == true}
{#if speechRecognitionEnabled} {#if speechRecognitionEnabled}
<button <button
id="voice-input-button"
class=" text-gray-600 dark:text-gray-300 transition rounded-lg p-1.5 mr-0.5 self-center" class=" text-gray-600 dark:text-gray-300 transition rounded-lg p-1.5 mr-0.5 self-center"
type="button" type="button"
on:click={() => { on:click={() => {

View file

@ -149,6 +149,9 @@
audio.onended = () => { audio.onended = () => {
speaking = null; speaking = null;
if ($settings.conversationMode) {
document.getElementById('voice-input-button')?.click();
}
}; };
audio.play().catch((e) => console.error('Error playing audio:', e)); audio.play().catch((e) => console.error('Error playing audio:', e));
} }
@ -166,6 +169,9 @@
speak.onend = () => { speak.onend = () => {
speaking = null; speaking = null;
if ($settings.conversationMode) {
document.getElementById('voice-input-button')?.click();
}
}; };
speak.voice = voice; speak.voice = voice;
speechSynthesis.speak(speak); speechSynthesis.speak(speak);

View file

@ -6,6 +6,7 @@
// Voice // Voice
let conversationMode = false;
let speechAutoSend = false; let speechAutoSend = false;
let responseAutoPlayback = false; let responseAutoPlayback = false;
@ -37,6 +38,11 @@
}, 100); }, 100);
}; };
const toggleConversationMode = async () => {
conversationMode = !conversationMode;
saveSettings({ conversationMode: conversationMode });
};
const toggleResponseAutoPlayback = async () => { const toggleResponseAutoPlayback = async () => {
responseAutoPlayback = !responseAutoPlayback; responseAutoPlayback = !responseAutoPlayback;
saveSettings({ responseAutoPlayback: responseAutoPlayback }); saveSettings({ responseAutoPlayback: responseAutoPlayback });
@ -50,6 +56,7 @@
onMount(async () => { onMount(async () => {
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}'); let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
conversationMode = settings.conversationMode ?? false;
speechAutoSend = settings.speechAutoSend ?? false; speechAutoSend = settings.speechAutoSend ?? false;
responseAutoPlayback = settings.responseAutoPlayback ?? false; responseAutoPlayback = settings.responseAutoPlayback ?? false;
@ -104,7 +111,25 @@
</div> </div>
<div class=" py-0.5 flex w-full justify-between"> <div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">Voice Input Auto-Send</div> <div class=" self-center text-xs font-medium">Conversation Mode</div>
<button
class="p-1 px-3 text-xs flex rounded transition"
on:click={() => {
toggleConversationMode();
}}
type="button"
>
{#if conversationMode === true}
<span class="ml-2 self-center">On</span>
{:else}
<span class="ml-2 self-center">Off</span>
{/if}
</button>
</div>
<div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">Auto-send input after 3 sec.</div>
<button <button
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
@ -122,7 +147,7 @@
</div> </div>
<div class=" py-0.5 flex w-full justify-between"> <div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">TTS Automatic Playback</div> <div class=" self-center text-xs font-medium">Auto-playback response</div>
<button <button
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"