Browse Source

Impl deleteObsoleteVectorStoreFile()

Shun Miyazawa 1 year ago
parent
commit
4f0d1f7549

+ 13 - 2
apps/app/src/features/openai/server/services/openai.ts

@@ -230,7 +230,7 @@ class OpenaiService implements IOpenaiService {
 
   }
 
-  async deleteVectorStoreFile(vectorStoreRelationId: Types.ObjectId, pageId: Types.ObjectId): Promise<void> {
+  async deleteVectorStoreFile(vectorStoreRelationId: Types.ObjectId, pageId: Types.ObjectId, apiCallInterval?: number): Promise<void> {
     // Delete vector store file and delete vector store file relation
     const vectorStoreFileRelation = await VectorStoreFileRelationModel.findOne({ vectorStoreRelationId, pageId });
     if (vectorStoreFileRelation == null) {
@@ -243,6 +243,10 @@ class OpenaiService implements IOpenaiService {
         const deleteFileResponse = await this.client.deleteFile(fileId);
         logger.debug('Delete vector store file', deleteFileResponse);
         deletedFileIds.push(fileId);
+        if (apiCallInterval != null) {
+          // sleep
+          await new Promise(resolve => setTimeout(resolve, apiCallInterval));
+        }
       }
       catch (err) {
         logger.error(err);
@@ -271,7 +275,14 @@ class OpenaiService implements IOpenaiService {
       { vectorStoreRelationId: { $in: deletedVectorStores.map(vectorStore => vectorStore._id) } },
     ).limit(limit);
 
-
+    for await (const vectorStoreFile of obsoleteVectorStoreFiles) {
+      try {
+        await this.deleteVectorStoreFile(vectorStoreFile.vectorStoreRelationId, vectorStoreFile.pageId, apiCallInterval);
+      }
+      catch (err) {
+        logger.error(err);
+      }
+    }
   }
 
   async rebuildVectorStoreAll() {

+ 1 - 1
apps/app/src/features/openai/server/services/vector-store-file-deletion-cron.ts

@@ -41,7 +41,7 @@ class VectorStoreFileDeletionCronService {
   }
 
   private async executeJob(): Promise<void> {
-    // TODO: Impl
+    await this.openaiService.deleteObsoleteVectorStoreFile(this.vectorStoreFileDeletionBarchSize, this.vectorStoreFileDeletionApiCallInterval);
   }
 
   private generateCronJob() {