mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 01:10:14 +01:00
feat: save error message into database.
This commit is contained in:
parent
d9e5464b3b
commit
0fa19bb6ad
6 changed files with 37 additions and 10 deletions
|
|
@ -36,20 +36,25 @@ const messageSchema = mongoose.Schema({
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true,
|
required: true,
|
||||||
default: false
|
default: false
|
||||||
}
|
},
|
||||||
|
error: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
}, { timestamps: true });
|
}, { timestamps: true });
|
||||||
|
|
||||||
const Message = mongoose.models.Message || mongoose.model('Message', messageSchema);
|
const Message = mongoose.models.Message || mongoose.model('Message', messageSchema);
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
saveMessage: async ({ messageId, conversationId, parentMessageId, sender, text, isCreatedByUser=false }) => {
|
saveMessage: async ({ messageId, conversationId, parentMessageId, sender, text, isCreatedByUser=false, error }) => {
|
||||||
try {
|
try {
|
||||||
await Message.findOneAndUpdate({ messageId }, {
|
await Message.findOneAndUpdate({ messageId }, {
|
||||||
conversationId,
|
conversationId,
|
||||||
parentMessageId,
|
parentMessageId,
|
||||||
sender,
|
sender,
|
||||||
text,
|
text,
|
||||||
isCreatedByUser
|
isCreatedByUser,
|
||||||
|
error
|
||||||
}, { upsert: true, new: true });
|
}, { upsert: true, new: true });
|
||||||
return { messageId, conversationId, parentMessageId, sender, text, isCreatedByUser };
|
return { messageId, conversationId, parentMessageId, sender, text, isCreatedByUser };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,10 @@ router.post('/', async (req, res) => {
|
||||||
gptResponse.text.toLowerCase().includes('no response') ||
|
gptResponse.text.toLowerCase().includes('no response') ||
|
||||||
gptResponse.text.toLowerCase().includes('no answer')
|
gptResponse.text.toLowerCase().includes('no answer')
|
||||||
) {
|
) {
|
||||||
|
await saveMessage({
|
||||||
|
messageId: crypto.randomUUID(), sender: model,
|
||||||
|
conversationId, parentMessageId: userMessageId,
|
||||||
|
error: true, text: 'Prompt empty or too short'});
|
||||||
return handleError(res, 'Prompt empty or too short');
|
return handleError(res, 'Prompt empty or too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -165,6 +169,10 @@ router.post('/', async (req, res) => {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
// await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
|
await saveMessage({
|
||||||
|
messageId: crypto.randomUUID(), sender: model,
|
||||||
|
conversationId, parentMessageId: userMessageId,
|
||||||
|
error: true, text: error.message});
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,10 @@ router.post('/', async (req, res) => {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
// await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
|
await saveMessage({
|
||||||
|
messageId: crypto.randomUUID(), sender: model,
|
||||||
|
conversationId, parentMessageId: userMessageId,
|
||||||
|
error: true, text: error.message});
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,10 @@ router.post('/', async (req, res) => {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
// await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
|
await saveMessage({
|
||||||
|
messageId: crypto.randomUUID(), sender: model,
|
||||||
|
conversationId, parentMessageId: userMessageId,
|
||||||
|
error: true, text: error.message});
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -128,13 +128,14 @@ export default function TextChat({ messages }) {
|
||||||
dispatch(setSubmitState(false));
|
dispatch(setSubmitState(false));
|
||||||
};
|
};
|
||||||
|
|
||||||
const errorHandler = (event, currentState) => {
|
const errorHandler = (event, currentState, currentMsg) => {
|
||||||
const { initialResponse, messages, currentMsg, message } = currentState;
|
const { initialResponse, messages, _currentMsg, message } = currentState;
|
||||||
console.log('Error:', event);
|
console.log('Error:', event);
|
||||||
const errorResponse = {
|
const errorResponse = {
|
||||||
...initialResponse,
|
...initialResponse,
|
||||||
text: `An error occurred. Please try again in a few moments.\n\nError message: ${event.data}`,
|
text: `${event.data}`,
|
||||||
error: true
|
error: true,
|
||||||
|
parentMessageId: currentMsg?.messageId,
|
||||||
};
|
};
|
||||||
setErrorMessage(event.data);
|
setErrorMessage(event.data);
|
||||||
dispatch(setSubmitState(false));
|
dispatch(setSubmitState(false));
|
||||||
|
|
@ -264,7 +265,7 @@ export default function TextChat({ messages }) {
|
||||||
events.onerror = function (e) {
|
events.onerror = function (e) {
|
||||||
console.log('error in opening conn.');
|
console.log('error in opening conn.');
|
||||||
events.close();
|
events.close();
|
||||||
errorHandler(e, currentState);
|
errorHandler(e, currentState, currentMsg);
|
||||||
};
|
};
|
||||||
|
|
||||||
events.stream();
|
events.stream();
|
||||||
|
|
@ -306,6 +307,7 @@ export default function TextChat({ messages }) {
|
||||||
|
|
||||||
const changeHandler = (e) => {
|
const changeHandler = (e) => {
|
||||||
const { value } = e.target;
|
const { value } = e.target;
|
||||||
|
console.log(value)
|
||||||
if (isSubmitting && (value === '' || value === '\n')) {
|
if (isSubmitting && (value === '' || value === '\n')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,11 @@ export default function Message({
|
||||||
// this is not a real messageId, it is used as placeholder before real messageId returned
|
// this is not a real messageId, it is used as placeholder before real messageId returned
|
||||||
const fakeMessageId = crypto.randomUUID();
|
const fakeMessageId = crypto.randomUUID();
|
||||||
const isCustomModel = model === 'chatgptCustom' || !initial[model];
|
const isCustomModel = model === 'chatgptCustom' || !initial[model];
|
||||||
const currentMsg = { ...message, sender: 'User', text: text.trim(), current: true, isCreatedByUser: true, messageId: fakeMessageId };
|
const currentMsg = {
|
||||||
|
sender: 'User', text: text.trim(), current: true, isCreatedByUser: true,
|
||||||
|
parentMessageId: message?.parentMessageId,
|
||||||
|
conversationId: message?.conversationId,
|
||||||
|
messageId: fakeMessageId };
|
||||||
const sender = model === 'chatgptCustom' ? chatGptLabel : model;
|
const sender = model === 'chatgptCustom' ? chatGptLabel : model;
|
||||||
|
|
||||||
const initialResponse = { sender, text: '', parentMessageId: fakeMessageId, submitting: true };
|
const initialResponse = { sender, text: '', parentMessageId: fakeMessageId, submitting: true };
|
||||||
|
|
@ -217,7 +221,7 @@ export default function Message({
|
||||||
{error ? (
|
{error ? (
|
||||||
<div className="flex flex min-h-[20px] flex-col flex-grow items-start gap-4 gap-2 whitespace-pre-wrap text-red-500">
|
<div className="flex flex min-h-[20px] flex-col flex-grow items-start gap-4 gap-2 whitespace-pre-wrap text-red-500">
|
||||||
<div className="rounded-md border border-red-500 bg-red-500/10 py-2 px-3 text-sm text-gray-600 dark:text-gray-100">
|
<div className="rounded-md border border-red-500 bg-red-500/10 py-2 px-3 text-sm text-gray-600 dark:text-gray-100">
|
||||||
{text}
|
{`An error occurred. Please try again in a few moments.\n\nError message: ${text}`}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) :
|
) :
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue