GeminiCacheAdapter
Wraps google.generativeai.GenerativeModel generate_content calls with response caching. Returns cached results for identical (model, contents, params) combinations.
Installation
pip install 'chengeta-ai[gemini]'
Usage
Sync
import google.generativeai as genai
from chengeta_ai import CacheManager, InMemoryBackend, CacheKeyBuilder
from chengeta_ai.adapters.gemini_adapter import GeminiCacheAdapter
genai.configure(api_key="your-api-key")
model = genai.GenerativeModel("gemini-2.0-flash")
manager = CacheManager(
backend=InMemoryBackend(),
key_builder=CacheKeyBuilder(namespace="myapp"),
)
adapter = GeminiCacheAdapter(model, manager)
response = adapter.generate_content("What is the capital of France?")
# Second call — cache hit, no API cost
response = adapter.generate_content("What is the capital of France?")
Async
response = await adapter.agenerate_content("Summarise the quarterly report.")
Multi-turn content
contents = [
{"role": "user", "parts": ["Hello"]},
{"role": "model", "parts": ["Hi! How can I help?"]},
{"role": "user", "parts": ["What is 2+2?"]},
]
response = adapter.generate_content(contents)
With Redis shared cache
from chengeta_ai.backends.redis_backend import RedisBackend
manager = CacheManager(
backend=RedisBackend(url="redis://localhost:6379/0"),
key_builder=CacheKeyBuilder(namespace="gemini"),
)
adapter = GeminiCacheAdapter(model, manager)
Invalidate model entries
from chengeta_ai.core.invalidation import InvalidationEngine
manager = CacheManager(
backend=InMemoryBackend(),
key_builder=CacheKeyBuilder(),
invalidation_engine=InvalidationEngine(InMemoryBackend()),
)
adapter = GeminiCacheAdapter(model, manager)
adapter.invalidate_model()
Transparent proxy
Any attribute not overridden (e.g. model.model_name, model.tools) is forwarded to the underlying GenerativeModel via __getattr__.
API Reference
| Method | Description |
|---|---|
generate_content(contents, **kwargs) | Cached model.generate_content() (sync) |
agenerate_content(contents, **kwargs) | Cached model.generate_content_async() (async) |
invalidate_model() | Invalidate all cached responses for this model |