Przeglądaj źródła

[Feature] add `app.delete()` method (#1187)

Co-authored-by: Deven Patel <deven298@yahoo.com>
Deven Patel 1 rok temu
rodzic
commit
b7d365119c

+ 31 - 2
docs/api-reference/app/delete.mdx

@@ -2,9 +2,33 @@
 title: 🗑 delete
 ---
 
+## Delete Document
+
+`delete()` method allows you to delete a document previously added to the app.
+
+### Usage
+
+```python
+from embedchain import App
+
+app = App()
+
+forbes_doc_id = app.add("https://www.forbes.com/profile/elon-musk")
+wiki_doc_id = app.add("https://en.wikipedia.org/wiki/Elon_Musk")
+
+app.delete(forbes_doc_id)   # deletes the forbes document
+```
+
+<Note>
+    If you do not have the document id, you can use `app.db.get()` method to get the document and extract the `hash` key from `metadatas` dictionary object, which serves as the document id.
+</Note>
+
+
+## Delete Chat Session History
+
 `delete_session_chat_history()` method allows you to delete all previous messages in a chat history.
 
-## Usage
+### Usage
 
 ```python
 from embedchain import App
@@ -16,4 +40,9 @@ app.add("https://www.forbes.com/profile/elon-musk")
 app.chat("What is the net worth of Elon Musk?")
 
 app.delete_session_chat_history()
-```
+```
+
+<Note>
+    `delete_session_chat_history(session_id="session_1")` method also accepts `session_id` optional param for deleting chat history of a specific session.
+    It assumes the default session if no `session_id` is provided.
+</Note>

+ 12 - 0
embedchain/embedchain.py

@@ -674,3 +674,15 @@ class EmbedChain(JSONSerializable):
     def delete_all_chat_history(self, app_id: str):
         self.llm.memory.delete(app_id=app_id)
         self.llm.update_history(app_id=app_id)
+
+    def delete(self, source_id: str):
+        """
+        Deletes the data from the database.
+        :param source_hash: The hash of the source.
+        :type source_hash: str
+        """
+        self.db.delete(where={"hash": source_id})
+        logging.info(f"Successfully deleted {source_id}")
+        # Send anonymous telemetry
+        if self.config.collect_metrics:
+            self.telemetry.capture(event_name="delete", properties=self._telemetry_props)

+ 5 - 0
embedchain/vectordb/base.py

@@ -75,3 +75,8 @@ class BaseVectorDB(JSONSerializable):
         :type name: str
         """
         raise NotImplementedError
+
+    def delete(self):
+        """Delete from database."""
+
+        raise NotImplementedError