ziyuzhou02 commited on
Commit
0684be1
Β·
verified Β·
1 Parent(s): a404697

Deploy Space: update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -6
app.py CHANGED
@@ -22,6 +22,10 @@ from src.utils import (
22
  load_baseline_rank_history,
23
  load_baseline_rank_history_weekly,
24
  load_forecast_snapshots,
 
 
 
 
25
  make_domain_pie_chart,
26
  make_forecast_plot,
27
  make_rank_trend_plot,
@@ -31,6 +35,7 @@ from src.utils import (
31
 
32
  RESULTS_PATH = os.getenv("TSFM_RESULTS_PATH", "space/results" if Path("space/results").exists() else "results")
33
  REFRESH_SECONDS = int(os.getenv("TSFM_REFRESH_SECONDS", "300"))
 
34
 
35
 
36
  def _dataset_tables(grouped: dict, datasets: list[str]) -> tuple[list, list]:
@@ -81,16 +86,23 @@ def refresh_leaderboard() -> tuple:
81
  daily_df, # [3] daily table
82
  load_baseline_rank_history_weekly(RESULTS_PATH), # [4] weekly table
83
  make_rank_trend_plot(daily_df), # [5] rank trend plot
 
 
 
 
 
 
 
84
  ]
85
 
86
- # [6 .. 6+D-1] per-domain status lines
87
  for domain, domain_datasets in DOMAIN_GROUPS.items():
88
  outputs.append(build_domain_status_md(domain, domain_datasets, RESULTS_PATH))
89
 
90
  value_tables, rank_tables = _dataset_tables(grouped, datasets)
91
- # [6+D .. 6+D+N-1] value tables
92
  outputs.extend(value_tables)
93
- # [6+D+N .. 6+D+2N-1] rank tables
94
  outputs.extend(rank_tables)
95
  return tuple(outputs)
96
 
@@ -117,6 +129,30 @@ with demo:
117
  with gr.Tabs(elem_classes="tab-buttons"):
118
  # ── Overall Tab ──────────────────────────────────────────────────────
119
  with gr.TabItem("Overall"):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  gr.Markdown(
121
  "**Evaluated timestamps by domain** Β· hover for dataset names",
122
  elem_classes="markdown-text",
@@ -171,6 +207,39 @@ with demo:
171
  label="Rank trend over time",
172
  )
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  # ── Domain Tabs ───────────────────────────────────────────────────────
175
  domain_idx = 0
176
  for domain, domain_datasets in DOMAIN_GROUPS.items():
@@ -178,7 +247,7 @@ with demo:
178
  # Per-domain status line (data source, last eval, refresh intervals)
179
  domain_status_mds.append(
180
  gr.Markdown(
181
- INITIAL_OUTPUTS[6 + domain_idx],
182
  elem_classes="markdown-text",
183
  )
184
  )
@@ -191,7 +260,7 @@ with demo:
191
  )
192
  dataset_value_dfs.append(
193
  gr.Dataframe(
194
- value=INITIAL_OUTPUTS[6 + N_DOMAINS + dataset_idx],
195
  interactive=False,
196
  wrap=True,
197
  show_label=False,
@@ -203,7 +272,7 @@ with demo:
203
  )
204
  dataset_rank_dfs.append(
205
  gr.Dataframe(
206
- value=INITIAL_OUTPUTS[6 + N_DOMAINS + len(DATASETS) + dataset_idx],
207
  interactive=False,
208
  wrap=True,
209
  show_label=False,
@@ -280,6 +349,13 @@ with demo:
280
  baseline_history_df,
281
  baseline_weekly_df,
282
  rank_trend_plot,
 
 
 
 
 
 
 
283
  *domain_status_mds,
284
  *dataset_value_dfs,
285
  *dataset_rank_dfs,
 
22
  load_baseline_rank_history,
23
  load_baseline_rank_history_weekly,
24
  load_forecast_snapshots,
25
+ load_gift_aggregate_metadata_md,
26
+ load_gift_aggregate_table,
27
+ load_live_aggregate_metadata_md,
28
+ load_live_aggregate_table,
29
  make_domain_pie_chart,
30
  make_forecast_plot,
31
  make_rank_trend_plot,
 
35
 
36
  RESULTS_PATH = os.getenv("TSFM_RESULTS_PATH", "space/results" if Path("space/results").exists() else "results")
37
  REFRESH_SECONDS = int(os.getenv("TSFM_REFRESH_SECONDS", "300"))
38
+ DOMAIN_OUTPUT_OFFSET = 13
39
 
40
 
41
  def _dataset_tables(grouped: dict, datasets: list[str]) -> tuple[list, list]:
 
86
  daily_df, # [3] daily table
87
  load_baseline_rank_history_weekly(RESULTS_PATH), # [4] weekly table
88
  make_rank_trend_plot(daily_df), # [5] rank trend plot
89
+ load_gift_aggregate_metadata_md(RESULTS_PATH), # [6]
90
+ load_gift_aggregate_table(RESULTS_PATH, "prediction_length"), # [7]
91
+ load_gift_aggregate_table(RESULTS_PATH, "domain"), # [8]
92
+ load_gift_aggregate_table(RESULTS_PATH, "frequency"), # [9]
93
+ load_live_aggregate_metadata_md(RESULTS_PATH), # [10]
94
+ load_live_aggregate_table(RESULTS_PATH, "overall"), # [11]
95
+ load_live_aggregate_table(RESULTS_PATH, "rank"), # [12]
96
  ]
97
 
98
+ # [10 .. 10+D-1] per-domain status lines
99
  for domain, domain_datasets in DOMAIN_GROUPS.items():
100
  outputs.append(build_domain_status_md(domain, domain_datasets, RESULTS_PATH))
101
 
102
  value_tables, rank_tables = _dataset_tables(grouped, datasets)
103
+ # [10+D .. 10+D+N-1] value tables
104
  outputs.extend(value_tables)
105
+ # [10+D+N .. 10+D+2N-1] rank tables
106
  outputs.extend(rank_tables)
107
  return tuple(outputs)
108
 
 
129
  with gr.Tabs(elem_classes="tab-buttons"):
130
  # ── Overall Tab ──────────────────────────────────────────────────────
131
  with gr.TabItem("Overall"):
132
+ live_aggregate_metadata_md = gr.Markdown(
133
+ INITIAL_OUTPUTS[10],
134
+ elem_classes="markdown-text",
135
+ )
136
+ gr.Markdown(
137
+ "**Cumulative live evaluation.** MSE, RMSE, MAPE, CRPS, and Stability are lower-is-better; RTG is higher-is-better; more negative Improvement indicates a stronger decreasing-error trend.",
138
+ elem_classes="markdown-text",
139
+ )
140
+ live_overall_df = gr.Dataframe(
141
+ value=INITIAL_OUTPUTS[11],
142
+ interactive=False,
143
+ wrap=True,
144
+ label="Up-to-now overall results",
145
+ )
146
+ live_rank_df = gr.Dataframe(
147
+ value=INITIAL_OUTPUTS[12],
148
+ interactive=False,
149
+ wrap=True,
150
+ label="Average Rank, Win Rate, and Elo",
151
+ )
152
+ gr.Markdown(
153
+ "**Latest evaluation snapshot**",
154
+ elem_classes="markdown-text",
155
+ )
156
  gr.Markdown(
157
  "**Evaluated timestamps by domain** Β· hover for dataset names",
158
  elem_classes="markdown-text",
 
207
  label="Rank trend over time",
208
  )
209
 
210
+ # ── GIFT-style grouped result tables ────────────────────────────────
211
+ with gr.TabItem("GIFT-style Aggregates"):
212
+ aggregate_metadata_md = gr.Markdown(
213
+ INITIAL_OUTPUTS[6],
214
+ elem_classes="markdown-text",
215
+ )
216
+ gr.Markdown(
217
+ "MSE and CRPS are normalized per dataset configuration against Seasonal-Naive (1.0 = baseline). Rank is the mean per-configuration CRPS rank. Lower is better for all three metrics.",
218
+ elem_classes="markdown-text",
219
+ )
220
+ with gr.Tabs():
221
+ with gr.TabItem("Prediction Length"):
222
+ prediction_length_aggregate_df = gr.Dataframe(
223
+ value=INITIAL_OUTPUTS[7],
224
+ interactive=False,
225
+ wrap=True,
226
+ label="Results on TSFM_Bench aggregated by Prediction Length",
227
+ )
228
+ with gr.TabItem("Domain"):
229
+ domain_aggregate_df = gr.Dataframe(
230
+ value=INITIAL_OUTPUTS[8],
231
+ interactive=False,
232
+ wrap=True,
233
+ label="Results on TSFM_Bench aggregated by Domain",
234
+ )
235
+ with gr.TabItem("Frequency"):
236
+ frequency_aggregate_df = gr.Dataframe(
237
+ value=INITIAL_OUTPUTS[9],
238
+ interactive=False,
239
+ wrap=True,
240
+ label="Results on TSFM_Bench aggregated by Frequency",
241
+ )
242
+
243
  # ── Domain Tabs ───────────────────────────────────────────────────────
244
  domain_idx = 0
245
  for domain, domain_datasets in DOMAIN_GROUPS.items():
 
247
  # Per-domain status line (data source, last eval, refresh intervals)
248
  domain_status_mds.append(
249
  gr.Markdown(
250
+ INITIAL_OUTPUTS[DOMAIN_OUTPUT_OFFSET + domain_idx],
251
  elem_classes="markdown-text",
252
  )
253
  )
 
260
  )
261
  dataset_value_dfs.append(
262
  gr.Dataframe(
263
+ value=INITIAL_OUTPUTS[DOMAIN_OUTPUT_OFFSET + N_DOMAINS + dataset_idx],
264
  interactive=False,
265
  wrap=True,
266
  show_label=False,
 
272
  )
273
  dataset_rank_dfs.append(
274
  gr.Dataframe(
275
+ value=INITIAL_OUTPUTS[DOMAIN_OUTPUT_OFFSET + N_DOMAINS + len(DATASETS) + dataset_idx],
276
  interactive=False,
277
  wrap=True,
278
  show_label=False,
 
349
  baseline_history_df,
350
  baseline_weekly_df,
351
  rank_trend_plot,
352
+ aggregate_metadata_md,
353
+ prediction_length_aggregate_df,
354
+ domain_aggregate_df,
355
+ frequency_aggregate_df,
356
+ live_aggregate_metadata_md,
357
+ live_overall_df,
358
+ live_rank_df,
359
  *domain_status_mds,
360
  *dataset_value_dfs,
361
  *dataset_rank_dfs,