xinchen9 commited on
Commit
8235a54
β€’
1 Parent(s): 76c4259

[Update]Back to leaderboard

Browse files
Files changed (1) hide show
  1. app.py +256 -96
app.py CHANGED
@@ -1,12 +1,15 @@
 
1
  import gradio as gr
2
  import pandas as pd
 
 
 
3
  from src.about import (
4
  CITATION_BUTTON_LABEL,
5
  CITATION_BUTTON_TEXT,
6
  EVALUATION_QUEUE_TEXT,
7
  INTRODUCTION_TEXT,
8
  LLM_BENCHMARKS_TEXT,
9
- #FAQ_TEXT,
10
  TITLE,
11
  )
12
  from src.display.css_html_js import custom_css
@@ -23,163 +26,320 @@ from src.display.utils import (
23
  WeightType,
24
  Precision
25
  )
26
- from src.envs import API, EVAL_REQUESTS_PATH, EVAL_RESULTS_PATH, H4_TOKEN, IS_PUBLIC, QUEUE_REPO, REPO_ID, RESULTS_REPO
27
- from PIL import Image
28
- from dummydatagen import dummy_data_for_plot, create_metric_plot_obj_1, dummydf
29
- import copy
30
 
31
 
32
  def restart_space():
33
- API.restart_space(repo_id=REPO_ID, token=H4_TOKEN)
34
 
35
- # Searching and filtering
36
- raw_data = dummydf()
37
- methods = list(set(raw_data['Method']))
38
- metrics = ["Style-UA", "Style-IRA", "Style-CRA", "Object-UA", "Object-IRA", "Object-CRA", "FID", "Time (s)", "Storage (GB)", "Memory (GB)"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
 
 
 
 
 
 
 
 
40
  def update_table(
41
  hidden_df: pd.DataFrame,
42
- columns_1: list,
43
- columns_2: list,
44
- columns_3: list,
45
- model1: list,
 
 
46
  ):
 
 
 
 
47
 
48
- filtered_df = select_columns(hidden_df, columns_1, columns_2, columns_3)
49
 
50
- filtered_df = filter_model1(filtered_df, model1)
51
-
52
- return filtered_df
53
 
54
 
55
- def select_columns(df: pd.DataFrame, columns_1: list, columns_2: list, columns_3: list) -> pd.DataFrame:
56
- always_here_cols = ["Method"]
57
-
 
 
58
  # We use COLS to maintain sorting
59
- all_columns = metrics
 
 
 
60
 
61
- if (len(columns_1)+len(columns_2) + len(columns_3)) == 0:
62
- filtered_df = df[
63
- always_here_cols +
64
- [c for c in all_columns if c in df.columns]
65
- ]
66
 
67
- else:
68
- filtered_df = df[
69
- always_here_cols +
70
- [c for c in all_columns if c in df.columns and (c in columns_1 or c in columns_2 or c in columns_3 ) ]
71
- ]
 
 
 
 
 
 
 
 
 
 
72
 
73
  return filtered_df
74
 
75
 
76
- def filter_model1(df: pd.DataFrame, model_query: list) -> pd.DataFrame:
 
 
77
  # Show all models
78
- if len(model_query) == 0:
79
- return df
80
-
81
- filtered_df = df
82
- filtered_df = filtered_df[filtered_df["Method"].isin(model_query)]
83
- return filtered_df
84
 
 
 
 
85
 
 
 
 
 
86
 
87
- demo = gr.Blocks(css=custom_css)
88
 
89
 
 
90
  with demo:
91
- with gr.Row():
92
- gr.Image("./assets/logo.png", height="200px", width="200px", scale=0.1,
93
- show_download_button=False, container=False)
94
- gr.HTML(TITLE, elem_id="title")
95
-
96
  gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text")
 
97
  with gr.Tabs(elem_classes="tab-buttons") as tabs:
98
- with gr.TabItem("πŸ… UnlearnCanvas Benchmark", elem_id="llm-benchmark-tab-table", id=0):
99
  with gr.Row():
100
  with gr.Column():
101
  with gr.Row():
102
- model1_column = gr.CheckboxGroup(
103
- label="Unlearning Methods",
104
- choices=methods,
105
- interactive=True,
106
- elem_id="column-select",
107
- )
108
-
109
- with gr.Row():
110
- shown_columns_1 = gr.CheckboxGroup(
111
- choices=["Style-UA", "Style-IRA", "Style-CRA", "Object-UA", "Object-IRA", "Object-CRA"],
112
- label="Style / Object Unlearning Effectiveness",
113
- elem_id="column-select",
114
- interactive=True,
115
  )
116
-
117
  with gr.Row():
118
- shown_columns_2 = gr.CheckboxGroup(
119
- choices=["FID"],
120
- label="Image Quality",
 
 
 
 
 
 
 
 
 
121
  elem_id="column-select",
122
  interactive=True,
123
  )
124
-
125
  with gr.Row():
126
- shown_columns_3 = gr.CheckboxGroup(
127
- choices=["Time (s)", "Memory (GB)", "Storage (GB)"],
128
- label="Resource Costs",
129
- elem_id="column-select",
130
- interactive=True,
131
  )
132
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
  leaderboard_table = gr.components.Dataframe(
135
- value= raw_data,
 
 
 
 
 
136
  elem_id="leaderboard-table",
137
  interactive=False,
138
  visible=True,
139
- # column_widths=["2%", "33%"]
140
  )
141
 
142
- game_bench_df_for_search = gr.components.Dataframe(
143
- value= raw_data,
144
- elem_id="leaderboard-table",
145
- interactive=False,
 
146
  visible=False,
147
- # column_widths=["2%", "33%"]
148
  )
149
-
150
-
151
- for selector in [shown_columns_1,shown_columns_2, shown_columns_3, model1_column]:
 
 
 
 
 
 
 
 
 
 
 
152
  selector.change(
153
  update_table,
154
- [
155
- game_bench_df_for_search,
156
- shown_columns_1,
157
- shown_columns_2,
158
- shown_columns_3,
159
- model1_column,
 
 
160
  ],
161
  leaderboard_table,
162
  queue=True,
163
  )
164
-
165
- with gr.TabItem("πŸš€ Model Submit", elem_id="llm-benchmark-tab-table", id=1):
166
- gr.Markdown(EVALUATION_QUEUE_TEXT, elem_classes="markdown-text")
167
- gr.Markdown(FAQ_TEXT, elem_classes="markdown-text")
168
 
169
  with gr.TabItem("πŸ“ About", elem_id="llm-benchmark-tab-table", id=2):
170
  gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text")
171
- gr.Markdown(FAQ_TEXT, elem_classes="markdown-text")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
 
173
  with gr.Row():
174
- with gr.Accordion("πŸ“™ Citation", open=True):
175
  citation_button = gr.Textbox(
176
  value=CITATION_BUTTON_TEXT,
177
  label=CITATION_BUTTON_LABEL,
178
- lines=8,
179
  elem_id="citation-button",
180
  show_copy_button=True,
181
  )
182
 
183
-
184
- demo.launch()
185
-
 
 
1
+ import subprocess
2
  import gradio as gr
3
  import pandas as pd
4
+ from apscheduler.schedulers.background import BackgroundScheduler
5
+ from huggingface_hub import snapshot_download
6
+
7
  from src.about import (
8
  CITATION_BUTTON_LABEL,
9
  CITATION_BUTTON_TEXT,
10
  EVALUATION_QUEUE_TEXT,
11
  INTRODUCTION_TEXT,
12
  LLM_BENCHMARKS_TEXT,
 
13
  TITLE,
14
  )
15
  from src.display.css_html_js import custom_css
 
26
  WeightType,
27
  Precision
28
  )
29
+ from src.envs import API, EVAL_REQUESTS_PATH, EVAL_RESULTS_PATH, QUEUE_REPO, REPO_ID, RESULTS_REPO, TOKEN
30
+ from src.populate import get_evaluation_queue_df, get_leaderboard_df
31
+ from src.submission.submit import add_new_eval
 
32
 
33
 
34
  def restart_space():
35
+ API.restart_space(repo_id=REPO_ID)
36
 
37
+ try:
38
+ print(EVAL_REQUESTS_PATH)
39
+ snapshot_download(
40
+ repo_id=QUEUE_REPO, local_dir=EVAL_REQUESTS_PATH, repo_type="dataset", tqdm_class=None, etag_timeout=30, token=TOKEN
41
+ )
42
+ except Exception:
43
+ restart_space()
44
+ try:
45
+ print(EVAL_RESULTS_PATH)
46
+ snapshot_download(
47
+ repo_id=RESULTS_REPO, local_dir=EVAL_RESULTS_PATH, repo_type="dataset", tqdm_class=None, etag_timeout=30, token=TOKEN
48
+ )
49
+ except Exception:
50
+ restart_space()
51
+
52
+
53
+ raw_data, original_df = get_leaderboard_df(EVAL_RESULTS_PATH, EVAL_REQUESTS_PATH, COLS, BENCHMARK_COLS)
54
+ leaderboard_df = original_df.copy()
55
 
56
+ (
57
+ finished_eval_queue_df,
58
+ running_eval_queue_df,
59
+ pending_eval_queue_df,
60
+ ) = get_evaluation_queue_df(EVAL_REQUESTS_PATH, EVAL_COLS)
61
+
62
+
63
+ # Searching and filtering
64
  def update_table(
65
  hidden_df: pd.DataFrame,
66
+ columns: list,
67
+ type_query: list,
68
+ precision_query: str,
69
+ size_query: list,
70
+ show_deleted: bool,
71
+ query: str,
72
  ):
73
+ filtered_df = filter_models(hidden_df, type_query, size_query, precision_query, show_deleted)
74
+ filtered_df = filter_queries(query, filtered_df)
75
+ df = select_columns(filtered_df, columns)
76
+ return df
77
 
 
78
 
79
+ def search_table(df: pd.DataFrame, query: str) -> pd.DataFrame:
80
+ return df[(df[AutoEvalColumn.model.name].str.contains(query, case=False))]
 
81
 
82
 
83
+ def select_columns(df: pd.DataFrame, columns: list) -> pd.DataFrame:
84
+ always_here_cols = [
85
+ AutoEvalColumn.model_type_symbol.name,
86
+ AutoEvalColumn.model.name,
87
+ ]
88
  # We use COLS to maintain sorting
89
+ filtered_df = df[
90
+ always_here_cols + [c for c in COLS if c in df.columns and c in columns]
91
+ ]
92
+ return filtered_df
93
 
 
 
 
 
 
94
 
95
+ def filter_queries(query: str, filtered_df: pd.DataFrame) -> pd.DataFrame:
96
+ final_df = []
97
+ if query != "":
98
+ queries = [q.strip() for q in query.split(";")]
99
+ for _q in queries:
100
+ _q = _q.strip()
101
+ if _q != "":
102
+ temp_filtered_df = search_table(filtered_df, _q)
103
+ if len(temp_filtered_df) > 0:
104
+ final_df.append(temp_filtered_df)
105
+ if len(final_df) > 0:
106
+ filtered_df = pd.concat(final_df)
107
+ filtered_df = filtered_df.drop_duplicates(
108
+ subset=[AutoEvalColumn.model.name, AutoEvalColumn.precision.name, AutoEvalColumn.revision.name]
109
+ )
110
 
111
  return filtered_df
112
 
113
 
114
+ def filter_models(
115
+ df: pd.DataFrame, type_query: list, size_query: list, precision_query: list, show_deleted: bool
116
+ ) -> pd.DataFrame:
117
  # Show all models
118
+ if show_deleted:
119
+ filtered_df = df
120
+ else: # Show only still on the hub models
121
+ filtered_df = df[df[AutoEvalColumn.still_on_hub.name] == True]
 
 
122
 
123
+ type_emoji = [t[0] for t in type_query]
124
+ filtered_df = filtered_df.loc[df[AutoEvalColumn.model_type_symbol.name].isin(type_emoji)]
125
+ filtered_df = filtered_df.loc[df[AutoEvalColumn.precision.name].isin(precision_query + ["None"])]
126
 
127
+ numeric_interval = pd.IntervalIndex(sorted([NUMERIC_INTERVALS[s] for s in size_query]))
128
+ params_column = pd.to_numeric(df[AutoEvalColumn.params.name], errors="coerce")
129
+ mask = params_column.apply(lambda x: any(numeric_interval.contains(x)))
130
+ filtered_df = filtered_df.loc[mask]
131
 
132
+ return filtered_df
133
 
134
 
135
+ demo = gr.Blocks(css=custom_css)
136
  with demo:
137
+ gr.HTML(TITLE)
 
 
 
 
138
  gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text")
139
+
140
  with gr.Tabs(elem_classes="tab-buttons") as tabs:
141
+ with gr.TabItem("UnlearnDiffAtk Benchmark", elem_id="UnlearnDiffAtk-benchmark-tab-table", id=0):
142
  with gr.Row():
143
  with gr.Column():
144
  with gr.Row():
145
+ search_bar = gr.Textbox(
146
+ placeholder=" πŸ” Search for your model (separate multiple queries with `;`) and press ENTER...",
147
+ show_label=False,
148
+ elem_id="search-bar",
 
 
 
 
 
 
 
 
 
149
  )
 
150
  with gr.Row():
151
+ shown_columns = gr.CheckboxGroup(
152
+ choices=[
153
+ c.name
154
+ for c in fields(AutoEvalColumn)
155
+ if not c.hidden and not c.never_hidden
156
+ ],
157
+ value=[
158
+ c.name
159
+ for c in fields(AutoEvalColumn)
160
+ if c.displayed_by_default and not c.hidden and not c.never_hidden
161
+ ],
162
+ label="Select columns to show",
163
  elem_id="column-select",
164
  interactive=True,
165
  )
 
166
  with gr.Row():
167
+ deleted_models_visibility = gr.Checkbox(
168
+ value=False, label="Show gated/private/deleted models", interactive=True
 
 
 
169
  )
170
+ with gr.Column(min_width=320):
171
+ #with gr.Box(elem_id="box-filter"):
172
+ filter_columns_type = gr.CheckboxGroup(
173
+ label="Unlearning types",
174
+ choices=[t.to_str() for t in ModelType],
175
+ value=[t.to_str() for t in ModelType],
176
+ interactive=True,
177
+ elem_id="filter-columns-type",
178
+ )
179
+ filter_columns_precision = gr.CheckboxGroup(
180
+ label="Precision",
181
+ choices=[i.value.name for i in Precision],
182
+ value=[i.value.name for i in Precision],
183
+ interactive=True,
184
+ elem_id="filter-columns-precision",
185
+ )
186
+ filter_columns_size = gr.CheckboxGroup(
187
+ label="Model sizes (in billions of parameters)",
188
+ choices=list(NUMERIC_INTERVALS.keys()),
189
+ value=list(NUMERIC_INTERVALS.keys()),
190
+ interactive=True,
191
+ elem_id="filter-columns-size",
192
+ )
193
 
194
  leaderboard_table = gr.components.Dataframe(
195
+ value=leaderboard_df[
196
+ [c.name for c in fields(AutoEvalColumn) if c.never_hidden]
197
+ + shown_columns.value
198
+ ],
199
+ headers=[c.name for c in fields(AutoEvalColumn) if c.never_hidden] + shown_columns.value,
200
+ datatype=TYPES,
201
  elem_id="leaderboard-table",
202
  interactive=False,
203
  visible=True,
 
204
  )
205
 
206
+ # Dummy leaderboard for handling the case when the user uses backspace key
207
+ hidden_leaderboard_table_for_search = gr.components.Dataframe(
208
+ value=original_df[COLS],
209
+ headers=COLS,
210
+ datatype=TYPES,
211
  visible=False,
 
212
  )
213
+ search_bar.submit(
214
+ update_table,
215
+ [
216
+ hidden_leaderboard_table_for_search,
217
+ shown_columns,
218
+ filter_columns_type,
219
+ filter_columns_precision,
220
+ filter_columns_size,
221
+ deleted_models_visibility,
222
+ search_bar,
223
+ ],
224
+ leaderboard_table,
225
+ )
226
+ for selector in [shown_columns, filter_columns_type, filter_columns_precision, filter_columns_size, deleted_models_visibility]:
227
  selector.change(
228
  update_table,
229
+ [
230
+ hidden_leaderboard_table_for_search,
231
+ shown_columns,
232
+ filter_columns_type,
233
+ filter_columns_precision,
234
+ filter_columns_size,
235
+ deleted_models_visibility,
236
+ search_bar,
237
  ],
238
  leaderboard_table,
239
  queue=True,
240
  )
 
 
 
 
241
 
242
  with gr.TabItem("πŸ“ About", elem_id="llm-benchmark-tab-table", id=2):
243
  gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text")
244
+
245
+ with gr.TabItem("πŸš€ Submit here! ", elem_id="llm-benchmark-tab-table", id=3):
246
+ with gr.Column():
247
+ with gr.Row():
248
+ gr.Markdown(EVALUATION_QUEUE_TEXT, elem_classes="markdown-text")
249
+
250
+ with gr.Column():
251
+ with gr.Accordion(
252
+ f"βœ… Finished Evaluations ({len(finished_eval_queue_df)})",
253
+ open=False,
254
+ ):
255
+ with gr.Row():
256
+ finished_eval_table = gr.components.Dataframe(
257
+ value=finished_eval_queue_df,
258
+ headers=EVAL_COLS,
259
+ datatype=EVAL_TYPES,
260
+ row_count=5,
261
+ )
262
+ with gr.Accordion(
263
+ f"πŸ”„ Running Evaluation Queue ({len(running_eval_queue_df)})",
264
+ open=False,
265
+ ):
266
+ with gr.Row():
267
+ running_eval_table = gr.components.Dataframe(
268
+ value=running_eval_queue_df,
269
+ headers=EVAL_COLS,
270
+ datatype=EVAL_TYPES,
271
+ row_count=5,
272
+ )
273
+
274
+ with gr.Accordion(
275
+ f"⏳ Pending Evaluation Queue ({len(pending_eval_queue_df)})",
276
+ open=False,
277
+ ):
278
+ with gr.Row():
279
+ pending_eval_table = gr.components.Dataframe(
280
+ value=pending_eval_queue_df,
281
+ headers=EVAL_COLS,
282
+ datatype=EVAL_TYPES,
283
+ row_count=5,
284
+ )
285
+ with gr.Row():
286
+ gr.Markdown("# βœ‰οΈβœ¨ Submit your model here!", elem_classes="markdown-text")
287
+
288
+ with gr.Row():
289
+ with gr.Column():
290
+ model_name_textbox = gr.Textbox(label="Model name")
291
+ revision_name_textbox = gr.Textbox(label="Revision commit", placeholder="main")
292
+ model_type = gr.Dropdown(
293
+ choices=[t.to_str(" : ") for t in ModelType if t != ModelType.Unknown],
294
+ label="Model type",
295
+ multiselect=False,
296
+ value=None,
297
+ interactive=True,
298
+ )
299
+
300
+ with gr.Column():
301
+ precision = gr.Dropdown(
302
+ choices=[i.value.name for i in Precision if i != Precision.Unknown],
303
+ label="Precision",
304
+ multiselect=False,
305
+ value="float16",
306
+ interactive=True,
307
+ )
308
+ weight_type = gr.Dropdown(
309
+ choices=[i.value.name for i in WeightType],
310
+ label="Weights type",
311
+ multiselect=False,
312
+ value="Original",
313
+ interactive=True,
314
+ )
315
+ base_model_name_textbox = gr.Textbox(label="Base model (for delta or adapter weights)")
316
+
317
+ submit_button = gr.Button("Submit Eval")
318
+ submission_result = gr.Markdown()
319
+ submit_button.click(
320
+ add_new_eval,
321
+ [
322
+ model_name_textbox,
323
+ base_model_name_textbox,
324
+ revision_name_textbox,
325
+ precision,
326
+ weight_type,
327
+ model_type,
328
+ ],
329
+ submission_result,
330
+ )
331
 
332
  with gr.Row():
333
+ with gr.Accordion("πŸ“™ Citation", open=False):
334
  citation_button = gr.Textbox(
335
  value=CITATION_BUTTON_TEXT,
336
  label=CITATION_BUTTON_LABEL,
337
+ lines=10,
338
  elem_id="citation-button",
339
  show_copy_button=True,
340
  )
341
 
342
+ scheduler = BackgroundScheduler()
343
+ scheduler.add_job(restart_space, "interval", seconds=1800)
344
+ scheduler.start()
345
+ demo.queue(default_concurrency_limit=40).launch()