diff --git a/backend/apps/web/models/memories.py b/backend/apps/web/models/memories.py index 7b432a9ca..8382b3e52 100644 --- a/backend/apps/web/models/memories.py +++ b/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) diff --git a/backend/apps/web/routers/memories.py b/backend/apps/web/routers/memories.py index 17d6efd16..f20e02601 100644 --- a/backend/apps/web/routers/memories.py +++ b/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 ############################ diff --git a/src/lib/apis/memories/index.ts b/src/lib/apis/memories/index.ts index 8c2ee3635..6cbb89f14 100644 --- a/src/lib/apis/memories/index.ts +++ b/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; +}; diff --git a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte b/src/lib/components/chat/Settings/Personalization/ManageModal.svelte index 559c9b414..ab959c4d5 100644 --- a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte +++ b/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 - + 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