Skip to main content

Compressor

Optional value compression wired into CacheManager. Compresses bytes before writing to the backend and decompresses on read. Reduces memory and disk usage for large LLM responses.

Built-in Compressors

ClassAlgorithmUse when
NoopCompressorNone (passthrough)Default — no overhead
GzipCompressorgzip (Python stdlib)Large text responses, embedding payloads

Usage

Default (no compression)

from chengeta_ai import CacheManager, InMemoryBackend, CacheKeyBuilder

manager = CacheManager(
backend=InMemoryBackend(),
key_builder=CacheKeyBuilder(),
) # NoopCompressor by default

Gzip compression

from chengeta_ai import GzipCompressor, CacheManager, InMemoryBackend, CacheKeyBuilder

manager = CacheManager(
backend=InMemoryBackend(),
key_builder=CacheKeyBuilder(),
compressor=GzipCompressor(level=6), # 0=fastest, 9=best compression
)

Compression applies automatically on manager.set() for bytes values and decompresses on manager.get(). Non-bytes values (e.g. dicts stored directly) are passed through unchanged.

With Redis backend (reduces network transfer)

from chengeta_ai.backends.redis_backend import RedisBackend

manager = CacheManager(
backend=RedisBackend(url="redis://localhost:6379/0"),
key_builder=CacheKeyBuilder(),
compressor=GzipCompressor(level=6),
)

Custom Compressor

Implement the Compressor protocol — two methods required:

from chengeta_ai import Compressor

class Lz4Compressor:
def compress(self, data: bytes) -> bytes:
import lz4.frame
return lz4.frame.compress(data)

def decompress(self, data: bytes) -> bytes:
import lz4.frame
return lz4.frame.decompress(data)

manager = CacheManager(
backend=InMemoryBackend(),
key_builder=CacheKeyBuilder(),
compressor=Lz4Compressor(),
)

LZ4 is ~4× faster than gzip with similar compression ratios for LLM text — good for high-throughput production deployments.


When to Use Compression

ScenarioRecommendation
Short LLM responses (<1KB)NoopCompressor — overhead exceeds savings
Long LLM responses (>4KB)GzipCompressor(level=6)
Redis backend (reduces network bytes)GzipCompressor
Disk backend (reduces storage)GzipCompressor
Latency-critical hot pathNoopCompressor or LZ4

API Reference

ParameterTypeDefaultDescription
level (GzipCompressor)int6Compression level 0–9. 0=no compression, 9=max

Compressor is @runtime_checkable — verify with isinstance(obj, Compressor).