Просмотр исходного кода

Refactor AI assistant service to use OpenAI service for assistant creation

Shun Miyazawa 1 год назад
Родитель
Сommit
1d58f5d5fc

+ 5 - 3
apps/app/src/features/openai/server/routes/create-ai-assistant.ts

@@ -10,7 +10,7 @@ import type { ApiV3Response } from '~/server/routes/apiv3/interfaces/apiv3-respo
 import loggerFactory from '~/utils/logger';
 
 import { type AiAssistant, AiAssistantShareScope, AiAssistantOwnerAccessScope } from '../../interfaces/ai-assistant';
-import { aiAssistantService } from '../services/ai-assistant';
+import { getOpenaiService } from '../services/openai';
 
 import { certifyAiService } from './middlewares/certify-ai-service';
 
@@ -95,8 +95,10 @@ export const createAiAssistantFactory: CreateAssistantFactory = (crowi) => {
     async(req: Req, res: ApiV3Response) => {
       try {
         const aiAssistantData = { ...req.body, owner: req.user._id };
-        aiAssistantService.createAiAssistant(aiAssistantData);
-        return res.apiv3({});
+        const openaiService = getOpenaiService();
+        const aiAssistant = await openaiService?.createAiAssistant(aiAssistantData);
+
+        return res.apiv3({ aiAssistant });
 
       }
       catch (err) {

+ 0 - 18
apps/app/src/features/openai/server/services/ai-assistant.ts

@@ -1,18 +0,0 @@
-import { type AiAssistant } from '../../interfaces/ai-assistant';
-import AiAssistantModal, { type AiAssistantDocument } from '../models/ai-assistant';
-
-interface IAiAssisntantService {
-  createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument>;
-}
-
-class AiAssistantService implements IAiAssisntantService {
-
-  async createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument> {
-    const dumyVectorStoreId = '676e0d9863442b736e7ecf09';
-    const aiAssistant = await AiAssistantModal.create({ ...data, vectorStore: dumyVectorStoreId });
-    return aiAssistant;
-  }
-
-}
-
-export const aiAssistantService = new AiAssistantService();

+ 9 - 1
apps/app/src/features/openai/server/services/openai.ts

@@ -2,7 +2,6 @@ import assert from 'node:assert';
 import { Readable, Transform } from 'stream';
 import { pipeline } from 'stream/promises';
 
-import type { IPagePopulatedToShowRevision } from '@growi/core';
 import { PageGrant, isPopulated } from '@growi/core';
 import type { HydratedDocument, Types } from 'mongoose';
 import mongoose from 'mongoose';
@@ -21,6 +20,8 @@ import { createBatchStream } from '~/server/util/batch-stream';
 import loggerFactory from '~/utils/logger';
 
 import { OpenaiServiceTypes } from '../../interfaces/ai';
+import { type AiAssistant } from '../../interfaces/ai-assistant';
+import AiAssistantModel, { type AiAssistantDocument } from '../models/ai-assistant';
 import { convertMarkdownToHtml } from '../utils/convert-markdown-to-html';
 
 import { getClient } from './client-delegator';
@@ -46,6 +47,7 @@ export interface IOpenaiService {
   deleteObsoleteVectorStoreFile(limit: number, apiCallInterval: number): Promise<void>; // for CronJob
   rebuildVectorStoreAll(): Promise<void>;
   rebuildVectorStore(page: HydratedDocument<PageDocument>): Promise<void>;
+  createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument>;
 }
 class OpenaiService implements IOpenaiService {
 
@@ -356,6 +358,12 @@ class OpenaiService implements IOpenaiService {
     await this.createVectorStoreFile([page]);
   }
 
+  async createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument> {
+    const dumyVectorStoreId = '676e0d9863442b736e7ecf09';
+    const aiAssistant = await AiAssistantModel.create({ ...data, vectorStore: dumyVectorStoreId });
+    return aiAssistant;
+  }
+
 }
 
 let instance: OpenaiService;