|
import gradio as gr |
|
from gradio_leaderboard import Leaderboard |
|
from typing import List, Tuple, Callable |
|
|
|
class UIComponents: |
|
"""Handles creation of UI components for the leaderboard""" |
|
|
|
@staticmethod |
|
def create_filter_components() -> Tuple[List[gr.CheckboxGroup], List[str]]: |
|
"""Create all filter components and return them with their labels""" |
|
|
|
|
|
all_languages = ['English', 'Spanish', 'Chinese', 'Norwegian', |
|
'Russian', 'Portuguese', 'German', 'Japanese', 'French'] |
|
language_options = gr.CheckboxGroup(all_languages, label="Filter Task: Language") |
|
|
|
|
|
all_task_types = ['Question Answering', 'Text Classification', 'Named Entity Recognition', |
|
'Normalization and Coding', 'Natural Language Inference', 'Summarization', |
|
'Event Extraction', 'Semantic Similarity'] |
|
task_type_options = gr.CheckboxGroup(all_task_types, label="Filter Task: Task Type") |
|
|
|
|
|
all_clinical_contexts = ['Neurology', 'Oncology', 'Radiology', 'Pulmonology', |
|
'Cardiology', 'Dermatology', 'Critical Care', 'Nephrology', |
|
'General', 'Endocrinology', 'Pediatrics', 'Pharmacology', |
|
'Gastroenterology', 'Psychology'] |
|
cc_options = gr.CheckboxGroup(all_clinical_contexts, label="Filter Task: Clinical Context") |
|
|
|
|
|
all_applications = ['Procudure information', 'Concept standarization', |
|
'Specialist recommendation', 'Negation identification', |
|
'Clinical trial matching', 'Consultation summarization', |
|
'Semantic relation', 'Post-discharge patient management', |
|
'De-identification', 'Billing & Coding', 'Phenotyping', |
|
'Data organization', 'Temporal & Causality relation', |
|
'Summarization', 'Screen & Consultation', 'Diagnosis', |
|
'ADE & Incidents', 'Risk factor extraction', 'Prognosis', |
|
'Medication information'] |
|
application_options = gr.CheckboxGroup(all_applications, label="Filter Task: Clinical Application") |
|
|
|
|
|
all_stages = ['Treatment and Intervention', 'Triage and Referral', |
|
'Initial Assessment', 'Discharge and Administration', |
|
'Research', 'Diagnosis and Prognosis'] |
|
stage_options = gr.CheckboxGroup(all_stages, label="Filter Task: Clinical Stage") |
|
|
|
|
|
all_data_access = ['Open Access', 'Regulated'] |
|
da_options = gr.CheckboxGroup(all_data_access, label="Filter Task: Data Access") |
|
|
|
components = [language_options, task_type_options, cc_options, |
|
application_options, stage_options, da_options] |
|
|
|
filter_types = ["Language", "Task Type", "Clinical Context", |
|
"Applications", "Clinical Stage", "Data Access"] |
|
|
|
return components, filter_types |
|
|
|
@staticmethod |
|
def setup_filter_events(components: List[gr.CheckboxGroup], |
|
filter_types: List[str], |
|
leaderboard: Leaderboard, |
|
filter_manager, |
|
leaderboard_type: str): |
|
"""Setup event handlers for filter components""" |
|
|
|
def create_filter_function(filter_type: str, lb_type: str): |
|
"""Create a filter function with proper closure""" |
|
return lambda values: filter_manager.apply_filter(lb_type, filter_type, values) |
|
|
|
for component, filter_type in zip(components, filter_types): |
|
filter_fn = create_filter_function(filter_type, leaderboard_type) |
|
component.change( |
|
fn=filter_fn, |
|
inputs=component, |
|
outputs=leaderboard |
|
) |