engram / kvcos /api /schemas.py
eigengram's picture
feat: upload core kvcos library
0769ff3 verified
"""
ENGRAM Protocol β€” API Schemas
Pydantic models for all REST API request/response payloads.
"""
from __future__ import annotations
from pydantic import BaseModel, Field
# ── Store ─────────────────────────────────────────────────────────────────────
class StoreRequest(BaseModel):
agent_id: str
task_description: str
model_id: str
compression: str = "q8_0"
class StoreResponse(BaseModel):
cache_id: str
size_bytes: int
compression_ratio: float
path: str
# ── Retrieve ──────────────────────────────────────────────────────────────────
class SearchRequest(BaseModel):
task_description: str
model_id: str | None = None
top_k: int = Field(default=5, ge=1, le=100)
min_similarity: float | None = None
class SearchResultItem(BaseModel):
cache_id: str
similarity: float
task_description: str
model_id: str
created_at: str
context_len: int
class SearchResponse(BaseModel):
results: list[SearchResultItem]
n_searched: int
# ── Extend ────────────────────────────────────────────────────────────────────
class ExtendResponse(BaseModel):
cache_id: str
new_context_len: int
# ── Delete ────────────────────────────────────────────────────────────────────
class DeleteResponse(BaseModel):
deleted: bool
cache_id: str
# ── Stats ─────────────────────────────────────────────────────────────────────
class StatsResponse(BaseModel):
total_entries: int
total_size_bytes: int
total_size_mb: float
avg_compression_ratio: float
model_breakdown: dict[str, int]
# ── Health ────────────────────────────────────────────────────────────────────
class HealthResponse(BaseModel):
status: str = "ok"
version: str
index_entries: int
storage_backend: str