|
@@ -372,13 +372,21 @@ class EmbedChain:
|
|
|
def reset(self):
|
|
|
"""
|
|
|
Resets the database. Deletes all embeddings irreversibly.
|
|
|
- `App` has to be reinitialized after using this method.
|
|
|
+ `App` does not have to be reinitialized after using this method.
|
|
|
"""
|
|
|
# Send anonymous telemetry
|
|
|
thread_telemetry = threading.Thread(target=self._send_telemetry_event, args=("reset",))
|
|
|
thread_telemetry.start()
|
|
|
-
|
|
|
+
|
|
|
+ collection_name = self.collection.name
|
|
|
self.db.reset()
|
|
|
+ self.collection = self.config.db._get_or_create_collection(collection_name)
|
|
|
+ # Todo: Automatically recreating a collection with the same name cannot be the best way to handle a reset.
|
|
|
+ # A downside of this implementation is, if you have two instances,
|
|
|
+ # the other instance will not get the updated `self.collection` attribute.
|
|
|
+ # A better way would be to create the collection if it is called again after being reset.
|
|
|
+ # That means, checking if collection exists in the db-consuming methods, and creating it if it doesn't.
|
|
|
+ # That's an extra steps for all uses, just to satisfy a niche use case in a niche method. For now, this will do.
|
|
|
|
|
|
@retry(stop=stop_after_attempt(3), wait=wait_fixed(1))
|
|
|
def _send_telemetry_event(self, method: str, extra_metadata: Optional[dict] = None):
|
|
@@ -397,4 +405,4 @@ class EmbedChain:
|
|
|
metadata.update(extra_metadata)
|
|
|
|
|
|
response = requests.post(url, json={"metadata": metadata})
|
|
|
- response.raise_for_status()
|
|
|
+ response.raise_for_status()
|