refac
This commit is contained in:
@@ -36,6 +36,8 @@ from open_webui.models.chats import Chats
|
||||
from open_webui.models.channels import Channels, ChannelMember, Channel
|
||||
from open_webui.models.messages import Messages, Message
|
||||
from open_webui.models.groups import Groups
|
||||
from open_webui.models.memories import Memories
|
||||
from open_webui.retrieval.vector.factory import VECTOR_DB_CLIENT
|
||||
from open_webui.utils.sanitize import sanitize_code
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -634,6 +636,79 @@ async def replace_memory_content(
|
||||
return json.dumps({"error": str(e)})
|
||||
|
||||
|
||||
async def delete_memory(
|
||||
memory_id: str,
|
||||
__request__: Request = None,
|
||||
__user__: dict = None,
|
||||
) -> str:
|
||||
"""
|
||||
Delete a memory by its ID.
|
||||
|
||||
:param memory_id: The ID of the memory to delete
|
||||
:return: Confirmation that the memory was deleted
|
||||
"""
|
||||
if __request__ is None:
|
||||
return json.dumps({"error": "Request context not available"})
|
||||
|
||||
try:
|
||||
user = UserModel(**__user__) if __user__ else None
|
||||
|
||||
result = Memories.delete_memory_by_id_and_user_id(memory_id, user.id)
|
||||
|
||||
if result:
|
||||
VECTOR_DB_CLIENT.delete(
|
||||
collection_name=f"user-memory-{user.id}", ids=[memory_id]
|
||||
)
|
||||
return json.dumps(
|
||||
{"status": "success", "message": f"Memory {memory_id} deleted"},
|
||||
ensure_ascii=False,
|
||||
)
|
||||
else:
|
||||
return json.dumps({"error": "Memory not found or access denied"})
|
||||
except Exception as e:
|
||||
log.exception(f"delete_memory error: {e}")
|
||||
return json.dumps({"error": str(e)})
|
||||
|
||||
|
||||
async def list_memories(
|
||||
__request__: Request = None,
|
||||
__user__: dict = None,
|
||||
) -> str:
|
||||
"""
|
||||
List all stored memories for the user.
|
||||
|
||||
:return: JSON list of all memories with id, content, and dates
|
||||
"""
|
||||
if __request__ is None:
|
||||
return json.dumps({"error": "Request context not available"})
|
||||
|
||||
try:
|
||||
user = UserModel(**__user__) if __user__ else None
|
||||
|
||||
memories = Memories.get_memories_by_user_id(user.id)
|
||||
|
||||
if memories:
|
||||
result = [
|
||||
{
|
||||
"id": m.id,
|
||||
"content": m.content,
|
||||
"created_at": time.strftime(
|
||||
"%Y-%m-%d %H:%M", time.localtime(m.created_at)
|
||||
),
|
||||
"updated_at": time.strftime(
|
||||
"%Y-%m-%d %H:%M", time.localtime(m.updated_at)
|
||||
),
|
||||
}
|
||||
for m in memories
|
||||
]
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
else:
|
||||
return json.dumps([])
|
||||
except Exception as e:
|
||||
log.exception(f"list_memories error: {e}")
|
||||
return json.dumps({"error": str(e)})
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# NOTES TOOLS
|
||||
# =============================================================================
|
||||
|
||||
@@ -60,6 +60,8 @@ from open_webui.tools.builtin import (
|
||||
search_memories,
|
||||
add_memory,
|
||||
replace_memory_content,
|
||||
delete_memory,
|
||||
list_memories,
|
||||
get_current_timestamp,
|
||||
calculate_timestamp,
|
||||
search_notes,
|
||||
@@ -471,7 +473,7 @@ def get_builtin_tools(
|
||||
|
||||
# Add memory tools if builtin category enabled AND enabled for this chat
|
||||
if is_builtin_tool_enabled("memory") and features.get("memory"):
|
||||
builtin_functions.extend([search_memories, add_memory, replace_memory_content])
|
||||
builtin_functions.extend([search_memories, add_memory, replace_memory_content, delete_memory, list_memories])
|
||||
|
||||
# Add web search tools if builtin category enabled AND enabled globally AND model has web_search capability
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user