From 14a4a1ed99cba7f9aae1538057a5eeda6c778508 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Sat, 29 Nov 2025 15:58:52 +0900 Subject: [PATCH 1/2] [Update] Add an error notification that is when an invalid endpoint or message is received(mostly frontend side endpoint error handling bug). --- src-ui/logics/_useBackendErrorHandling.js | 3 +++ src-ui/views/app/_app_controllers/StartPythonController.jsx | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src-ui/logics/_useBackendErrorHandling.js b/src-ui/logics/_useBackendErrorHandling.js index eb8bcae0..307520ea 100644 --- a/src-ui/logics/_useBackendErrorHandling.js +++ b/src-ui/logics/_useBackendErrorHandling.js @@ -241,6 +241,9 @@ export const _useBackendErrorHandling = () => { default: console.error(`Invalid endpoint or message: ${endpoint}\nmessage: ${message}\nresult: ${JSON.stringify(result)}`); + showNotification_Error( + `An error occurred. Please contact the developers and restart VRCT. Error: Invalid endpoint or message: ${endpoint}\nmessage: ${message}\nresult: ${JSON.stringify(result)}`, { hide_duration: null } + ); return; } diff --git a/src-ui/views/app/_app_controllers/StartPythonController.jsx b/src-ui/views/app/_app_controllers/StartPythonController.jsx index 55824bc8..d2781abf 100644 --- a/src-ui/views/app/_app_controllers/StartPythonController.jsx +++ b/src-ui/views/app/_app_controllers/StartPythonController.jsx @@ -49,7 +49,8 @@ const useStartPython = () => { }); command.stderr.on("data", line => { showNotification_Error( - `An error occurred. Please restart VRCT or contact the developers. The last line:${JSON.stringify(line)}`, { hide_duration: null }); + `An error occurred. Please restart VRCT or contact the developers. The last line:${JSON.stringify(line)}`, { hide_duration: null } + ); console.error("stderr", line); }); const backend_subprocess = await command.spawn(); From a85320b8745bf42cdfe19401e3378f345cd95872 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 4 Dec 2025 14:24:44 +0900 Subject: [PATCH 2/2] [Update] UI: Enhance backend error handling for Plamo, Gemini, OpenAI, LMStudio, and Ollama authentication keys and models. --- src-ui/logics/_useBackendErrorHandling.js | 118 +++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/src-ui/logics/_useBackendErrorHandling.js b/src-ui/logics/_useBackendErrorHandling.js index 307520ea..3b230425 100644 --- a/src-ui/logics/_useBackendErrorHandling.js +++ b/src-ui/logics/_useBackendErrorHandling.js @@ -36,7 +36,23 @@ export const _useBackendErrorHandling = () => { const { updateTranslationStatus, updateTranscriptionSendStatus, updateTranscriptionReceiveStatus } = useMainFunction(); - const { updateDeepLAuthKey } = useTranslation(); + const { + updateDeepLAuthKey, + + updatePlamoAuthKey, + updatePlamoModel, + + updateGeminiAuthKey, + updateGeminiModel, + + updateOpenAIAuthKey, + updateOpenAIModel, + + updateLMStudioUrl, + updateLMStudioModel, + + updateOllamaModel, + } = useTranslation(); const { updateEnableVrcMicMuteSync } = useOthers(); @@ -135,6 +151,106 @@ export const _useBackendErrorHandling = () => { } return; + case "/set/data/plamo_auth_key": + if (message === "Plamo auth key length is not correct") { + updatePlamoAuthKey(data); + showNotification_Error(message, { category_id: "plamo_auth_key" }); + } else if (message === "Authentication failure of plamo auth key") { + updatePlamoAuthKey(data); + showNotification_Error(message, { category_id: "plamo_auth_key" }); + } else { + updatePlamoAuthKey(data); + showNotification_Error(message, { category_id: "plamo_auth_key" }); + } + return; + + case "/set/data/gemini_auth_key": + if (message === "Gemini auth key length is not correct") { + updateGeminiAuthKey(data); + showNotification_Error(message, { category_id: "gemini_auth_key" }); + } else if (message === "Authentication failure of gemini auth key") { + updateGeminiAuthKey(data); + showNotification_Error(message, { category_id: "gemini_auth_key" }); + } else { + updateGeminiAuthKey(data); + showNotification_Error(message, { category_id: "gemini_auth_key" }); + } + return; + + case "/set/data/openai_auth_key": + if (message === "OpenAI auth key is not valid") { + updateOpenAIAuthKey(data); + showNotification_Error(message, { category_id: "openai_auth_key" }); + } else if (message === "Authentication failure of OpenAI auth key") { + updateOpenAIAuthKey(data); + showNotification_Error(message, { category_id: "openai_auth_key" }); + } else { + updateOpenAIAuthKey(data); + showNotification_Error(message, { category_id: "openai_auth_key" }); + } + return; + + + case "/set/data/selected_plamo_model": + if (message === "Plamo model is not valid") { + updatePlamoModel(data); + showNotification_Error(message, { category_id: "selected_plamo_model" }); + } else { + updatePlamoModel(data); + showNotification_Error(message, { category_id: "selected_plamo_model" }); + } + return; + + case "/set/data/selected_gemini_model": + if (message === "Gemini model is not valid") { + updateGeminiModel(data); + showNotification_Error(message, { category_id: "selected_gemini_model" }); + } else { + updateGeminiModel(data); + showNotification_Error(message, { category_id: "selected_gemini_model" }); + } + return; + + case "/set/data/selected_openai_model": + if (message === "OpenAI model is not valid") { + updateOpenAIModel(data); + showNotification_Error(message, { category_id: "selected_openai_model" }); + } else { + updateOpenAIModel(data); + showNotification_Error(message, { category_id: "selected_openai_model" }); + } + return; + + case "/set/data/lmstudio_url": + if (message === "LMStudio URL is not valid") { + updateLMStudioUrl(data); + showNotification_Error(message, { category_id: "lmstudio_url" }); + } else { + updateLMStudioUrl(data); + showNotification_Error(message, { category_id: "lmstudio_url" }); + } + return; + + case "/set/data/selected_lmstudio_model": + if (message === "LMStudio model is not valid") { + updateLMStudioModel(data); + showNotification_Error(message, { category_id: "selected_lmstudio_model" }); + } else { + updateLMStudioModel(data); + showNotification_Error(message, { category_id: "selected_lmstudio_model" }); + } + return; + + case "/set/data/selected_ollama_model": + if (message === "ollama model is not valid") { + updateOllamaModel(data); + showNotification_Error(message, { category_id: "selected_ollama_model" }); + } else { + updateOllamaModel(data); + showNotification_Error(message, { category_id: "selected_ollama_model" }); + } + return; + case "/set/data/mic_record_timeout": if (message === "Mic record timeout value is out of range") { updateMicRecordTimeout(data);