File size: 4,729 Bytes
4781b83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import gradio as gr
import pandas as pd
import plotly.express as px

def display_table(exam_type):
    if exam_type == "Armenian Exams":
        df = pd.read_csv('unified_exam_results.csv')
        df = df.sort_values(by='Average score', ascending=False)
        cols = df.columns.tolist()
        cols.insert(1, cols.pop(cols.index('Average score'))) 
        df = df[cols]
    elif exam_type == "MMLU-Pro-Hy":
        df = pd.read_csv('mmlu_pro_hy_results.csv')
        df = df.sort_values(by='Accuracy', ascending=False)
    return df

def create_bar_chart(exam_type, plot_column):
    if exam_type == "Armenian Exams":
        df = pd.read_csv('unified_exam_results.csv')
        df = df.sort_values(by='Average score', ascending=False)
        df = df.sort_values(by=[plot_column, 'Model'], ascending=[False, True]).reset_index(drop=True)

        x_col = plot_column
        title = f'{plot_column} per Model'
        if plot_column == 'Average score':
            range_max = 20
            x_range_max = 20
        else:
            range_max = 20
            x_range_max = 20
            def get_label(score):
                if score < 8:
                    return "Fail"
                elif 8 <= score <= 18:
                    return "Pass"
                else:
                    return "Distinction"
            df['Test Result'] = df[plot_column].apply(get_label)

        if plot_column in ['Average score', 'Accuracy']:
            fig = px.bar(df,
                x=x_col,
                y='Model',
                color=x_col,
                color_continuous_scale='tealrose_r',
                labels={x_col: plot_column, 'Model': 'Model'},
                title=title,
                orientation='h',
                range_color=[0, range_max])
        else:
            color_discrete_map = {
                "Fail": "#d15d80",
                "Pass": "#edd8be",
                "Distinction": "#059492"
            }
            fig = px.bar(df,
                x=x_col,
                y='Model',
                color=df['Test Result'],
                color_discrete_map=color_discrete_map,
                labels={x_col: plot_column, 'Model': 'Model'},
                title=title,
                orientation='h')

        fig.update_layout(
            xaxis=dict(range=[0, x_range_max]),
            title=dict(text=title, font=dict(size=16)),
            xaxis_title=dict(font=dict(size=12)),
            yaxis_title=dict(font=dict(size=12)),
            yaxis=dict(autorange="reversed")
        )

        return fig

    elif exam_type == "MMLU-Pro-Hy":
        df = pd.read_csv('mmlu_pro_hy_results.csv')
        df = df.sort_values(by='Accuracy', ascending=False)
        x_col = 'Accuracy'
        title = 'Accuracy per Model (MMLU-Pro-Hy)'
        range_max = 1.0
        x_range_max = 1.0
        if plot_column != 'Accuracy':
            def get_label(accuracy):
                if accuracy < 0.5:
                    return "Low"
                elif 0.5 <= accuracy <= 0.8:
                    return "Medium"
                else:
                    return "High"
            df['Test Result'] = df['Accuracy'].apply(get_label) 

        fig = px.bar(df,
                                x=x_col,
                                y='Model',
                                color=x_col,
                                color_continuous_scale='tealrose_r',
                                labels={x_col: plot_column, 'Model': 'Model'},
                                title=title,
                                orientation='h',
                                range_color=[0, range_max])

        fig.update_layout(
            xaxis=dict(range=[0, x_range_max]),
            title=dict(text=title, font=dict(size=16)),
            xaxis_title=dict(font=dict(size=12)),
            yaxis_title=dict(font=dict(size=12)),
            yaxis=dict(autorange="reversed")
        )

        return fig

with gr.Blocks() as app:
    with gr.Tabs():
        with gr.TabItem("Armenian Unified Exams"):
            table_output_armenian = gr.DataFrame(value=lambda: display_table("Armenian Exams"))
            plot_column_dropdown = gr.Dropdown(choices=['Average score', 'Armenian language exam score', 'Armenian history exam score', 'Mathematics exam score'], value='Average score', label='Select Column to Plot')
            plot_output_armenian = gr.Plot(lambda column: create_bar_chart("Armenian Exams", column), inputs=plot_column_dropdown)
        with gr.TabItem("MMLU-Pro-Hy"):
            table_output_mmlu = gr.DataFrame(value=lambda: display_table("MMLU-Pro-Hy"))
            plot_output_mmlu = gr.Plot(lambda: create_bar_chart("MMLU-Pro-Hy", 'Accuracy'))

app.launch(share=True)