← Radar

Konu: Web3 dk okuma

OpenUI: Modelin arayüzü JSON yerine satır satır yazdığı açık format

Bu neden önemli?

Üretken arayüzde kullanıcı, model cevabı bitirene kadar bekliyor. Formatın uzunluğu doğrudan bekleme süresi demek. Hangi formatı seçtiğin hem hızı hem maliyeti hem de modelin neyi çizebileceğini belirliyor.

Kaynak kodu olmayan uygulamalar

Videodaki deneme şöyle: Bir masaüstü gibi görünen ekranda boş uygulama simgeleri var. Birine “hesap makinesi” yazıyorsun, model o anda arayüzü üretiyor ve ekrana akıtıyor. Hesap makinesi gerçekten çalışıyor. “Kahve dükkânı bulucu” yazınca harita ve liste çıkıyor. Hiçbir uygulamanın önceden yazılmış kodu yok.

Bu bir oyuncak, ama arkasındaki fikir ciddi: üretken arayüz (generative UI). Modelin cevap olarak metin yerine arayüz parçası döndürmesi. Bu fikri ve AG-UI, A2UI gibi protokolleri CopilotKit yazısında anlatmıştık. Bu yazı başka bir soruya odaklanıyor: Model o arayüzü hangi formatta yazmalı?

OpenUI ne?

OpenUI, Thesys şirketinin geliştirdiği, MIT lisanslı açık kaynak bir proje. Kendini bir arayüz kütüphanesi olarak değil, bir standart olarak tanımlıyor. Bileşenleri sen getiriyorsun: shadcn, Material ya da kendi tasarım sistemin. Hazır bir bileşen kütüphanesi de var ama kullanmak zorunlu değil. React, Vue, Svelte ve Angular için resmi paketleri var.

Akış dört adımlı:

  1. Modelin kullanabileceği bileşenleri tanımlıyorsun (prop’ları Zod şemasıyla).
  2. OpenUI bu listeden bir sistem talimatı (system prompt) üretiyor.
  3. Model cevabını OpenUI Lang denen formatta yazıyor.
  4. Tarayıcıdaki renderer bu çıktıyı geldikçe okuyup senin bileşenlerine çeviriyor.

Model sadece senin tanımladığın bileşenleri kullanabiliyor. Ayrıştırıcı (parser) geçersiz parçaları atıp gerisini çiziyor. Modellerin olmayan bir bileşen uydurması sık rastlanan bir hata olduğu için bu önemli.

Neden JSON değil?

Arayüzü tarif etmenin akla gelen ilk yolu JSON. Ama JSON iç içe bir yapı. Klasik bir ayrıştırıcı, son kapanan paranteze kadar bekler. Üstelik her bileşende "component", "props", "children" gibi anahtarlar tekrar tekrar yazılıyor. Model bunların her birine token harcıyor, sen de her token için bekliyorsun.

OpenUI Lang satır tabanlı. Her satır isim = Bileşen(...) biçiminde tek bir bileşen tanımlıyor, mesela root = Stack([chart]). Argümanlar sırayla veriliyor, anahtar adı tekrarlanmıyor. Renderer her satırı geldiği anda işliyor: Önce iskelet beliriyor, veri sonra doluyor.

json-render ve A2UI ile farkı

Rakipler de akışı çözmüş durumda, o yüzden asıl fark hız ve token sayısı:

  • json-render (Vercel Labs, Apache 2.0): Bileşen kataloğuna bağlı JSON üretiyor ve bunu küçük yamalar (patch) hâlinde akıtıyor. React, Vue, Svelte, React Native, PDF, e-posta ve video için renderer’ı var.
  • A2UI (Google, Apache 2.0): Ajanın arayüzü kod değil veri olarak tarif ettiği bir protokol. Bileşenler düz bir liste hâlinde, birbirine kimlikle bağlanıyor. Flutter, Angular ve Lit gibi istemcilerde çalışıyor. OpenUI’ın ayrıca A2UI mesajlarının içinde OpenUI Lang taşıyan bir paketi de var.

Thesys’in kendi ölçümüne göre OpenUI Lang, aynı ekranlar için json-render’dan yaklaşık %58, A2UI’dan %52 daha az token üretiyor. Kabaca yarı yarıya. Bunların üreticinin kendi testi olduğunu unutma.

Nerede işe yarıyor, nerede takılıyor?

En mantıklı kullanım, sohbetin içinde küçük arayüzler: bir grafik, bir form, her soru için aynı seçenek kartı yerine soruya uygun bir giriş alanı. Tam uygulama üretmek ise henüz uzak. Videodaki geliştirici önce çok hızlı bir çıkarım servisinde açık bir model denemiş. Model bozuk uygulamalar üretmiş, servis de sürekli istek sınırına takılmış. Sonunda daha yavaş ama tutarlı bir modele geçmiş. Videoya göre deneme üretime hazır değil. Geliştiricinin önerisi de akıllıca: Güvenli bir arka uç sabit kalsın, sadece ön yüz anlık üretilsin ve kullanıcıya özel bir sandbox’ta çalışsın.

Düşün

  • Uygulamandaki hangi ekran, her kullanıcı için aynı kalmak yerine soruya göre şekil alsa daha iyi olurdu?
  • Modelin çizebileceği bileşenleri sınırlamak güvenlik sağlıyor ama esnekliği azaltıyor. Çizgiyi nereye çekerdin?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (8, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Web3 dkVideo: Better Stack

God's Eye View: Halka açık verilerle tarayıcıda çalışan bir "casus uydu" küresi

God's Eye View, uçakları, gemileri, uyduları, depremleri ve trafik kameralarını aynı 3D dünya küresinde gösteren açık kaynak bir proje. Verilerin hiçbiri gizli değil: Uçakların kendi yayınladığı ADS-B sinyalleri, gemilerin AIS mesajları, uydu yörünge verileri. Kendi bilgisayarında çalışıyor ve bir MCP sunucusu da var.

Konu: Web2 dkVideo: Better Stack

Bootstrap 6 alfa: Tailwind usulü sınıflar, yerleşik HTML öğeleri ve ajanlar için beceriler

Bootstrap 6'nın ilk alfa sürümü çıktı. Duyarlı (responsive) sınıflarda ekran boyutu artık başa geliyor: d-md-none yerine md:d-none. Mark Otto bunun Tailwind'den doğrudan alındığını kendisi söylüyor. Modal yerine tarayıcının dialog öğesi, jQuery desteği yok, yanında da yapay zekâ ajanları için llms.txt ve 11 beceri dosyası var.