alibayram commited on
Commit
69ad306
·
1 Parent(s): 9b0ae85

Refactor data management by removing fallback data creation methods and simplifying error handling. Enhance UI model responses tab with improved filtering options and pagination for better user experience.

Browse files
Files changed (2) hide show
  1. data_manager.py +1 -58
  2. ui_model_responses.py +183 -3
data_manager.py CHANGED
@@ -104,64 +104,7 @@ class DataManager:
104
  # Buraya geldiysek, tüm denemeler başarısız oldu
105
  logger.error(f"{self._max_retries} deneme sonrası veri kümesi yüklenemedi: {last_error}")
106
 
107
- # Uygun yedek dataframe döndür
108
- return self._create_fallback_data(data_type, path)
109
-
110
- def _create_fallback_data(self, data_type: str, path: str) -> pd.DataFrame:
111
- """Veri türüne göre yedek veri oluştur."""
112
- logger.info(f"{data_type} için yedek veri oluşturuluyor")
113
-
114
- if "leaderboard" in path.lower() or data_type == "leaderboard":
115
- return self._create_fallback_leaderboard()
116
- elif "responses" in path.lower() or data_type == "responses":
117
- return self._create_fallback_responses()
118
- elif "section" in path.lower() or data_type == "section_results":
119
- return self._create_fallback_section_results()
120
- else:
121
- return pd.DataFrame({"hata": ["Bilinmeyen veri türü"], "mesaj": [f"{path} yüklenemedi"]})
122
-
123
- def _create_fallback_leaderboard(self) -> pd.DataFrame:
124
- """Kapsamlı yedek liderlik tablosu dataframe'i oluştur."""
125
- logger.info("Yedek liderlik tablosu verisi oluşturuluyor")
126
- return pd.DataFrame({
127
- "model": ["GPT-4-Turbo", "Claude-3-Opus", "Gemini-Pro", "Llama-2-70B", "Mistral-7B"],
128
- "family": ["OpenAI", "Anthropic", "Google", "Meta", "Mistral"],
129
- "quantization_level": ["Yok", "Yok", "Yok", "float16", "int8"],
130
- "score": [85.2, 83.7, 81.4, 78.9, 75.3],
131
- "timestamp": [pd.Timestamp.now()] * 5,
132
- "parameters": ["1.76T", "Bilinmiyor", "Bilinmiyor", "70B", "7B"],
133
- "license": ["Mülkiyet", "Mülkiyet", "Mülkiyet", "Özel", "Apache 2.0"]
134
- })
135
-
136
- def _create_fallback_responses(self) -> pd.DataFrame:
137
- """Kapsamlı yedek cevaplar dataframe'i oluştur."""
138
- logger.info("Yedek cevaplar verisi oluşturuluyor")
139
- return pd.DataFrame({
140
- "bolum": ["Matematik", "Tarih", "Coğrafya", "Edebiyat", "Fen"],
141
- "soru": [
142
- "2 + 2 kaçtır?",
143
- "Osmanlı İmparatorluğu ne zaman kuruldu?",
144
- "Türkiye'nin başkenti neresidir?",
145
- "Yunus Emre hangi dönemde yaşamıştır?",
146
- "Suyun kimyasal formülü nedir?"
147
- ],
148
- "cevap": ["4", "1299", "Ankara", "13-14. yüzyıl", "H2O"],
149
- "GPT-4-Turbo_cevap": ["4", "1299", "Ankara", "13-14. yüzyıl", "H2O"],
150
- "Claude-3-Opus_cevap": ["4", "1299 civarı", "Ankara", "13-14. yüzyıl", "H2O"],
151
- "Gemini-Pro_cevap": ["4", "1299", "Ankara", "13. ve 14. yüzyıl", "H2O"]
152
- })
153
-
154
- def _create_fallback_section_results(self) -> pd.DataFrame:
155
- """Kapsamlı yedek bölüm sonuçları dataframe'i oluştur."""
156
- logger.info("Yedek bölüm sonuçları verisi oluşturuluyor")
157
- return pd.DataFrame({
158
- "section": ["Matematik", "Tarih", "Coğrafya", "Edebiyat", "Fen", "Felsefe", "Sosyoloji"],
159
- "GPT-4-Turbo": [88.5, 85.2, 82.7, 89.1, 86.3, 83.8, 81.4],
160
- "Claude-3-Opus": [86.2, 87.1, 80.5, 88.7, 84.9, 85.2, 82.1],
161
- "Gemini-Pro": [84.7, 83.6, 81.2, 86.4, 85.1, 82.3, 80.8],
162
- "Llama-2-70B": [82.1, 80.4, 78.9, 83.2, 81.7, 79.6, 77.3],
163
- "Mistral-7B": [79.3, 77.8, 76.2, 80.1, 78.5, 76.9, 74.6]
164
- })
165
 
166
  def refresh_datasets(self) -> None:
167
  """Thread güvenliği ile tüm veri kümelerini kaynaktan yenile."""
 
104
  # Buraya geldiysek, tüm denemeler başarısız oldu
105
  logger.error(f"{self._max_retries} deneme sonrası veri kümesi yüklenemedi: {last_error}")
106
 
107
+ return pd.DataFrame()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
 
109
  def refresh_datasets(self) -> None:
110
  """Thread güvenliği ile tüm veri kümelerini kaynaktan yenile."""
ui_model_responses.py CHANGED
@@ -3,7 +3,187 @@ import pandas as pd
3
 
4
 
5
  def add_model_responses_tab(block, data_manager, available_models):
6
- with gr.Tab("🔍 Model Cevapları"):
7
  gr.Markdown("### Model Cevaplarını Göz At")
8
- gr.Markdown("**6.200 soruyu ve model cevaplarını göz atın veya belirli içerik arayın.**")
9
- # (Move the rest of the tab code here, including search, pagination, and event handlers)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
 
5
  def add_model_responses_tab(block, data_manager, available_models):
6
+ with gr.Tab("Model Cevapları"):
7
  gr.Markdown("### Model Cevaplarını Göz At")
8
+ gr.Markdown("**6.200 soruyu ve model cevaplarını model ve kategoriye göre filtreleyin.**")
9
+
10
+ # Prepare category choices from actual data
11
+ categories = ["Tümü"]
12
+ if not data_manager.responses_data.empty:
13
+ # Check what category column actually exists
14
+ category_col = None
15
+ for col in data_manager.responses_data.columns:
16
+ if 'kategori' in col.lower() or 'category' in col.lower() or 'bolum' in col.lower():
17
+ category_col = col
18
+ break
19
+
20
+ if category_col:
21
+ categories += sorted(data_manager.responses_data[category_col].dropna().unique().tolist())
22
+
23
+ with gr.Row():
24
+ model_filter = gr.Dropdown(
25
+ choices=["Tümü"] + available_models,
26
+ label="Model Filtresi",
27
+ value="Tümü"
28
+ )
29
+ category_filter = gr.Dropdown(
30
+ choices=categories,
31
+ label="Kategori Filtresi",
32
+ value="Tümü"
33
+ )
34
+ filter_btn = gr.Button("Filtrele", variant="primary")
35
+ clear_btn = gr.Button("Temizle")
36
+
37
+ with gr.Row():
38
+ page_size = gr.Slider(
39
+ minimum=10,
40
+ maximum=100,
41
+ value=20,
42
+ step=10,
43
+ label="Sayfa Başına Gösterim"
44
+ )
45
+ page_info = gr.HTML(value="<div style='text-align: center; padding: 10px;'>Sayfa 1</div>")
46
+
47
+ responses_table = gr.DataFrame(
48
+ headers=["Soru", "Doğru Cevap", "Model Cevabı", "Kategori"],
49
+ datatype=["str", "str", "str", "str"],
50
+ col_count=(4, "fixed"),
51
+ interactive=False,
52
+ wrap=True
53
+ )
54
+
55
+ with gr.Row():
56
+ prev_btn = gr.Button("← Önceki", variant="secondary")
57
+ next_btn = gr.Button("Sonraki →", variant="secondary")
58
+
59
+ # State variables
60
+ current_page = gr.State(1)
61
+
62
+ def filter_responses(model, category, page_size_val, page):
63
+ try:
64
+ df = data_manager.responses_data.copy()
65
+ if df.empty:
66
+ return pd.DataFrame(), 1, "<div style='text-align: center; padding: 10px;'>Veri bulunamadı</div>"
67
+
68
+ # Find the actual column names in the dataset
69
+ question_col = None
70
+ answer_col = None
71
+ category_col = None
72
+
73
+ # Look for question column
74
+ for col in df.columns:
75
+ if 'soru' in col.lower() or 'question' in col.lower():
76
+ question_col = col
77
+ break
78
+
79
+ # Look for answer column
80
+ for col in df.columns:
81
+ if 'cevap' in col.lower() and not col.endswith('_cevap'):
82
+ answer_col = col
83
+ break
84
+
85
+ # Look for category column
86
+ for col in df.columns:
87
+ if 'kategori' in col.lower() or 'category' in col.lower() or 'bolum' in col.lower():
88
+ category_col = col
89
+ break
90
+
91
+ # If we can't find required columns, return empty
92
+ if not question_col or not answer_col:
93
+ return pd.DataFrame(), 1, "<div style='text-align: center; padding: 10px;'>Gerekli sütunlar bulunamadı</div>"
94
+
95
+ # Filter by model
96
+ if model and model != "Tümü":
97
+ model_col = f"{model}_cevap"
98
+ if model_col in df.columns:
99
+ df = df[df[model_col].notna()]
100
+
101
+ # Filter by category
102
+ if category and category != "Tümü" and category_col:
103
+ df = df[df[category_col] == category]
104
+
105
+ # Prepare display data
106
+ display_cols = [question_col, answer_col]
107
+ if category_col:
108
+ display_cols.append(category_col)
109
+
110
+ if model and model != "Tümü":
111
+ model_col = f"{model}_cevap"
112
+ if model_col in df.columns:
113
+ display_cols.append(model_col)
114
+ df_display = df[display_cols].copy()
115
+ df_display.columns = ['Soru', 'Doğru Cevap', 'Kategori', 'Model Cevabı'] if category_col else ['Soru', 'Doğru Cevap', 'Model Cevabı']
116
+ else:
117
+ df_display = df[display_cols].copy()
118
+ df_display['Model Cevabı'] = 'Cevap yok'
119
+ df_display.columns = ['Soru', 'Doğru Cevap', 'Kategori', 'Model Cevabı'] if category_col else ['Soru', 'Doğru Cevap', 'Model Cevabı']
120
+ else:
121
+ # Show first available model response
122
+ model_cols = [col for col in df.columns if col.endswith('_cevap')]
123
+ if model_cols:
124
+ display_cols.append(model_cols[0])
125
+ df_display = df[display_cols].copy()
126
+ df_display.columns = ['Soru', 'Doğru Cevap', 'Kategori', 'Model Cevabı'] if category_col else ['Soru', 'Doğru Cevap', 'Model Cevabı']
127
+ else:
128
+ df_display = df[display_cols].copy()
129
+ df_display['Model Cevabı'] = 'Cevap yok'
130
+ df_display.columns = ['Soru', 'Doğru Cevap', 'Kategori', 'Model Cevabı'] if category_col else ['Soru', 'Doğru Cevap', 'Model Cevabı']
131
+
132
+ # Pagination
133
+ total_rows = len(df_display)
134
+ total_pages = (total_rows + page_size_val - 1) // page_size_val
135
+ page = max(1, min(page, total_pages))
136
+ start_idx = (page - 1) * page_size_val
137
+ end_idx = start_idx + page_size_val
138
+ page_data = df_display.iloc[start_idx:end_idx]
139
+ page_info_text = f"<div style='text-align: center; padding: 10px;'>Sayfa {page}/{total_pages} ({total_rows} sonuç)</div>"
140
+ return page_data, page, page_info_text
141
+
142
+ except Exception as e:
143
+ print(f"Filter error: {e}")
144
+ return pd.DataFrame(), 1, "<div style='text-align: center; padding: 10px;'>Filtreleme hatası</div>"
145
+
146
+ def next_page(current_page_val):
147
+ return current_page_val + 1
148
+
149
+ def prev_page(current_page_val):
150
+ return max(1, current_page_val - 1)
151
+
152
+ def clear_filters():
153
+ return "Tümü", "Tümü", 1
154
+
155
+ # Event handlers
156
+ filter_btn.click(
157
+ filter_responses,
158
+ inputs=[model_filter, category_filter, page_size, current_page],
159
+ outputs=[responses_table, current_page, page_info]
160
+ )
161
+
162
+ next_btn.click(
163
+ next_page,
164
+ inputs=[current_page],
165
+ outputs=[current_page]
166
+ ).then(
167
+ filter_responses,
168
+ inputs=[model_filter, category_filter, page_size, current_page],
169
+ outputs=[responses_table, current_page, page_info]
170
+ )
171
+
172
+ prev_btn.click(
173
+ prev_page,
174
+ inputs=[current_page],
175
+ outputs=[current_page]
176
+ ).then(
177
+ filter_responses,
178
+ inputs=[model_filter, category_filter, page_size, current_page],
179
+ outputs=[responses_table, current_page, page_info]
180
+ )
181
+
182
+ clear_btn.click(
183
+ clear_filters,
184
+ outputs=[model_filter, category_filter, current_page]
185
+ ).then(
186
+ filter_responses,
187
+ inputs=[model_filter, category_filter, page_size, current_page],
188
+ outputs=[responses_table, current_page, page_info]
189
+ )