From 72577519930b5daeb2aae7aa2ee40c54c923b9cf Mon Sep 17 00:00:00 2001
From: Thuc Pham <51660321+thucpn@users.noreply.github.com>
Date: Fri, 1 Mar 2024 15:04:10 +0700
Subject: [PATCH] fix: empty store bugs (#592)

Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
---
 .changeset/healthy-penguins-pretend.md                    | 5 +++++
 packages/core/src/storage/docStore/KVDocumentStore.ts     | 8 ++++----
 packages/core/src/storage/kvStore/SimpleKVStore.ts        | 3 +++
 .../core/src/storage/vectorStore/SimpleVectorStore.ts     | 3 +++
 4 files changed, 15 insertions(+), 4 deletions(-)
 create mode 100644 .changeset/healthy-penguins-pretend.md

diff --git a/.changeset/healthy-penguins-pretend.md b/.changeset/healthy-penguins-pretend.md
new file mode 100644
index 000000000..531e2f8bc
--- /dev/null
+++ b/.changeset/healthy-penguins-pretend.md
@@ -0,0 +1,5 @@
+---
+"llamaindex": patch
+---
+
+fixed removeRefDocNode and persist store on delete
diff --git a/packages/core/src/storage/docStore/KVDocumentStore.ts b/packages/core/src/storage/docStore/KVDocumentStore.ts
index a14c1c5cd..c18d233c1 100644
--- a/packages/core/src/storage/docStore/KVDocumentStore.ts
+++ b/packages/core/src/storage/docStore/KVDocumentStore.ts
@@ -1,4 +1,4 @@
-import _, * as lodash from "lodash";
+import _ from "lodash";
 import type { BaseNode } from "../../Node.js";
 import { ObjectType } from "../../Node.js";
 import { DEFAULT_NAMESPACE } from "../constants.js";
@@ -123,10 +123,10 @@ export class KVDocumentStore extends BaseDocumentStore {
 
     const refDocInfo = await this.kvstore.get(refDocId, this.refDocCollection);
     if (!_.isNil(refDocInfo)) {
-      lodash.pull(refDocInfo.docIds, docId);
+      !_.pull(refDocInfo.nodeIds, docId);
 
-      if (refDocInfo.docIds.length > 0) {
-        this.kvstore.put(refDocId, refDocInfo.toDict(), this.refDocCollection);
+      if (refDocInfo.nodeIds.length > 0) {
+        this.kvstore.put(refDocId, refDocInfo, this.refDocCollection);
       }
       this.kvstore.delete(refDocId, this.metadataCollection);
     }
diff --git a/packages/core/src/storage/kvStore/SimpleKVStore.ts b/packages/core/src/storage/kvStore/SimpleKVStore.ts
index b0ba190d5..5af9d719a 100644
--- a/packages/core/src/storage/kvStore/SimpleKVStore.ts
+++ b/packages/core/src/storage/kvStore/SimpleKVStore.ts
@@ -54,6 +54,9 @@ export class SimpleKVStore extends BaseKVStore {
   ): Promise<boolean> {
     if (key in this.data[collection]) {
       delete this.data[collection][key];
+      if (this.persistPath) {
+        await this.persist(this.persistPath, this.fs);
+      }
       return true;
     }
     return false;
diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
index 355838b2b..6caa439f4 100644
--- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
@@ -82,6 +82,9 @@ export class SimpleVectorStore implements VectorStore {
       delete this.data.embeddingDict[textId];
       delete this.data.textIdToRefDocId[textId];
     }
+    if (this.persistPath) {
+      await this.persist(this.persistPath, this.fs);
+    }
     return Promise.resolve();
   }
 
-- 
GitLab