|
from pydantic import BaseModel |
|
from peewee import * |
|
from playhouse.shortcuts import model_to_dict |
|
from typing import List, Union, Optional |
|
|
|
from apps.webui.internal.db import DB |
|
from apps.webui.models.chats import Chats |
|
|
|
import time |
|
import uuid |
|
|
|
|
|
|
|
|
|
|
|
|
|
class Memory(Model): |
|
id = CharField(unique=True) |
|
user_id = CharField() |
|
content = TextField() |
|
updated_at = BigIntegerField() |
|
created_at = BigIntegerField() |
|
|
|
class Meta: |
|
database = DB |
|
|
|
|
|
class MemoryModel(BaseModel): |
|
id: str |
|
user_id: str |
|
content: str |
|
updated_at: int |
|
created_at: int |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MemoriesTable: |
|
def __init__(self, db): |
|
self.db = db |
|
self.db.create_tables([Memory]) |
|
|
|
def insert_new_memory( |
|
self, |
|
user_id: str, |
|
content: str, |
|
) -> Optional[MemoryModel]: |
|
id = str(uuid.uuid4()) |
|
|
|
memory = MemoryModel( |
|
**{ |
|
"id": id, |
|
"user_id": user_id, |
|
"content": content, |
|
"created_at": int(time.time()), |
|
"updated_at": int(time.time()), |
|
} |
|
) |
|
result = Memory.create(**memory.model_dump()) |
|
if result: |
|
return memory |
|
else: |
|
return None |
|
|
|
def get_memories(self) -> List[MemoryModel]: |
|
try: |
|
memories = Memory.select() |
|
return [MemoryModel(**model_to_dict(memory)) for memory in memories] |
|
except: |
|
return None |
|
|
|
def get_memories_by_user_id(self, user_id: str) -> List[MemoryModel]: |
|
try: |
|
memories = Memory.select().where(Memory.user_id == user_id) |
|
return [MemoryModel(**model_to_dict(memory)) for memory in memories] |
|
except: |
|
return None |
|
|
|
def get_memory_by_id(self, id) -> Optional[MemoryModel]: |
|
try: |
|
memory = Memory.get(Memory.id == id) |
|
return MemoryModel(**model_to_dict(memory)) |
|
except: |
|
return None |
|
|
|
def delete_memory_by_id(self, id: str) -> bool: |
|
try: |
|
query = Memory.delete().where(Memory.id == id) |
|
query.execute() |
|
|
|
return True |
|
|
|
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) |
|
query.execute() |
|
|
|
return True |
|
except: |
|
return False |
|
|
|
|
|
Memories = MemoriesTable(DB) |
|
|