diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 875aee0e07..301fa9c2b5 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -982,10 +982,8 @@ } let settingDefaults = false; - const setDefaults = async () => { - if (settingDefaults) return; - settingDefaults = true; - + let defaultsPromise = Promise.resolve(); + const applyDefaults = async () => { try { if (!$tools) { tools.set(await getTools(localStorage.token)); @@ -1096,6 +1094,13 @@ } }; + const setDefaults = () => { + if (settingDefaults) return defaultsPromise; + settingDefaults = true; + defaultsPromise = applyDefaults().catch((error) => console.error(error)); + return defaultsPromise; + }; + const showMessage = async (message, scroll = true, save = true) => { const _chatId = JSON.parse(JSON.stringify($chatId)); let _messageId = JSON.parse(JSON.stringify(message.id)); @@ -2867,6 +2872,8 @@ ////////////////////////// const submitPrompt = async (inputContent, inputFiles) => { + await defaultsPromise; + const _files = structuredClone(inputFiles); chatFiles.push( @@ -3054,6 +3061,7 @@ prompt = ''; }; + let awaitingDefaults = false; const submitHandler = async (userPrompt, { _raw = false } = {}) => { console.log('submitHandler', userPrompt, $chatId); @@ -3088,6 +3096,15 @@ return; } + // Drop a second send that races this wait, since prompt isn't cleared until after it + if (awaitingDefaults) return; + awaitingDefaults = true; + try { + await defaultsPromise; + } finally { + awaitingDefaults = false; + } + if (pendingOAuthTools.length > 0) { toast.warning($i18n.t('Please connect all required integrations before sending a message')); return;