engram / kvcos /storage /backends.py
eigengram's picture
feat: upload core kvcos library
0769ff3 verified
"""
ENGRAM Protocol — Abstract Storage Backend
All storage backends (local, redis, S3) implement this interface.
Phase 1 uses local disk only.
"""
from __future__ import annotations
from abc import ABC, abstractmethod
from pathlib import Path
from kvcos.core.types import CacheStats, EngramMetadata
class StorageBackend(ABC):
"""Abstract interface for engram storage backends.
All operations are synchronous in Phase 1.
"""
@abstractmethod
def store(self, cache_id: str, data: bytes, metadata: EngramMetadata) -> str:
"""Store a .eng file. Returns storage path/key."""
...
@abstractmethod
def store_file(self, cache_id: str, source_path: Path, metadata: EngramMetadata) -> str:
"""Store a .eng file from a local path (zero-copy when possible)."""
...
@abstractmethod
def get(self, cache_id: str) -> bytes | None:
"""Retrieve a .eng file as bytes. None if not found."""
...
@abstractmethod
def get_path(self, cache_id: str) -> Path | None:
"""Get local filesystem path for a cache entry. None if not found."""
...
@abstractmethod
def get_metadata(self, cache_id: str) -> EngramMetadata | None:
"""Read only metadata (header-only, no tensor data loaded)."""
...
@abstractmethod
def delete(self, cache_id: str) -> bool:
"""Delete a cache entry. Returns True if deleted."""
...
@abstractmethod
def list_entries(
self,
agent_id: str | None = None,
model_family: str | None = None,
limit: int = 100,
) -> list[EngramMetadata]:
"""List cache entries with optional filters."""
...
@abstractmethod
def exists(self, cache_id: str) -> bool:
"""Check if a cache entry exists."""
...
@abstractmethod
def stats(self) -> CacheStats:
"""Get aggregate statistics for the store."""
...