Return 502 with error description when connection to remote CC API fails If chat-completions/generate returns an error, throw the error message Reformat display of exceptions during SD prompt text generation

8de551fc9405984acd003667d2cf25d4c8887925

ceruleandeep <deep@cerulean.navy>

3 files changed, +15 -6Showing whitespace changes
public/scripts/extensions/stable-diffusion/index.js+6 -2
@@ -2432,8 +2432,12 @@ async function generatePicture(initiator, args, trigger, message, callback) {
2432 imagePath = await sendGenerationRequest(generationType, prompt, negativePromptPrefix, characterName, callback, initiator, abortController.signal);2432 imagePath = await sendGenerationRequest(generationType, prompt, negativePromptPrefix, characterName, callback, initiator, abortController.signal);
2433 } catch (err) {2433 } catch (err) {
2434 console.trace(err);2434 console.trace(err);
2435 toastr.error('SD prompt text generation failed. Reason: ' + err, 'Image Generation');2435 // errors here are most likely due to text generation failure
2436 throw new Error('SD prompt text generation failed. Reason: ' + err);2436 // sendGenerationRequest mostly deals with its own errors
2437 const reason = err.error?.message || err.message || 'Unknown error';
2438 const errorText = 'SD prompt text generation failed. ' + reason;
2439 toastr.error(errorText, 'Image Generation');
2440 throw new Error(errorText);
2437 }2441 }
2438 finally {2442 finally {
2439 $(stopButton).hide();2443 $(stopButton).hide();
public/scripts/openai.js+3 -2
@@ -2057,8 +2057,9 @@ async function sendOpenAIRequest(type, messages, signal) {
2057 checkModerationError(data);2057 checkModerationError(data);
20582058
2059 if (data.error) {2059 if (data.error) {
2060 toastr.error(data.error.message || response.statusText, t`API returned an error`);2060 const message = data.error.message || response.statusText || t`Unknown error`;
2061 throw new Error(data);2061 toastr.error(message, t`API returned an error`);
2062 throw new Error(message);
2062 }2063 }
20632064
2064 if (type !== 'quiet') {2065 if (type !== 'quiet') {
src/endpoints/backends/chat-completions.js+6 -2
@@ -1051,8 +1051,12 @@ router.post('/generate', jsonParser, function (request, response) {
1051 }1051 }
1052 } catch (error) {1052 } catch (error) {
1053 console.log('Generation failed', error);1053 console.log('Generation failed', error);
1054 const message = error.code === 'ECONNREFUSED'
1055 ? `Connection refused: ${error.message}`
1056 : error.message || 'Unknown error occurred';
1057
1054 if (!response.headersSent) {1058 if (!response.headersSent) {
1055 response.send({ error: true });1059 response.status(502).send({ error: { message, ...error } });
1056 } else {1060 } else {
1057 response.end();1061 response.end();
1058 }1062 }
@@ -1068,7 +1072,7 @@ router.post('/generate', jsonParser, function (request, response) {
10681072
1069 const message = errorResponse.statusText || 'Unknown error occurred';1073 const message = errorResponse.statusText || 'Unknown error occurred';
1070 const quota_error = errorResponse.status === 429 && errorData?.error?.type === 'insufficient_quota';1074 const quota_error = errorResponse.status === 429 && errorData?.error?.type === 'insufficient_quota';
1071 console.log(message, responseText);1075 console.log('Chat completion request error: ', message, responseText);
10721076
1073 if (!response.headersSent) {1077 if (!response.headersSent) {
1074 response.send({ error: { message }, quota_error: quota_error });1078 response.send({ error: { message }, quota_error: quota_error });