v0.27.0
AI observability lands (Valkey-native cache/memory metrics, OTLP traces with a correlation waterfall), two new Valkey-issue-backed anomaly detectors, worst-offender sorting for the logs, and a redesigned first-run connect screen built to convert.
✨ Added
AI observability
- AI Cache & Memory tab (#312) - auto-discovers BetterDB agent-cache, semantic-cache, agent-memory, and retrieval instances on the connected Valkey via the
__betterdb:cachesregistry (heartbeat liveness, zero app-side config) and charts hit rate, cost saved, evictions, index size, and history. Per-tick hit rate is derived from counter deltas; samples persist in the newai_cache_samplesstore across sqlite / postgres / memory with tier-based retention.
- AI Traces: OTLP ingestion, waterfall, and Valkey correlation (#313) -
POST /v1/tracesOTLP ingestion (keeps@betterdb/*spans plus roots) feeding an AI Traces waterfall, then correlates spans with live Valkey state to explain why a hit or miss happened. Newotel_spansstore + per-trace summaries across all adapters,GET /ai/traces,GET /ai/traces/:traceId, andGET /ai/traces/:traceId/correlate. Ingest supports an optional bearer token and fails closed on cloud when no token is configured.
- OTLP
http/protobufingestion (#314) -/v1/tracesnow accepts the OTel SDK's defaulthttp/protobufencoding alongsidehttp/json, so exporters work without flipping a config flag. Decodes with a minimal inline proto (fixed64 timestamp precision preserved) and answers protobuf requests with protobuf responses per the OTLP/HTTP spec.
Anomaly detection
- Connection saturation (#317, valkey#3918) - closes the "approaching the wall" gap before
maxclientsexhaustion locks out operators, and unbundlesrejected_connectionsfromACL_DENIEDso a connection-limit event is no longer misread as an auth attack. - Stuck orphaned replicas after primary loss (#310, valkey#2090) - after a primary is replaced by a fresh node (classic k8s pod restart), a surviving replica can keep replicating the dead primary forever. Detects the stuck state and recommends the maintainers' own remediation.
Logs
- Magnitude sort (top-N worst offenders) (#316, valkey#3895) - SLOWLOG and COMMANDLOG queries take
sortBy: 'recent' | 'magnitude'; magnitude returns the worst offenders first (µs for slow, bytes for large-request/large-reply). Because every entry is persisted durably, bursts of mildly-slow commands can't evict the genuine outliers the way Valkey's small in-memory log does.
Onboarding
- Connect-screen redesign for first-time activation (#321) - the no-database screen is rebuilt to convert: quick connect by pasting a
redis:///rediss:///valkey://URL (failures hand off to the prefilled form), contextual per-page headlines instead of one generic dead end, one-click Connect localhost:6379 + Docker one-liner (self-hosted) or Create a 1 GB Valkey instance (cloud), provider setup-guide chips, a read-only trust line, and a troubleshooting link. Pasting a full URL into the Add Connection form's Host field fills every field.
🔧 Changed
- Managed Valkey instance sizing (#321, cloud) - pod memory limit (2× maxmemory) and volume size (4×) now scale with the requested instance size instead of the fixed chart defaults; requested maxmemory is hard-capped at 2gb (DTO + service + sizing clamp) and a 1gb size option was added.
- SlowLog storage refactor (#191) - SLOWLOG persistence extracted into a shared
SlowLogRepositoryacross the sqlite / postgres / memory adapters. No behavior change.
Full changelog: v0.26.0...v0.27.0
What's Changed
- Adding OpenAI Agents SDK adapter by @amitkojha05 in #149
- feat(semantic-cache): add Google AI (Gemini) embedding provider by @Vswaroop04 in #160
- test(storage): skip CI-only-flaky cache_proposals constraint tests by @KIvanow in #309
- feat(anomaly): detect stuck orphaned replicas after primary loss (valkey#2090) by @KIvanow in #310
- feat(agent-cache-py): add Pydantic AI adapter by @amitkojha05 in #131
- feat(semantic-cache): runtime-configurable defaultTtl via __config hash by @amitkojha05 in #161
- refactor(storage): extract SlowLogRepository across all three storage adapters by @amitkojha05 in #191
- feat(ai-observability): AI Cache & Memory tab (Valkey-native) by @KIvanow in #312
- feat(ai-observability): OTLP traces, waterfall, and Valkey correlation by @KIvanow in #313
- feat(ai-observability): OTLP protobuf ingestion by @KIvanow in #314
- feat(anomaly): connection-saturation detection + unbundle rejected_connections (valkey#3918) by @KIvanow in #317
- feat(logs): magnitude sort (top-N worst offenders) for slow/command log by @KIvanow in #316
- feat(web): redesign no-connection screen for first-time activation by @KIvanow in #321
Full Changelog: v0.26.0...v0.27.0