@roadiehq/rag-ai-backend
Version:
74 lines (68 loc) • 2.65 kB
JavaScript
;
var backendCommon = require('@backstage/backend-common');
var express = require('express');
var Router = require('express-promise-router');
var LlmService = require('./LlmService.cjs.js');
var RagAiController = require('./RagAiController.cjs.js');
var lodash = require('lodash');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
const sourceValidator = (supportedSources) => (req, res, next) => {
const source = req.params.source;
if (!supportedSources.includes(source) && source !== "all") {
return res.status(422).json({
message: `Only ${supportedSources.join(
", "
)} are supported as AI assistant query sources for now.`
});
}
return next();
};
const queryQueryValidator = (req, res, next) => {
const query = req.query.query;
if (!query || typeof query !== "string" || lodash.isEmpty(query)) {
return res.status(422).json({
message: "You should pass in the query via query params"
});
}
return next();
};
const bodyQueryValidator = (req, res, next) => {
const query = req.body.query;
if (!query || typeof query !== "string" || lodash.isEmpty(query)) {
return res.status(422).json({
message: "You should pass in the query via request body"
});
}
return next();
};
async function createRouter(options) {
const { logger, augmentationIndexer, retrievalPipeline, model, config } = options;
const aiBackendConfig = config.getOptional("ai");
const supportedSources = aiBackendConfig?.supportedSources ?? ["catalog"];
const llmService = new LlmService.LlmService({
logger,
model,
configuredPrompts: aiBackendConfig?.prompts
});
const controller = RagAiController.RagAiController.getInstance({
logger,
augmentationIndexer,
retrievalPipeline,
llmService
});
const router = Router__default.default();
router.use(express__default.default.json());
const sourceValidatorMiddleware = sourceValidator(supportedSources);
router.route("/embeddings/:source").post(sourceValidatorMiddleware, controller.createEmbeddings).delete(sourceValidatorMiddleware, controller.deleteEmbeddings).get(
sourceValidatorMiddleware,
queryQueryValidator,
controller.getEmbeddings
);
router.route("/query/:source").post(sourceValidatorMiddleware, bodyQueryValidator, controller.query);
router.use(backendCommon.errorHandler());
return router;
}
exports.createRouter = createRouter;
//# sourceMappingURL=router.cjs.js.map