Composer LLM Cache Invalidation
v0.7.64 (Phase 24) ile gelen Composer LLM cache invalidation özelliği, hibrit rapor pipeline’ında üretilen LLM narrative cache’lerini scope bazlı temizlemeye olanak tanır. platform_admin rolündeki kullanıcılar Admin paneli → 9. tab “LLM Önbellek” sekmesinden 4 farklı scope’ta (all / locale / variant / run_id) invalidation tetikleyebilir.
Neden Cache Invalidation?
Hybrid Report composer her rapor için LLM çağrısı yapmamak adına narrative output’ları Redis cache’te tutar. Cache key formatı:- Prompt revizyonu — LLM prompt template güncellendi, eski cache stale
- Locale fix — TR/EN translation hatası düzeltildi, yeni rendering gerekli
- A/B test reset —
LLM_AB_SPLITvariant ratio değişti (örn:v1.1:1.0→v1.2:1.0) - Belirli bir run yeniden hesaplanıyor — run_id bazlı targeted invalidation
- LLM model upgrade — Claude Opus 4.7 → Opus 5.0 geçişi sonrası tüm cache stale
Yetki
4 Scope
all
Tüm composer LLM cache silinir. Org/locale/variant/run filtresi yok. Genelde major prompt revision sonrası kullanılır.
locale
Belirli locale(s)‘lere ait cache silinir. Örn:
locales=["tr"] → sadece Türkçe narrative cache’i temizler.variant
Belirli variant(s)‘lara ait cache silinir. Örn:
variant_ids=["v1.0"] → eski variant cache’i temizler, A/B test reset için.run_id
Tek bir run_id’ye ait cache silinir. Targeted invalidation — diğer run’lar etkilenmez. Örn:
run_id="24774cd8-...".UI Flow
1
Admin paneli aç
Sol menüden Admin (yalnızca
platform_admin için görünür) → 9. tab “LLM Önbellek” (RefreshCw icon).2
Primary action — Invalidate All
Sayfa üstünde büyük “Invalidate All” butonu (destructive variant). Tıklandığında ConfirmDialog açılır:
3
Advanced (collapsible)
“Advanced” chevron tıklandığında 3 scope açılır:
- By Locale: multi-select dropdown (
tr,en) + Invalidate butonu - By Variant: multi-select dropdown (mevcut variant_id listesi) + Invalidate butonu
- By Run ID: text input (UUID v4) + Invalidate butonu
4
Invalidation tetiklendi
Backend
POST /admin/cache/invalidate-composer-llm çağrısı arka planda Redis SCAN cursor ile non-blocking iteration yapar. UI loading state’i gösterir, sonuçta toast notification: ”✅ 8,243 cache entry invalidated (locale=tr)”.5
Audit log + Sentry tag
İşlem audit log’a yazılır:
cache_invalidated_composer_llm (user_id, scope, params, count). Sentry tag eklenir: cache_invalidation_scope=locale.Redis SCAN Cursor Pattern
Backendllm.py.invalidate_cache_keys fonksiyonu SCAN kullanır, KEYS KULLANMAZ:
Neden SCAN, KEYS değil?
KEYS * Redis’i O(N) blocking — production’da 100K+ key varsa Redis 5-10 saniye blok olur, tüm uygulama timeout alır. SCAN cursor-based iteration, non-blocking — production-safe.API Endpoint
Audit Log Entry
Sentry Tag
Sentry event’lerine cache invalidation context’i eklemek için tag set edilir:Sorun Giderme
CACHE_INVALIDATE_SCOPE_INVALID
Sebep: Scope + parametre uyumsuzluğu (örn: scope=locale ama locales boş, scope=run_id ama UUID format geçersiz).
Çözüm:
scope=all→ ek parametre gerekmezscope=locale→locales: ["tr", "en"]dolu listescope=variant→variant_ids: ["v1.0", "v1.1"]dolu listescope=run_id→ geçerli UUID v4
Invalidation sonrası rapor üretimi yavaş
Sebep: Cache miss — sonraki rapor LLM çağrısı yapıyor (~10-30 saniye). Çözüm: Normal davranış. Cache repopulate olduktan sonra (ilk birkaç rapor) latency normale döner.Deleted count = 0
Sebep: Belirtilen scope’ta cache entry yok (henüz hiç rapor üretilmemiş veya zaten temizlenmiş). Çözüm: Pattern doğru mu kontrol et (locale code, variant_id formatı). Redis’te aktif key sayısınıredis-cli DBSIZE ile kontrol et.
Sonraki Adım
Per-Brand Benchmark Override
Marka-spesifik KPI eşik değerleri
L7 Reports
Hibrit rapor üretimi + cache davranışı