Handle non-streaming errors as 500

a0a184763481ef11bdbd6df7f3b0c20a54b9bafe

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +11 -10Ignore whitespace
src/endpoints/backends/chat-completions.js+11 -10
@@ -1,6 +1,5 @@
11const express = require('express');
22const fetch = require('node-fetch').default;
3-const Readable = require('stream').Readable;
43
54const { jsonParser } = require('../../express-common');
65const { CHAT_COMPLETION_SOURCES, GEMINI_SAFETY, BISON_SAFETY, OPENROUTER_HEADERS } = require('../../constants');
@@ -213,7 +212,7 @@ async function sendScaleRequest(request, response) {
213212
214213 if (!generateResponse.ok) {
215214 console.log(`Scale API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
216215 return response.status(generateResponse.status500).send({ error: true });
217216 }
218217
219218 const generateResponseJson = await generateResponse.json();
@@ -422,15 +421,17 @@ async function sendAI21Request(request, response) {
422421 forwardFetchResponse(generateResponse, response);
423422 } else {
424423 if (!generateResponse.ok) {
425- console.log(`AI21 API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
424+ const errorText = await generateResponse.text();
426- return response.status(500).send({ error: true });
425+ console.log(`AI21 API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
426+ const errorJson = tryParse(errorText) ?? { error: true };
427+ return response.status(500).send(errorJson);
427428 }
428429 const generateResponseJson = await generateResponse.json();
429430 console.log('AI21 response:', generateResponseJson);
430431 return response.send(generateResponseJson);
431432 }
432433 } catch (error) {
433434 console.log('Error communicating with MistralAIAI21 API: ', error);
434435 if (!response.headersSent) {
435436 response.send({ error: true });
436437 } else {
@@ -495,10 +496,10 @@ async function sendMistralAIRequest(request, response) {
495496 forwardFetchResponse(generateResponse, response);
496497 } else {
497498 if (!generateResponse.ok) {
498- console.log(`MistralAI API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
499+ const errorText = await generateResponse.text();
499- // a 401 unauthorized response breaks the frontend auth, so return a 500 instead. prob a better way of dealing with this.
500+ console.log(`MistralAI API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
500- // 401s are already handled by the streaming processor and dont pop up an error toast, that should probably be fixed too.
501+ const errorJson = tryParse(errorText) ?? { error: true };
501502 return response.status(generateResponse.status === 401 ? 500 : generateResponse.status).send({ error: true }errorJson);
502503 }
503504 const generateResponseJson = await generateResponse.json();
504505 console.log('MistralAI response:', generateResponseJson);
@@ -595,7 +596,7 @@ async function sendCohereRequest(request, response) {
595596 const errorText = await generateResponse.text();
596597 console.log(`Cohere API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
597598 const errorJson = tryParse(errorText) ?? { error: true };
598599 return response.status(generateResponse.status === 401 ? 500 : generateResponse.status).send(errorJson);
599600 }
600601 const generateResponseJson = await generateResponse.json();
601602 console.log('Cohere response:', generateResponseJson);