mongodb-chatbot-server
Version:
A chatbot server for retrieval augmented generation (RAG).
144 lines • 5.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeCommentMessageRoute = exports.CommentMessageRequest = void 0;
const mongodb_1 = require("mongodb-rag-core/mongodb");
const utils_1 = require("../../utils");
const zod_1 = require("zod");
const validateRequestSchema_1 = require("../../middleware/validateRequestSchema");
const UpdateTraceFunc_1 = require("./UpdateTraceFunc");
exports.CommentMessageRequest = validateRequestSchema_1.SomeExpressRequest.merge(zod_1.z.object({
headers: zod_1.z.object({
"req-id": zod_1.z.string(),
}),
params: zod_1.z.object({
conversationId: zod_1.z.string(),
messageId: zod_1.z.string(),
}),
body: zod_1.z.object({
comment: zod_1.z.string().min(1, { message: "Comment cannot be empty" }),
}),
}));
function makeCommentMessageRoute({ conversations, maxCommentLength, updateTrace, braintrustLogger, }) {
return async (req, res, next) => {
const reqId = (0, utils_1.getRequestId)(req);
try {
const { conversationId: conversationIdStr, messageId: messageIdStr } = req.params;
const { comment } = req.body;
let conversationId, messageId;
try {
conversationId = new mongodb_1.ObjectId(conversationIdStr);
}
catch (err) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Invalid conversation ID",
});
}
try {
messageId = new mongodb_1.ObjectId(messageIdStr);
}
catch (err) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Invalid message ID",
});
}
if (maxCommentLength && comment.length > maxCommentLength) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: `Comment must contain ${maxCommentLength} characters or fewer`,
});
}
const conversationInDb = await conversations.findById({
_id: conversationId,
});
if (!conversationInDb) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 404,
errorMessage: "Conversation not found",
});
}
const existingMessage = conversationInDb.messages.findLast((message) => message.id.equals(messageId));
if (existingMessage === undefined) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 404,
errorMessage: "Message not found",
});
}
if (existingMessage.role !== "assistant") {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Cannot comment on a non-assistant message",
});
}
if (existingMessage.rating === undefined) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Cannot comment on a message with no rating",
});
}
if (existingMessage.userComment !== undefined) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Cannot comment on a message that already has a comment",
});
}
try {
await conversations.commentMessage({
conversationId,
messageId,
comment,
});
res.sendStatus(204);
(0, utils_1.logRequest)({
reqId,
message: `Added a user comment to ${messageIdStr} in conversation ${conversationIdStr}: "${comment}"`,
});
const traceId = messageId.toHexString();
if (braintrustLogger) {
braintrustLogger.logFeedback({
id: traceId,
comment,
});
}
await (0, UpdateTraceFunc_1.updateTraceIfExists)({
updateTrace,
reqId,
conversations,
conversationId,
assistantResponseMessageId: messageId,
});
return;
}
catch (err) {
return (0, utils_1.sendErrorResponse)({
reqId,
res,
httpStatus: 400,
errorMessage: "Invalid comment",
});
}
}
catch (err) {
next(err);
}
};
}
exports.makeCommentMessageRoute = makeCommentMessageRoute;
//# sourceMappingURL=commentMessage.js.map