Handle non-streaming errors as 500
| @@ -1,6 +1,5 @@ | |||
| 1 | const express = require('express'); | 1 | const express = require('express'); |
| 2 | const fetch = require('node-fetch').default; | 2 | const fetch = require('node-fetch').default; |
| 3 | const Readable = require('stream').Readable; | ||
| 4 | 3 | ||
| 5 | const { jsonParser } = require('../../express-common'); | 4 | const { jsonParser } = require('../../express-common'); |
| 6 | const { CHAT_COMPLETION_SOURCES, GEMINI_SAFETY, BISON_SAFETY, OPENROUTER_HEADERS } = require('../../constants'); | 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 | 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 | } |
| 218 | 217 | ||
| 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); |