Yoad commited on
Commit
f1d76c0
Β·
1 Parent(s): 68eb1ef

SImple paging for entry selection to accommodate long lists

Browse files
Files changed (1) hide show
  1. src/app.py +47 -6
src/app.py CHANGED
@@ -38,6 +38,41 @@ if "audio_preview_active" not in st.session_state:
38
  if "uploaded_file" not in st.session_state:
39
  st.session_state.results_file = None
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  def on_file_upload():
43
  st.session_state.audio_cache = {}
@@ -89,7 +124,8 @@ def choose_input_file_from_leaderboard():
89
  @st.cache_data
90
  def read_results_csv(uploaded_file):
91
  with st.spinner("Loading results...", show_time=True):
92
- return pd.read_csv(uploaded_file)
 
93
 
94
 
95
  def display_rtl(html):
@@ -284,6 +320,7 @@ def main():
284
  # Load the data
285
  try:
286
  eval_results = read_results_csv(uploaded_file)
 
287
  st.success("File uploaded successfully!")
288
 
289
  with st.sidebar:
@@ -327,6 +364,12 @@ def main():
327
  col1.button("← Prev", on_click=go_prev, use_container_width=True)
328
  col2.button("Next β†’", on_click=go_next, use_container_width=True)
329
 
 
 
 
 
 
 
330
  # Create a data table with entries and their WER
331
  entries_data = []
332
  for i in range(len(eval_results)):
@@ -340,15 +383,13 @@ def main():
340
  entries_data.append({"Entry": f"Entry #{i+1}", "WER": wer_formatted})
341
 
342
  # Create a selection mechanism using radio buttons that look like a table
343
- st.sidebar.write("Select an entry:")
344
-
345
- # Use a container for better styling
346
- entry_container = st.sidebar.container()
347
 
348
  # Create a radio button for each entry, styled to look like a table row
 
349
  entry_container.radio(
350
  "Select an entry",
351
- options=list(range(len(eval_results))),
352
  format_func=lambda i: f"Entry #{i+1} ({entries_data[i]['WER']})",
353
  label_visibility="collapsed",
354
  key="selected_entry_idx",
 
38
  if "uploaded_file" not in st.session_state:
39
  st.session_state.results_file = None
40
 
41
+ if "selected_entry_idx" not in st.session_state:
42
+ st.session_state.selected_entry_idx = 0
43
+ if "total_entry_count" not in st.session_state:
44
+ st.session_state.total_entry_count = 0
45
+ if "entry_page_size" not in st.session_state:
46
+ st.session_state.entry_page_size = 20
47
+
48
+
49
+ def get_current_page_slice():
50
+ ss = st.session_state
51
+ if ss.total_entry_count == 0:
52
+ return slice(0, 0)
53
+
54
+ page_first_entry = (
55
+ st.session_state.selected_entry_idx // ss.entry_page_size
56
+ ) * ss.entry_page_size
57
+ page_last_entry = min(page_first_entry + ss.entry_page_size, ss.total_entry_count)
58
+
59
+ return slice(page_first_entry, page_last_entry)
60
+
61
+
62
+ def page_navigation():
63
+ ss = st.session_state
64
+ current_page_slice = get_current_page_slice()
65
+ has_next_page = current_page_slice.stop < ss.total_entry_count - 1
66
+ has_prev_page = current_page_slice.start >= ss.entry_page_size
67
+
68
+ col1, col2 = st.columns(2)
69
+ if col1.button("Prev Page", disabled=not has_prev_page):
70
+ ss.selected_entry_idx = current_page_slice.start - 1
71
+ st.rerun()
72
+ if col2.button("Next Page", disabled=not has_next_page):
73
+ ss.selected_entry_idx = current_page_slice.start + ss.entry_page_size
74
+ st.rerun()
75
+
76
 
77
  def on_file_upload():
78
  st.session_state.audio_cache = {}
 
124
  @st.cache_data
125
  def read_results_csv(uploaded_file):
126
  with st.spinner("Loading results...", show_time=True):
127
+ results_df = pd.read_csv(uploaded_file)
128
+ return results_df
129
 
130
 
131
  def display_rtl(html):
 
320
  # Load the data
321
  try:
322
  eval_results = read_results_csv(uploaded_file)
323
+ st.session_state.total_entry_count = len(eval_results)
324
  st.success("File uploaded successfully!")
325
 
326
  with st.sidebar:
 
364
  col1.button("← Prev", on_click=go_prev, use_container_width=True)
365
  col2.button("Next β†’", on_click=go_next, use_container_width=True)
366
 
367
+ # Use a container for better styling
368
+ entry_container = st.sidebar.container()
369
+ with entry_container:
370
+ page_navigation()
371
+ st.write(f"Total entries: {st.session_state.total_entry_count}")
372
+
373
  # Create a data table with entries and their WER
374
  entries_data = []
375
  for i in range(len(eval_results)):
 
383
  entries_data.append({"Entry": f"Entry #{i+1}", "WER": wer_formatted})
384
 
385
  # Create a selection mechanism using radio buttons that look like a table
386
+ st.sidebar.write("Select an entry")
 
 
 
387
 
388
  # Create a radio button for each entry, styled to look like a table row
389
+ current_page_slice = get_current_page_slice()
390
  entry_container.radio(
391
  "Select an entry",
392
+ options=list(range(len(eval_results))[current_page_slice]),
393
  format_func=lambda i: f"Entry #{i+1} ({entries_data[i]['WER']})",
394
  label_visibility="collapsed",
395
  key="selected_entry_idx",