Yuki Takei 1 год назад
Родитель
Сommit
e4a25bb1b6

+ 27 - 9
apps/app/src/features/openai/server/routes/index.ts

@@ -1,18 +1,36 @@
+import { ErrorV3 } from '@growi/core/dist/models';
 import express from 'express';
 
-import { postMessageHandlersFactory } from './message';
-import { rebuildVectorStoreHandlersFactory } from './rebuild-vector-store';
-import { createThreadHandlersFactory } from './thread';
+import type Crowi from '~/server/crowi';
+import type { ApiV3Response } from '~/server/routes/apiv3/interfaces/apiv3-response';
+
+import { isAiEnabled } from '../services';
 
 const router = express.Router();
 
-module.exports = (crowi) => {
-  router.post('/rebuild-vector-store', rebuildVectorStoreHandlersFactory(crowi));
 
-  // create thread
-  router.post('/thread', createThreadHandlersFactory(crowi));
-  // post message and return streaming with SSE
-  router.post('/message', postMessageHandlersFactory(crowi));
+export const factory = (crowi: Crowi): express.Router => {
+
+  // disable all routes if AI is not enabled
+  if (!isAiEnabled()) {
+    router.all('*', (req, res: ApiV3Response) => {
+      return res.apiv3Err(new ErrorV3('GROWI AI is not enabled'), 501);
+    });
+  }
+  // enabled
+  else {
+    import('./rebuild-vector-store').then(({ rebuildVectorStoreHandlersFactory }) => {
+      router.post('/rebuild-vector-store', rebuildVectorStoreHandlersFactory(crowi));
+    });
+
+    import('./thread').then(({ createThreadHandlersFactory }) => {
+      router.post('/thread', createThreadHandlersFactory(crowi));
+    });
+
+    import('./message').then(({ postMessageHandlersFactory }) => {
+      router.post('/message', postMessageHandlersFactory(crowi));
+    });
+  }
 
   return router;
 };

+ 2 - 2
apps/app/src/server/routes/apiv3/index.js

@@ -1,5 +1,5 @@
 import growiPlugin from '~/features/growi-plugin/server/routes/apiv3/admin';
-import openai from '~/features/openai/server/routes';
+import { factory as openaiRouteFactory } from '~/features/openai/server/routes';
 import loggerFactory from '~/utils/logger';
 
 import { generateAddActivityMiddleware } from '../../middlewares/add-activity';
@@ -120,7 +120,7 @@ module.exports = (crowi, app) => {
   router.use('/questionnaire', require('~/features/questionnaire/server/routes/apiv3/questionnaire')(crowi));
   router.use('/templates', require('~/features/templates/server/routes/apiv3')(crowi));
 
-  router.use('/openai', openai(crowi));
+  router.use('/openai', openaiRouteFactory(crowi));
 
   return [router, routerForAdmin, routerForAuth];
 };