mongodb-chatbot-server
Version:
A chatbot server for retrieval augmented generation (RAG).
119 lines • 4.35 kB
JavaScript
;
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