apsys commited on
Commit
952236c
·
1 Parent(s): 7ef25ca

style theme

Browse files
Files changed (2) hide show
  1. app.py +96 -50
  2. src/display/utils.py +3 -17
app.py CHANGED
@@ -171,27 +171,44 @@ def update_column_choices(df):
171
 
172
  # Update the column_selector initialization
173
  def get_initial_columns():
174
- """Get initial columns to show in the dropdown"""
175
  try:
 
176
  # Get available columns in the main dataframe
177
  available_cols = list(LEADERBOARD_DF.columns)
178
  logger.info(f"Available columns in LEADERBOARD_DF: {available_cols}")
179
 
180
- # If dataframe is empty, use default visible columns
181
- if not available_cols:
182
- return get_default_visible_columns()
183
 
184
- # Get default visible columns that actually exist in the dataframe
185
- valid_defaults = [col for col in get_default_visible_columns() if col in available_cols]
 
186
 
187
- # If none of the defaults exist, return all available columns
188
- if not valid_defaults:
189
- return available_cols
 
 
 
 
 
 
190
 
191
- return valid_defaults
192
  except Exception as e:
193
  logger.error(f"Error getting initial columns: {e}")
194
- return get_default_visible_columns()
 
 
 
 
 
 
 
 
 
 
 
195
 
196
  def init_leaderboard(dataframe, visible_columns=None):
197
  """
@@ -256,7 +273,12 @@ def init_leaderboard(dataframe, visible_columns=None):
256
  datatypes.append(col_type)
257
 
258
  # Create a mapping from internal column names to display names
259
- all_columns_map = {field.name: field.display_name for field in fields(GUARDBENCH_COLUMN)}
 
 
 
 
 
260
 
261
  # Create the list of headers using display names
262
  display_headers = [all_columns_map.get(col, col) for col in visible_columns]
@@ -339,13 +361,32 @@ def refresh_data_with_filters(version=CURRENT_VERSION, search_query="", model_ty
339
  """
340
  Refresh the leaderboard data and update all components with filtering.
341
  Ensures we handle cases where dataframes might have limited columns.
 
 
 
 
 
 
342
  """
343
  try:
344
  logger.info(f"Performing refresh of leaderboard data with filters...")
345
  # Get new data
346
  main_df = get_leaderboard_df(version=version)
347
  category_dfs = [get_category_leaderboard_df(category, version=version) for category in CATEGORIES]
348
- selected_columns = [x.lower().replace(" ", "_").replace("(", "").replace(")", "").replace("_recall", "_recall_binary") for x in selected_columns]
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
  # Log the actual columns we have
351
  logger.info(f"Main dataframe columns: {list(main_df.columns)}")
@@ -357,27 +398,31 @@ def refresh_data_with_filters(version=CURRENT_VERSION, search_query="", model_ty
357
  for df in category_dfs
358
  ]
359
 
360
- # Get available columns from the dataframe
361
  available_columns = list(filtered_main_df.columns)
362
 
363
- # Filter selected columns to only those available in the data
364
- if selected_columns:
365
- valid_selected_columns = [col for col in selected_columns if col in available_columns]
366
- if not valid_selected_columns and 'model_name' in available_columns:
367
- valid_selected_columns = ['model_name'] + get_default_visible_columns()
 
368
  else:
369
- valid_selected_columns = available_columns
 
370
 
371
- # Initialize dataframes for display with valid selected columns
372
- main_dataframe = init_leaderboard(filtered_main_df, valid_selected_columns)
373
 
374
  # For category dataframes, get columns that actually exist in each one
375
  category_dataframes = []
376
  for df in filtered_category_dfs:
377
  df_columns = list(df.columns)
378
- df_valid_columns = [col for col in valid_selected_columns if col in df_columns]
379
- if not df_valid_columns and 'model_name' in df_columns:
380
- df_valid_columns = ['model_name'] + get_default_visible_columns()
 
 
381
  category_dataframes.append(init_leaderboard(df, df_valid_columns))
382
 
383
  return main_dataframe, *category_dataframes
@@ -672,45 +717,44 @@ with demo:
672
  Update all leaderboards to show the selected columns.
673
  Ensures all selected columns are preserved in the update.
674
 
 
 
675
  """
676
 
677
  try:
678
- logger.info(f"Updating columns to show: {selected_columns}")
679
 
680
- # If no columns are selected, use default visible columns
681
- if not selected_columns or len(selected_columns) == 0:
682
- selected_columns = get_default_visible_columns()
683
- logger.info(f"No columns selected, using defaults: {selected_columns}")
 
 
 
684
 
685
- selected_columns = [x.lower().replace(" ", "_").replace("(", "").replace(")", "").replace("_recall", "_recall_binary") for x in selected_columns]
 
 
 
 
 
 
 
686
 
 
 
 
687
 
688
  # Get the current data with ALL columns preserved
689
  main_df = get_leaderboard_df(version=version_selector.value)
690
-
691
- # Get category dataframes with ALL columns preserved
692
  category_dfs = [get_category_leaderboard_df(category, version=version_selector.value)
693
  for category in CATEGORIES]
694
 
695
- # Log columns for debugging
696
- logger.info(f"Main dataframe columns: {list(main_df.columns)}")
697
- logger.info(f"Selected columns: {selected_columns}")
698
-
699
- # IMPORTANT: Make sure model_name is always included
700
- if 'model_name' in main_df.columns and 'model_name' not in selected_columns:
701
- selected_columns = ['model_name'] + selected_columns
702
-
703
- # Initialize the main leaderboard with the selected columns
704
- # We're passing the raw selected_columns directly to preserve the selection
705
- main_leaderboard = init_leaderboard(main_df, selected_columns)
706
-
707
- # Initialize category dataframes with the same selected columns
708
- # This ensures consistency across all tabs
709
  category_leaderboards = []
710
  for df in category_dfs:
711
- # Use the same selected columns for each category
712
- # init_leaderboard will automatically handle filtering to columns that exist
713
- category_leaderboards.append(init_leaderboard(df, selected_columns))
714
 
715
  return main_leaderboard, *category_leaderboards
716
 
@@ -718,6 +762,8 @@ with demo:
718
  logger.error(f"Error updating columns: {e}")
719
  import traceback
720
  logger.error(traceback.format_exc())
 
 
721
  return leaderboard, *[tab.children[0] for tab in category_tabs.children[1:len(CATEGORIES)+1]]
722
 
723
  # Connect column selector to update function
 
171
 
172
  # Update the column_selector initialization
173
  def get_initial_columns():
174
+ """Get initial columns to show in the dropdown (as display names)."""
175
  try:
176
+ internal_defaults = []
177
  # Get available columns in the main dataframe
178
  available_cols = list(LEADERBOARD_DF.columns)
179
  logger.info(f"Available columns in LEADERBOARD_DF: {available_cols}")
180
 
181
+ # Get default visible internal names that actually exist
182
+ internal_defaults = [col for col in get_default_visible_columns() if col in available_cols]
 
183
 
184
+ # If none of the defaults exist, use all available columns
185
+ if not internal_defaults:
186
+ internal_defaults = available_cols
187
 
188
+ # Map internal names to display names
189
+ gb_cols_instance = GUARDBENCH_COLUMN()
190
+ all_columns_map = {
191
+ field.name: getattr(gb_cols_instance, field.name).display_name
192
+ for field in fields(gb_cols_instance)
193
+ if hasattr(getattr(gb_cols_instance, field.name), 'display_name')
194
+ }
195
+ display_defaults = [all_columns_map.get(col, col) for col in internal_defaults]
196
+ return display_defaults
197
 
 
198
  except Exception as e:
199
  logger.error(f"Error getting initial columns: {e}")
200
+ # Fallback to default internal names mapped to display names if possible
201
+ try:
202
+ gb_cols_instance = GUARDBENCH_COLUMN()
203
+ all_columns_map = {
204
+ field.name: getattr(gb_cols_instance, field.name).display_name
205
+ for field in fields(gb_cols_instance)
206
+ if hasattr(getattr(gb_cols_instance, field.name), 'display_name')
207
+ }
208
+ default_internal = get_default_visible_columns()
209
+ return [all_columns_map.get(col, col) for col in default_internal]
210
+ except:
211
+ return get_default_visible_columns() # Final fallback
212
 
213
  def init_leaderboard(dataframe, visible_columns=None):
214
  """
 
273
  datatypes.append(col_type)
274
 
275
  # Create a mapping from internal column names to display names
276
+ gb_cols_instance = GUARDBENCH_COLUMN() # Create an instance
277
+ all_columns_map = {
278
+ field.name: getattr(gb_cols_instance, field.name).display_name
279
+ for field in fields(gb_cols_instance)
280
+ if hasattr(getattr(gb_cols_instance, field.name), 'display_name') # Ensure it has display_name
281
+ }
282
 
283
  # Create the list of headers using display names
284
  display_headers = [all_columns_map.get(col, col) for col in visible_columns]
 
361
  """
362
  Refresh the leaderboard data and update all components with filtering.
363
  Ensures we handle cases where dataframes might have limited columns.
364
+
365
+ Args:
366
+ version: Benchmark version.
367
+ search_query: Text search query.
368
+ model_types: List of model types to filter by.
369
+ selected_columns: List of display names for columns to show.
370
  """
371
  try:
372
  logger.info(f"Performing refresh of leaderboard data with filters...")
373
  # Get new data
374
  main_df = get_leaderboard_df(version=version)
375
  category_dfs = [get_category_leaderboard_df(category, version=version) for category in CATEGORIES]
376
+
377
+ # Create reverse mapping from display name to internal name
378
+ gb_cols_instance = GUARDBENCH_COLUMN()
379
+ display_to_internal_map = {
380
+ getattr(gb_cols_instance, field.name).display_name: field.name
381
+ for field in fields(gb_cols_instance)
382
+ if hasattr(getattr(gb_cols_instance, field.name), 'display_name')
383
+ }
384
+
385
+ # Convert selected display names to internal names
386
+ if selected_columns:
387
+ internal_selected_columns = [display_to_internal_map.get(disp_name, disp_name) for disp_name in selected_columns]
388
+ else:
389
+ internal_selected_columns = None # Let init_leaderboard handle default
390
 
391
  # Log the actual columns we have
392
  logger.info(f"Main dataframe columns: {list(main_df.columns)}")
 
398
  for df in category_dfs
399
  ]
400
 
401
+ # Get available columns from the filtered data
402
  available_columns = list(filtered_main_df.columns)
403
 
404
+ # Filter internal selected columns to only those available in the data
405
+ if internal_selected_columns:
406
+ valid_internal_selected_columns = [col for col in internal_selected_columns if col in available_columns]
407
+ # Ensure model_name is always present if available
408
+ if 'model_name' in available_columns and 'model_name' not in valid_internal_selected_columns:
409
+ valid_internal_selected_columns = ['model_name'] + valid_internal_selected_columns
410
  else:
411
+ # If no columns were selected initially, use all available internal columns
412
+ valid_internal_selected_columns = available_columns
413
 
414
+ # Initialize dataframes for display with valid internal selected columns
415
+ main_dataframe = init_leaderboard(filtered_main_df, valid_internal_selected_columns)
416
 
417
  # For category dataframes, get columns that actually exist in each one
418
  category_dataframes = []
419
  for df in filtered_category_dfs:
420
  df_columns = list(df.columns)
421
+ # Use the same valid internal columns, filtered for existence in this specific df
422
+ df_valid_columns = [col for col in valid_internal_selected_columns if col in df_columns]
423
+ # Ensure model_name if available
424
+ if 'model_name' in df_columns and 'model_name' not in df_valid_columns:
425
+ df_valid_columns = ['model_name'] + df_valid_columns
426
  category_dataframes.append(init_leaderboard(df, df_valid_columns))
427
 
428
  return main_dataframe, *category_dataframes
 
717
  Update all leaderboards to show the selected columns.
718
  Ensures all selected columns are preserved in the update.
719
 
720
+ Args:
721
+ selected_columns: List of display names from the dropdown.
722
  """
723
 
724
  try:
725
+ logger.info(f"Updating columns based on display names: {selected_columns}")
726
 
727
+ # Create reverse mapping from display name to internal name
728
+ gb_cols_instance = GUARDBENCH_COLUMN()
729
+ display_to_internal_map = {
730
+ getattr(gb_cols_instance, field.name).display_name: field.name
731
+ for field in fields(gb_cols_instance)
732
+ if hasattr(getattr(gb_cols_instance, field.name), 'display_name')
733
+ }
734
 
735
+ # Convert selected display names to internal names
736
+ if not selected_columns or len(selected_columns) == 0:
737
+ # If empty, get default internal names
738
+ internal_selected_columns = get_default_visible_columns()
739
+ logger.info(f"No columns selected, using default internal names: {internal_selected_columns}")
740
+ else:
741
+ internal_selected_columns = [display_to_internal_map.get(disp_name, disp_name) for disp_name in selected_columns]
742
+ logger.info(f"Converted display names to internal names: {internal_selected_columns}")
743
 
744
+ # Ensure 'model_name' is always included internally
745
+ if 'model_name' not in internal_selected_columns:
746
+ internal_selected_columns = ['model_name'] + internal_selected_columns
747
 
748
  # Get the current data with ALL columns preserved
749
  main_df = get_leaderboard_df(version=version_selector.value)
 
 
750
  category_dfs = [get_category_leaderboard_df(category, version=version_selector.value)
751
  for category in CATEGORIES]
752
 
753
+ # Initialize leaderboards with the internal selected columns
754
+ main_leaderboard = init_leaderboard(main_df, internal_selected_columns)
 
 
 
 
 
 
 
 
 
 
 
 
755
  category_leaderboards = []
756
  for df in category_dfs:
757
+ category_leaderboards.append(init_leaderboard(df, internal_selected_columns))
 
 
758
 
759
  return main_leaderboard, *category_leaderboards
760
 
 
762
  logger.error(f"Error updating columns: {e}")
763
  import traceback
764
  logger.error(traceback.format_exc())
765
+ # Fallback logic might need adjustment if state uses display names
766
+ # For now, return existing components
767
  return leaderboard, *[tab.children[0] for tab in category_tabs.children[1:len(CATEGORIES)+1]]
768
 
769
  # Connect column selector to update function
src/display/utils.py CHANGED
@@ -373,23 +373,9 @@ METRICS = [
373
  ]
374
 
375
  def get_all_column_choices():
376
- """
377
- Get all available column choices for the multiselect dropdown.
378
-
379
- Returns:
380
- List of tuples with (column_name, display_name) for all columns.
381
- """
382
- column_choices = []
383
-
384
- default_visible_columns = get_default_visible_columns()
385
-
386
- for f in fields(GUARDBENCH_COLUMN):
387
- column_info = getattr(GUARDBENCH_COLUMN, f.name)
388
- # Create a tuple with both the internal name and display name
389
- if column_info.name not in default_visible_columns:
390
- column_choices.append((column_info.name, column_info.display_name))
391
-
392
- return column_choices
393
 
394
  def get_default_visible_columns():
395
  """
 
373
  ]
374
 
375
  def get_all_column_choices():
376
+ """Get all possible column choices as display names."""
377
+ gb_cols_instance = GuardBenchColumn()
378
+ return [getattr(gb_cols_instance, field.name).display_name for field in fields(gb_cols_instance) if hasattr(getattr(gb_cols_instance, field.name), 'display_name')]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
 
380
  def get_default_visible_columns():
381
  """