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 @@
1const express = require('express');1const express = require('express');
2const fetch = require('node-fetch').default;2const fetch = require('node-fetch').default;
3const Readable = require('stream').Readable;
43
5const { jsonParser } = require('../../express-common');4const { jsonParser } = require('../../express-common');
6const { CHAT_COMPLETION_SOURCES, GEMINI_SAFETY, BISON_SAFETY, OPENROUTER_HEADERS } = require('../../constants');5const { CHAT_COMPLETION_SOURCES, GEMINI_SAFETY, BISON_SAFETY, OPENROUTER_HEADERS } = require('../../constants');
@@ -213,7 +212,7 @@ async function sendScaleRequest(request, response) {
213212
214 if (!generateResponse.ok) {213 if (!generateResponse.ok) {
215 console.log(`Scale API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);214 console.log(`Scale API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
216 return response.status(generateResponse.status).send({ error: true });215 return response.status(500).send({ error: true });
217 }216 }
218217
219 const generateResponseJson = await generateResponse.json();218 const generateResponseJson = await generateResponse.json();
@@ -422,15 +421,17 @@ async function sendAI21Request(request, response) {
422 forwardFetchResponse(generateResponse, response);421 forwardFetchResponse(generateResponse, response);
423 } else {422 } else {
424 if (!generateResponse.ok) {423 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);
427 }428 }
428 const generateResponseJson = await generateResponse.json();429 const generateResponseJson = await generateResponse.json();
429 console.log('AI21 response:', generateResponseJson);430 console.log('AI21 response:', generateResponseJson);
430 return response.send(generateResponseJson);431 return response.send(generateResponseJson);
431 }432 }
432 } catch (error) {433 } catch (error) {
433 console.log('Error communicating with MistralAI API: ', error);434 console.log('Error communicating with AI21 API: ', error);
434 if (!response.headersSent) {435 if (!response.headersSent) {
435 response.send({ error: true });436 response.send({ error: true });
436 } else {437 } else {
@@ -495,10 +496,10 @@ async function sendMistralAIRequest(request, response) {
495 forwardFetchResponse(generateResponse, response);496 forwardFetchResponse(generateResponse, response);
496 } else {497 } else {
497 if (!generateResponse.ok) {498 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 };
501 return response.status(generateResponse.status === 401 ? 500 : generateResponse.status).send({ error: true });502 return response.status(500).send(errorJson);
502 }503 }
503 const generateResponseJson = await generateResponse.json();504 const generateResponseJson = await generateResponse.json();
504 console.log('MistralAI response:', generateResponseJson);505 console.log('MistralAI response:', generateResponseJson);
@@ -595,7 +596,7 @@ async function sendCohereRequest(request, response) {
595 const errorText = await generateResponse.text();596 const errorText = await generateResponse.text();
596 console.log(`Cohere API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);597 console.log(`Cohere API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
597 const errorJson = tryParse(errorText) ?? { error: true };598 const errorJson = tryParse(errorText) ?? { error: true };
598 return response.status(generateResponse.status === 401 ? 500 : generateResponse.status).send(errorJson);599 return response.status(500).send(errorJson);
599 }600 }
600 const generateResponseJson = await generateResponse.json();601 const generateResponseJson = await generateResponse.json();
601 console.log('Cohere response:', generateResponseJson);602 console.log('Cohere response:', generateResponseJson);