UNPKG

@roadiehq/rag-ai-backend

Version:

74 lines (68 loc) 2.65 kB
'use strict'; 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