88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
|
|
const Joi = require('joi');
|
||
|
|
|
||
|
|
const validate = (schema) => {
|
||
|
|
return (req, res, next) => {
|
||
|
|
const { error } = schema.validate(req.body);
|
||
|
|
|
||
|
|
if (error) {
|
||
|
|
return res.status(400).json({
|
||
|
|
success: false,
|
||
|
|
error: error.details[0].message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
next();
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
// Validation schemas
|
||
|
|
const schemas = {
|
||
|
|
register: Joi.object({
|
||
|
|
email: Joi.string().email().required(),
|
||
|
|
password: Joi.string().min(6).required(),
|
||
|
|
firstName: Joi.string().min(2).required(),
|
||
|
|
lastName: Joi.string().min(2).required(),
|
||
|
|
role: Joi.string().valid('user', 'admin', 'expert').optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
login: Joi.object({
|
||
|
|
email: Joi.string().email().required(),
|
||
|
|
password: Joi.string().required()
|
||
|
|
}),
|
||
|
|
|
||
|
|
updateProfile: Joi.object({
|
||
|
|
firstName: Joi.string().min(2).optional(),
|
||
|
|
lastName: Joi.string().min(2).optional(),
|
||
|
|
preferences: Joi.object().optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
createConversation: Joi.object({
|
||
|
|
title: Joi.string().min(1).optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
sendMessage: Joi.object({
|
||
|
|
conversationId: Joi.string().uuid().required(),
|
||
|
|
content: Joi.string().min(1).required(),
|
||
|
|
messageType: Joi.string().valid('text', 'plan', 'execution', 'feedback').optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
submitFeedback: Joi.object({
|
||
|
|
messageId: Joi.string().uuid().optional(),
|
||
|
|
feedbackType: Joi.string().valid('positive', 'negative', 'correction', 'suggestion').required(),
|
||
|
|
rating: Joi.number().min(1).max(5).optional(),
|
||
|
|
comment: Joi.string().optional(),
|
||
|
|
correctedContent: Joi.string().optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
createModelVersion: Joi.object({
|
||
|
|
modelName: Joi.string().min(1).required(),
|
||
|
|
modelType: Joi.string().valid('MODEL1', 'QUERYMODEL').required(),
|
||
|
|
baseModel: Joi.string().min(1).required(),
|
||
|
|
fineTuningMethod: Joi.string().valid('SFT', 'DPO', 'PPO', 'LoRA', 'QLoRA').optional(),
|
||
|
|
hyperparameters: Joi.object().optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
executeTool: Joi.object({
|
||
|
|
planId: Joi.string().uuid().required(),
|
||
|
|
toolName: Joi.string().min(1).required(),
|
||
|
|
toolType: Joi.string().valid('query_expander', 'extraction', 'report1', 'report2', 'web_search', 'encyclopedia_pdf').required(),
|
||
|
|
inputParameters: Joi.object().required()
|
||
|
|
}),
|
||
|
|
|
||
|
|
generatePlan: Joi.object({
|
||
|
|
query: Joi.string().min(1).required(),
|
||
|
|
conversationId: Joi.string().uuid().optional(),
|
||
|
|
context: Joi.object().optional()
|
||
|
|
}),
|
||
|
|
|
||
|
|
executePlan: Joi.object({
|
||
|
|
planId: Joi.string().uuid().required(),
|
||
|
|
options: Joi.object().optional()
|
||
|
|
})
|
||
|
|
};
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
validate,
|
||
|
|
schemas
|
||
|
|
};
|