Update app.py
Browse files
app.py
CHANGED
@@ -92,35 +92,27 @@ def calculate_metrics(predictions_df):
|
|
92 |
|
93 |
return avg_wer, avg_cer, weighted_wer, weighted_cer, results
|
94 |
|
95 |
-
def format_as_percentage(value):
|
96 |
-
"""Convert decimal to percentage with 2 decimal places"""
|
97 |
-
return f"{value * 100:.2f}%"
|
98 |
-
|
99 |
-
def make_clickable_model(model_name):
|
100 |
-
"""Format model name as clickable link to Hugging Face hub"""
|
101 |
-
link = f"https://huggingface.co/{model_name}"
|
102 |
-
return f'<a href="{link}" target="_blank" style="text-decoration: underline;">{model_name}</a>'
|
103 |
-
|
104 |
def prepare_leaderboard_for_display(df, sort_by="Combined_Score"):
|
105 |
"""Format leaderboard for display with ranking and percentages"""
|
106 |
if len(df) == 0:
|
107 |
return pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
108 |
|
109 |
-
|
110 |
display_df = df.copy()
|
111 |
|
|
|
112 |
display_df = display_df.sort_values(sort_by)
|
113 |
|
|
|
114 |
display_df.insert(0, "Rank", range(1, len(display_df) + 1))
|
115 |
|
|
|
116 |
for col in ["WER", "CER", "Combined_Score"]:
|
117 |
if col in display_df.columns:
|
|
|
118 |
display_df[f"{col} (%)"] = display_df[col].apply(lambda x: f"{x * 100:.2f}")
|
119 |
display_df = display_df.drop(col, axis=1)
|
120 |
|
121 |
-
if "Model_Name" in display_df.columns:
|
122 |
-
display_df["Model_Name"] = display_df["Model_Name"].apply(make_clickable_model)
|
123 |
-
|
124 |
return display_df
|
125 |
|
126 |
def update_ranking(method):
|
@@ -137,9 +129,11 @@ def update_ranking(method):
|
|
137 |
elif method == "CER Only":
|
138 |
sort_column = "CER"
|
139 |
|
|
|
140 |
return prepare_leaderboard_for_display(current_lb, sort_column)
|
141 |
|
142 |
except Exception:
|
|
|
143 |
return pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
144 |
|
145 |
def process_submission(model_name, csv_file):
|
@@ -186,17 +180,33 @@ def process_submission(model_name, csv_file):
|
|
186 |
columns=["Model_Name", "WER", "CER", "Combined_Score", "timestamp"]
|
187 |
)
|
188 |
|
189 |
-
|
190 |
updated_leaderboard = pd.concat([leaderboard, new_entry]).sort_values("Combined_Score")
|
191 |
updated_leaderboard.to_csv(leaderboard_file, index=False)
|
192 |
|
|
|
193 |
display_leaderboard = prepare_leaderboard_for_display(updated_leaderboard)
|
194 |
|
195 |
-
|
|
|
|
|
|
|
|
|
|
|
196 |
|
197 |
except Exception as e:
|
198 |
return f"Error processing submission: {str(e)}", None
|
199 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
with gr.Blocks(title="Bambara ASR Leaderboard") as demo:
|
201 |
gr.Markdown(
|
202 |
"""
|
@@ -215,6 +225,7 @@ with gr.Blocks(title="Bambara ASR Leaderboard") as demo:
|
|
215 |
if "Combined_Score" not in current_leaderboard.columns:
|
216 |
current_leaderboard["Combined_Score"] = current_leaderboard["WER"] * 0.7 + current_leaderboard["CER"] * 0.3
|
217 |
|
|
|
218 |
display_leaderboard = prepare_leaderboard_for_display(current_leaderboard)
|
219 |
except Exception:
|
220 |
display_leaderboard = pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
@@ -239,6 +250,9 @@ with gr.Blocks(title="Bambara ASR Leaderboard") as demo:
|
|
239 |
outputs=[leaderboard_view]
|
240 |
)
|
241 |
|
|
|
|
|
|
|
242 |
gr.Markdown(
|
243 |
"""
|
244 |
## Metrics Explanation
|
|
|
92 |
|
93 |
return avg_wer, avg_cer, weighted_wer, weighted_cer, results
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
def prepare_leaderboard_for_display(df, sort_by="Combined_Score"):
|
96 |
"""Format leaderboard for display with ranking and percentages"""
|
97 |
if len(df) == 0:
|
98 |
return pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
99 |
|
100 |
+
# Make a copy to avoid modifying the original
|
101 |
display_df = df.copy()
|
102 |
|
103 |
+
# Sort by specified column
|
104 |
display_df = display_df.sort_values(sort_by)
|
105 |
|
106 |
+
# Add ranking column
|
107 |
display_df.insert(0, "Rank", range(1, len(display_df) + 1))
|
108 |
|
109 |
+
# Convert metrics to percentages for display
|
110 |
for col in ["WER", "CER", "Combined_Score"]:
|
111 |
if col in display_df.columns:
|
112 |
+
# Format to 2 decimal places but keep as numeric for sorting
|
113 |
display_df[f"{col} (%)"] = display_df[col].apply(lambda x: f"{x * 100:.2f}")
|
114 |
display_df = display_df.drop(col, axis=1)
|
115 |
|
|
|
|
|
|
|
116 |
return display_df
|
117 |
|
118 |
def update_ranking(method):
|
|
|
129 |
elif method == "CER Only":
|
130 |
sort_column = "CER"
|
131 |
|
132 |
+
# Format for display with ranking and percentages
|
133 |
return prepare_leaderboard_for_display(current_lb, sort_column)
|
134 |
|
135 |
except Exception:
|
136 |
+
# Return empty dataframe with formatted columns
|
137 |
return pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
138 |
|
139 |
def process_submission(model_name, csv_file):
|
|
|
180 |
columns=["Model_Name", "WER", "CER", "Combined_Score", "timestamp"]
|
181 |
)
|
182 |
|
183 |
+
# Update leaderboard without formatting for CSV storage
|
184 |
updated_leaderboard = pd.concat([leaderboard, new_entry]).sort_values("Combined_Score")
|
185 |
updated_leaderboard.to_csv(leaderboard_file, index=False)
|
186 |
|
187 |
+
# Format for display with ranking and percentages
|
188 |
display_leaderboard = prepare_leaderboard_for_display(updated_leaderboard)
|
189 |
|
190 |
+
# Format percentages for the result message
|
191 |
+
wer_pct = f"{avg_wer * 100:.2f}%"
|
192 |
+
cer_pct = f"{avg_cer * 100:.2f}%"
|
193 |
+
combined_pct = f"{combined_score * 100:.2f}%"
|
194 |
+
|
195 |
+
return f"Submission processed successfully! WER: {wer_pct}, CER: {cer_pct}, Combined Score: {combined_pct}", display_leaderboard
|
196 |
|
197 |
except Exception as e:
|
198 |
return f"Error processing submission: {str(e)}", None
|
199 |
|
200 |
+
def add_model_info_section():
|
201 |
+
"""Return HTML with information about viewing model details"""
|
202 |
+
return """
|
203 |
+
<div style="margin-top: 20px; padding: 10px; background-color: #f8f9fa; border-radius: 5px;">
|
204 |
+
<p><strong>📌 Note:</strong> To view details about a specific model, visit its page on the Hugging Face Hub:</p>
|
205 |
+
<p>https://huggingface.co/MODEL_NAME</p>
|
206 |
+
<p>For example: <a href="https://huggingface.co/MALIBA-AI/bambara-asr" target="_blank">https://huggingface.co/MALIBA-AI/bambara-asr</a></p>
|
207 |
+
</div>
|
208 |
+
"""
|
209 |
+
|
210 |
with gr.Blocks(title="Bambara ASR Leaderboard") as demo:
|
211 |
gr.Markdown(
|
212 |
"""
|
|
|
225 |
if "Combined_Score" not in current_leaderboard.columns:
|
226 |
current_leaderboard["Combined_Score"] = current_leaderboard["WER"] * 0.7 + current_leaderboard["CER"] * 0.3
|
227 |
|
228 |
+
# Format for display with ranking and percentages
|
229 |
display_leaderboard = prepare_leaderboard_for_display(current_leaderboard)
|
230 |
except Exception:
|
231 |
display_leaderboard = pd.DataFrame(columns=["Rank", "Model_Name", "WER (%)", "CER (%)", "Combined_Score (%)", "timestamp"])
|
|
|
250 |
outputs=[leaderboard_view]
|
251 |
)
|
252 |
|
253 |
+
# Add info about viewing model details
|
254 |
+
gr.HTML(add_model_info_section())
|
255 |
+
|
256 |
gr.Markdown(
|
257 |
"""
|
258 |
## Metrics Explanation
|