| | 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, |
| | }; |
| |
|