MaziyarPanahi commited on
Commit
1bc77fb
·
1 Parent(s): 1205683
Files changed (1) hide show
  1. app.py +173 -4
app.py CHANGED
@@ -1,7 +1,176 @@
1
  import gradio as gr
 
 
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
5
 
6
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ import pandas as pd
3
+ import numpy as np
4
 
5
+ # Sample data structure - replace this with your actual CSV loading
6
+ # df = pd.read_csv('your_leaderboard_data.csv')
7
 
8
+ # For demonstration, I'll create sample data matching your structure
9
+ data = {
10
+ 'Model': ['Llama-3-70B-UltraMedical', 'MMed-Llama-3-8B', 'Llama-3.1-8B-UltraMedical', 'meditron-70b', 'meditron-7b'],
11
+ 'Domain': ['Medical', 'Medical', 'Medical', 'Medical', 'Medical'],
12
+ 'License': ['Llama-3', 'Llama-3', 'Llama-3', 'Apache 2.0', 'Apache 2.0'],
13
+ 'Size (B)': [70, 8, 8, 70, 7],
14
+ 'Size_Category': ['40-80', '5-10', '5-10', '40-80', '5-10'], # Added for filtering
15
+ 'Accessibility': ['Open Source', 'Open Source', 'Open Source', 'Open Source', 'Open Source'],
16
+ 'Average Performance': [33.4, 20.37, 20.16, 15.68, 9.52],
17
+ 'ADE-Identification': [77.96, 83.15, 64.43, 51.8, 39.01],
18
+ 'BrainMRI-AIS': [95.91, 91.82, 92.48, 87.27, 64.47],
19
+ 'Brateca-Hospitalization': [59.23, 55.1, 35.42, 43.18, 40.1]
20
+ }
21
+
22
+ df = pd.DataFrame(data)
23
+
24
+ def filter_and_search_models(search_query, domain_filter, size_ranges, accessibility_filter):
25
+ """Filter and search models based on user inputs"""
26
+ filtered_df = df.copy()
27
+
28
+ # Apply search filter
29
+ if search_query:
30
+ mask = filtered_df['Model'].str.contains(search_query, case=False, na=False)
31
+ filtered_df = filtered_df[mask]
32
+
33
+ # Apply domain filter
34
+ if domain_filter:
35
+ if domain_filter == "Medical":
36
+ filtered_df = filtered_df[filtered_df['Domain'] == 'Medical']
37
+ elif domain_filter == "General":
38
+ filtered_df = filtered_df[filtered_df['Domain'] == 'General']
39
+
40
+ # Apply size range filter
41
+ if size_ranges and len(size_ranges) > 0:
42
+ filtered_df = filtered_df[filtered_df['Size_Category'].isin(size_ranges)]
43
+
44
+ # Apply accessibility filter
45
+ if accessibility_filter:
46
+ if accessibility_filter == "Open Source":
47
+ filtered_df = filtered_df[filtered_df['Accessibility'] == 'Open Source']
48
+ elif accessibility_filter == "Proprietary":
49
+ filtered_df = filtered_df[filtered_df['Accessibility'] == 'Proprietary']
50
+
51
+ # Sort by Average Performance (descending)
52
+ filtered_df = filtered_df.sort_values('Average Performance', ascending=False)
53
+
54
+ # Format the dataframe for display
55
+ display_df = filtered_df[['Model', 'Domain', 'License', 'Size (B)',
56
+ 'Average Performance', 'ADE-Identification',
57
+ 'BrainMRI-AIS', 'Brateca-Hospitalization']]
58
+
59
+ # Round numerical values for better display
60
+ for col in ['Average Performance', 'ADE-Identification', 'BrainMRI-AIS', 'Brateca-Hospitalization']:
61
+ display_df[col] = display_df[col].round(2)
62
+
63
+ return display_df
64
+
65
+ # Create the Gradio interface
66
+ with gr.Blocks(title="FACT Leaderboard", theme=gr.themes.Base()) as app:
67
+ gr.Markdown("# 🏆 FACT Leaderboard")
68
+ gr.Markdown("### Filter and search medical AI models by performance metrics")
69
+
70
+ with gr.Row():
71
+ with gr.Column(scale=1):
72
+ # Search box
73
+ search_box = gr.Textbox(
74
+ label="Model Search",
75
+ placeholder="Search for a model...",
76
+ value=""
77
+ )
78
+
79
+ # Domain filter
80
+ gr.Markdown("**Filter Model: Domain**")
81
+ domain_radio = gr.Radio(
82
+ choices=["All", "General", "Medical"],
83
+ value="All",
84
+ label="",
85
+ elem_classes="domain-filter"
86
+ )
87
+
88
+ # Size range filter
89
+ gr.Markdown("**Filter Model: Size Range**")
90
+ size_checkboxes = gr.CheckboxGroup(
91
+ choices=["0-5", "5-10", "10-40", "40-80", ">80"],
92
+ value=["0-5", "5-10", "10-40", "40-80", ">80"],
93
+ label="",
94
+ elem_classes="size-filter"
95
+ )
96
+
97
+ # Accessibility filter
98
+ gr.Markdown("**Filter Model: Accessibility**")
99
+ accessibility_radio = gr.Radio(
100
+ choices=["All", "Open Source", "Proprietary"],
101
+ value="All",
102
+ label="",
103
+ elem_classes="accessibility-filter"
104
+ )
105
+
106
+ with gr.Column(scale=3):
107
+ # Results table
108
+ results_table = gr.Dataframe(
109
+ value=filter_and_search_models("", "All", ["0-5", "5-10", "10-40", "40-80", ">80"], "All"),
110
+ headers=["Model", "Model: Domain", "Model: License", "Size (B)",
111
+ "Average Performance", "ADE-Identification",
112
+ "BrainMRI-AIS", "Brateca-Hospitalization"],
113
+ datatype=["str", "str", "str", "number", "number", "number", "number", "number"],
114
+ elem_id="leaderboard-table",
115
+ interactive=False,
116
+ wrap=True
117
+ )
118
+
119
+ # Update table when filters change
120
+ def update_table(search, domain, sizes, accessibility):
121
+ domain_val = None if domain == "All" else domain
122
+ accessibility_val = None if accessibility == "All" else accessibility
123
+ return filter_and_search_models(search, domain_val, sizes, accessibility_val)
124
+
125
+ # Connect all inputs to the update function
126
+ search_box.change(
127
+ fn=update_table,
128
+ inputs=[search_box, domain_radio, size_checkboxes, accessibility_radio],
129
+ outputs=results_table
130
+ )
131
+
132
+ domain_radio.change(
133
+ fn=update_table,
134
+ inputs=[search_box, domain_radio, size_checkboxes, accessibility_radio],
135
+ outputs=results_table
136
+ )
137
+
138
+ size_checkboxes.change(
139
+ fn=update_table,
140
+ inputs=[search_box, domain_radio, size_checkboxes, accessibility_radio],
141
+ outputs=results_table
142
+ )
143
+
144
+ accessibility_radio.change(
145
+ fn=update_table,
146
+ inputs=[search_box, domain_radio, size_checkboxes, accessibility_radio],
147
+ outputs=results_table
148
+ )
149
+
150
+ # Add custom CSS for better styling
151
+ app.css = """
152
+ #leaderboard-table {
153
+ font-size: 14px;
154
+ }
155
+
156
+ .domain-filter label,
157
+ .size-filter label,
158
+ .accessibility-filter label {
159
+ display: flex;
160
+ align-items: center;
161
+ margin: 5px 0;
162
+ }
163
+
164
+ .domain-filter input[type="radio"],
165
+ .accessibility-filter input[type="radio"] {
166
+ margin-right: 8px;
167
+ }
168
+
169
+ .size-filter input[type="checkbox"] {
170
+ margin-right: 8px;
171
+ }
172
+ """
173
+
174
+ # Launch the app
175
+ if __name__ == "__main__":
176
+ app.launch(share=True)