# Revizyon niyet modeli kıyası (10 Eki 2026) ## Soru "Liste revize edilirken sorun yaşanıyor; daha önce çalıştık, neden hâlâ?" + "OpenRouter'da modeli değiştirsek mi (GLM?)" ## Teşhis Revizyon mantığı 9 Eki'den beri koda bağlı ve doğru (QA: paketli hesapta 4/4 revizyon, sahte beyan 0). Kalan sorun tek yerde: sohbet mesajını yapısal kurala çeviren **niyet çıkarımı** çağrısı (`src/lib/ai/revizyon-niyeti.ts`, 20 sn zaman aşımı). Model `deepseek/deepseek-v4-flash` OpenRouter'da **16 üst sağlayıcıya** dağılıyor; eval'de aynı gün Baidu, StreamLake, Wafer, Venice, DigitalOcean, Alibaba, DeepInfra, Mancer gördük. Gecikme iki kümeli (1,5-2 sn / 12-20 sn), 20 sn'yi aşınca çağrı düşüyor → niyet "belirsiz" → istek normal sohbete gidiyor, liste değişmiyor (QA B3 "bimodal gecikme" bulgusu bu). Ayrıca aynı istek iki koşuda farklı kural üretebiliyor (r14 "ilk 10 İstanbul + sadece devlet": bir koşuda form, birinde tip eksik). ## Ölçüm (pnpm eval:revizyon --tekrar 2, 16 senaryo × 2, niyet modeli env'den; sohbet deepseek sabit) | Niyet modeli | Geçen | Kural doğru | Niyet p50 / p90 / max | $/çağrı | Sağlayıcı | |---|---|---|---|---|---| | deepseek-v4-flash (koşu 1) | 31/32 | 21/22 | 2,0 / 5,1 / 6,0 sn | 0,00014 | 5 farklı | | deepseek-v4-flash (koşu 2) | 29/32 | 19/22 | 5,0 / 15,1 / **20,0 sn (zaman aşımı)** | 0,00008 | 4 farklı | | **google/gemini-3.1-flash-lite (koşu 1)** | **32/32** | **22/22** | 1,6 / 1,9 / 2,4 sn | 0,00101 | yalnız Google | | **google/gemini-3.1-flash-lite (koşu 2)** | 30/32 | 20/22 | 1,3 / 1,9 / 2,4 sn | 0,00073 | yalnız Google | | z-ai/glm-4.7-flash | 29/32 | 19/22 | 3,2 / 15,4 / 20,0 sn | 0,00019 | Venice, Cloudflare | | z-ai/glm-5.3-flash (reasoning low) | 24/32 | 14/22 | 1,9 / 6,4 / 9,3 sn | 0,00023 | 18 farklı | | z-ai/glm-5.3-flash (reasoning alanı yok) | 26/32 | 16/22 | 2,0 / 7,9 / 12,1 sn | 0,00034 | 17 farklı | | qwen/qwen3.5-flash | 21/32 | 11/22 | 1,3 / 3,3 / 3,8 sn | 0,00015 | Alibaba | | openai/gpt-5-nano, claude-haiku-5.5 | — | — | — | — | 400 "Provider returned error" (strict json_schema; incelenmedi) | Ham sonuçlar: `scripts/eval/sonuc/2026-10-10T20-*-revizyon.json`. Toplam harcama ≈ 0,12 $. GLM: 5.3-flash ve gpt-5-nano `reasoning_effort: "none"` isteğini 400 ile reddediyor ("Reasoning is mandatory"); bunun için `AI_REASONING_EFFORT` env'i eklendi (`src/lib/ai/cagri.ts`). Reasoning açıkken bile GLM deepseek'ten kötü: kuralı daha sık kaçırıyor ve 17-18 sağlayıcıya dağıldığı için gecikme yine iki kümeli. ## Karar önerisi Niyet çıkarımı için `OPENROUTER_NIYET_MODEL=google/gemini-3.1-flash-lite`. Gerekçe: tek sağlayıcı (gecikme tek kümeli, max 2,4 sn, zaman aşımı yok), en yüksek isabet, maliyet 7 kat ama mutlak olarak 1.000 revizyon ≈ 1 $. Sohbet ve liste üretimi deepseek'te kalır (orada sorun ölçülmedi). Yapılacaklar: 1. Gitea secrets'a `OPENROUTER_NIYET_MODEL=google/gemini-3.1-flash-lite` ekle (ci.yaml satırı hazır). 2. Deploy sonrası `[soru] revizyon niyeti` log satırlarında süre ve sağlayıcıya bak. 3. `/gizlilik` metni "OpenRouter (ABD) aracılığıyla" diyor; üst sağlayıcı adı geçmiyor → değişiklik gerekmez (güvenlik-uyum ajanı teyit etsin). 4. (Yapıldı) Gemini "ilk 10 İstanbul, vakıf olmasın" isteğinde tipi `ilkTercihler` içine yazıyordu. Niyet prompt'una kapsam cümlesi + şema açıklaması eklendi; prompt tek başına yetmeyince `tipKuraliniTamamla` (revizyon-niyeti.ts) "vakıf olmasın / sadece devlet" kalıbında üst düzey `universiteTipi`'ni koddan tamamlar hâle getirildi. Son tam koşu (16 × 2): 31/32 geçti, kural 21/22, p50 1,3 sn; tek kaçan r04#2 ("İstanbul da eklensin" → iller.ekle bir koşuda düştü, stokastik). 5. Ayrı bir iş: QA B2 (paketsiz hesapta sahte form vaadi) ve B1 ("listemi değiştir" → diger) bu kıyasın konusu değil; backlog'da.