Jellyfish042 commited on
Commit
80e2f77
·
1 Parent(s): 8b7b316

refactor: reorganize data source into categorized groups with toggles

Browse files
Files changed (3) hide show
  1. __pycache__/data_manager.cpython-311.pyc +0 -0
  2. app.py +108 -18
  3. data_manager.py +11 -7
__pycache__/data_manager.cpython-311.pyc CHANGED
Binary files a/__pycache__/data_manager.cpython-311.pyc and b/__pycache__/data_manager.cpython-311.pyc differ
 
app.py CHANGED
@@ -344,37 +344,127 @@ if __name__ == "__main__":
344
  model_selector = gr.CheckboxGroup(label="Model Size", choices=model_size_list, value=model_size_list)
345
  size_range_slider = RangeSlider(minimum=0, maximum=40, value=[0, 40], step=0.1, label="Model Size Range")
346
  metric_selector = gr.Dropdown(label="Metric", choices=metric_list, value=initial_metric)
347
- with gr.Column():
348
  midpoint_slider = gr.Slider(minimum=0.1, maximum=0.9, value=0.5, step=0.01, label="Color Gradient Midpoint")
349
  color_selector = gr.CheckboxGroup(label="Colored Columns", choices=["Average", "Individual Tests"], value=initial_colors)
350
- colfilter = gr.CheckboxGroup(label="Data Source", choices=initial_columns, value=initial_columns)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  table = gr.HTML(initial_data)
352
 
353
- def update_table_wrapper(period, models_size, metric, visible_columns, color_columns, size_range, midpoint):
 
 
 
354
  return update_table(data_manager, period, models_size, metric, visible_columns, color_columns, size_range, midpoint)
355
 
356
- def update_column_choices(period, current_selected):
357
  if not period:
358
- return gr.update(choices=[], value=[])
 
359
  columns = data_manager.get_available_columns(period)
360
- # 只保留在新 choices 中存在的已选择值
361
- if current_selected:
362
- valid_selected = [col for col in current_selected if col in columns]
363
- # 如果过滤后为空,默认选择所有列(保持默认行为)
364
- if not valid_selected:
365
- valid_selected = columns
366
- else:
367
- # 如果没有当前选择,默认选择所有列(保持默认行为)
368
- valid_selected = columns
369
- return gr.update(choices=columns, value=valid_selected)
370
 
371
- shared_inputs = [period_selector, model_selector, metric_selector, colfilter, color_selector, size_range_slider, midpoint_slider]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
 
373
- period_selector.change(update_column_choices, inputs=[period_selector, colfilter], outputs=colfilter)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
374
  period_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
375
  model_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
376
  metric_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
377
- colfilter.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
 
 
 
378
  color_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
379
  size_range_slider.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
380
  midpoint_slider.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
 
344
  model_selector = gr.CheckboxGroup(label="Model Size", choices=model_size_list, value=model_size_list)
345
  size_range_slider = RangeSlider(minimum=0, maximum=40, value=[0, 40], step=0.1, label="Model Size Range")
346
  metric_selector = gr.Dropdown(label="Metric", choices=metric_list, value=initial_metric)
 
347
  midpoint_slider = gr.Slider(minimum=0.1, maximum=0.9, value=0.5, step=0.01, label="Color Gradient Midpoint")
348
  color_selector = gr.CheckboxGroup(label="Colored Columns", choices=["Average", "Individual Tests"], value=initial_colors)
349
+ with gr.Column():
350
+ # Data Source 分组定义
351
+ code_cols = ["github cpp", "github python", "github javascript"]
352
+ research_cols = ["arxiv physics", "arxiv cs", "arxiv math"]
353
+ writing_cols = ["ao3 english", "github markdown"]
354
+ knowledge_cols = ["bbc news", "wikipedia english"]
355
+
356
+ initial_code = [c for c in code_cols if c in initial_columns]
357
+ initial_research = [c for c in research_cols if c in initial_columns]
358
+ initial_writing = [c for c in writing_cols if c in initial_columns]
359
+ initial_knowledge = [c for c in knowledge_cols if c in initial_columns]
360
+
361
+ gr.Markdown("**Data Source**")
362
+
363
+ # 代码 (Code)
364
+ with gr.Row():
365
+ toggle_code = gr.Checkbox(label="💻 Code", value=True, scale=0, min_width=150)
366
+ colfilter_code = gr.CheckboxGroup(choices=initial_code, value=initial_code, show_label=False, scale=3)
367
+
368
+ # 科研 (Research)
369
+ with gr.Row():
370
+ toggle_research = gr.Checkbox(label="🔬 Research", value=True, scale=0, min_width=150)
371
+ colfilter_research = gr.CheckboxGroup(choices=initial_research, value=initial_research, show_label=False, scale=3)
372
+
373
+ # 写作 (Writing)
374
+ with gr.Row():
375
+ toggle_writing = gr.Checkbox(label="✍️ Writing", value=True, scale=0, min_width=150)
376
+ colfilter_writing = gr.CheckboxGroup(choices=initial_writing, value=initial_writing, show_label=False, scale=3)
377
+
378
+ # 世界知识 (World Knowledge)
379
+ with gr.Row():
380
+ toggle_knowledge = gr.Checkbox(label="🌍 Knowledge", value=True, scale=0, min_width=150)
381
+ colfilter_knowledge = gr.CheckboxGroup(choices=initial_knowledge, value=initial_knowledge, show_label=False, scale=3)
382
+
383
+ # 多语言 (Multilingual) - Coming Soon
384
+ with gr.Row():
385
+ gr.Checkbox(label="🌐 Multilingual (Coming Soon)", value=False, interactive=False, scale=0, min_width=250)
386
+
387
  table = gr.HTML(initial_data)
388
 
389
+ def update_table_wrapper(
390
+ period, models_size, metric, code_sel, research_sel, writing_sel, knowledge_sel, color_columns, size_range, midpoint
391
+ ):
392
+ visible_columns = code_sel + research_sel + writing_sel + knowledge_sel
393
  return update_table(data_manager, period, models_size, metric, visible_columns, color_columns, size_range, midpoint)
394
 
395
+ def update_column_choices(period, cur_code, cur_research, cur_writing, cur_knowledge):
396
  if not period:
397
+ empty = gr.update(choices=[], value=[])
398
+ return empty, empty, empty, empty
399
  columns = data_manager.get_available_columns(period)
 
 
 
 
 
 
 
 
 
 
400
 
401
+ new_code = [c for c in code_cols if c in columns]
402
+ new_research = [c for c in research_cols if c in columns]
403
+ new_writing = [c for c in writing_cols if c in columns]
404
+ new_knowledge = [c for c in knowledge_cols if c in columns]
405
+
406
+ sel_code = [c for c in cur_code if c in new_code] if cur_code else new_code
407
+ sel_research = [c for c in cur_research if c in new_research] if cur_research else new_research
408
+ sel_writing = [c for c in cur_writing if c in new_writing] if cur_writing else new_writing
409
+ sel_knowledge = [c for c in cur_knowledge if c in new_knowledge] if cur_knowledge else new_knowledge
410
+
411
+ if not sel_code:
412
+ sel_code = new_code
413
+ if not sel_research:
414
+ sel_research = new_research
415
+ if not sel_writing:
416
+ sel_writing = new_writing
417
+ if not sel_knowledge:
418
+ sel_knowledge = new_knowledge
419
+
420
+ return (
421
+ gr.update(choices=new_code, value=sel_code),
422
+ gr.update(choices=new_research, value=sel_research),
423
+ gr.update(choices=new_writing, value=sel_writing),
424
+ gr.update(choices=new_knowledge, value=sel_knowledge),
425
+ )
426
+
427
+ # 总开关功能
428
+ def toggle_group(enabled, group_cols, available_cols):
429
+ valid_cols = [c for c in group_cols if c in available_cols]
430
+ return valid_cols if enabled else []
431
+
432
+ toggle_code.change(lambda enabled: toggle_group(enabled, code_cols, initial_columns), inputs=[toggle_code], outputs=[colfilter_code])
433
+ toggle_research.change(
434
+ lambda enabled: toggle_group(enabled, research_cols, initial_columns), inputs=[toggle_research], outputs=[colfilter_research]
435
+ )
436
+ toggle_writing.change(
437
+ lambda enabled: toggle_group(enabled, writing_cols, initial_columns), inputs=[toggle_writing], outputs=[colfilter_writing]
438
+ )
439
+ toggle_knowledge.change(
440
+ lambda enabled: toggle_group(enabled, knowledge_cols, initial_columns), inputs=[toggle_knowledge], outputs=[colfilter_knowledge]
441
+ )
442
 
443
+ shared_inputs = [
444
+ period_selector,
445
+ model_selector,
446
+ metric_selector,
447
+ colfilter_code,
448
+ colfilter_research,
449
+ colfilter_writing,
450
+ colfilter_knowledge,
451
+ color_selector,
452
+ size_range_slider,
453
+ midpoint_slider,
454
+ ]
455
+
456
+ period_selector.change(
457
+ update_column_choices,
458
+ inputs=[period_selector, colfilter_code, colfilter_research, colfilter_writing, colfilter_knowledge],
459
+ outputs=[colfilter_code, colfilter_research, colfilter_writing, colfilter_knowledge],
460
+ )
461
  period_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
462
  model_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
463
  metric_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
464
+ colfilter_code.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
465
+ colfilter_research.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
466
+ colfilter_writing.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
467
+ colfilter_knowledge.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
468
  color_selector.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
469
  size_range_slider.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
470
  midpoint_slider.change(update_table_wrapper, inputs=shared_inputs, outputs=table)
data_manager.py CHANGED
@@ -242,16 +242,20 @@ class DataManager:
242
 
243
  fixed_cols = ["Name", "Params (B)", "Average (lower=better)"]
244
  column_priority = [
245
- "ao3 english",
246
- "bbc news",
247
- "wikipedia english",
248
- "github markdown",
249
- "arxiv physics",
250
- "arxiv cs",
251
- "arxiv math",
252
  "github cpp",
253
  "github python",
254
  "github javascript",
 
 
 
 
 
 
 
 
 
 
255
  ]
256
  existing_cols = filtered_df.columns.tolist()
257
  ordered_cols = []
 
242
 
243
  fixed_cols = ["Name", "Params (B)", "Average (lower=better)"]
244
  column_priority = [
245
+ # 代码 (Code)
 
 
 
 
 
 
246
  "github cpp",
247
  "github python",
248
  "github javascript",
249
+ # 科研 (Research)
250
+ "arxiv physics",
251
+ "arxiv cs",
252
+ "arxiv math",
253
+ # 写作 (Writing)
254
+ "ao3 english",
255
+ "github markdown",
256
+ # 世界知识 (World Knowledge)
257
+ "bbc news",
258
+ "wikipedia english",
259
  ]
260
  existing_cols = filtered_df.columns.tolist()
261
  ordered_cols = []