From 37ec6ca76a2b31e4563dbb8897dd6847bdc3c190 Mon Sep 17 00:00:00 2001 From: mic Date: Sun, 21 Jul 2024 16:49:36 +0200 Subject: [PATCH] handling error messages from the ChatGPT API --- api_webchat/controller.js | 3 +++ api_webchat/messagesArea.js | 20 ++++++++++++++++++++ api_webchat/model-worker.js | 9 +++++++++ js/api/openai.js | 18 ++++++++++-------- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/api_webchat/controller.js b/api_webchat/controller.js index 281cc154..5d29d4e0 100644 --- a/api_webchat/controller.js +++ b/api_webchat/controller.js @@ -55,6 +55,9 @@ worker.onmessage = function(event) { case 'tokensDone': messagesArea.handleTokensDone(); break; + case 'error': + messagesArea.appendBotMessage(payload); + break; default: console.error('Unknown event type from worker:', type); } diff --git a/api_webchat/messagesArea.js b/api_webchat/messagesArea.js index d493ab4e..0b0b536d 100644 --- a/api_webchat/messagesArea.js +++ b/api_webchat/messagesArea.js @@ -152,6 +152,26 @@ class MessagesArea extends HTMLElement { this.accumulatingMessageEl = null; } } + + appendBotMessage(messageText) { + console.log("appendBotMessage: " + messageText); + + const lastMessage = this.messages.lastElementChild; + const isLastMessageFromUser = lastMessage && lastMessage.classList.contains('user'); + + if (isLastMessageFromUser) { + const header = document.createElement('h2'); + header.textContent = "Bot"; + this.messages.appendChild(header); + } + + const messageElement = document.createElement('div'); + messageElement.classList.add('message', 'bot'); + messageElement.textContent = messageText; + this.messages.appendChild(messageElement); + this.scrollToBottom(); + } + } customElements.define('messages-area', MessagesArea); \ No newline at end of file diff --git a/api_webchat/model-worker.js b/api_webchat/model-worker.js index 5a243591..f41048e4 100644 --- a/api_webchat/model-worker.js +++ b/api_webchat/model-worker.js @@ -52,6 +52,15 @@ self.onmessage = async function(event) { // }); const response = await openai.fetchResponse("gpt-4o-mini", conversationHistory); //4096); postMessage({ type: 'messageSent' }); + + if (!response.ok) { + const errorJSON = await response.json(); + const errorDetail = JSON.stringify(errorJSON); + console.log(">>>>>>>>>>>>> errorJSON.error.message: " + JSON.stringify(errorJSON.error.message)); + postMessage({ type: 'error', payload: errorJSON.error.message }); + throw new Error("[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail); + } + const reader = response.body.getReader(); const decoder = new TextDecoder("utf-8"); diff --git a/js/api/openai.js b/js/api/openai.js index c3683e04..f6477beb 100644 --- a/js/api/openai.js +++ b/js/api/openai.js @@ -63,15 +63,17 @@ export class OpenAI { }), }); - if (!response.ok) { - const errorDetail = await response.text(); - let err_msg = "[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail; - console.log(err_msg); - throw new Error(err_msg); - } + // if (!response.ok) { + // const errorDetail = await response.text(); + // let err_msg = "[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail; + // console.log(err_msg); + // throw new Error(err_msg); + // } - const responseData = await response.json(); - return responseData.choices[0].message.content; + // const responseData = await response.json(); + // return responseData.choices[0].message.content; + + return response; } } \ No newline at end of file