bgamazay commited on
Commit
bff1996
·
verified ·
1 Parent(s): ca20221

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -16
app.py CHANGED
@@ -1,5 +1,7 @@
1
  import gradio as gr
2
  import pandas as pd
 
 
3
 
4
  CITATION_BUTTON_LABEL = "Copy the following snippet to cite these results"
5
  CITATION_BUTTON_TEXT = r"""@misc{aienergyscore-leaderboard,
@@ -37,20 +39,38 @@ def make_link(mname):
37
  display_name = parts[1] if len(parts) > 1 else mname
38
  return f'<a href="https://huggingface.co/{mname}" target="_blank">{display_name}</a>'
39
 
 
 
 
 
 
 
 
 
 
40
  def generate_html_table_from_df(df):
41
  """
42
  Given a dataframe with a numeric energy column (gpu_energy_numeric),
43
  generate an HTML table with three columns:
44
- - Model (the link)
45
  - GPU Energy (Wh) plus a horizontal bar whose width is proportional
46
  to the energy value relative to the maximum in the table.
47
  - Score (displayed as stars)
48
  """
 
 
 
 
 
 
 
 
49
  max_energy = df['gpu_energy_numeric'].max() if not df.empty else 1
50
  color_map = {"1": "red", "2": "orange", "3": "yellow", "4": "lightgreen", "5": "green"}
51
  html = '<table style="width:100%; border-collapse: collapse; font-family: Arial, sans-serif;">'
52
- html += '<thead><tr style="background-color: #f2f2f2;">'
53
- html += '<th style="text-align: left; padding: 8px;">Model</th>'
 
54
  html += '<th style="text-align: left; padding: 8px;">GPU Energy (Wh)</th>'
55
  html += '<th style="text-align: left; padding: 8px;">Score</th>'
56
  html += '</tr></thead>'
@@ -63,7 +83,8 @@ def generate_html_table_from_df(df):
63
  score_val = row['energy_score']
64
  bar_color = color_map.get(str(score_val), "gray")
65
  html += '<tr>'
66
- html += f'<td style="padding: 8px;">{row["Model"]}</td>'
 
67
  html += (
68
  f'<td style="padding: 8px;">{energy_str}<br>'
69
  f'<div style="background-color: {bar_color}; width: {bar_width:.1f}%; height: 10px;"></div></td>'
@@ -73,6 +94,17 @@ def generate_html_table_from_df(df):
73
  html += '</tbody></table>'
74
  return html
75
 
 
 
 
 
 
 
 
 
 
 
 
76
  # --- Modified functions to include a sort_order parameter ---
77
  def get_model_names_html(task, sort_order="High to Low"):
78
  df = pd.read_csv('data/energy/' + task)
@@ -181,17 +213,14 @@ with demo:
181
  ### Welcome to the leaderboard for the [AI Energy Score Project!](https://huggingface.co/AIEnergyScore) — Select different tasks to see scored models."""
182
  )
183
 
184
- # Header links:
185
- gr.HTML('''
186
- <div style="text-align: center; margin-bottom: 20px;">
187
- <a href="https://huggingface.co/spaces/AIEnergyScore/submission_portal" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Submission Portal</a>
188
- <a href="https://huggingface.co/spaces/AIEnergyScore/Label" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Label Generator</a>
189
- <a href="https://huggingface.github.io/AIEnergyScore/#faq" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">FAQ</a>
190
- <a href="https://huggingface.github.io/AIEnergyScore/#documentation" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Documentation</a>
191
- <a href="https://huggingface.co/spaces/AIEnergyScore/README/discussions" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Community</a>
192
-
193
- </div>
194
- ''')
195
 
196
  with gr.Tabs():
197
  # --- Text Generation Tab ---
@@ -327,4 +356,4 @@ with demo:
327
  )
328
  gr.Markdown("""Last updated: February 2025""")
329
 
330
- demo.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import os
4
+ import zipfile
5
 
6
  CITATION_BUTTON_LABEL = "Copy the following snippet to cite these results"
7
  CITATION_BUTTON_TEXT = r"""@misc{aienergyscore-leaderboard,
 
39
  display_name = parts[1] if len(parts) > 1 else mname
40
  return f'<a href="https://huggingface.co/{mname}" target="_blank">{display_name}</a>'
41
 
42
+ def extract_link_text(html_link):
43
+ """Extracts the inner text from an HTML link."""
44
+ start = html_link.find('>') + 1
45
+ end = html_link.rfind('</a>')
46
+ if start > 0 and end > start:
47
+ return html_link[start:end]
48
+ else:
49
+ return html_link
50
+
51
  def generate_html_table_from_df(df):
52
  """
53
  Given a dataframe with a numeric energy column (gpu_energy_numeric),
54
  generate an HTML table with three columns:
55
+ - Model (the link, with a fixed width based on the longest model name)
56
  - GPU Energy (Wh) plus a horizontal bar whose width is proportional
57
  to the energy value relative to the maximum in the table.
58
  - Score (displayed as stars)
59
  """
60
+ # Compute a static width (in pixels) for the Model column based on the longest model name.
61
+ if not df.empty:
62
+ max_length = max(len(extract_link_text(link)) for link in df['Model'])
63
+ else:
64
+ max_length = 10
65
+ # Multiply by an estimated average character width (10 pixels) and add some extra padding.
66
+ static_width = max_length * 10 + 16
67
+
68
  max_energy = df['gpu_energy_numeric'].max() if not df.empty else 1
69
  color_map = {"1": "red", "2": "orange", "3": "yellow", "4": "lightgreen", "5": "green"}
70
  html = '<table style="width:100%; border-collapse: collapse; font-family: Arial, sans-serif;">'
71
+ # Apply the static width to the Model column header.
72
+ html += f'<thead><tr style="background-color: #f2f2f2;">'
73
+ html += f'<th style="text-align: left; padding: 8px; width: {static_width}px;">Model</th>'
74
  html += '<th style="text-align: left; padding: 8px;">GPU Energy (Wh)</th>'
75
  html += '<th style="text-align: left; padding: 8px;">Score</th>'
76
  html += '</tr></thead>'
 
83
  score_val = row['energy_score']
84
  bar_color = color_map.get(str(score_val), "gray")
85
  html += '<tr>'
86
+ # Apply the static width to the Model column cell.
87
+ html += f'<td style="padding: 8px; width: {static_width}px;">{row["Model"]}</td>'
88
  html += (
89
  f'<td style="padding: 8px;">{energy_str}<br>'
90
  f'<div style="background-color: {bar_color}; width: {bar_width:.1f}%; height: 10px;"></div></td>'
 
94
  html += '</tbody></table>'
95
  return html
96
 
97
+ # --- Function to zip all CSV files ---
98
+ def zip_csv_files():
99
+ data_dir = "data/energy"
100
+ zip_filename = "data.zip"
101
+ with zipfile.ZipFile(zip_filename, "w", zipfile.ZIP_DEFLATED) as zipf:
102
+ for filename in os.listdir(data_dir):
103
+ if filename.endswith(".csv"):
104
+ filepath = os.path.join(data_dir, filename)
105
+ zipf.write(filepath, arcname=filename)
106
+ return zip_filename
107
+
108
  # --- Modified functions to include a sort_order parameter ---
109
  def get_model_names_html(task, sort_order="High to Low"):
110
  df = pd.read_csv('data/energy/' + task)
 
213
  ### Welcome to the leaderboard for the [AI Energy Score Project!](https://huggingface.co/AIEnergyScore) — Select different tasks to see scored models."""
214
  )
215
 
216
+ # Header links (now using a row of components, including a Download Data button)
217
+ with gr.Row():
218
+ submission_link = gr.HTML('<a href="https://huggingface.co/spaces/AIEnergyScore/submission_portal" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Submission Portal</a>')
219
+ label_link = gr.HTML('<a href="https://huggingface.co/spaces/AIEnergyScore/Label" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Label Generator</a>')
220
+ download_button = gr.DownloadButton("Download Data", fn=zip_csv_files, file_name="data.zip", variant="link", style={"margin": "0 15px", "font-weight": "bold", "font-size": "1.1em"})
221
+ faq_link = gr.HTML('<a href="https://huggingface.github.io/AIEnergyScore/#faq" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">FAQ</a>')
222
+ documentation_link = gr.HTML('<a href="https://huggingface.github.io/AIEnergyScore/#documentation" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Documentation</a>')
223
+ community_link = gr.HTML('<a href="https://huggingface.co/spaces/AIEnergyScore/README/discussions" style="margin: 0 15px; text-decoration: none; font-weight: bold; font-size: 1.1em;">Community</a>')
 
 
 
224
 
225
  with gr.Tabs():
226
  # --- Text Generation Tab ---
 
356
  )
357
  gr.Markdown("""Last updated: February 2025""")
358
 
359
+ demo.launch()