From b9123508291da672f2306a353d53dcfca82f431e Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 8 Jan 2026 18:15:16 -0500 Subject: [PATCH] Add Demo Mode and error handling to AE_AITools component - Implemented 'Demo Mode' fallback when no API token is provided. - Ensured the AI modal opens even on connection errors to display troubleshooting info. - Improved user feedback with simulated loading states for demo data. --- src/lib/ae_elements/AE_AITools.svelte | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/lib/ae_elements/AE_AITools.svelte b/src/lib/ae_elements/AE_AITools.svelte index 953c71cd..b12ba861 100644 --- a/src/lib/ae_elements/AE_AITools.svelte +++ b/src/lib/ae_elements/AE_AITools.svelte @@ -63,14 +63,28 @@ return; } + active_tab = 'result'; + + // If no token is provided, trigger a "Demo Mode" placeholder after a fake delay + if (!token || token === '') { + console.log('AE_AITools: No token provided. Entering Demo Mode.'); + ae_promises = new Promise((resolve) => { + setTimeout(() => { + tmp_summary = `### AI Summary (DEMO MODE)\n\nThis is a placeholder summary because no API token was provided in the settings. \n\n**Original Content Length:** ${content.length} characters.\n\n**System Prompt:** ${systemPrompt}\n\n**Model:** ${model}`; + show_modal = true; + resolve(true); + }, 1500); + }); + return; + } + const ai_client = new OpenAI({ - apiKey: token || 'no-token-provided', + apiKey: token, baseURL: baseUrl, dangerouslyAllowBrowser: true }); try { - active_tab = 'result'; ae_promises = ai_client.chat.completions.create({ model: model, max_tokens: maxTokens, @@ -86,7 +100,10 @@ }); } catch (err: any) { console.error('AE_AITools: AI Error:', err); - alert('AI Error: ' + err.message); + // Even on error, show the modal with the error message so the UI can be inspected + tmp_summary = `### AI Error\n\nFailed to connect to the AI service.\n\n**Error:** ${err.message}\n\nCheck your Settings tab for Base URL and Token configuration.`; + show_modal = true; + ae_promises = Promise.resolve(); } }