File size: 7,762 Bytes
fc8d954
9fff15f
 
993dbef
9fff15f
751b697
 
 
 
 
 
 
 
 
 
 
 
fc8d954
554dc8a
9fff15f
751b697
 
 
 
 
 
9fff15f
fc8d954
 
 
 
 
 
a06fdf2
3fb1e00
a06fdf2
9fff15f
 
b201287
 
 
 
 
 
 
71bda18
b201287
76ebb03
e7e6b21
 
 
71bda18
0023a7e
e7e6b21
 
 
 
 
 
 
3fb1e00
 
 
 
 
 
 
 
9fff15f
751b697
9fff15f
 
 
751b697
9fff15f
 
 
751b697
 
9fff15f
751b697
9fff15f
e7e6b21
 
bd86818
e7e6b21
 
91094ca
e7e6b21
 
 
76ebb03
e7e6b21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9fff15f
751b697
3e8b052
9fff15f
 
4bcef30
9fff15f
751b697
9fff15f
 
 
 
 
 
a06fdf2
9fff15f
 
 
 
 
8595073
 
 
 
 
 
 
 
b8641f6
8595073
9fff15f
 
 
 
 
 
fc8d954
9fff15f
 
 
 
fc8d954
 
9fff15f
 
fc8d954
9fff15f
 
 
 
 
 
 
b8641f6
 
 
 
 
 
9fff15f
 
 
 
 
 
 
751b697
9fff15f
 
 
8595073
9fff15f
 
 
a06fdf2
 
9fff15f
 
 
 
3e8b052
9fff15f
 
b201287
9fff15f
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
import logging
import os

import gradio as gr  # type: ignore[import]

from src.content import (
    INTRODUCTION_TEXT,
    INTRODUCTION_TITLE,
    LEADERBOARD_TEXT,
    LEADERBOARD_TITLE,
    SUBMISSION_TEXT_FILES,
    SUBMISSION_TEXT_INTRO,
    SUBMISSION_TEXT_METADATA,
    SUBMISSION_TEXT_SUBMIT,
    SUBMISSION_TEXT_TASK,
    SUBMISSION_TITLE,
)
from src.get_results_for_task import get_results_for_task
from src.leaderboard_formatting import get_types_per_task
from src.submission_uploader import SubmissionUploader
from src.tasks_content import (
    TASKS_DESCRIPTIONS,
    TASKS_PRETTY,
    TASKS_PRETTY_REVERSE,
    get_submission_text_files_for_task,
)

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[logging.StreamHandler()],
)

submission_uploader = SubmissionUploader(
    dataset_id=os.environ["DATASET_ID"], private_dataset_id=os.getenv("PRIVATE_DATASET_ID")
)


def get_leaderboard_for_task(task_pretty: str) -> gr.components.Dataframe:
    return gr.components.Dataframe(
        value=get_results_for_task(task_pretty),
        interactive=False,
        datatype=get_types_per_task(TASKS_PRETTY_REVERSE[task_pretty]),
    )

code_completion_dataset_names = get_results_for_task(TASKS_PRETTY['project_code_completion'])['Dataset Name'].unique().tolist()

def get_leaderboard_for_completion_task(dataset_name: str | None):
    df = get_results_for_task(TASKS_PRETTY['project_code_completion'])
    if dataset_name is None:
        dataset_name = code_completion_dataset_names[0]
    filtered_df = df[df['Dataset Name']==dataset_name]
    filtered_df.drop(columns=['Dataset'], inplace=True)
    return gr.components.Dataframe(
        value=filtered_df,
        interactive=False,
        datatype=get_types_per_task('project_code_completion'),
    )


def get_aggregated_leaderboard_for_task(task_pretty: str) -> gr.components.Dataframe:
    return gr.components.Dataframe(
        value=get_results_for_task(task_pretty),
        interactive=False,
        datatype=get_types_per_task(TASKS_PRETTY_REVERSE[task_pretty]),
    )


with gr.Blocks() as demo:
    # intro
    gr.HTML(INTRODUCTION_TITLE)
    gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text")

    # leaderboard
    gr.HTML(LEADERBOARD_TITLE)
    gr.Markdown(LEADERBOARD_TEXT, elem_classes="markdown-text")
    with gr.Tabs():
        for task_pretty in TASKS_PRETTY_REVERSE:
            with gr.TabItem(task_pretty):
                with gr.Row():
                    gr.Markdown(TASKS_DESCRIPTIONS[TASKS_PRETTY_REVERSE[task_pretty]])

                if task_pretty == TASKS_PRETTY['project_code_completion']:
                    leaderboard_table = get_leaderboard_for_completion_task(dataset_name=None)
                    
                else:
                    leaderboard_table = get_leaderboard_for_task(task_pretty)
                
                task_input = gr.Text(value=task_pretty, visible=False)

                if task_pretty == TASKS_PRETTY['project_code_completion']:
                    dataset_dropdown = gr.Dropdown(choices=code_completion_dataset_names, label="Select the Dataset")
                    dataset_dropdown.change(
                        fn=get_leaderboard_for_completion_task,
                        inputs=dataset_dropdown,
                        outputs=leaderboard_table
                    )
                    refresh_button = gr.Button("πŸ”„ Refresh", variant="secondary")
                    refresh_button.click(
                        fn=get_leaderboard_for_completion_task,
                        inputs=dataset_dropdown,
                        outputs=leaderboard_table,
                    )
                else:
                    refresh_button = gr.Button("πŸ”„ Refresh", variant="secondary")
                    refresh_button.click(
                        fn=get_leaderboard_for_task,
                        inputs=task_input,
                        outputs=leaderboard_table,
                    )

    # submission
    '''
    gr.HTML(SUBMISSION_TITLE)
    gr.Markdown(SUBMISSION_TEXT_INTRO, elem_classes="markdown-text")
    with gr.Accordion("πŸš€ Submit new results", open=False):
        gr.Markdown(SUBMISSION_TEXT_TASK, elem_classes="markdown-text")
        task_selection = gr.Radio(TASKS_PRETTY_REVERSE.keys(), label="Task")

        gr.Markdown(SUBMISSION_TEXT_METADATA, elem_classes="markdown-text")
        with gr.Row():
            with gr.Column():
                model_folder_textbox = gr.Textbox(
                    label="Model Folder",
                    placeholder="How to call a folder related to this submission in our results dataset (should be unique).",
                )
                model_name_textbox = gr.Textbox(
                    label="Model Name",
                    placeholder="How to display model's name on the leaderboard.",
                )
                model_url_textbox = gr.Textbox(
                    label="Model URL",
                    placeholder="Link to a model's page - will be clickable on a leaderboard (optional).",
                )

            with gr.Column():
                url_textbox = gr.Textbox(
                    label="Relevant URLs",
                    placeholder='URLs to relevant resources with additional details about your submission (optional). Use the following format: "[text1](link1), [text2](link2)".',
                )
                model_availability_textbox = gr.Textbox(
                    label="Availability",
                    placeholder="Information about the model's availability and licensing.",
                )
                context_size_textbox = gr.Textbox(
                    label="Context Size",
                    placeholder="Context size in tokens used for the submission (should be an integer).",
                )
            with gr.Column():
                submitted_by_textbox = gr.Textbox(
                    label="Submitted By",
                    placeholder="How to display on the leaderboard who submitted the model.",
                )
                contact_textbox = gr.Textbox(
                    label="Contact Information",
                    placeholder="How Long Code Arena team can contact you (won't go to public dataset).",
                )
                comment_textbox = gr.Textbox(
                    label="Comment",
                    placeholder="Any comments you have for Long Code Arena team (optional, won't go to public dataset).",
                )

        gr.Markdown(SUBMISSION_TEXT_FILES, elem_classes="markdown-text")
        with gr.Row():
            with gr.Column(variant="panel"):
                task_specific_instructions = gr.Markdown(get_submission_text_files_for_task(None))
                task_selection.select(get_submission_text_files_for_task, [task_selection], task_specific_instructions)
            with gr.Column():
                file_output = gr.File(file_count="multiple")

        gr.Markdown(SUBMISSION_TEXT_SUBMIT, elem_classes="markdown-text")
        submit_button = gr.Button("Submit")
        submission_result = gr.Markdown()
        submit_button.click(
            submission_uploader.upload_files,
            [
                task_selection,
                model_folder_textbox,
                model_name_textbox,
                model_availability_textbox,
                model_url_textbox,
                url_textbox,
                context_size_textbox,
                submitted_by_textbox,
                contact_textbox,
                comment_textbox,
                file_output,
            ],
            submission_result,
        )
    '''

if __name__ == "__main__":
    demo.queue()
    demo.launch()