File size: 4,184 Bytes
fc8d954
 
b8641f6
fc8d954
993dbef
751b697
fc8d954
8595073
751b697
 
 
 
 
 
 
b8641f6
9fff15f
8595073
 
35e5afe
8595073
cf6ae87
fc8d954
7a91913
 
 
554dc8a
fc8d954
9fff15f
 
 
 
 
 
 
 
 
 
 
fa754fa
b8641f6
9fff15f
 
 
 
 
 
 
 
 
 
fa754fa
b8641f6
9fff15f
 
 
 
fc8d954
 
b8641f6
 
 
 
 
 
14088d3
 
 
6bf3d6d
14088d3
 
 
b8641f6
fc8d954
f12963e
b8641f6
 
 
fc8d954
a32edfb
3fb1e00
 
 
 
a32edfb
 
a8fb401
751b697
3fb1e00
 
a8fb401
751b697
a32edfb
3fb1e00
 
 
 
 
 
 
b4caafa
6bf3d6d
b4caafa
fc8d954
 
 
 
36bd463
 
fc8d954
36bd463
fc8d954
36bd463
fc8d954
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
import logging
import os
import re

import pandas as pd  # type: ignore[import]
from datasets import get_dataset_config_names, load_dataset  # type: ignore[import]

from .formatting import model_hyperlink
from .leaderboard_formatting import (
    COLUMNS_PRETTY,
    METRICS_PER_TASK,
    SORT_COLUMN_PER_TASK,
    get_columns_per_task,
)
from .tasks_content import TASKS_PRETTY_REVERSE
from .utils import MD_LINK_PATTERN

try:
    AVAILABLE_TASKS = get_dataset_config_names(os.environ["DATASET_ID"])
except FileNotFoundError as e:
    AVAILABLE_TASKS = []
    logging.warning("Dataset is not available! Check if token is expired.")

AVAILABLE_TASKS_STR = '  ;  '.join(AVAILABLE_TASKS)
logging.warning(f"Available tasks: {AVAILABLE_TASKS_STR}")


def _get_results_stub() -> pd.DataFrame:
    stub_df = pd.DataFrame(
        [
            {
                "Model Name": "GPT-4",
                "Availability": "Proprietary",
                "Context Size": "16k",
                "BLEU": "X",
                "ROUGE": "X",
                "ChrF": "X",
                "BERTScore": "X",
                "BERTScore (Normalized)": "X",
                "Submitted By": "BenchName Team",
                "Resources": "",
            },
            {
                "Model Name": "CodeLlama-7b (instruct)",
                "Availability": "Llama 2 license",
                "Context Size": "16k",
                "BLEU": "X",
                "ROUGE": "X",
                "ChrF": "X",
                "BERTScore": "X",
                "BERTScore (Normalized)": "X",
                "Submitted By": "BenchName Team",
                "Resources": "",
            },
        ]
    )
    return stub_df


def _process_urls(raw_urls: str) -> str:
    if not raw_urls:
        return raw_urls
    html_urls = [model_hyperlink(*re.search(MD_LINK_PATTERN, url.strip()).groups()) for url in raw_urls.split(",")]
    return ", ".join(html_urls)

def _extract_dataset_name(raw_urls: str) -> str:
    if not raw_urls:
        return raw_urls
    names = [re.search(MD_LINK_PATTERN, url.strip()).group(1) + ' context' for url in raw_urls.split(",")]
    return ", ".join(names)
    


def _get_results_dataset(task_id: str) -> pd.DataFrame:
    logging.info(f"Loading dataset: {task_id}...")
    results_df = load_dataset(
        os.environ["DATASET_ID"], task_id, split="test", download_mode="force_redownload"
    ).to_pandas()
    results_df = results_df.rename(columns=COLUMNS_PRETTY, errors="ignore")

    if task_id != "aggregated":
        results_df["Context Size"] = results_df["Context Size"].map(lambda x: f"{int(x) // 1000}k" if int(x) >= 1000 else x)
        results_df["Resources"] = [_process_urls(urls) for urls in results_df["Resources"]]
        results_df = results_df.sort_values(by=SORT_COLUMN_PER_TASK[task_id], ascending=False)

    for metric_column in METRICS_PER_TASK[task_id]:
        if "BERTScore" in metric_column:
            results_df[metric_column] = results_df[metric_column].map(lambda x: f"{x:.5f}")
        elif "Mean Rank" in metric_column:
            continue
        else:
            results_df[metric_column] = results_df[metric_column].map(lambda x: f"{x:.2f}")

    if task_id == 'aggregated':
        results_df["Model Name"] = results_df["Model"]
    else:
        results_df["Model Name"] = [
            model_hyperlink(link=link, model_name=model_name) if link else model_name
            for link, model_name in zip(results_df["model_url"], results_df["Model Name"])
        ]
    if task_id == 'project_code_completion':
        results_df["Dataset Name"] = [_extract_dataset_name(urls) for urls in results_df["Dataset"]]
        results_df["Dataset"] = [_process_urls(urls) for urls in results_df["Dataset"]]
    results_df = results_df[get_columns_per_task(task_id)]
    return results_df


def get_results_for_task(task_pretty: str) -> pd.DataFrame:
    task_id = TASKS_PRETTY_REVERSE[task_pretty]
    if task_id in AVAILABLE_TASKS:
        logging.info(f"Retrieving results for {task_pretty}...")
        return _get_results_dataset(task_id)
    logging.info(f"Generating leaderboard stub for {task_pretty}...")
    return _get_results_stub()