2025-01-29 10:19:28 +05:30
|
|
|
from abc import ABC, abstractmethod
|
2025-04-20 16:34:29 -07:00
|
|
|
from typing import Any, Dict, List
|
|
|
|
|
2025-01-29 10:19:28 +05:30
|
|
|
from core.models.completion import CompletionResponse
|
|
|
|
from core.models.documents import Document
|
|
|
|
|
|
|
|
|
|
|
|
class BaseCache(ABC):
|
|
|
|
"""Base class for cache implementations.
|
|
|
|
|
|
|
|
This class defines the interface for cache implementations that support
|
|
|
|
document ingestion and cache-augmented querying.
|
|
|
|
"""
|
|
|
|
|
2025-04-20 16:34:29 -07:00
|
|
|
def __init__(self, name: str, model: str, gguf_file: str, filters: Dict[str, Any], docs: List[Document]):
|
2025-01-29 10:19:28 +05:30
|
|
|
"""Initialize the cache with the given parameters.
|
|
|
|
|
|
|
|
Args:
|
|
|
|
name: Name of the cache instance
|
|
|
|
model: Model identifier
|
|
|
|
gguf_file: Path to the GGUF model file
|
|
|
|
filters: Filters used to create the cache context
|
|
|
|
docs: Initial documents to ingest into the cache
|
|
|
|
"""
|
|
|
|
self.name = name
|
|
|
|
self.filters = filters
|
|
|
|
self.docs = [] # List of document IDs that have been ingested
|
|
|
|
self._initialize(model, gguf_file, docs)
|
|
|
|
|
|
|
|
@abstractmethod
|
|
|
|
def _initialize(self, model: str, gguf_file: str, docs: List[Document]) -> None:
|
|
|
|
"""Internal initialization method to be implemented by subclasses."""
|
|
|
|
pass
|
|
|
|
|
|
|
|
@abstractmethod
|
|
|
|
async def add_docs(self, docs: List[Document]) -> bool:
|
|
|
|
"""Add documents to the cache.
|
|
|
|
|
|
|
|
Args:
|
|
|
|
docs: List of documents to add to the cache
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
bool: True if documents were successfully added
|
|
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
|
|
@abstractmethod
|
|
|
|
async def query(self, query: str) -> CompletionResponse:
|
|
|
|
"""Query the cache for relevant documents and generate a response.
|
|
|
|
|
|
|
|
Args:
|
|
|
|
query: Query string to search for relevant documents
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
CompletionResponse: Generated response based on cached context
|
|
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
|
|
@property
|
|
|
|
@abstractmethod
|
|
|
|
def saveable_state(self) -> bytes:
|
|
|
|
"""Get the saveable state of the cache as bytes.
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
bytes: Serialized state that can be used to restore the cache
|
|
|
|
"""
|
|
|
|
pass
|