ggcristian commited on
Commit
c94926c
·
1 Parent(s): 65e4811

Preserve scroll when re-generating plots

Browse files
Files changed (5) hide show
  1. app.py +46 -8
  2. css_html_js.py +13 -0
  3. logo.png +0 -0
  4. main.py +0 -6
  5. pyproject.toml +1 -0
app.py CHANGED
@@ -2,7 +2,7 @@ import json
2
  import pandas as pd
3
  import gradio as gr
4
  from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns
5
- from css_html_js import custom_css
6
  from parse import read_json, read_data
7
  from utils import model_hyperlink, filter_RTLRepo, filter_bench, handle_special_cases
8
  from typing import Union
@@ -45,6 +45,7 @@ def generate_scatter_plot(benchmark, metric):
45
  scatter_data['y'] = scatter_data[metric]
46
  scatter_data['size'] = (scatter_data['x'] ** 0.3) * 40
47
 
 
48
  type_colors = {"General": "green", "Coding": "yellow", "RTL-Specific": "blue"}
49
  scatter_data['color'] = scatter_data['Model Type'].map(type_colors).fillna('gray')
50
 
@@ -78,9 +79,26 @@ def generate_scatter_plot(benchmark, metric):
78
 
79
  return fig
80
 
81
- with gr.Blocks(css=custom_css) as app:
 
 
 
 
 
 
 
 
 
 
 
82
  df, benchmarks, metrics, default_metric = read_data()
83
- gr.Markdown("""# TuRTLe 🐢 Model Leaderboard
 
 
 
 
 
 
84
  Welcome to the TuRTLe Model Leaderboard! Use the filters below to explore different RTL benchmarks and models.
85
  [GitHub Repository](https://github.com/https://github.com/HPAI-BSC) | [arXiv Preprint](https://arxiv.org/) | [How to submit](https://github.com/https://github.com/HPAI-BSC)<br/>
86
  Contact us: [email protected]
@@ -147,14 +165,34 @@ with gr.Blocks(css=custom_css) as app:
147
  bubble_benchmark.change(
148
  fn=on_benchmark_change,
149
  inputs=[bubble_benchmark, bubble_metric],
150
- outputs=[bubble_metric, scatter_plot]
151
- )
 
 
 
 
 
 
 
 
 
 
152
 
153
  bubble_metric.change(
154
  fn=on_metric_change,
155
  inputs=[bubble_benchmark, bubble_metric],
156
- outputs=[bubble_benchmark, scatter_plot]
157
- )
 
 
 
 
 
 
 
 
 
 
158
 
159
 
160
- app.launch()
 
2
  import pandas as pd
3
  import gradio as gr
4
  from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns
5
+ from css_html_js import custom_css, trigger_plot
6
  from parse import read_json, read_data
7
  from utils import model_hyperlink, filter_RTLRepo, filter_bench, handle_special_cases
8
  from typing import Union
 
45
  scatter_data['y'] = scatter_data[metric]
46
  scatter_data['size'] = (scatter_data['x'] ** 0.3) * 40
47
 
48
+
49
  type_colors = {"General": "green", "Coding": "yellow", "RTL-Specific": "blue"}
50
  scatter_data['color'] = scatter_data['Model Type'].map(type_colors).fillna('gray')
51
 
 
79
 
80
  return fig
81
 
82
+ js_func = """
83
+ function refresh() {
84
+ const url = new URL(window.location);
85
+
86
+ if (url.searchParams.get('__theme') !== 'light') {
87
+ url.searchParams.set('__theme', 'light');
88
+ window.location.href = url.href;
89
+ }
90
+ }
91
+ """
92
+
93
+ with gr.Blocks(css=custom_css, js=js_func) as app:
94
  df, benchmarks, metrics, default_metric = read_data()
95
+ gr.Markdown("""# TuRTLe 🐢 Model Leaderboard""")
96
+ gr.HTML("""
97
+ <p align="center">
98
+ <img src='/gradio_api/file=logo.png' alt='TuRTLe Logo' width='220'/> <br/>
99
+ </p>
100
+ """)
101
+ gr.Markdown("""
102
  Welcome to the TuRTLe Model Leaderboard! Use the filters below to explore different RTL benchmarks and models.
103
  [GitHub Repository](https://github.com/https://github.com/HPAI-BSC) | [arXiv Preprint](https://arxiv.org/) | [How to submit](https://github.com/https://github.com/HPAI-BSC)<br/>
104
  Contact us: [email protected]
 
165
  bubble_benchmark.change(
166
  fn=on_benchmark_change,
167
  inputs=[bubble_benchmark, bubble_metric],
168
+ outputs=[bubble_metric, scatter_plot],
169
+ js=""" // this is to avoid resetting user scroll each time a plot is re-generated
170
+ (benchmark, metric) => {
171
+ let scrollY = window.scrollY;
172
+ const observer = new MutationObserver(() => {
173
+ window.scrollTo(0, scrollY);
174
+ observer.disconnect();
175
+ });
176
+ observer.observe(document.getElementById('full-width-plot'), { childList: true });
177
+ return [benchmark, metric];
178
+ }
179
+ """)
180
 
181
  bubble_metric.change(
182
  fn=on_metric_change,
183
  inputs=[bubble_benchmark, bubble_metric],
184
+ outputs=[bubble_benchmark, scatter_plot],
185
+ js=""" // this is to avoid resetting user scroll each time a plot is re-generated
186
+ (benchmark, metric) => {
187
+ let scrollY = window.scrollY;
188
+ const observer = new MutationObserver(() => {
189
+ window.scrollTo(0, scrollY);
190
+ observer.disconnect();
191
+ });
192
+ observer.observe(document.getElementById('full-width-plot'), { childList: true });
193
+ return [benchmark, metric];
194
+ }
195
+ """)
196
 
197
 
198
+ app.launch(allowed_paths=["logo.png"])
css_html_js.py CHANGED
@@ -1,4 +1,7 @@
1
  custom_css = """
 
 
 
2
  #component-0 {
3
  width: 75vw;
4
  margin: 0 auto;
@@ -108,3 +111,13 @@ get_window_url_params = """
108
  return url_params;
109
  }
110
  """
 
 
 
 
 
 
 
 
 
 
 
1
  custom_css = """
2
+ #component-1 {
3
+ text-align: center;
4
+ }
5
  #component-0 {
6
  width: 75vw;
7
  margin: 0 auto;
 
111
  return url_params;
112
  }
113
  """
114
+
115
+ trigger_plot = """
116
+ window.scrollY_before_update = window.scrollY; // Store scroll position
117
+ console.log("Saved ScrollY:", window.scrollY_before_update);
118
+
119
+ setTimeout(function() {
120
+ console.log("Restoring ScrollY:", window.scrollY_before_update);
121
+ window.scrollTo(0, window.scrollY_before_update);
122
+ }, 50);
123
+ """
logo.png ADDED
main.py DELETED
@@ -1,6 +0,0 @@
1
- def main():
2
- print("Hello from tortuga!")
3
-
4
-
5
- if __name__ == "__main__":
6
- main()
 
 
 
 
 
 
 
pyproject.toml CHANGED
@@ -8,4 +8,5 @@ dependencies = [
8
  "gradio>=5.21.0",
9
  "gradio-leaderboard>=0.0.13",
10
  "pandas>=2.2.3",
 
11
  ]
 
8
  "gradio>=5.21.0",
9
  "gradio-leaderboard>=0.0.13",
10
  "pandas>=2.2.3",
11
+ "plotly>=6.0.1",
12
  ]