| const crypto = require('crypto'); |
| const { logger } = require('@librechat/data-schemas'); |
| const { parseConvo } = require('librechat-data-provider'); |
| const { sendEvent, handleError, sanitizeMessageForTransmit } = require('@librechat/api'); |
| const { saveMessage, getMessages } = require('~/models/Message'); |
| const { getConvo } = require('~/models/Conversation'); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| const sendError = async (req, res, options, callback) => { |
| const { |
| user, |
| sender, |
| conversationId, |
| messageId, |
| parentMessageId, |
| text, |
| shouldSaveMessage, |
| ...rest |
| } = options; |
| const errorMessage = { |
| sender, |
| messageId: messageId ?? crypto.randomUUID(), |
| conversationId, |
| parentMessageId, |
| unfinished: false, |
| error: true, |
| final: true, |
| text, |
| isCreatedByUser: false, |
| ...rest, |
| }; |
| if (callback && typeof callback === 'function') { |
| await callback(); |
| } |
|
|
| if (shouldSaveMessage) { |
| await saveMessage( |
| req, |
| { ...errorMessage, user }, |
| { |
| context: 'api/server/utils/streamResponse.js - sendError', |
| }, |
| ); |
| } |
|
|
| if (!errorMessage.error) { |
| const requestMessage = { messageId: parentMessageId, conversationId }; |
| let query = [], |
| convo = {}; |
| try { |
| query = await getMessages(requestMessage); |
| convo = await getConvo(user, conversationId); |
| } catch (err) { |
| logger.error('[sendError] Error retrieving conversation data:', err); |
| convo = parseConvo(errorMessage); |
| } |
|
|
| return sendEvent(res, { |
| final: true, |
| requestMessage: sanitizeMessageForTransmit(query?.[0] ?? requestMessage), |
| responseMessage: errorMessage, |
| conversation: convo, |
| }); |
| } |
|
|
| handleError(res, errorMessage); |
| }; |
|
|
| |
| |
| |
| |
| |
| |
| |
| const sendResponse = (req, res, data, errorMessage) => { |
| if (!res.headersSent) { |
| if (errorMessage) { |
| return res.status(500).json({ error: errorMessage }); |
| } |
| return res.json(data); |
| } |
|
|
| if (errorMessage) { |
| return sendError(req, res, { ...data, text: errorMessage }); |
| } |
| return sendEvent(res, data); |
| }; |
|
|
| module.exports = { |
| sendError, |
| sendResponse, |
| }; |
|
|