瀏覽代碼

feat: clear memory

Timothy J. Baek 1 年之前
父節點
當前提交
6139d775ef

+ 9 - 0
backend/apps/web/models/memories.py

@@ -96,6 +96,15 @@ class MemoriesTable:
         except:
             return False
 
+    def delete_memories_by_user_id(self, user_id: str) -> bool:
+        try:
+            query = Memory.delete().where(Memory.user_id == user_id)
+            query.execute()
+
+            return True
+        except:
+            return False
+
     def delete_memory_by_id_and_user_id(self, id: str, user_id: str) -> bool:
         try:
             query = Memory.delete().where(Memory.id == id, Memory.user_id == user_id)

+ 20 - 1
backend/apps/web/routers/memories.py

@@ -108,7 +108,26 @@ async def reset_memory_from_vector_db(
 
 
 ############################
-# DeleteUserById
+# DeleteMemoriesByUserId
+############################
+
+
+@router.delete("/user", response_model=bool)
+async def delete_memory_by_user_id(user=Depends(get_verified_user)):
+    result = Memories.delete_memories_by_user_id(user.id)
+
+    if result:
+        try:
+            CHROMA_CLIENT.delete_collection(f"user-memory-{user.id}")
+        except Exception as e:
+            log.error(e)
+        return True
+
+    return False
+
+
+############################
+# DeleteMemoryById
 ############################
 
 

+ 32 - 0
src/lib/apis/memories/index.ts

@@ -121,3 +121,35 @@ export const deleteMemoryById = async (token: string, id: string) => {
 
 	return res;
 };
+
+export const deleteMemoriesByUserId = async (token: string) => {
+	let error = null;
+
+	const res = await fetch(`${WEBUI_API_BASE_URL}/memories/user`, {
+		method: 'DELETE',
+		headers: {
+			Accept: 'application/json',
+			'Content-Type': 'application/json',
+			authorization: `Bearer ${token}`
+		}
+	})
+		.then(async (res) => {
+			if (!res.ok) throw await res.json();
+			return res.json();
+		})
+		.then((json) => {
+			return json;
+		})
+		.catch((err) => {
+			error = err.detail;
+
+			console.log(err);
+			return null;
+		});
+
+	if (error) {
+		throw error;
+	}
+
+	return res;
+};

+ 14 - 4
src/lib/components/chat/Settings/Personalization/ManageModal.svelte

@@ -7,7 +7,7 @@
 
 	import Modal from '$lib/components/common/Modal.svelte';
 	import AddMemoryModal from './AddMemoryModal.svelte';
-	import { deleteMemoryById, getMemories } from '$lib/apis/memories';
+	import { deleteMemoriesByUserId, deleteMemoryById, getMemories } from '$lib/apis/memories';
 	import Tooltip from '$lib/components/common/Tooltip.svelte';
 	import { error } from '@sveltejs/kit';
 
@@ -134,10 +134,20 @@
 						showAddMemoryModal = true;
 					}}>Add memory</button
 				>
-				<!-- <button
+				<button
 					class=" px-3.5 py-1.5 font-medium text-red-500 hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-red-300 dark:outline-red-800 rounded-3xl"
-					>Clear memory</button
-				> -->
+					on:click={async () => {
+						const res = await deleteMemoriesByUserId(localStorage.token).catch((error) => {
+							toast.error(error);
+							return null;
+						});
+
+						if (res) {
+							toast.success('Memory cleared successfully');
+							memories = [];
+						}
+					}}>Clear memory</button
+				>
 			</div>
 		</div>
 	</div>