diff --git a/examples/bedtime-story-teller/assets/app.js b/examples/bedtime-story-teller/assets/app.js index 506c8c4..bf3d785 100644 --- a/examples/bedtime-story-teller/assets/app.js +++ b/examples/bedtime-story-teller/assets/app.js @@ -7,55 +7,83 @@ const socket = io(`http://${window.location.host}`); let generateStoryButtonOriginalHTML = ''; // To store the original content of the generate story button let storyBuffer = ''; +// Error container elements +const errorContainer = document.getElementById('error-container'); +function showError(message) { + errorContainer.textContent = message; + errorContainer.style.display = 'block'; +} -function initSocketIO() { - socket.on('prompt', (data) => { - const promptContainer = document.getElementById('prompt-container'); - const promptDisplay = document.getElementById('prompt-display'); - promptDisplay.innerHTML = data; - promptContainer.style.display = 'block'; - }); - - socket.on('response', (data) => { - - document.getElementById('story-container').style.display = 'flex'; - - storyBuffer += data; - - }); - - - - socket.on('stream_end', () => { +function hideError() { + errorContainer.style.display = 'none'; + errorContainer.textContent = ''; +} - const storyResponse = document.getElementById('story-response'); - storyResponse.innerHTML = storyBuffer; +function handlePrompt(data) { + const promptContainer = document.getElementById('prompt-container'); + const promptDisplay = document.getElementById('prompt-display'); + promptDisplay.innerHTML = data; + promptContainer.style.display = 'block'; +} - +function handleResponse(data) { + document.getElementById('story-container').style.display = 'flex'; + storyBuffer += data; +} - document.getElementById('loading-spinner').style.display = 'none'; +function handleStreamEnd() { + hideError(); // Hide any errors on successful stream end - const clearStoryButton = document.getElementById('clear-story-button'); + const storyResponse = document.getElementById('story-response'); + storyResponse.innerHTML = storyBuffer; - clearStoryButton.style.display = 'block'; + document.getElementById('loading-spinner').style.display = 'none'; + const clearStoryButton = document.getElementById('clear-story-button'); + clearStoryButton.style.display = 'block'; + clearStoryButton.disabled = false; - clearStoryButton.disabled = false; + const generateStoryButton = document.querySelector('.generate-story-button'); + if (generateStoryButton) { + generateStoryButton.disabled = false; + generateStoryButton.innerHTML = generateStoryButtonOriginalHTML; // Restore original content + } +} - +function handleStoryError(data) { + // Hide the loading spinner + document.getElementById('loading-spinner').style.display = 'none'; - const generateStoryButton = document.querySelector('.generate-story-button'); + // Restore the generate story button + const generateStoryButton = document.querySelector('.generate-story-button'); + if (generateStoryButton) { + generateStoryButton.disabled = false; + generateStoryButton.innerHTML = generateStoryButtonOriginalHTML; + } - if (generateStoryButton) { + // Display the error message in the dedicated error container + showError(`An error occurred while generating the story: ${data.error}`); - generateStoryButton.disabled = false; + // Also show the "New story" button to allow the user to restart + const clearStoryButton = document.getElementById('clear-story-button'); + clearStoryButton.style.display = 'block'; + clearStoryButton.disabled = false; +} - generateStoryButton.innerHTML = generateStoryButtonOriginalHTML; // Restore original content +function initSocketIO() { + socket.on('prompt', handlePrompt); + socket.on('response', handleResponse); + socket.on('stream_end', handleStreamEnd); + socket.on('story_error', handleStoryError); - } + socket.on('connect', () => { + hideError(); // Clear any previous errors on successful connection + }); - }); + socket.on('disconnect', () => { + showError("Connection to backend lost. Please refresh the page or check the backend server."); + }); } function unlockAndOpenNext(currentContainer) { @@ -229,6 +257,7 @@ function gatherDataAndGenerateStory() { } function generateStory(data) { + hideError(); // Hide any errors when starting a new generation document.querySelector('.story-output-placeholder').style.display = 'none'; const responseArea = document.getElementById('story-response-area'); responseArea.style.display = 'flex'; @@ -251,6 +280,7 @@ function generateStory(data) { } function resetStoryView() { + hideError(); // Hide any errors when resetting view document.querySelector('.story-output-placeholder').style.display = 'flex'; const responseArea = document.getElementById('story-response-area'); responseArea.style.display = 'none'; @@ -469,6 +499,7 @@ document.addEventListener('DOMContentLoaded', () => { }); document.getElementById('generate-randomly-button').addEventListener('click', () => { + hideError(); // Hide any errors when starting a new generation // Age const ageChips = document.querySelectorAll('.parameter-container:nth-child(1) .chip'); const randomAgeChip = getRandomElement(ageChips); @@ -519,4 +550,4 @@ document.addEventListener('DOMContentLoaded', () => { generateStory(storyData); }); -}); +}); \ No newline at end of file diff --git a/examples/bedtime-story-teller/assets/index.html b/examples/bedtime-story-teller/assets/index.html index f4e0e21..f10b8f8 100644 --- a/examples/bedtime-story-teller/assets/index.html +++ b/examples/bedtime-story-teller/assets/index.html @@ -201,6 +201,7 @@