M27 · AI Layer

AI Morning Summary

Her sabah 06:00 (tenant timezone) workspace özetin — 80-150 kelime KPI delta + insight + action suggestion. PII LLM'e gitmez.

Genel bakış

Sabah özeti neyi anlatır?

Önceki 24 saatin headline rakamları + neden öyle + ne yapmalı.

  • Sabah 06:00

    Tenant timezone'a göre 06:00 — Avrupa için saat 06:00 EU/CET, US için 06:00 local, vb. Cron her workspace için ayrı.

  • 80-150 kelime

    Kısa, taranabilir özet. Headline KPI delta + 1-2 cümle insight + önerilen aksiyon (link'li).

  • TR primary + EN

    Workspace dilini takip eder. ZH/AR için şimdilik EN fallback (Faz 3 sonu native çeviri).

  • Nerede görürsün?

    Dashboard ana sayfa üst kartında — /app sayfası açılır açılmaz. Discord/email webhook'a da push edilebilir (notification ayarı).

5-modelli fallback chain

Never-down profile

DeepSeek primary, 4 fallback. Bir model hata verirse otomatik bir sonrakine geçilir. Provider badge UI'da hangisini gösterir.

  1. 01

    Primary — DeepSeek

    Hızlı, ucuz, Türkçe + İngilizce'de güçlü. Varsayılan primary.

    deepseek-chat · global
  2. 02

    Fallback 1 — MiniMax

    Çinli sağlayıcı, uzun context'te güvenilir. DeepSeek down olursa devreye girer.

    abab6.5s-chat · global
  3. 03

    Fallback 2 — AWS Bedrock Nova

    eu-central-1 region. AWS region-locked managed AI (Bedrock istisnası) — never-down için stratejik.

    amazon.nova-lite-v1 · eu-central-1
  4. 04

    Fallback 3 — Qwen

    Alibaba Cloud. Multi-language güçlü, structured output stabil.

    qwen-max · global
  5. 05

    Fallback 4 — Kimi (Moonshot)

    Son fallback. Hepsi düştüyse statik şablon özetine düşer.

    moonshot-v1-32k · global

CH aggregation

events_canonical son 24h

ClickHouse'ta aggregate edilen ham metrikler prompt'a context olarak verilir.

Hangi metrikler?

events_canonical tablosundan son 24 saat — özet için yeterli granular bilgi, LLM'e fazla yük yok.

  • Headline KPI delta (outcomes vs. önceki 24h)
  • Top 5 event by volume
  • Top 5 source domain (UTM/referrer)
  • DAU/MAU + identity merge sayısı + retention spot
  • Aktif health alarm sayısı + son 24h yeni alarm
-- 24-saatlik headline delta + top events + sources
SELECT
  countIf(event_class = 'outcome') AS outcomes_24h,
  countIf(event_class = 'interaction') AS interactions_24h,
  uniqExact(person_id) AS dau,
  topK(5)(event_name) AS top_events,
  topK(5)(source_context['source_domain']) AS top_sources
FROM events_canonical
WHERE
  tenant_id = {tenant_id:UUID}
  AND ts >= now() - INTERVAL 24 HOUR;

Pseudonymize-everything

PII LLM'e gitmez

Email, phone, UUID, Stripe ID — hepsi prompt'a girmeden strip edilir. Deterministic alias ile placeholder.

Sözümüz

Hiçbir PII LLM provider'ına gönderilmez. Regex strip + deterministic alias zorunlu — prompt'ta görünen her şey pseudonymized.

  • docsModules.aiMorning.pseudonymize.promise.bullets.email
  • docsModules.aiMorning.pseudonymize.promise.bullets.phone
  • docsModules.aiMorning.pseudonymize.promise.bullets.ids
  • Workspace salt'ıyla deterministic alias — aynı kullanıcı her özette aynı placeholder'a düşer
// PII strip — LLM'e gönderilmeden önce
function pseudonymize(input: string, salt: string): string {
  return input
    .replace(/[\w.+-]+@[\w-]+\.[\w.-]+/g, '<EMAIL>')
    .replace(/\+?\d{10,15}/g, '<PHONE>')
    .replace(/cus_[A-Za-z0-9]+/g, '<STRIPE_CUSTOMER>')
    .replace(/sub_[A-Za-z0-9]+/g, '<STRIPE_SUB>')
    .replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, '<UUID>')
    .replace(/\b[A-Za-z0-9_-]{20,}\b/g, (m) => deterministicAlias(m, salt));
}

Sektör pack

tenants.sector_pack prompt context

5 sektör tipi — özet sektöre özel terminoloji + KPI kullanır.

E-commerce

Sepet, AOV, geri dönüş oranı, refund odaklı.

SaaS

Activation, MRR, expansion, churn risk odaklı.

Fintech

Onboarding, KYC, ilk işlem, hacim odaklı.

Content / publishing

Active reader, session depth, paywall conversion odaklı.

Gambling / iGaming

Bet count, GGR, deposit, responsible-gaming odaklı.

Kota

Free 150 / Custom unlimited

M28 W3 quota dimension 'ai_calls'. Morning summary + Anomaly Explainer + her AI çağrısı bu havuzdan iner.

Plan
Aylık çağrı limiti
Dimension
Free
150 çağrı/ay (sabah özeti + anomaly + manual rerun)
ai_calls
Custom
Sınırsız (usage-based fatura, PostHog birim −%60 graduated)
ai_calls

Anomaly Explainer

Alarm → AI sebep önerisi

M7 event-health alarm tetiklendiğinde POST /v1/ai/explain-anomaly ile sebep + çözüm + verification adımları AI üretir.

Ne döner?

Olası sebep listesi + önerilen aksiyon + verification adımları (playground'da nasıl doğrularsın). Provider badge ile şeffaflık.

curl -X POST https://api.gurulu.io/v1/ai/explain-anomaly \
  -H "Authorization: Bearer $GURULU_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "alarm_id": "alm_01H8XYZ",
    "include_recommendations": true
  }'

# Yanıt
{
  "cause": "checkout_started event hacmi son 2 saatte %42 düştü",
  "likely_reasons": [
    "Frontend deploy 14:22 sonrası tag mismatch",
    "Ana kaynak google/cpc trafiği %38 azaldı"
  ],
  "suggested_actions": ["Rollback CDN bundle", "Google Ads kampanya pause"],
  "verification_steps": ["Playground'da add_to_cart selector test et"],
  "provider": "deepseek-chat"
}

Provider badge

Hangi model yazdı?

Her özet altında bir badge — fallback chain'in kim devreye girdiğini söyler.

Niye gösteriyoruz?

Şeffaflık + audit. Bir özet beklenmedik geliyorsa hangi modelin yazdığını biliyorsan debug kolaylaşır.

Badge örnekleri

deepseek · deepseek-chatminimax · abab6.5s-chatbedrock · amazon.nova-lite-v1qwen · qwen-maxkimi · moonshot-v1-32k

İlgili dokümanlar

Devamında oku

Audience hareketini özette gör, playground'da pattern ara, features sayfasında AI layer derinlemesine.

AI Morning Summary — Gurulu Docs