File size: 6,230 Bytes
9b0ae85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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'<div style="color: red; padding: 10px;">❌ Model bulunamadı: {model_name}</div>'
        
        # HTML formatında detayları oluştur
        html = f"""
        <div style="background: #f8fafc; border-radius: 10px; padding: 20px; margin: 10px 0;">
            <h3 style="color: #1e40af; margin-bottom: 15px;">🤖 Model Detayları</h3>
            
            <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px;">
                <div>
                    <strong>Model Adı:</strong> {model.get('model', 'N/A')}<br>
                    <strong>Durum:</strong> <span style="color: #059669;">{model.get('status_turkish', 'N/A')}</span><br>
                    <strong>İlerleme:</strong> {model.get('progress_percent', '0.00%')}<br>
                    <strong>Başarı Oranı:</strong> {model.get('basari_percent', '0.00%')}<br>
                </div>
                <div>
                    <strong>Model Türü:</strong> {model.get('model_type', 'N/A')}<br>
                    <strong>Parametreler:</strong> {model.get('parameters', 'N/A')}<br>
                    <strong>Oluşturulma:</strong> {model.get('created_at_formatted', 'N/A')}<br>
                </div>
            </div>
            
            <div style="margin-top: 15px; padding-top: 15px; border-top: 1px solid #e2e8f0;">
                <strong>Son Güncelleme:</strong> {model.get('updated_at_formatted', 'N/A')}<br>
                <strong>Model Adı:</strong> <code>{model.get('model', 'N/A')}</code>
            </div>
        </div>
        """
        
        return html
        
    except Exception as e:
        logger.error(f"Model detayları alma hatası: {e}")
        return f'<div style="color: red; padding: 10px;">❌ Detay alma hatası: {str(e)}</div>'

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 "<div style='color: gray; padding: 10px;'>Model seçin</div>"
            except Exception as e:
                logger.error(f"Model detayları gösterme hatası: {e}")
                return f"<div style='color: red; padding: 10px;'>Hata: {str(e)}</div>"
        
        # Event handlers
        refresh_eval_btn.click(
            refresh_evaluation_models,
            outputs=evaluation_table
        )
        
        evaluation_table.select(
            show_model_details,
            outputs=model_details_output
        )