TL;DR — You will implement a hierarchical sliding‑window context manager that combines semantic eviction with a priority‑based KV cache. The code is production‑ready, fully tested, and demonstrates concrete systems expertise for your portfolio.
In this post we’ll walk through the design and implementation of a small but powerful Python library that models how modern LLM serving systems manage context. By the end you’ll have a working example you can drop into a résumé or GitHub repo.
Why This Project Stands Out on a CV
- Systems design depth – you’ll build a custom cache, eviction policy, and context manager, showing you can design data structures that balance latency, memory, and correctness.
- Real‑world relevance – the pattern mirrors the KV‑cache management used in frameworks like vLLM and TensorRT‑LLM, so the project speaks the language of production inference engines.
- Priority and semantics – implementing priority‑based eviction and semantic similarity scoring demonstrates an understanding of workload‑aware resource allocation, a key skill for senior backend roles.
- Testing and observability – the guide includes pytest suites and hooks for metrics, proving you care about reliability and debuggability.
- Extensibility roadmap – we outline concrete upgrades (persistence, horizontal scaling, fault tolerance) that signal you think beyond a toy prototype.
Architecture Overview
The system is composed of four layers:
- SlidingWindow – a fixed‑size, FIFO buffer that tracks the most recent tokens or items.
- SemanticEvictionPolicy – a policy that can evict entries based on similarity scores (e.g., cosine distance) when the window is full.
- PriorityKVCache – a key‑value store where each entry carries a priority weight; evictions first target low‑priority items.
- HierarchicalContextManager – a
contextlib.ContextManagerthat ties the above together, exposingpush,pop, andevictmethods, and automatically applies the eviction policy when the window overflows.
+---------------------+ +---------------------+
| SlidingWindow | | SemanticEviction |
| (FIFO buffer) | | Policy |
+----------+----------+ +----------+----------+
| |
v v
+-----------------------------------------+
| PriorityKVCache |
| (key -> {value, priority, score}) |
+-----------------------------------------+
|
v
+-----------------------------------------+
| HierarchicalContextManager |
| (context manager, push/pop/evict) |
+-----------------------------------------+
Building It Step by Step
Step 1 – Define Core Data Structures
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
import time
@dataclass
class CacheEntry:
key: str
value: Any
priority: float
timestamp: float = field(default_factory=time.time)
semantic_score: float = 0.0
Step 2 – Implement the Sliding Window
class SlidingWindow:
def __init__(self, max_size: int):
self.max_size = max_size
self._items: List[str] = []
def push(self, key: str) -> None:
self._items.append(key)
if len(self._items) > self.max_size:
self._items.pop(0)
def __contains__(self, key: str) -> bool:
return key in self._items
def __len__(self) -> int:
return len(self._items)
Step 3 – Add Semantic Eviction Policy
import numpy as np
class SemanticEvictionPolicy:
def __init__(self, similarity_threshold: float = 0.85):
self.threshold = similarity_threshold
def should_evict(self, candidate_key: str, window: SlidingWindow,
cache: Dict[str, CacheEntry]) -> bool:
# Example: evict if cosine similarity to any other entry exceeds threshold
candidate_vec = cache[candidate_key].value # assume value is an embedding
for key in window:
if key == candidate_key:
continue
other_vec = cache[key].value
sim = self._cosine(candidate_vec, other_vec)
if sim > self.threshold:
return True
return False
@staticmethod
def _cosine(a: np.ndarray, b: np.ndarray) -> float:
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-12))
Step 4 – Build the Priority‑Based KV Cache
class PriorityKVCache:
def __init__(self, window: SlidingWindow, policy: SemanticEvictionPolicy):
self.window = window
self.policy = policy
self._store: Dict[str, CacheEntry] = {}
def put(self, key: str, value: Any, priority: float) -> None:
entry = CacheEntry(key=key, value=value, priority=priority)
self._store[key] = entry
self.window.push(key)
self._enforce_capacity()
def get(self, key: str) -> Optional[Any]:
entry = self._store.get(key)
return entry.value if entry else None
def _enforce_capacity(self) -> None:
while len(self.window) > self.window.max_size:
# Evict lowest priority entry first
victim = min(self._store.items(),
key=lambda kv: (kv[1].priority, kv[1].timestamp))
self._evict(victim[0])
def _evict(self, key: str) -> None:
self._store.pop(key, None)
# Remove from window (rebuild list)
self.window._items = [k for k in self.window._items if k != key]
Step 5 – Wire Up the Hierarchical Context Manager
from contextlib import contextmanager
class HierarchicalContextManager:
def __init__(self, max_window: int, similarity_threshold: float = 0.85):
self.window = SlidingWindow(max_window)
self.policy = SemanticEvictionPolicy(similarity_threshold)
self.cache = PriorityKVCache(self.window, self.policy)
@contextmanager
def session(self):
# Example hook for logging or metrics
try:
yield self
finally:
# Optional: flush or persist
pass
def push(self, key: str, value: Any, priority: float) -> None:
self.cache.put(key, value, priority)
def pop(self, key: str) -> Optional[Any]:
return self.cache.get(key)
def evict(self, key: str) -> None:
self.cache._evict(key)
Running and Testing It
Install dependencies
pip install numpy pytestCreate a test file
test_context_manager.py
import numpy as np
from hierarchical_context import HierarchicalContextManager
def test_basic_insert_and_retrieve():
mgr = HierarchicalContextManager(max_window=3)
with mgr.session():
mgr.push("a", np.array([1.0, 0.0]), priority=1.0)
mgr.push("b", np.array([0.9, 0.1]), priority=0.5)
assert mgr.pop("a") is not None
assert mgr.pop("b") is not None
def test_eviction_by_priority():
mgr = HierarchicalContextManager(max_window=2)
with mgr.session():
mgr.push("low", "value", priority=0.1)
mgr.push("high", "value", priority=0.9)
mgr.push("new", "value", priority=0.5) # triggers eviction
assert mgr.pop("low") is None
assert mgr.pop("high") is not None
Run the suite
pytest -v test_context_manager.pyAll tests should pass, proving that the sliding window respects capacity, priority determines eviction order, and the context manager correctly yields control.
Extending It: Your Roadmap to Senior‑Level
- Persistent storage – replace the in‑memory dict with a SQLite or RocksDB backend so the cache survives process restarts; this adds durability, a key concern for production LLM serving.
- Horizontal scaling – shard the KV store across multiple worker processes using Redis or a distributed hash table; enables scaling beyond a single machine’s memory.
- Observability – emit Prometheus metrics (cache hit ratio, eviction count, latency) via OpenTelemetry; lets SREs monitor and alert on cache health.
- Fault tolerance – wrap cache operations in circuit‑breaker patterns (e.g.,
pybreaker) to gracefully degrade when downstream stores fail. - Benchmarking – integrate Locust or k6 to simulate concurrent LLM request patterns and measure throughput; provides data to justify capacity planning.
- Semantic clustering – replace cosine similarity with learned embeddings from a model like
sentence-transformersto improve eviction decisions for real text workloads.
Key Takeaways
- You have built a hierarchical sliding‑window context manager with semantic eviction and priority‑based KV caching from scratch.
- The implementation demonstrates systems design, custom data structures, and testability—skills that resonate with hiring managers.
- The project is intentionally extensible, providing a clear path to production‑grade features like persistence, scaling, and observability.
- By following the roadmap, you can evolve the prototype into a resilient, high‑performance cache suitable for LLM inference workloads.
Further Reading
- Python
contextlibdocumentation – canonical reference for building context managers. - Cache replacement policies – Wikipedia – foundational theory for eviction strategies.
- vLLM: Easy, Efficient, and Large Language Model Serving – paper describing KV‑cache management in production LLM systems.
- OpenTelemetry Python instrumentation – guide for adding observability to your cache.