memories.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from pydantic import BaseModel, ConfigDict
  2. from typing import List, Union, Optional
  3. from sqlalchemy import Column, String, BigInteger, Text
  4. from apps.webui.internal.db import Base, Session
  5. import time
  6. import uuid
  7. ####################
  8. # Memory DB Schema
  9. ####################
  10. class Memory(Base):
  11. __tablename__ = "memory"
  12. id = Column(String, primary_key=True)
  13. user_id = Column(String)
  14. content = Column(Text)
  15. updated_at = Column(BigInteger)
  16. created_at = Column(BigInteger)
  17. class MemoryModel(BaseModel):
  18. id: str
  19. user_id: str
  20. content: str
  21. updated_at: int # timestamp in epoch
  22. created_at: int # timestamp in epoch
  23. model_config = ConfigDict(from_attributes=True)
  24. ####################
  25. # Forms
  26. ####################
  27. class MemoriesTable:
  28. def insert_new_memory(
  29. self,
  30. user_id: str,
  31. content: str,
  32. ) -> Optional[MemoryModel]:
  33. id = str(uuid.uuid4())
  34. memory = MemoryModel(
  35. **{
  36. "id": id,
  37. "user_id": user_id,
  38. "content": content,
  39. "created_at": int(time.time()),
  40. "updated_at": int(time.time()),
  41. }
  42. )
  43. result = Memory(**memory.model_dump())
  44. Session.add(result)
  45. Session.commit()
  46. Session.refresh(result)
  47. if result:
  48. return MemoryModel.model_validate(result)
  49. else:
  50. return None
  51. def update_memory_by_id(
  52. self,
  53. id: str,
  54. content: str,
  55. ) -> Optional[MemoryModel]:
  56. try:
  57. Session.query(Memory).filter_by(id=id).update(
  58. {"content": content, "updated_at": int(time.time())}
  59. )
  60. Session.commit()
  61. return self.get_memory_by_id(id)
  62. except:
  63. return None
  64. def get_memories(self) -> List[MemoryModel]:
  65. try:
  66. memories = Session.query(Memory).all()
  67. return [MemoryModel.model_validate(memory) for memory in memories]
  68. except:
  69. return None
  70. def get_memories_by_user_id(self, user_id: str) -> List[MemoryModel]:
  71. try:
  72. memories = Session.query(Memory).filter_by(user_id=user_id).all()
  73. return [MemoryModel.model_validate(memory) for memory in memories]
  74. except:
  75. return None
  76. def get_memory_by_id(self, id: str) -> Optional[MemoryModel]:
  77. try:
  78. memory = Session.get(Memory, id)
  79. return MemoryModel.model_validate(memory)
  80. except:
  81. return None
  82. def delete_memory_by_id(self, id: str) -> bool:
  83. try:
  84. Session.query(Memory).filter_by(id=id).delete()
  85. return True
  86. except:
  87. return False
  88. def delete_memories_by_user_id(self, user_id: str) -> bool:
  89. try:
  90. Session.query(Memory).filter_by(user_id=user_id).delete()
  91. return True
  92. except:
  93. return False
  94. def delete_memory_by_id_and_user_id(self, id: str, user_id: str) -> bool:
  95. try:
  96. Session.query(Memory).filter_by(id=id, user_id=user_id).delete()
  97. return True
  98. except:
  99. return False
  100. Memories = MemoriesTable()