import logging
import gradio as gr
import pandas as pd
logger = logging.getLogger(__name__)
def create_evaluation_models_table(api_service):
"""API'den değerlendirme modellerini al ve tablo oluştur."""
try:
models = api_service.get_evaluation_models(limit=20)
if not models:
return pd.DataFrame({
"ℹ️ Bilgi": ["Henüz değerlendirme isteği bulunmuyor"],
"💡 İpucu": ["İlk modelinizi göndermek için 'Model Gönder' sekmesini kullanın"]
})
# DataFrame oluştur (ID olmadan)
df_data = []
for model in models:
df_data.append({
"🤖 Model Adı": model.get('model', 'N/A'),
"📊 Durum": model.get('status_turkish', model.get('status', 'N/A')),
"📈 İlerleme": model.get('progress_percent', '0.00%'),
"🎯 Başarı": model.get('basari_percent', '0.00%'),
"📅 Son Güncelleme": model.get('updated_at_formatted', 'N/A'),
"🔧 Model Türü": model.get('model_type', 'N/A'),
"📏 Parametreler": model.get('parameters', 'N/A')
})
return pd.DataFrame(df_data)
except Exception as e:
logger.error(f"Değerlendirme modelleri tablosu oluşturma hatası: {e}")
return pd.DataFrame({
"❌ Hata": [f"Veri yükleme hatası: {str(e)}"],
"🔧 Durum": ["API bağlantısını kontrol edin"]
})
def get_model_details_html(model_name: str, api_service) -> str:
"""Model detaylarını HTML formatında getir."""
try:
# Model adına göre detayları al
models = api_service.get_evaluation_models()
model = None
for m in models:
if m.get('model') == model_name:
model = m
break
if not model:
return f'
❌ Model bulunamadı: {model_name}
'
# HTML formatında detayları oluştur
html = f"""
🤖 Model Detayları
Model Adı: {model.get('model', 'N/A')}
Durum: {model.get('status_turkish', 'N/A')}
İlerleme: {model.get('progress_percent', '0.00%')}
Başarı Oranı: {model.get('basari_percent', '0.00%')}
Model Türü: {model.get('model_type', 'N/A')}
Parametreler: {model.get('parameters', 'N/A')}
Oluşturulma: {model.get('created_at_formatted', 'N/A')}
Son Güncelleme: {model.get('updated_at_formatted', 'N/A')}
Model Adı: {model.get('model', 'N/A')}
"""
return html
except Exception as e:
logger.error(f"Model detayları alma hatası: {e}")
return f'❌ Detay alma hatası: {str(e)}
'
def add_evaluation_requests_tab(block, api_service):
with gr.Tab("📋 Değerlendirme İstekleri"):
gr.Markdown("### API Model Değerlendirme İstekleri")
gr.Markdown("**Kullanıcıların değerlendirme için gönderdiği modellerin durumunu takip edin.**")
with gr.Row():
refresh_eval_btn = gr.Button("🔄 Listeyi Yenile", variant="primary")
status_filter = gr.Dropdown(
choices=["Tümü", "Beklemede", "İşleniyor", "Tamamlandı", "Başarısız"],
label="Duruma Göre Filtrele",
value="Tümü"
)
# Model detayları için alan
model_details_output = gr.HTML()
# Değerlendirme modelleri tablosu
evaluation_table = gr.DataFrame(
value=create_evaluation_models_table(api_service),
wrap=True,
interactive=False
)
def refresh_evaluation_models():
"""Değerlendirme modellerini yenile"""
try:
return create_evaluation_models_table(api_service)
except Exception as e:
logger.error(f"Değerlendirme modelleri yenileme hatası: {e}")
return pd.DataFrame({
"❌ Hata": [f"Yenileme hatası: {str(e)}"],
"🔧 Durum": ["API bağlantısını kontrol edin"]
})
def show_model_details(evt: gr.SelectData):
"""Seçilen modelin detaylarını göster"""
try:
if evt.index[0] is not None:
# Tablodan model adını al
df = create_evaluation_models_table(api_service)
if not df.empty and evt.index[0] < len(df):
model_name = df.iloc[evt.index[0]]["🤖 Model Adı"]
return get_model_details_html(model_name, api_service)
return "Model seçin
"
except Exception as e:
logger.error(f"Model detayları gösterme hatası: {e}")
return f"Hata: {str(e)}
"
# Event handlers
refresh_eval_btn.click(
refresh_evaluation_models,
outputs=evaluation_table
)
evaluation_table.select(
show_model_details,
outputs=model_details_output
)