Merged PR 194: Refactor deletion logic in DeletionService to improve batch processing and er...
Refactor deletion logic in DeletionService to improve batch processing and error handling for vector store deletions
This commit is contained in:
@@ -7,6 +7,8 @@ import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ai.document.Document;
|
||||
import org.springframework.ai.vectorstore.SearchRequest;
|
||||
import org.springframework.ai.vectorstore.VectorStore;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
@@ -17,10 +19,8 @@ import com.olympus.apollo.exception.vectorStoreMetaDetailsEmptyException;
|
||||
import com.olympus.apollo.repository.KSDocumentRepository;
|
||||
import com.olympus.apollo.repository.KSGitInfoRepository;
|
||||
import com.olympus.apollo.repository.KSGitIngestionInfoRepository;
|
||||
import com.olympus.apollo.repository.KSIngestionInfoRepository;
|
||||
import com.olympus.apollo.repository.KSTextsRepository;
|
||||
import com.olympus.apollo.repository.KSVideoRepository;
|
||||
import com.olympus.apollo.repository.VectorStoreRepository;
|
||||
import com.olympus.dto.DeleteGitRepoDetailsRequest;
|
||||
import com.olympus.dto.DeletionRequest;
|
||||
import com.olympus.dto.ResultDTO;
|
||||
@@ -42,18 +42,12 @@ public class DeletionService {
|
||||
@Autowired
|
||||
private KSTextsRepository ksTextsRepository;
|
||||
|
||||
@Autowired
|
||||
private KSIngestionInfoRepository ksIngestionInfoRepository;
|
||||
|
||||
@Autowired
|
||||
private KSGitIngestionInfoRepository ksGitIngestionInfoRepository;
|
||||
|
||||
@Autowired
|
||||
private KSGitInfoRepository ksGitInfoRepository;
|
||||
|
||||
@Autowired
|
||||
private VectorStoreRepository vectorStoreRepository;
|
||||
|
||||
@Autowired
|
||||
private SimpMessagingTemplate simpMessagingTemplate;
|
||||
|
||||
@@ -79,26 +73,45 @@ public class DeletionService {
|
||||
@Async("asyncTaskExecutor")
|
||||
public void deleteRecordsOnlyFromVectorStore(DeletionRequest deletionRequest) {
|
||||
try {
|
||||
|
||||
KSDocument ksDocument = ksDocumentRepository.findById(deletionRequest.getKsDocumentId()).get();
|
||||
KSDocument ksDocument = ksDocumentRepository.findById(deletionRequest.getKsDocumentId()).orElseThrow();
|
||||
ksDocument.setIngestionStatus("DELETING");
|
||||
ksDocumentRepository.save(ksDocument);
|
||||
|
||||
String rag_filter = "KsDocumentId=='"+deletionRequest.getKsDocumentId()+"'";
|
||||
|
||||
logger.info("Starting deletion");
|
||||
vectorStore.delete(rag_filter);
|
||||
|
||||
//elimino dal vectorStore ma mantengo il record
|
||||
String rag_filter = "KsDocumentId=='" + deletionRequest.getKsDocumentId() + "'";
|
||||
|
||||
|
||||
SearchRequest searchRequest = SearchRequest.builder()
|
||||
.query(" ")
|
||||
.filterExpression(rag_filter)
|
||||
.topK(Integer.MAX_VALUE)
|
||||
.build();
|
||||
|
||||
List<String> idsToDelete = vectorStore.similaritySearch(searchRequest)
|
||||
.stream()
|
||||
.map(Document::getId)
|
||||
.toList();
|
||||
|
||||
logger.info("Found {} documents to delete for KsDocumentId: {}", idsToDelete.size(), deletionRequest.getKsDocumentId());
|
||||
|
||||
//Batch per eliminare i file con più richieste
|
||||
final int DELETE_BATCH_SIZE = 500;
|
||||
for (int i = 0; i < idsToDelete.size(); i += DELETE_BATCH_SIZE) {
|
||||
int end = Math.min(i + DELETE_BATCH_SIZE, idsToDelete.size());
|
||||
List<String> batch = idsToDelete.subList(i, end);
|
||||
logger.info("Deleting batch from {} to {}", i, end);
|
||||
vectorStore.delete(batch);
|
||||
}
|
||||
|
||||
ksDocument.setIngestionStatus("LOADED");
|
||||
Date now = new Date();
|
||||
ksDocument.setIngestionDate(now);
|
||||
|
||||
ksDocument.setIngestionDate(new Date());
|
||||
ksDocumentRepository.save(ksDocument);
|
||||
|
||||
logger.info("KSDocument with id {} deleted from VectorStore successfully.", deletionRequest.getKsDocumentId());
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("An error occurred while deleting records: ", e+" "+Thread.currentThread().getName());
|
||||
logger.error("An error occurred while deleting records: ", e);
|
||||
throw new RuntimeException("An error occurred while deleting records", e);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user