File size: 3,476 Bytes
41e170e
 
 
e1ce0ca
 
 
 
41e170e
 
 
 
 
e1ce0ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41e170e
 
 
 
 
 
e1ce0ca
 
 
 
 
 
 
41e170e
 
 
 
 
 
 
 
e1ce0ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41e170e
 
 
e1ce0ca
 
 
 
 
 
 
 
 
 
 
 
 
41e170e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e1ce0ca
41e170e
 
 
 
 
 
 
e1ce0ca
41e170e
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
import streamlit as st
import os

from app.backend.constant import (
    LEADERBOARD_ICON_MAP, get_display_name,
    DOMAIN_GROUPS, LANGUAGE_GROUPS,
)

LEADERBOARD_MAP = {}
PAGE_SECTIONS = []


def _page_toml(name, page_name):
    icon = LEADERBOARD_ICON_MAP.get(page_name, "")
    return f"""
[[pages]]
path = "app/ui/pages/{name}.py"
name = "{page_name}"
icon = "{icon}"
"""


def _section_toml(section_name):
    return f"""
[[pages]]
name = "{section_name}"
icon = ""
is_section = true
"""


def init_leaderboard():
    data_engine = st.session_state["data_engine"]
    leaderboard_map = {}
    leaderboard_change = False
    page_change = False

    text_root = []
    domain_pages = []
    language_pages = []
    multimodal_root = []
    multimodal_sub = []
    sort_id = 0

    for dataset in data_engine.datasets:
        sort_id += 1
        leaderboard = dataset["leaderboard"]
        name = dataset["name"]

        leaderboard_section = f"{leaderboard.capitalize()} Leaderboard"
        if leaderboard_section not in leaderboard_map:
            leaderboard_map[leaderboard_section] = []

        is_root = name.lower() == leaderboard.lower()
        leaderboard_map[leaderboard_section].append((name, 0 if is_root else sort_id))

        page_name = leaderboard_section if is_root else get_display_name(name)
        entry = _page_toml(name, page_name)

        if leaderboard.lower() == "text":
            if is_root:
                text_root.append(entry)
            elif name in DOMAIN_GROUPS:
                domain_pages.append(entry)
            elif name in LANGUAGE_GROUPS:
                language_pages.append(entry)
        elif leaderboard.lower() == "multimodal":
            if is_root:
                multimodal_root.append(entry)
            else:
                multimodal_sub.append(entry)

    for k, v in leaderboard_map.items():
        v.sort(key=lambda x: x[1])

    page_sections = []
    page_sections.extend(text_root)
    if domain_pages:
        page_sections.append(_section_toml("Domain"))
        page_sections.extend(domain_pages)
    if language_pages:
        page_sections.append(_section_toml("Languages"))
        page_sections.extend(language_pages)
    if multimodal_root or multimodal_sub:
        page_sections.append(_section_toml("Multimodal"))
        page_sections.extend(multimodal_root)
        page_sections.extend(multimodal_sub)

    if leaderboard_map != LEADERBOARD_MAP:
        LEADERBOARD_MAP.update(leaderboard_map)
        leaderboard_change = True
    if page_sections != PAGE_SECTIONS:
        PAGE_SECTIONS.clear()
        PAGE_SECTIONS.extend(page_sections)
        page_change = True

    return leaderboard_change, page_change


def init_pages(leaderboard_change, page_change):
    if leaderboard_change:
        with open("app/ui/pages/data_page.py", "r", encoding="utf-8") as f:
            data_page = f.read()
        for leaderboard, group_names in LEADERBOARD_MAP.items():
            for group_name in group_names:
                path = os.path.join("app/ui/pages", f"{group_name[0]}.py")
                with open(path, "w", encoding="utf-8") as f:
                    f.write(data_page.replace("$group_name$", group_name[0]))
    if page_change:
        with open("app/ui/pages_sections.toml", "w", encoding="utf-8") as f:
            f.write("\n".join(PAGE_SECTIONS))


if __name__ == '__main__':
    init_leaderboard()
    init_pages(True, True)
    print("\n".join(PAGE_SECTIONS))