UNPKG

mongodb-chatbot-server

Version:

A chatbot server for retrieval augmented generation (RAG).

144 lines 5.5 kB
"use strict"; 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