list_altİçindekilerexpand_more
- 01Neden Python AI Demo Aracı?
- 02Gradio: ML Demolarının Standardı
- 03Kurulum ve İlk Uygulama
- 04Avantajları ve Dezavantajları
- 05Streamlit: Genel Amaçlı Veri Uygulaması
- 06Kurulum ve İlk Uygulama
- 07Avantajları ve Dezavantajları
- 08Karşılaştırma Tablosu
- 09Hugging Face Spaces Desteği
- 10LLM Chatbot Örneği: İki Framework
- 11Hangisini Seçmeli?
Python’da bir model eğittiniz, fine-tune ettiniz; şimdi bunu göstermek istiyorsunuz. İki isim öne çıkıyor: Gradio ve Streamlit. Her ikisi de birkaç satır kodla çalışan bir web arayüzü ortaya koyuyor, ama hangi sorunu çözdüğünüz ve kime sunduğunuz seçimi belirliyor.
Editorial tech-magazine cover illustration about Python AI application development, two abstract framework screens side by side in comparison layout, abstract artificial-intelligence motifs (glowing neural networks, flowing data, subtle circuitry), sophisticated modern concept art, clean balanced composition, soft cinematic studio lighting, rich depth of field, premium color grading in deep navy blues with cyan and magenta accents, highly detailed, polished editorial 8k. No text, no words, no letters, no captions, no logos, no watermark, no UI.

Neden Python AI Demo Aracı?
Jupyter notebook’ta güzel metrikler üreten bir model, test edilebilir bir arayüz yoksa değer üretmiyor. Problem şu: Flask veya FastAPI öğrenmek, frontend yazmak, deployment ayarlamak ayrı bir iş. Gradio ve Streamlit bu süreci atlıyor; Python fonksiyonunuzu alıyor, bir web uygulamasına dönüştürüyor.
İkisi aynı şeyi farklı açıdan yapıyor. Gradio, ML araştırmacısının “modelimi hızla göstereyim” ihtiyacından doğmuş. Streamlit, veri bilimcisinin “bu analizi dashboarda dönüştüreyim” sorusuna yanıt veriyor. Kullanım senaryolarını karıştırmak zaman kaybettiriyor: bir ML modelini Streamlit’te kurmak gereksiz uzuyor, bir analitik panoyu Gradio’ya sığdırmaya çalışmak da zorlanıyorsunuz.
Gradio: ML Demolarının Standardı
Gradio 2019’da Stanford araştırmacıları tarafından geliştirildi. Hugging Face 2021’de satın alınca Spaces entegrasyonu geldi ve o noktadan itibaren Model Hub’daki onbinlerce modelin demo sayfası Gradio üzerinden çalışıyor. Araştırma dünyasında fiili standart bu.
API tasarımı kasıtlı olarak minimal: bir giriş bileşeni, bir çıkış bileşeni, ikisini birbirine bağlayan bir Python fonksiyonu. UI çizmiyorsunuz, veri akışını tanımlıyorsunuz.
Kurulum ve İlk Uygulama
pip install gradio
Basit bir metin dönüşüm demosu birkaç satıra sığıyor:
import gradio as gr
def büyük_harf(metin):
return metin.upper()
demo = gr.Interface(
fn=büyük_harf,
inputs=gr.Textbox(label="Metin girin"),
outputs=gr.Textbox(label="Sonuç"),
title="Metin Dönüştürücü",
description="Girilen metni büyük harfe çevirir."
)
demo.launch()
http://127.0.0.1:7860 adresinde arayüz açılıyor. demo.launch(share=True) ile 72 saatlik geçici bir public URL alınabiliyor; hızlı test ve demo paylaşımı için kullanışlı.
Daha karmaşık çok bileşenli arayüzler için gr.Blocks API’si var. Bu API ile bileşenleri serbest yerleşimde düzenleyebiliyorsunuz, koşullu görünürlük ve sekme yapısı ekleyebiliyorsunuz.
Avantajları ve Dezavantajları
Güçlü yönler:
Multimodal destek Gradio’nun güçlü tarafı. Görüntü, ses, video, 3D model, dosya ve metin bileşenlerini aynı arayüzde bir araya getirmek birkaç satır kod gerektiriyor. Diffusion modeli, ses tanıma veya nesne tespiti demoları için bu esneklik gerçek bir avantaj.
gr.ChatInterface ile LLM chatbot arayüzü dakikalar içinde hazır. Mesaj geçmişi, balon gösterimi ve temizle butonu framework tarafından geliyor. Streaming için fonksiyonu return yerine yield ile yazmak yeterli; geri kalanını Gradio hallediyor.
vLLM gibi açık kaynak çıkarım motorları ile sunulan modelleri demo’lamak için Gradio’nun OpenAI uyumlu streaming desteği doğrudan çalışıyor.
Ayrıca her Gradio uygulaması otomatik olarak /api/predict endpoint’i açıyor. Başka bir Python betiğinden gr.Client ile bağlanmak da mümkün; demo uygulamanız aynı zamanda bir API oluyor.
Zayıf yönler:
Dashboard ve karmaşık analitik görselleştirme için Gradio sınırlı kalıyor. Plotly ve DataFrame görünümleri var, ancak çok sekmeli, filtreli, karmaşık veri panelleri için yeterince esnek değil.
Uygulama büyüdükçe gr.Blocks kodu yönetilebilir ama frontend mimari tercihlerinde esneklik azalıyor. Çok sayıda koşullu bileşen veya dinamik layout gerektiren uygulamalarda kod okunurluğu düşüyor.
Streamlit: Genel Amaçlı Veri Uygulaması
Streamlit de 2019’da çıktı, 2022’de Snowflake satın aldı. Hedef kitlesi veri analistleri ve mühendisler olduğundan görselleştirme ve dashboard yetenekleri Gradio’ya göre daha olgun.
Çalışma mantığı tepeden aşağıya script: kullanıcı bir widget’la etkileşime girdiğinde Python betiği baştan sona yeniden çalışıyor. Öğrenmesi kolay bir model. Ama uygulama büyüdükçe cache’lemeyi düşünmek gerekiyor, yoksa her etkileşimde ağır hesaplama yeniden tetikleniyor.
Kurulum ve İlk Uygulama
pip install streamlit
Temel bir demo:
import streamlit as st
st.title("Metin Dönüştürücü")
metin = st.text_input("Metin girin")
if st.button("Büyük Harfe Çevir"):
st.success(metin.upper())
Çalıştırmak için:
streamlit run uygulama.py
Tarayıcıda http://localhost:8501 adresinde arayüz açılıyor. Kod değişikliklerini kaydettiğinizde otomatik yeniden yükleme yapıyor.
Avantajları ve Dezavantajları
Güçlü yönler:
Dashboard ve veri görselleştirme için Streamlit güçlü. Plotly, Altair, Matplotlib ve Vega-Lite entegrasyonu yerel geliyor. Karmaşık filtreli tablo görünümleri, çok sekmeli layout ve sidebar widget’ları ile zengin analitik paneller kurmak görece kısa sürede mümkün.
st.session_state ile durum yönetimi ve st.cache_data / st.cache_resource dekoratörleri performans açısından önemli. cache_resource ile ağır bir modeli bir kez yükleyip tüm oturumlar boyunca bellekte tutmak GPU belleğini verimli kullanıyor.
st.chat_message bileşeni Streamlit 1.25 ile geldi; chatbot arayüzleri artık st.session_state ile birlikte oldukça temiz yazılıyor. Streamlit Community Cloud ile ücretsiz deploy imkânı var.
Zayıf yönler:
Her kullanıcı etkileşiminde betiğin baştan çalışması, cache optimizasyonu yapılmazsa yavaş hissettiriyor. Büyük DataFrame’ler veya ağır hesaplamalar için dekoratörlere dikkat etmek gerekiyor.
Multimodal ML demosu için Gradio daha az kod istiyor. Streamlit’te görüntü veya ses yükleme ve gösterimi mevcut ama ML demo senaryolarına özel bileşenler Gradio kadar olgunlaşmamış.
HF Spaces’te Streamlit destekleniyor ancak ekosistem Gradio ağırlıklı. Model Hub sayfalarında Gradio demosu çok daha yaygın.
Karşılaştırma Tablosu
| Kriter | Gradio | Streamlit |
|---|---|---|
| Birincil kullanım | ML model demosu | Veri dashboard / analitik |
| Öğrenme eğrisi | Çok düşük | Düşük |
| HF Spaces desteği | Yerel, ekosistem odaklı | Mevcut |
| Multimodal bileşenler | Güçlü (görüntü/ses/video/3D) | Temel düzey |
| Görselleştirme | Temel (Plotly, DataFrame) | Güçlü (Plotly, Altair, Vega-Lite) |
| Otomatik API | /api/predict endpoint, gr.Client | Ek kütüphane gerekir |
| Chatbot arayüzü | gr.ChatInterface (yerleşik) | st.chat_message (1.25+) |
| Durum yönetimi | Blok tabanlı | st.session_state |
| Performans optimizasyon | Stateless, hafif | st.cache_data / st.cache_resource |
| Streaming yanıt | yield ile doğal | st.write_stream |
| Topluluk | HF / araştırma ekosistemi | Veri bilimi / kurumsal |
| Şirket | Hugging Face | Snowflake |
| Lisans | Apache 2.0 | Apache 2.0 |
Hugging Face Spaces Desteği
HF Spaces her iki framework’ü destekliyor, ama deneyim ayrışıyor. Gradio uygulamaları model kartıyla aynı sayfaya giriyor; yeni bir model yayınladığınızda demo otomatik olarak Hub sayfasına bağlanıyor. Araştırma topluluğunda Gradio’yu varsayılan yapan da bu entegrasyon.
Ücretsiz katmanda CPU ile çalışıyorsunuz. GPU için ZeroGPU var (Gradio’ya özel A100 kotası) ya da ücretli tier’lar. Büyük diffusion modellerini ücretsiz sergilemek için ZeroGPU işe yarıyor.
Streamlit de Spaces’te çalışıyor, ancak buradaki Streamlit uygulamalarına bakınca genellikle veri analitik araçları görüyorsunuz. ML model demosu söz konusu olduğunda tercih açıkça Gradio ağırlıklı.
Fine-tuning ile RAG arasındaki strateji seçimine bağlı olarak demo’nun formu değişiyor: fine-tune edilmiş bir modeli sergiliyorsanız Gradio Spaces, RAG tabanlı bir sistemi canlı göstermek istiyorsanız her iki araç da uygun.
LLM Chatbot Örneği: İki Framework
Aynı LLM chatbot senaryosunu iki frameworkle yazmak farkı net ortaya koyuyor. Aşağıdaki örnekler OpenAI SDK kullanan basit bir sohbet uygulaması gösteriyor; RAG tabanlı sistemler veya fine-tune edilmiş modeller için de aynı yapı geçerli.
Gradio ile gr.ChatInterface:
import gradio as gr
from openai import OpenAI
client = OpenAI()
def chat(mesaj, geçmiş):
mesajlar = [{"role": "system", "content": "Yardımcı bir asistansın."}]
for kullanıcı_mesajı, asistan_yanıtı in geçmiş:
mesajlar.append({"role": "user", "content": kullanıcı_mesajı})
mesajlar.append({"role": "assistant", "content": asistan_yanıtı})
mesajlar.append({"role": "user", "content": mesaj})
yanıt = client.chat.completions.create(
model="gpt-4o-mini",
messages=mesajlar
)
return yanıt.choices[0].message.content
demo = gr.ChatInterface(
fn=chat,
title="AI Asistan",
description="Sorularınızı yazın.",
theme=gr.themes.Soft()
)
demo.launch()
gr.ChatInterface mesaj geçmişini otomatik yönetiyor. Balon görünümü, temizle butonu ve kullanıcı/asistan renklendirmesi default geliyor. Streaming için yield ile jeneratör fonksiyon yazmak yeterli; tek satır ekleyerek token token çıktı elde edilebiliyor.
Streamlit ile st.chat_message:
import streamlit as st
from openai import OpenAI
client = OpenAI()
st.title("AI Asistan")
if "mesajlar" not in st.session_state:
st.session_state.mesajlar = []
for mesaj in st.session_state.mesajlar:
with st.chat_message(mesaj["role"]):
st.markdown(mesaj["content"])
if prompt := st.chat_input("Bir şey sorun..."):
st.session_state.mesajlar.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Yardımcı bir asistansın."},
*st.session_state.mesajlar
],
stream=True
)
yanıt = st.write_stream(stream)
st.session_state.mesajlar.append({"role": "assistant", "content": yanıt})
Streamlit versiyonu daha fazla satır gerektiriyor çünkü oturum durumunu elle yönetiyorsunuz. Karşılığında her adımı kontrol ediyorsunuz: hangi mesajın nasıl görüntüleneceği, sidebar özellikleri, ek widget’lar eklenebiliyor.
AI agent senaryolarında araç çağrılarını adım adım göstermek istiyorsanız Streamlit’in st.expander ve st.status bileşenleri daha elverişli. Gradio’da bu tür adım görselleştirme için özel gr.Progress veya gr.HTML kullanmak gerekiyor.
Hangisini Seçmeli?
Doğru seçimi yapmak için kullanım senaryosuna bakmak yeterli:
| Senaryo | Öneri | Neden |
|---|---|---|
| Hugging Face model demosu | Gradio | Yerel HF entegrasyonu, gr.Client |
| Görüntü / ses / video modeli | Gradio | Multimodal bileşen zenginliği |
| Araştırma paper demosu | Gradio | HF Spaces ekosistemi |
| LLM chatbot (hızlı prototip) | Gradio | gr.ChatInterface |
| Veri analitik dashboard | Streamlit | Plotly, Altair, tablo |
| Snowflake / kurumsal veri | Streamlit | Yerel entegrasyon |
| Çok sekmeli panel | Streamlit | st.tabs, st.sidebar |
| LLM chatbot (özel UI) | Streamlit | session_state esnekliği |
| Agent adım görselleştirme | Streamlit | st.status, st.expander |
| Açık kaynak yerel model demosu | Gradio | ZeroGPU, HF Spaces kotası |
Kural net: ML modeli mi gösteriyorsunuz? Gradio. Veri analizi veya kurumsal araç mı yapıyorsunuz? Streamlit.
Her iki araç da birkaç dakika içinde çalışan bir prototip ortaya koyuyor. Yerel açık kaynak modeller için Gradio’nun gr.ChatInterface streaming desteği, token token çıktıyı kullanıcıya göstermek için tek yield satırı yeterli. Streamlit’te streaming st.write_stream ile mümkün ama yapılandırma biraz daha uzun.
Her iki framework aktif geliştirme altında. Gradio’nun HF ekosistemi entegrasyonu ve ZeroGPU kotası araştırma demolarını ücretsiz ayağa kaldırıyor. Streamlit’in Snowflake bağlantısı ve Community Cloud dağıtımı kurumsal kullanımda avantaj. İkisi birbiriyle rekabet etmekten çok farklı kullanıcılara hitap ediyor. Proje türünüze göre seçim çoğunlukla kendiliğinden netleşiyor.



