Jelajahi Sumber

Implement logic to delete an existing VectorStoreFile

Shun Miyazawa 1 tahun lalu
induk
melakukan
93209ca90c

+ 16 - 0
apps/app/src/server/routes/apiv3/ai-integration/rebuild-vector-store.ts

@@ -3,6 +3,8 @@ import type { ValidationChain } from 'express-validator';
 
 
 import type Crowi from '~/server/crowi';
 import type Crowi from '~/server/crowi';
 import { certifyAiService } from '~/server/middlewares/certify-ai-service';
 import { certifyAiService } from '~/server/middlewares/certify-ai-service';
+import { configManager } from '~/server/service/config-manager';
+import OpenaiClient from '~/server/service/openai-client-delegator';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import { apiV3FormValidator } from '../../../middlewares/apiv3-form-validator';
 import { apiV3FormValidator } from '../../../middlewares/apiv3-form-validator';
@@ -24,6 +26,20 @@ export const rebuildVectorStoreHandlersFactory: RebuildVectorStoreFactory = (cro
   return [
   return [
     accessTokenParser, loginRequiredStrictly, adminRequired, certifyAiService, validator, apiV3FormValidator,
     accessTokenParser, loginRequiredStrictly, adminRequired, certifyAiService, validator, apiV3FormValidator,
     async(req: Request, res: ApiV3Response) => {
     async(req: Request, res: ApiV3Response) => {
+
+      const vectorStoreId = configManager.getConfig('crowi', 'app:openaiVectorStoreId');
+
+      const client = new OpenaiClient();
+
+      // Delete an existing VectorStoreFile
+      const vectorStoreFileData = await client.getVectorStoreFiles(vectorStoreId);
+      const vectorStoreFiles = vectorStoreFileData?.data;
+      if (vectorStoreFiles != null && vectorStoreFiles.length > 0) {
+        vectorStoreFiles.forEach(async(vectorStoreFile) => {
+          await client.deleteVectorStoreFiles(vectorStoreId, vectorStoreFile.id);
+        });
+      }
+
       return res.apiv3({});
       return res.apiv3({});
     },
     },
   ];
   ];

+ 12 - 0
apps/app/src/server/service/openai-client-delegator.ts

@@ -22,4 +22,16 @@ export default class OpenaiClient {
     this.client = new OpenAI({ apiKey: configManager?.getConfig('crowi', 'app:openaiApiKey') });
     this.client = new OpenAI({ apiKey: configManager?.getConfig('crowi', 'app:openaiApiKey') });
   }
   }
 
 
+  async getVectorStoreFiles(vectorStoreId: string): Promise<OpenAI.Beta.VectorStores.Files.VectorStoreFilesPage | null> {
+    return this.isOpenai
+      ? this.client.beta.vectorStores.files.list(vectorStoreId)
+      : null;
+  }
+
+  async deleteVectorStoreFiles(vectorStoreId: string, fileId: string): Promise<OpenAI.Beta.VectorStores.Files.VectorStoreFileDeleted | null> {
+    return this.isOpenai
+      ? this.client.beta.vectorStores.files.del(vectorStoreId, fileId)
+      : null;
+  }
+
 }
 }