Hangi model daha iyi review yapıyor? Sonunda ölçtüm
CommitBrief'in varsayılan modellerini ilk kez ölçtüm: Gemini eşiği geçti, OpenAI varsayılanı temiz diff'lerde çok yanlış alarm verip eşiği geçemedi.
OpenAI varsayılanım, temiz diff’lerin yüzde 29’unda yanlış alarm verdi. Bunu bilmiyordum, çünkü CommitBrief’in varsayılan modellerinden hiçbiri ölçülerek seçilmemişti. Gemini eşiği geçti; OpenAI’ınki geçemedi ama varsayılan olarak duruyor.
Seriyi izlediyseniz biliyorsunuz: aracı niye yazdığımı, ekibe nasıl taşıdığımı ve modelsiz bir süzgeç eklediğimi anlattım. Üçünde de cevaplamadığım bir soru vardı: bulguyu üreten model, başka bir modelden gerçekten daha mı iyi?
Ölçmeden seçtiğim varsayılanlar
v1.18.0 (24 Eylül 2026) iki sağlayıcının varsayılan modelini değiştirdi. Gemini için gemini-3.8-flash seçildi, ama kaliteye bakarak değil: ölçüm olmadığı sürece geçerli geçici bir kuralla. Kural, Google’ın orta kademesindeki en ucuz modeli alıyor; tipik bir diff’in tahmini maliyeti varsayılan uyarı eşiği olan 0,50 doların altında kalmak zorunda. Yani kural liste fiyatına bakıyor.
Anthropic için claude-opus-5-5 seçildi ve bu, kuralın değil benim tercihimdi. Kural orta kademedeki claude-sonnet-5’i seçerdi; ben güncel amiral gemisini istedim. OpenAI tarafında gpt-5.4-mini aynı kaldı.
Hiçbirine kalite iddiası eklemedim. commitbrief setup sihirbazı her modelin yanına liste fiyatını ve “not measured” yazıyor. Etiket dürüsttü ama rahatsız ediciydi: bir review aracı “bu kod iyi mi” sorusunu cevaplıyor, ben ise “hangi model bu soruyu daha iyi cevaplıyor” sorusunu cevaplayamıyordum. Varsayılanların gerekçesinin ayrıntısı v1.18.0 yazısında, değişiklik kaydı CHANGELOG içinde.
Önce eşik, sonra ölçüm
Ölçmeden önce, geçmenin ne demek olduğunu yazdım (karar kaydı ADR-0043). Bir model varsayılan olabilmek için üç şartı birden sağlamalı:
- Recall en az 0,90. Yerleştirilmiş hataların en az yüzde 90’ını bulmalı.
- Temiz fixture’larda FPR en fazla 0,10. Hata içermeyen diff’lerin en çok yüzde 10’unda alarm vermeli.
- Her dilde recall en az 0,70. Ortalama iyi görünüp tek bir dilde çökemez.
Eşikler kodda sabit. Ortam değişkeniyle ayarlanamıyor ve karar kaydı tek bir koşu için de gevşetmeyi yasaklıyor. Nedeni basit: sonucu gördükten sonra eşiği oynatırsam ölçmüş olmam; istediğim modele gerekçe bulmuş olurum. Korpus büyüyünce eşikleri yeniden türetmem gerekti; onu da canlı ölçümden önce yaptım.
Korpus v1.18.0’da 40 fixture’dı, yeterlilik tabanına tam sığıyordu. Sonra 129’a çıktı: 96 hatalı fixture’da 99 yerleştirilmiş hata, 33 temiz kontrol; 129 fixture’ın 26’sı held-out. Go, TypeScript, JavaScript, Python, Java ve PHP var; cross-file, büyük refactor ve framework’e özgü vakalar da içinde. Yeterlilik tabanı da korpusla birlikte yükseldi.
Bir sağlayıcı aynı diff’e her seferinde aynı cevabı vermiyor. Bu yüzden COMMITBRIEF_EVAL_RUNS=k ile korpusu k kez koşturuyorum ve toplam sonucun yanına koşular arasındaki min/max yayılımını da yazıyorum. Tek şanslı ya da şanssız bir geçişin arkasına saklanamıyorum. Ölçümleri k=3 ile aldım.
İlk hata: CLI’ın göndermediği prompt’u puanlıyordum
Ölçüm düzeneğinde, canlı eval harness’te bir kusur buldum. Harness modele, production’ın gönderdiği satır numaralı diff yerine ham diff gönderiyordu. Ölçüm, CLI’ın hiç göndermediği bir prompt’u puanlıyordu.
Düzeltme v1.18.0’ın Fixed bölümünde. O düzeltmeden önceki ölçümleri geçerli saymıyorum. Ders küçük ama pahalı: ölçüm aracı da koddur ve ölçtüğü şey, ürünün gerçekten gönderdiği şey olmak zorundadır.
OpenAI eşiği geçemedi
Canlı ölçümü 26 Ekim’de OpenAI ile aldım; ham değerler deponun sonuç dosyasında. gpt-5.4-mini için recall 0,9259; eşik 0,90, geçiyor. FPR ise 0,2929; eşik 0,10. Üç koşunun FPR’si 0,2727 ile 0,3030 arasında, yani en iyi koşusu bile eşiğin çok üstünde.
Yanlış alarmlar en çok JavaScript, TypeScript ve PHP’de birikiyor: temiz JavaScript fixture koşularının 15’te 8’inde, TypeScript ve PHP’de 15’te 6’şar alarm var. Dil başına recall’ın hiçbiri 0,70’in altına inmiyor. Yani model hatayı buluyor, ama temiz kodu da suçluyor. Bir review aracında bu, kullanıcının uyarıları okumayı bırakması demek.
İkinci hata: Gemini düşünürken JSON’u kesiyordu
Gemini’yi de ölçtüm. İlk denemede bazı review’lar unexpected end of JSON input ya da empty content hatasıyla döndü. Harness bunları kaçırılmış bulgu saydığı için rakamlar kötü yöne yanlıştı. Beni asıl düşündüren başka bir şeydi: maliyet ve çıktı boyutu, düşünen bir model için fazla küçük görünüyordu.
Neden buydu: Gemini’nin thinking modellerinde düşünme token’ları MaxOutputTokens ile aynı bütçeyi paylaşıyor. 4096’lık varsayılan sınır çoğu zaman düşünmeye harcanıyor, görünür JSON ya yarıda kesiliyor ya da hiç kalmıyordu. Üstelik düşünme token’ları rapordaki çıktı sayısına girmediği için maliyet de eksik görünüyordu.
v1.21.2’de (31 Ekim) bu yazıyı ilgilendiren üç değişiklik oldu. Thinking modellerin çıktı tavanı 16384 oldu. Düşünme token’ları raporlanan çıktıya, maliyete ve eval rakamlarına dahil edildi. Model tüm bütçeyi düşünmeye harcayıp görünür metin döndürmezse, istek bir kez iki katı tavanla yeniden deneniyor.
Ölçümü bu düzeltmeden sonra, 31 Ekim’de yeniledim; sonuç dosyasında artık tek bir hata kaydı var. Review başına maliyet düşünme token’ları dahil 0,006407 dolar. Düşünme token’ları rapora girmediği sürece bu rakam eksik çıkıyordu: model pahalanmadı, ilk ölçüm eksik ölçüyordu.
Sonuç
Rakamların kalıcı yeri commitbrief.com’daki SSS sayfası ve deponun sonuç dosyası; burada yalnızca ölçümü nasıl kurduğumu anlatmak için özetliyorum. Korpus 129 fixture, üç koşu, ölçüm tarihleri OpenAI için 26 Ekim, Gemini için 31 Ekim:
| Model | Recall | FPR | Review başına maliyet | Geçti mi |
|---|---|---|---|---|
gemini-3.8-flash | 0,9731 | 0,0303 | $0,006407 | Evet |
gpt-5.4-mini | 0,9259 | 0,2929 | $0,003674 | Hayır (FPR) |
Maliyet liste fiyatıdır, cache indirimi yok; Gemini için düşünme token’ları dahil. Gemini’nin en düşük dil recall’ı Go’da, 0,9306. Üç koşunun recall’ı 0,9697 ile 0,9798 arasında kaldı.
Burada rahatsız edici bir tablo var. gpt-5.4-mini hâlâ OpenAI’ın varsayılanı. Karar kaydı, eşiği geçen bir aday yoksa mevcut varsayılanın kalmasını söylüyor ve sonucun kaydedilmesini istiyor; ben de kaydettim. Ama bu, eşiği geçemediği ölçülmüş bir modeli varsayılan olarak bıraktığım gerçeğini değiştirmiyor. Başka bir OpenAI modelini ölçmedim.
Gemini tarafı da bir zafer anlatısı değil. Varsayılanı fiyata bakan bir kural seçmişti ve ölçüm sonradan kuralın seçtiği modeli doğruladı. Tek bir örnek, kuralın kaliteyi tahmin ettiğini göstermez.
Sınırlar — yine dürüst liste
- Yalnız iki model ölçüldü. Anthropic ve diğer sağlayıcılar,
claude-opus-5-5dahil, ölçülmedi ve sıralanmıyor. Ölçülmemiş olmak kötü olmak demek değil. setuphâlâ “not measured” gösteriyor. Sihirbaz sonuçları göstermiyor; yalnızca liste fiyatını yazıyor. Karşılaştırmak için fiyattan başka bir şeyi yok.- Korpus sentetik. Fixture’lar kasıtlı yerleştirilmiş hatalar içeriyor, gerçek PR’lar değil. Gerçek diff’lerde sonuç farklı olabilir.
- Temiz kontrol az. 33 temiz fixture, FPR’yi 99 hatanın recall’ı kadar ince çözmüyor. Bunu bilinen bir zayıflık sayıyorum; çare daha çok temiz fixture, daha sıkı eşik değil.
- Bir an fotoğrafı. Sağlayıcılar modellerini zamanla değiştirir; bu rakamlar iki tarihin rakamları.
Denemek için
Eşikler, korpus ve harness CommitBrief deposunda. Ölçümü yeniden üretmek isterseniz harness’i COMMITBRIEF_EVAL_PROVIDER=<ad> make eval-live ile çalıştırabilirsiniz; komut wiki’deki Providers sayfasında ve deponun Makefile’ında geçiyor, canlı sağlayıcıyı çağırdığı için API ücreti doğurur. Korpus bileşimi ve eşikler SSS sayfasında; dokümantasyon ve kurulum commitbrief.com adresinde.
Kendi aracınızda varsayılan bir model seçiyorsanız, ölçmeden önce eşiği yazın: hangi oranı geçen model yeter? Sonra ölçün, rakam hoşunuza gitmese de eşiği yerinde bırakın.
Bu konudaki deneyler
Tan Assistant: toplantıyı sesi ve değişen ekran kareleriyle nota çeviren masaüstü uygulaması
Rust ve Tauri 2 ile yazılan açık kaynak bir masaüstü uygulaması toplantının sesini ve değişen ekran karelerini kaydedip özet ve aksiyon notu çıkarıyor.
Şu an ne yapıyor
Toplantının mikrofon ve sistem sesini ayrı kanallarda, ekranın yalnızca değişen karelerini kaydedip özet, karar, aksiyon maddesi ve açık soru içeren bir not çıkarıyor. Toplantı kaydını videoya çevirmeden nota dönüştürmek isteyen herkes kaynaktan derleyip deneyebilir.
TokenMetrics: AI agent token harcamasını projeye göre görünür kılmak
Claude Code, Codex CLI ve Gemini CLI loglarını yerelde okuyan bir masaüstü uygulaması, token kullanımını proje, model ve oturuma göre gösteriyor.
Şu an ne yapıyor
AI agent token kullanımını yerel loglardan toplayıp proje, model, oturum ve zaman bazında gösteriyor; tahmini maliyet ve abonelik limiti takibi sunuyor. Claude Code, Codex CLI veya Gemini CLI'ı yoğun kullanıp harcamasını görmek isteyen geliştirici kurabilir.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.