Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Clémentine
commited on
Commit
•
388bfbd
1
Parent(s):
953dbe3
the webhooks will download the model at each update, and demo.load will restart the viewer at each page refresh
Browse files
app.py
CHANGED
@@ -44,7 +44,9 @@ from src.tools.plots import create_metric_plot_obj, create_plot_df, create_score
|
|
44 |
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
45 |
|
46 |
|
47 |
-
|
|
|
|
|
48 |
|
49 |
def restart_space():
|
50 |
API.restart_space(repo_id=REPO_ID, token=HF_TOKEN)
|
@@ -86,37 +88,49 @@ def download_dataset(repo_id, local_dir, repo_type="dataset", max_attempts=3, ba
|
|
86 |
attempt += 1
|
87 |
raise Exception(f"Failed to download {repo_id} after {max_attempts} attempts")
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
"""Initializes the application space, loading only necessary data."""
|
92 |
-
if
|
93 |
# These downloads only occur on full initialization
|
94 |
try:
|
95 |
download_dataset(QUEUE_REPO, EVAL_REQUESTS_PATH)
|
96 |
except Exception:
|
97 |
restart_space()
|
98 |
|
99 |
-
# Always
|
100 |
-
|
101 |
-
leaderboard_df = get_leaderboard_df(
|
102 |
-
leaderboard_dataset=leaderboard_dataset,
|
103 |
-
cols=COLS,
|
104 |
-
benchmark_cols=BENCHMARK_COLS,
|
105 |
-
)
|
106 |
|
107 |
# Evaluation queue DataFrame retrieval is independent of initialization detail level
|
108 |
-
eval_queue_dfs =
|
109 |
|
110 |
return leaderboard_df, eval_queue_dfs
|
111 |
|
112 |
|
113 |
-
# Convert the environment variable "LEADERBOARD_FULL_INIT" to a boolean value, defaulting to True if the variable is not set.
|
114 |
-
# This controls whether a full initialization should be performed.
|
115 |
-
do_full_init = os.getenv("LEADERBOARD_FULL_INIT", "True") == "True"
|
116 |
-
|
117 |
# Calls the init_space function with the `full_init` parameter determined by the `do_full_init` variable.
|
118 |
# This initializes various DataFrames used throughout the application, with the level of initialization detail controlled by the `do_full_init` flag.
|
119 |
-
leaderboard_df, eval_queue_dfs = init_space(
|
120 |
finished_eval_queue_df, running_eval_queue_df, pending_eval_queue_df = eval_queue_dfs
|
121 |
|
122 |
|
@@ -125,6 +139,39 @@ finished_eval_queue_df, running_eval_queue_df, pending_eval_queue_df = eval_queu
|
|
125 |
# plot_df = create_plot_df(create_scores_df(leaderboard_df))
|
126 |
# return plot_df
|
127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
|
129 |
demo = gr.Blocks(css=custom_css)
|
130 |
with demo:
|
@@ -133,37 +180,7 @@ with demo:
|
|
133 |
|
134 |
with gr.Tabs(elem_classes="tab-buttons") as tabs:
|
135 |
with gr.TabItem("🏅 LLM Benchmark", elem_id="llm-benchmark-tab-table", id=0):
|
136 |
-
leaderboard =
|
137 |
-
value=leaderboard_df,
|
138 |
-
datatype=[c.type for c in fields(AutoEvalColumn)],
|
139 |
-
select_columns=SelectColumns(
|
140 |
-
default_selection=[c.name for c in fields(AutoEvalColumn) if c.displayed_by_default],
|
141 |
-
cant_deselect=[c.name for c in fields(AutoEvalColumn) if c.never_hidden or c.dummy],
|
142 |
-
label="Select Columns to Display:",
|
143 |
-
),
|
144 |
-
search_columns=[AutoEvalColumn.model.name, AutoEvalColumn.fullname.name, AutoEvalColumn.license.name],
|
145 |
-
hide_columns=[c.name for c in fields(AutoEvalColumn) if c.hidden],
|
146 |
-
filter_columns=[
|
147 |
-
ColumnFilter(AutoEvalColumn.model_type.name, type="checkboxgroup", label="Model types"),
|
148 |
-
ColumnFilter(AutoEvalColumn.precision.name, type="checkboxgroup", label="Precision"),
|
149 |
-
ColumnFilter(
|
150 |
-
AutoEvalColumn.params.name,
|
151 |
-
type="slider",
|
152 |
-
min=0.01,
|
153 |
-
max=150,
|
154 |
-
label="Select the number of parameters (B)",
|
155 |
-
),
|
156 |
-
ColumnFilter(
|
157 |
-
AutoEvalColumn.still_on_hub.name, type="boolean", label="Private or deleted", default=True
|
158 |
-
),
|
159 |
-
ColumnFilter(
|
160 |
-
AutoEvalColumn.merged.name, type="boolean", label="Contains a merge/moerge", default=True
|
161 |
-
),
|
162 |
-
ColumnFilter(AutoEvalColumn.moe.name, type="boolean", label="MoE", default=False),
|
163 |
-
ColumnFilter(AutoEvalColumn.not_flagged.name, type="boolean", label="Flagged", default=True),
|
164 |
-
],
|
165 |
-
bool_checkboxgroup_label="Hide models",
|
166 |
-
)
|
167 |
|
168 |
#with gr.TabItem("📈 Metrics through time", elem_id="llm-benchmark-tab-table", id=2):
|
169 |
# with gr.Row():
|
@@ -288,16 +305,18 @@ with demo:
|
|
288 |
show_copy_button=True,
|
289 |
)
|
290 |
|
|
|
|
|
|
|
291 |
demo.queue(default_concurrency_limit=40)
|
292 |
|
293 |
# Start ephemeral Spaces on PRs (see config in README.md)
|
294 |
from gradio_space_ci.webhook import IS_EPHEMERAL_SPACE, SPACE_ID, configure_space_ci
|
295 |
|
296 |
-
|
297 |
-
|
298 |
def enable_space_ci_and_return_server(ui: gr.Blocks) -> WebhooksServer:
|
299 |
# Taken from https://huggingface.co/spaces/Wauplin/gradio-space-ci/blob/075119aee75ab5e7150bf0814eec91c83482e790/src/gradio_space_ci/webhook.py#L61
|
300 |
# Compared to original, this one do not monkeypatch Gradio which allows us to define more webhooks.
|
|
|
301 |
if SPACE_ID is None:
|
302 |
print("Not in a Space: Space CI disabled.")
|
303 |
return WebhooksServer(ui=demo)
|
@@ -311,7 +330,7 @@ def enable_space_ci_and_return_server(ui: gr.Blocks) -> WebhooksServer:
|
|
311 |
print(f"Enabling Space CI with config from README: {config}")
|
312 |
|
313 |
return configure_space_ci(
|
314 |
-
blocks=
|
315 |
trusted_authors=config.get("trusted_authors"),
|
316 |
private=config.get("private", "auto"),
|
317 |
variables=config.get("variables", "auto"),
|
@@ -326,24 +345,21 @@ webhooks_server = enable_space_ci_and_return_server(ui=demo)
|
|
326 |
# Add webhooks
|
327 |
@webhooks_server.add_webhook
|
328 |
async def update_leaderboard(payload: WebhookPayload) -> None:
|
|
|
329 |
if payload.repo.type == "dataset" and payload.event.action == "update":
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
|
|
|
|
335 |
)
|
336 |
-
leaderboard.value = leaderboard_df
|
337 |
|
338 |
@webhooks_server.add_webhook
|
339 |
async def update_queue(payload: WebhookPayload) -> None:
|
|
|
340 |
if payload.repo.type == "dataset" and payload.event.action == "update":
|
341 |
download_dataset(QUEUE_REPO, EVAL_REQUESTS_PATH)
|
342 |
-
eval_queue_dfs = get_evaluation_queue_df(EVAL_REQUESTS_PATH, EVAL_COLS)
|
343 |
-
finished_eval_queue_df, running_eval_queue_df, pending_eval_queue_df = eval_queue_dfs
|
344 |
-
|
345 |
-
finished_eval_table.value = finished_eval_queue_df
|
346 |
-
running_eval_table.value = running_eval_queue_df
|
347 |
-
pending_eval_table.value = pending_eval_queue_df
|
348 |
|
349 |
webhooks_server.launch()
|
|
|
44 |
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
45 |
|
46 |
|
47 |
+
# Convert the environment variable "LEADERBOARD_FULL_INIT" to a boolean value, defaulting to True if the variable is not set.
|
48 |
+
# This controls whether a full initialization should be performed.
|
49 |
+
DO_FULL_INIT = os.getenv("LEADERBOARD_FULL_INIT", "True") == "True"
|
50 |
|
51 |
def restart_space():
|
52 |
API.restart_space(repo_id=REPO_ID, token=HF_TOKEN)
|
|
|
88 |
attempt += 1
|
89 |
raise Exception(f"Failed to download {repo_id} after {max_attempts} attempts")
|
90 |
|
91 |
+
def get_latest_data_leaderboard():
|
92 |
+
leaderboard_dataset = datasets.load_dataset(
|
93 |
+
AGGREGATED_REPO,
|
94 |
+
"default",
|
95 |
+
split="train",
|
96 |
+
cache_dir=HF_HOME,
|
97 |
+
download_mode=datasets.DownloadMode.REUSE_DATASET_IF_EXISTS, # Uses the cached dataset
|
98 |
+
verification_mode="no_checks"
|
99 |
+
)
|
100 |
|
101 |
+
leaderboard_df = get_leaderboard_df(
|
102 |
+
leaderboard_dataset=leaderboard_dataset,
|
103 |
+
cols=COLS,
|
104 |
+
benchmark_cols=BENCHMARK_COLS,
|
105 |
+
)
|
106 |
+
|
107 |
+
return leaderboard_df
|
108 |
+
|
109 |
+
def get_latest_data_queue():
|
110 |
+
eval_queue_dfs = get_evaluation_queue_df(EVAL_REQUESTS_PATH, EVAL_COLS)
|
111 |
+
return eval_queue_dfs
|
112 |
+
|
113 |
+
def init_space():
|
114 |
"""Initializes the application space, loading only necessary data."""
|
115 |
+
if DO_FULL_INIT:
|
116 |
# These downloads only occur on full initialization
|
117 |
try:
|
118 |
download_dataset(QUEUE_REPO, EVAL_REQUESTS_PATH)
|
119 |
except Exception:
|
120 |
restart_space()
|
121 |
|
122 |
+
# Always redownload the leaderboard DataFrame
|
123 |
+
leaderboard_df = get_latest_data_leaderboard()
|
|
|
|
|
|
|
|
|
|
|
124 |
|
125 |
# Evaluation queue DataFrame retrieval is independent of initialization detail level
|
126 |
+
eval_queue_dfs = get_latest_data_queue()
|
127 |
|
128 |
return leaderboard_df, eval_queue_dfs
|
129 |
|
130 |
|
|
|
|
|
|
|
|
|
131 |
# Calls the init_space function with the `full_init` parameter determined by the `do_full_init` variable.
|
132 |
# This initializes various DataFrames used throughout the application, with the level of initialization detail controlled by the `do_full_init` flag.
|
133 |
+
leaderboard_df, eval_queue_dfs = init_space()
|
134 |
finished_eval_queue_df, running_eval_queue_df, pending_eval_queue_df = eval_queue_dfs
|
135 |
|
136 |
|
|
|
139 |
# plot_df = create_plot_df(create_scores_df(leaderboard_df))
|
140 |
# return plot_df
|
141 |
|
142 |
+
def init_leaderboard(dataframe):
|
143 |
+
return Leaderboard(
|
144 |
+
value = dataframe,
|
145 |
+
datatype=[c.type for c in fields(AutoEvalColumn)],
|
146 |
+
select_columns=SelectColumns(
|
147 |
+
default_selection=[c.name for c in fields(AutoEvalColumn) if c.displayed_by_default],
|
148 |
+
cant_deselect=[c.name for c in fields(AutoEvalColumn) if c.never_hidden or c.dummy],
|
149 |
+
label="Select Columns to Display:",
|
150 |
+
),
|
151 |
+
search_columns=[AutoEvalColumn.model.name, AutoEvalColumn.fullname.name, AutoEvalColumn.license.name],
|
152 |
+
hide_columns=[c.name for c in fields(AutoEvalColumn) if c.hidden],
|
153 |
+
filter_columns=[
|
154 |
+
ColumnFilter(AutoEvalColumn.model_type.name, type="checkboxgroup", label="Model types"),
|
155 |
+
ColumnFilter(AutoEvalColumn.precision.name, type="checkboxgroup", label="Precision"),
|
156 |
+
ColumnFilter(
|
157 |
+
AutoEvalColumn.params.name,
|
158 |
+
type="slider",
|
159 |
+
min=0.01,
|
160 |
+
max=150,
|
161 |
+
label="Select the number of parameters (B)",
|
162 |
+
),
|
163 |
+
ColumnFilter(
|
164 |
+
AutoEvalColumn.still_on_hub.name, type="boolean", label="Private or deleted", default=True
|
165 |
+
),
|
166 |
+
ColumnFilter(
|
167 |
+
AutoEvalColumn.merged.name, type="boolean", label="Contains a merge/moerge", default=True
|
168 |
+
),
|
169 |
+
ColumnFilter(AutoEvalColumn.moe.name, type="boolean", label="MoE", default=False),
|
170 |
+
ColumnFilter(AutoEvalColumn.not_flagged.name, type="boolean", label="Flagged", default=True),
|
171 |
+
],
|
172 |
+
bool_checkboxgroup_label="Hide models",
|
173 |
+
)
|
174 |
+
|
175 |
|
176 |
demo = gr.Blocks(css=custom_css)
|
177 |
with demo:
|
|
|
180 |
|
181 |
with gr.Tabs(elem_classes="tab-buttons") as tabs:
|
182 |
with gr.TabItem("🏅 LLM Benchmark", elem_id="llm-benchmark-tab-table", id=0):
|
183 |
+
leaderboard = init_leaderboard(leaderboard_df)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
#with gr.TabItem("📈 Metrics through time", elem_id="llm-benchmark-tab-table", id=2):
|
186 |
# with gr.Row():
|
|
|
305 |
show_copy_button=True,
|
306 |
)
|
307 |
|
308 |
+
demo.load(fn=get_latest_data_leaderboard, inputs=None, outputs=[leaderboard])
|
309 |
+
demo.load(fn=get_latest_data_queue, inputs=None, outputs=[finished_eval_table, running_eval_table, pending_eval_table])
|
310 |
+
|
311 |
demo.queue(default_concurrency_limit=40)
|
312 |
|
313 |
# Start ephemeral Spaces on PRs (see config in README.md)
|
314 |
from gradio_space_ci.webhook import IS_EPHEMERAL_SPACE, SPACE_ID, configure_space_ci
|
315 |
|
|
|
|
|
316 |
def enable_space_ci_and_return_server(ui: gr.Blocks) -> WebhooksServer:
|
317 |
# Taken from https://huggingface.co/spaces/Wauplin/gradio-space-ci/blob/075119aee75ab5e7150bf0814eec91c83482e790/src/gradio_space_ci/webhook.py#L61
|
318 |
# Compared to original, this one do not monkeypatch Gradio which allows us to define more webhooks.
|
319 |
+
# ht to Lucain!
|
320 |
if SPACE_ID is None:
|
321 |
print("Not in a Space: Space CI disabled.")
|
322 |
return WebhooksServer(ui=demo)
|
|
|
330 |
print(f"Enabling Space CI with config from README: {config}")
|
331 |
|
332 |
return configure_space_ci(
|
333 |
+
blocks=ui,
|
334 |
trusted_authors=config.get("trusted_authors"),
|
335 |
private=config.get("private", "auto"),
|
336 |
variables=config.get("variables", "auto"),
|
|
|
345 |
# Add webhooks
|
346 |
@webhooks_server.add_webhook
|
347 |
async def update_leaderboard(payload: WebhookPayload) -> None:
|
348 |
+
"""Redownloads the leaderboard dataset each time it updates"""
|
349 |
if payload.repo.type == "dataset" and payload.event.action == "update":
|
350 |
+
datasets.load_dataset(
|
351 |
+
AGGREGATED_REPO,
|
352 |
+
"default",
|
353 |
+
split="train",
|
354 |
+
cache_dir=HF_HOME,
|
355 |
+
download_mode=datasets.DownloadMode.FORCE_REDOWNLOAD,
|
356 |
+
verification_mode="no_checks"
|
357 |
)
|
|
|
358 |
|
359 |
@webhooks_server.add_webhook
|
360 |
async def update_queue(payload: WebhookPayload) -> None:
|
361 |
+
"""Redownloads the queue dataset each time it updates"""
|
362 |
if payload.repo.type == "dataset" and payload.event.action == "update":
|
363 |
download_dataset(QUEUE_REPO, EVAL_REQUESTS_PATH)
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
webhooks_server.launch()
|