class Store(ABC, Generic[TContext]):
def generate_thread_id(self, context: TContext) -> str:
"""Return a new identifier for a thread. Override this method to customize thread ID generation."""
return default_generate_id("thread")
def generate_item_id(
self, item_type: StoreItemType, thread: ThreadMetadata, context: TContext
) -> str:
"""Return a new identifier for a thread item. Override this method to customize item ID generation."""
return default_generate_id(item_type)
@abstractmethod
async def load_thread(self, thread_id: str, context: TContext) -> ThreadMetadata:
pass
@abstractmethod
async def save_thread(self, thread: ThreadMetadata, context: TContext) -> None:
pass
@abstractmethod
async def load_thread_items(
self,
thread_id: str,
after: str | None,
limit: int,
order: str,
context: TContext,
) -> Page[ThreadItem]:
pass
@abstractmethod
async def save_attachment(self, attachment: Attachment, context: TContext) -> None:
pass
@abstractmethod
async def load_attachment(
self, attachment_id: str, context: TContext
) -> Attachment:
pass
@abstractmethod
async def delete_attachment(self, attachment_id: str, context: TContext) -> None:
pass
@abstractmethod
async def load_threads(
self,
limit: int,
after: str | None,
order: str,
context: TContext,
) -> Page[ThreadMetadata]:
pass
@abstractmethod
async def add_thread_item(
self, thread_id: str, item: ThreadItem, context: TContext
) -> None:
pass
@abstractmethod
async def save_item(
self, thread_id: str, item: ThreadItem, context: TContext
) -> None:
pass
@abstractmethod
async def load_item(
self, thread_id: str, item_id: str, context: TContext
) -> ThreadItem:
pass
@abstractmethod
async def delete_thread(self, thread_id: str, context: TContext) -> None:
pass
@abstractmethod
async def delete_thread_item(
self, thread_id: str, item_id: str, context: TContext
) -> None:
pass