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