UNPKG

mongodb-chatbot-server

Version:

A chatbot server for retrieval augmented generation (RAG).

119 lines 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeRateMessageRoute = exports.RateMessageRequest = 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.RateMessageRequest = 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({ rating: zod_1.z.boolean(), }), })); function makeRateMessageRoute({ conversations, updateTrace, braintrustLogger, }) { return async (req, res, next) => { const reqId = (0, utils_1.getRequestId)(req); try { const { conversationId: conversationIdStr, messageId: messageIdStr } = req.params; const { rating } = 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", }); } let conversationInDb; try { conversationInDb = await conversations.findById({ _id: conversationId, }); if (!conversationInDb) { throw new Error("Conversation not found"); } } catch (err) { return (0, utils_1.sendErrorResponse)({ reqId, res, httpStatus: 404, errorMessage: "Conversation not found", }); } if (!conversationInDb.messages.find((message) => message.id.equals(messageId))) { return (0, utils_1.sendErrorResponse)({ reqId, res, httpStatus: 404, errorMessage: "Message not found", }); } const successfulOperation = await conversations.rateMessage({ conversationId: conversationId, messageId: messageId, rating, }); if (successfulOperation) { res.sendStatus(204); (0, utils_1.logRequest)({ reqId, message: `Rated message ${messageIdStr} in conversation ${conversationIdStr} with rating ${rating}`, }); const traceId = messageId.toHexString(); if (braintrustLogger) { braintrustLogger.logFeedback({ id: traceId, scores: { UserRating: rating === true ? 1 : 0, }, }); } await (0, UpdateTraceFunc_1.updateTraceIfExists)({ updateTrace, reqId, conversations, conversationId, assistantResponseMessageId: messageId, }); return; } else { return (0, utils_1.sendErrorResponse)({ reqId, res, httpStatus: 400, errorMessage: "Invalid rating", }); } } catch (err) { next(err); } }; } exports.makeRateMessageRoute = makeRateMessageRoute; //# sourceMappingURL=rateMessage.js.map