Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
Β·
155d4e6
1
Parent(s):
b1aa440
fix: dropbox, layout(ko)
Browse files- banner_wide.png +3 -0
- tabs/leaderboard_v1_en.py +4 -4
- tabs/leaderboard_v1_kr.py +444 -370
banner_wide.png
ADDED
|
Git LFS Details
|
tabs/leaderboard_v1_en.py
CHANGED
|
@@ -791,9 +791,9 @@ def create_leaderboard_v2_tab():
|
|
| 791 |
}
|
| 792 |
|
| 793 |
#hero-banner {
|
| 794 |
-
|
| 795 |
-
margin: 0
|
| 796 |
-
border-radius:
|
| 797 |
overflow: hidden;
|
| 798 |
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
|
| 799 |
}
|
|
@@ -1093,7 +1093,7 @@ def create_leaderboard_v2_tab():
|
|
| 1093 |
""")
|
| 1094 |
|
| 1095 |
gr.Image(
|
| 1096 |
-
value="
|
| 1097 |
show_label=False,
|
| 1098 |
interactive=False,
|
| 1099 |
type="filepath",
|
|
|
|
| 791 |
}
|
| 792 |
|
| 793 |
#hero-banner {
|
| 794 |
+
width: 100%;
|
| 795 |
+
margin: 0 0 20px 0;
|
| 796 |
+
border-radius: 0;
|
| 797 |
overflow: hidden;
|
| 798 |
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
|
| 799 |
}
|
|
|
|
| 1093 |
""")
|
| 1094 |
|
| 1095 |
gr.Image(
|
| 1096 |
+
value="banner_wide.png",
|
| 1097 |
show_label=False,
|
| 1098 |
interactive=False,
|
| 1099 |
type="filepath",
|
tabs/leaderboard_v1_kr.py
CHANGED
|
@@ -791,17 +791,24 @@ def create_leaderboard_v2_tab():
|
|
| 791 |
}
|
| 792 |
|
| 793 |
#hero-banner {
|
| 794 |
-
|
| 795 |
-
margin: 0
|
| 796 |
-
border-radius:
|
| 797 |
-
overflow: hidden;
|
| 798 |
-
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 799 |
}
|
| 800 |
|
| 801 |
#hero-banner img {
|
| 802 |
width: 100%;
|
| 803 |
height: auto;
|
| 804 |
display: block;
|
|
|
|
| 805 |
}
|
| 806 |
|
| 807 |
.hero-title {
|
|
@@ -1093,7 +1100,7 @@ def create_leaderboard_v2_tab():
|
|
| 1093 |
""")
|
| 1094 |
|
| 1095 |
gr.Image(
|
| 1096 |
-
value="
|
| 1097 |
show_label=False,
|
| 1098 |
interactive=False,
|
| 1099 |
type="filepath",
|
|
@@ -1188,8 +1195,9 @@ def create_leaderboard_v2_tab():
|
|
| 1188 |
<div class="scenario-body">
|
| 1189 |
<p>λ€μ΄λ², μ§λ, μΉ΄μΉ΄μ€, μΉμ¬μ΄νΈ λ± νκ΅ μ€μ¬μ© νκ²½ κΈ°λ°μ APIλ₯Ό κΈ°λ°μΌλ‘<br> κ΅λ΄ μ¬μ©μμ μΌμκ³Ό λ°μ ν 'μ½μ μμ½', 'λΈλ‘κ·Έ νκΈ° κ²μ'κ³Ό κ°μ νμ€μ μΈ λ¬Έμ ν΄κ²° μλ리μ€λ₯Ό ꡬννμ΅λλ€.</p>
|
| 1190 |
</div>
|
| 1191 |
-
|
| 1192 |
</div>
|
|
|
|
| 1193 |
""")
|
| 1194 |
|
| 1195 |
# Section 3: ν΅μ¬ νκ° κΈ°μ€
|
|
@@ -1947,67 +1955,128 @@ def create_leaderboard_v2_tab():
|
|
| 1947 |
padding: 12px 20px !important;
|
| 1948 |
font-size: 0.95rem !important;
|
| 1949 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1950 |
</style>
|
| 1951 |
|
| 1952 |
""")
|
| 1953 |
|
| 1954 |
level_options = list(level_details.keys())
|
| 1955 |
|
| 1956 |
-
with
|
| 1957 |
-
|
| 1958 |
-
<div class="domain-header">
|
| 1959 |
-
<h2 class="domain-title" style="color: white;">π§ νμ€ν¬ λ 벨 μ ν</h2>
|
| 1960 |
-
<p class="domain-subtitle" style="color: white;">Ko-AgentBenchμ ALL Β· λͺ¨λΈλ³ μμ΄μ νΈ μν λ₯λ ₯μ λ¨κ³λ³λ‘ μΈ‘μ ν΄λ³΄μΈμ.</p>
|
| 1961 |
-
</div>
|
| 1962 |
-
""")
|
| 1963 |
-
domain_filter = gr.Radio(
|
| 1964 |
-
choices=level_options,
|
| 1965 |
-
value=default_level,
|
| 1966 |
-
label="",
|
| 1967 |
-
interactive=True,
|
| 1968 |
-
container=False,
|
| 1969 |
-
elem_classes=["domain-radio"]
|
| 1970 |
-
)
|
| 1971 |
|
| 1972 |
-
#
|
| 1973 |
-
|
| 1974 |
-
|
| 1975 |
-
|
| 1976 |
-
|
| 1977 |
-
|
| 1978 |
-
|
| 1979 |
-
|
| 1980 |
-
|
| 1981 |
-
|
| 1982 |
-
with gr.Row(elem_classes=["filter-group-row"]):
|
| 1983 |
-
gr.HTML("<span class='filter-group-label' style='color: white;'>λͺ¨λΈ μ κ·Ό</span>")
|
| 1984 |
-
model_type_filter = gr.Radio(
|
| 1985 |
-
choices=["All", "OSS", "API"],
|
| 1986 |
-
value="All",
|
| 1987 |
-
label="",
|
| 1988 |
-
elem_classes=["domain-radio"],
|
| 1989 |
-
container=False
|
| 1990 |
-
)
|
| 1991 |
-
with gr.Column(scale=1, elem_classes=["filter-group"]):
|
| 1992 |
-
with gr.Row(elem_classes=["filter-group-row"]):
|
| 1993 |
-
gr.HTML("<span class='filter-group-label' style='color: white;'>μ λ ¬ μμ</span>")
|
| 1994 |
-
sort_order = gr.Radio(
|
| 1995 |
-
choices=["Descending", "Ascending"],
|
| 1996 |
-
value="Descending",
|
| 1997 |
-
label="",
|
| 1998 |
-
elem_classes=["domain-radio"],
|
| 1999 |
-
container=False
|
| 2000 |
-
)
|
| 2001 |
|
| 2002 |
-
|
| 2003 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2004 |
|
| 2005 |
leaderboard_table = gr.HTML(initial_table)
|
| 2006 |
|
| 2007 |
-
gr.HTML("""
|
| 2008 |
-
</div>
|
| 2009 |
-
</div>""")
|
| 2010 |
-
|
| 2011 |
# Radar Chart Section
|
| 2012 |
gr.HTML("""
|
| 2013 |
<div class="domain-selector-container domain-performance-container">
|
|
@@ -2017,22 +2086,16 @@ def create_leaderboard_v2_tab():
|
|
| 2017 |
</div>
|
| 2018 |
""")
|
| 2019 |
|
| 2020 |
-
|
| 2021 |
-
|
| 2022 |
-
|
| 2023 |
-
|
| 2024 |
-
|
| 2025 |
-
|
| 2026 |
-
""
|
| 2027 |
-
|
| 2028 |
-
|
| 2029 |
-
|
| 2030 |
-
multiselect=True,
|
| 2031 |
-
label="",
|
| 2032 |
-
info=None,
|
| 2033 |
-
container=False,
|
| 2034 |
-
# elem_classes=["model-dropdown"]
|
| 2035 |
-
)
|
| 2036 |
|
| 2037 |
# Radar chart plot - wrapped in centered container
|
| 2038 |
gr.HTML('<div class="chart-container radar-chart-container">')
|
|
@@ -2048,309 +2111,46 @@ def create_leaderboard_v2_tab():
|
|
| 2048 |
|
| 2049 |
gr.HTML("</div>")
|
| 2050 |
|
| 2051 |
-
|
| 2052 |
-
|
| 2053 |
-
|
| 2054 |
-
|
| 2055 |
-
|
| 2056 |
-
|
| 2057 |
-
|
| 2058 |
-
|
| 2059 |
-
|
| 2060 |
-
with gr.Column(elem_classes=["domain-selector-container", "level-selector-container"], elem_id="level-selector-box"):
|
| 2061 |
-
gr.HTML("""
|
| 2062 |
-
<div class="domain-header">
|
| 2063 |
-
<h2 class="domain-title" style="color: white;">π§ νμ€ν¬ λ 벨 λ° λͺ¨λΈ μ ν</h2>
|
| 2064 |
-
<p class="domain-subtitle" style="color: white;">λ 벨과 λͺ¨λΈ(μ΅λ 5κ°)μ μ ννμ¬ μμΈ SR(μ±κ³΅λ₯ ) κΈ°λ° μ§νλ₯Ό νμνμΈμ.</p>
|
| 2065 |
-
</div>
|
| 2066 |
-
""")
|
| 2067 |
-
level_metric_selector = gr.Dropdown(
|
| 2068 |
-
choices=level_ids,
|
| 2069 |
-
value=level_ids[0] if level_ids else None,
|
| 2070 |
-
multiselect=False,
|
| 2071 |
-
label="",
|
| 2072 |
-
info=None,
|
| 2073 |
-
container=False,
|
| 2074 |
-
elem_classes=["level-dropdown"]
|
| 2075 |
-
)
|
| 2076 |
-
level_model_selector = gr.Dropdown(
|
| 2077 |
-
choices=initial_level_model_choices,
|
| 2078 |
-
value=initial_level_model_values,
|
| 2079 |
-
multiselect=True,
|
| 2080 |
-
label="",
|
| 2081 |
-
info=None,
|
| 2082 |
-
container=False,
|
| 2083 |
-
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2084 |
-
)
|
| 2085 |
-
|
| 2086 |
-
gr.HTML('<div class="chart-container level-metric-chart-container">')
|
| 2087 |
-
level_metric_chart = gr.Plot(
|
| 2088 |
-
label="",
|
| 2089 |
-
value=initial_level_metric_chart,
|
| 2090 |
-
elem_classes=["level-metric-plot", "plot-container"]
|
| 2091 |
-
)
|
| 2092 |
-
gr.HTML("""
|
| 2093 |
-
</div>
|
| 2094 |
-
</div>
|
| 2095 |
-
""")
|
| 2096 |
-
|
| 2097 |
-
# Heatmap section
|
| 2098 |
-
gr.HTML("""
|
| 2099 |
-
<div class="domain-selector-container domain-performance-container heatmap-wrapper">
|
| 2100 |
-
<div class="domain-header">
|
| 2101 |
-
<h2 class="domain-title" style="color: white;">μ’
ν© μ±λ₯ ννΈλ§΅</h2>
|
| 2102 |
-
<p class="domain-subtitle" style="color: white;">κ° λͺ¨λΈμ L1~L7 Ko-AgentBench SR(μ±κ³΅λ₯ ) μ μλ₯Ό νλμ 보μΈμ.</p>
|
| 2103 |
-
</div>
|
| 2104 |
-
<div class="chart-container heatmap-chart-container">
|
| 2105 |
-
""")
|
| 2106 |
-
heatmap_chart = gr.Plot(
|
| 2107 |
-
label="",
|
| 2108 |
-
value=initial_heatmap,
|
| 2109 |
-
elem_classes=["heatmap-plot", "plot-container"]
|
| 2110 |
-
)
|
| 2111 |
-
gr.HTML("""
|
| 2112 |
-
</div>
|
| 2113 |
-
</div>
|
| 2114 |
-
""")
|
| 2115 |
-
|
| 2116 |
-
# Update functions
|
| 2117 |
-
def get_optimal_sort_order(sort_by_value):
|
| 2118 |
-
"""Return the optimal sort order for a given metric"""
|
| 2119 |
-
# Metrics where higher is better (descending)
|
| 2120 |
-
descending_metrics = ["Overall Success"] + [sr_column_map[level] for level in level_ids]
|
| 2121 |
-
|
| 2122 |
-
# Metrics where lower is better (ascending)
|
| 2123 |
-
ascending_metrics = []
|
| 2124 |
|
| 2125 |
-
|
| 2126 |
-
return "Descending"
|
| 2127 |
-
elif sort_by_value in ascending_metrics:
|
| 2128 |
-
return "Ascending"
|
| 2129 |
-
else:
|
| 2130 |
-
return "Descending" # Default fallback
|
| 2131 |
-
|
| 2132 |
-
def update_table(level_filter, model_type_filter, sort_order):
|
| 2133 |
-
title_html = update_leaderboard_title(level_filter)
|
| 2134 |
-
sort_metric = "Overall Success" if level_filter == "ALL" else sr_column_map.get(resolve_level(level_filter), "Overall Success")
|
| 2135 |
-
table_html = filter_and_sort_data(level_filter, model_type_filter, sort_metric, sort_order)
|
| 2136 |
-
return title_html, table_html
|
| 2137 |
-
|
| 2138 |
-
def update_radar_chart(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2139 |
-
# Get filtered dataframe
|
| 2140 |
df = load_leaderboard_data()
|
| 2141 |
-
|
| 2142 |
-
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2143 |
|
| 2144 |
-
|
| 2145 |
-
|
| 2146 |
-
|
|
|
|
| 2147 |
|
| 2148 |
-
|
| 2149 |
-
if selected_models:
|
| 2150 |
-
valid_selected = [m for m in selected_models if m in available_models]
|
| 2151 |
-
if not valid_selected:
|
| 2152 |
-
valid_selected = available_models[:5]
|
| 2153 |
-
else:
|
| 2154 |
-
valid_selected = available_models[:5]
|
| 2155 |
|
| 2156 |
-
#
|
| 2157 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2158 |
|
| 2159 |
-
#
|
| 2160 |
-
|
| 2161 |
-
|
| 2162 |
-
|
| 2163 |
-
|
| 2164 |
-
for model in available_models_all:
|
| 2165 |
-
if model not in heatmap_order:
|
| 2166 |
-
heatmap_order.append(model)
|
| 2167 |
-
heatmap_order = heatmap_order[:12]
|
| 2168 |
-
heatmap_fig = create_performance_heatmap(filtered_df, heatmap_order)
|
| 2169 |
|
| 2170 |
-
|
| 2171 |
-
|
| 2172 |
-
|
| 2173 |
-
|
| 2174 |
-
valid_level_models = [m for m in level_selected_models if m in available_level_models][:5]
|
| 2175 |
-
if not valid_level_models:
|
| 2176 |
-
valid_level_models = available_level_models[:5]
|
| 2177 |
-
else:
|
| 2178 |
-
valid_level_models = available_level_models[:5]
|
| 2179 |
-
level_metric_fig = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2180 |
-
|
| 2181 |
-
return (
|
| 2182 |
-
gr.Dropdown(
|
| 2183 |
-
choices=available_models,
|
| 2184 |
-
value=valid_selected,
|
| 2185 |
-
multiselect=True,
|
| 2186 |
-
label="",
|
| 2187 |
-
info=None,
|
| 2188 |
-
container=False,
|
| 2189 |
-
# elem_classes=["model-dropdown"]
|
| 2190 |
-
),
|
| 2191 |
-
chart,
|
| 2192 |
-
heatmap_fig,
|
| 2193 |
-
gr.Dropdown(
|
| 2194 |
-
choices=available_level_models,
|
| 2195 |
-
value=valid_level_models,
|
| 2196 |
-
multiselect=True,
|
| 2197 |
-
label="",
|
| 2198 |
-
info=None,
|
| 2199 |
-
container=False,
|
| 2200 |
-
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2201 |
-
),
|
| 2202 |
-
level_metric_fig,
|
| 2203 |
-
)
|
| 2204 |
-
|
| 2205 |
-
def update_radar_only(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2206 |
-
# Get filtered dataframe
|
| 2207 |
-
df = load_leaderboard_data()
|
| 2208 |
-
sort_metric = "Overall Success" if domain_filter == "ALL" else sr_column_map.get(resolve_level(domain_filter), "Overall Success")
|
| 2209 |
-
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2210 |
-
|
| 2211 |
-
available_models_all = filtered_df['Model'].tolist()
|
| 2212 |
-
if selected_models:
|
| 2213 |
-
valid_selected = [m for m in selected_models if m in available_models_all]
|
| 2214 |
-
if not valid_selected:
|
| 2215 |
-
valid_selected = available_models_all[:5]
|
| 2216 |
-
else:
|
| 2217 |
-
valid_selected = available_models_all[:5]
|
| 2218 |
-
|
| 2219 |
-
heatmap_order = []
|
| 2220 |
-
for model in valid_selected:
|
| 2221 |
-
if model not in heatmap_order:
|
| 2222 |
-
heatmap_order.append(model)
|
| 2223 |
-
for model in available_models_all:
|
| 2224 |
-
if model not in heatmap_order:
|
| 2225 |
-
heatmap_order.append(model)
|
| 2226 |
-
heatmap_order = heatmap_order[:12]
|
| 2227 |
-
|
| 2228 |
-
effective_level = selected_level if selected_level in level_ids else (level_ids[0] if level_ids else None)
|
| 2229 |
-
available_level_models = available_models_all
|
| 2230 |
-
if level_selected_models:
|
| 2231 |
-
valid_level_models = [m for m in level_selected_models if m in available_level_models][:5]
|
| 2232 |
-
if not valid_level_models:
|
| 2233 |
-
valid_level_models = available_level_models[:5]
|
| 2234 |
-
else:
|
| 2235 |
-
valid_level_models = available_level_models[:5]
|
| 2236 |
-
level_metric_fig = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2237 |
-
|
| 2238 |
-
return (
|
| 2239 |
-
create_domain_radar_chart(filtered_df, valid_selected),
|
| 2240 |
-
create_performance_heatmap(filtered_df, heatmap_order),
|
| 2241 |
-
gr.Dropdown(
|
| 2242 |
-
choices=available_level_models,
|
| 2243 |
-
value=valid_level_models,
|
| 2244 |
-
multiselect=True,
|
| 2245 |
-
label="",
|
| 2246 |
-
info=None,
|
| 2247 |
-
container=False,
|
| 2248 |
-
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2249 |
-
),
|
| 2250 |
-
level_metric_fig,
|
| 2251 |
-
)
|
| 2252 |
-
|
| 2253 |
-
def update_level_metric_only(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2254 |
-
df = load_leaderboard_data()
|
| 2255 |
-
sort_metric = "Overall Success" if domain_filter == "ALL" else sr_column_map.get(resolve_level(domain_filter), "Overall Success")
|
| 2256 |
-
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2257 |
-
available_models = filtered_df['Model'].tolist()
|
| 2258 |
-
if level_selected_models:
|
| 2259 |
-
valid_level_models = [m for m in level_selected_models if m in available_models][:5]
|
| 2260 |
-
if not valid_level_models:
|
| 2261 |
-
valid_level_models = available_models[:5]
|
| 2262 |
-
else:
|
| 2263 |
-
valid_level_models = available_models[:5]
|
| 2264 |
-
effective_level = selected_level if selected_level in level_ids else (level_ids[0] if level_ids else None)
|
| 2265 |
-
level_chart = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2266 |
-
return (
|
| 2267 |
-
gr.Dropdown(
|
| 2268 |
-
choices=available_models,
|
| 2269 |
-
value=valid_level_models,
|
| 2270 |
-
multiselect=True,
|
| 2271 |
-
label="",
|
| 2272 |
-
info=None,
|
| 2273 |
-
container=False,
|
| 2274 |
-
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2275 |
-
),
|
| 2276 |
-
level_chart,
|
| 2277 |
-
)
|
| 2278 |
-
|
| 2279 |
-
# Update table when filters change
|
| 2280 |
-
filter_inputs = [domain_filter, model_type_filter, sort_order]
|
| 2281 |
-
|
| 2282 |
-
for input_component in filter_inputs:
|
| 2283 |
-
input_component.change(
|
| 2284 |
-
fn=update_table,
|
| 2285 |
-
inputs=filter_inputs,
|
| 2286 |
-
outputs=[leaderboard_title, leaderboard_table]
|
| 2287 |
-
)
|
| 2288 |
-
|
| 2289 |
-
# Also update radar chart when filters change
|
| 2290 |
-
input_component.change(
|
| 2291 |
-
fn=update_radar_chart,
|
| 2292 |
-
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2293 |
-
outputs=[model_selector, radar_chart, heatmap_chart, level_model_selector, level_metric_chart]
|
| 2294 |
-
)
|
| 2295 |
-
|
| 2296 |
-
# Update radar chart when model selection changes
|
| 2297 |
-
model_selector.change(
|
| 2298 |
-
fn=update_radar_only,
|
| 2299 |
-
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2300 |
-
outputs=[radar_chart, heatmap_chart, level_model_selector, level_metric_chart]
|
| 2301 |
-
)
|
| 2302 |
-
|
| 2303 |
-
level_metric_selector.change(
|
| 2304 |
-
fn=update_level_metric_only,
|
| 2305 |
-
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2306 |
-
outputs=[level_model_selector, level_metric_chart]
|
| 2307 |
-
)
|
| 2308 |
-
|
| 2309 |
-
level_model_selector.change(
|
| 2310 |
-
fn=update_level_metric_only,
|
| 2311 |
-
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2312 |
-
outputs=[level_model_selector, level_metric_chart]
|
| 2313 |
-
)
|
| 2314 |
-
|
| 2315 |
-
# Define generate_performance_card function before using it
|
| 2316 |
-
def generate_performance_card(model_name):
|
| 2317 |
-
"""Generate HTML for the model performance card"""
|
| 2318 |
-
if not model_name:
|
| 2319 |
-
return """<div style="text-align: center; color: var(--text-secondary); padding: 40px;">
|
| 2320 |
-
Please select a model to generate its performance card
|
| 2321 |
-
</div>"""
|
| 2322 |
-
|
| 2323 |
-
# Get model data
|
| 2324 |
-
df = load_leaderboard_data()
|
| 2325 |
-
model_data = df[df['Model'] == model_name]
|
| 2326 |
-
|
| 2327 |
-
if model_data.empty:
|
| 2328 |
-
return """<div style="text-align: center; color: var(--text-secondary); padding: 40px;">
|
| 2329 |
-
Model not found in the database
|
| 2330 |
-
</div>"""
|
| 2331 |
-
|
| 2332 |
-
row = model_data.iloc[0]
|
| 2333 |
-
|
| 2334 |
-
# Get overall rank based on overall success
|
| 2335 |
-
df_with_success = df.copy()
|
| 2336 |
-
df_with_success['Overall Success'] = pd.to_numeric(df_with_success.get('Overall Success', pd.Series()), errors='coerce')
|
| 2337 |
-
df_with_success = df_with_success[df_with_success['Overall Success'].notna()]
|
| 2338 |
-
df_sorted = df_with_success.sort_values('Overall Success', ascending=False).reset_index(drop=True)
|
| 2339 |
-
try:
|
| 2340 |
-
rank = df_sorted[df_sorted['Model'] == model_name].index[0] + 1
|
| 2341 |
-
except:
|
| 2342 |
-
rank = 'N/A'
|
| 2343 |
-
|
| 2344 |
-
# Format values
|
| 2345 |
-
def format_value(val, decimals=3, prefix='', suffix=''):
|
| 2346 |
-
if pd.isna(val) or val == '':
|
| 2347 |
-
return 'N/A'
|
| 2348 |
-
return f"{prefix}{float(val):.{decimals}f}{suffix}"
|
| 2349 |
-
|
| 2350 |
-
def format_score(value):
|
| 2351 |
-
if pd.isna(value) or value == '':
|
| 2352 |
-
return 'N/A'
|
| 2353 |
-
return f"{float(value):.3f}"
|
| 2354 |
|
| 2355 |
radar_metrics = [
|
| 2356 |
("κΈ°μ΄ μνλ ₯", row.get('Execution Accuracy')),
|
|
@@ -2478,7 +2278,7 @@ def create_leaderboard_v2_tab():
|
|
| 2478 |
with gr.Column(elem_classes=["domain-selector-container", "model-selector-container"], elem_id="model-selector-box"):
|
| 2479 |
gr.HTML("""
|
| 2480 |
<div class="domain-header">
|
| 2481 |
-
<h2 class="domain-title" style="color: white;"
|
| 2482 |
<p class="domain-subtitle" style="color: white;">λΆμ μΉ΄λμ ν¬ν¨ν λͺ¨λΈμ μ ννμΈμ.</p>
|
| 2483 |
</div>
|
| 2484 |
""")
|
|
@@ -2510,6 +2310,280 @@ def create_leaderboard_v2_tab():
|
|
| 2510 |
</div>
|
| 2511 |
</div>
|
| 2512 |
""")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2513 |
|
| 2514 |
# Add custom CSS for the performance card
|
| 2515 |
gr.HTML("""
|
|
|
|
| 791 |
}
|
| 792 |
|
| 793 |
#hero-banner {
|
| 794 |
+
width: 100vw !important;
|
| 795 |
+
margin: 0 calc(-50vw + 50%) 20px calc(-50vw + 50%) !important;
|
| 796 |
+
border-radius: 0 !important;
|
| 797 |
+
overflow: hidden !important;
|
| 798 |
+
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25) !important;
|
| 799 |
+
position: relative !important;
|
| 800 |
+
left: 50% !important;
|
| 801 |
+
right: 50% !important;
|
| 802 |
+
margin-left: -50vw !important;
|
| 803 |
+
margin-right: -50vw !important;
|
| 804 |
+
max-width: none !important;
|
| 805 |
}
|
| 806 |
|
| 807 |
#hero-banner img {
|
| 808 |
width: 100%;
|
| 809 |
height: auto;
|
| 810 |
display: block;
|
| 811 |
+
object-fit: cover;
|
| 812 |
}
|
| 813 |
|
| 814 |
.hero-title {
|
|
|
|
| 1100 |
""")
|
| 1101 |
|
| 1102 |
gr.Image(
|
| 1103 |
+
value="banner_wide.png",
|
| 1104 |
show_label=False,
|
| 1105 |
interactive=False,
|
| 1106 |
type="filepath",
|
|
|
|
| 1195 |
<div class="scenario-body">
|
| 1196 |
<p>λ€μ΄λ², μ§λ, μΉ΄μΉ΄μ€, μΉμ¬μ΄νΈ λ± νκ΅ μ€μ¬μ© νκ²½ κΈ°λ°μ APIλ₯Ό κΈ°λ°μΌλ‘<br> κ΅λ΄ μ¬μ©μμ μΌμκ³Ό λ°μ ν 'μ½μ μμ½', 'λΈλ‘κ·Έ νκΈ° κ²μ'κ³Ό κ°μ νμ€μ μΈ λ¬Έμ ν΄κ²° μλ리μ€λ₯Ό ꡬννμ΅λλ€.</p>
|
| 1197 |
</div>
|
| 1198 |
+
|
| 1199 |
</div>
|
| 1200 |
+
<div class="section-flow">β</div>
|
| 1201 |
""")
|
| 1202 |
|
| 1203 |
# Section 3: ν΅μ¬ νκ° κΈ°μ€
|
|
|
|
| 1955 |
padding: 12px 20px !important;
|
| 1956 |
font-size: 0.95rem !important;
|
| 1957 |
}
|
| 1958 |
+
|
| 1959 |
+
/* Leaderboard controls row styling */
|
| 1960 |
+
.leaderboard-controls-row {
|
| 1961 |
+
margin: 20px 0 !important;
|
| 1962 |
+
padding: 20px !important;
|
| 1963 |
+
background: transparent !important;
|
| 1964 |
+
border: none !important;
|
| 1965 |
+
gap: 40px !important;
|
| 1966 |
+
}
|
| 1967 |
+
|
| 1968 |
+
.leaderboard-controls-row .gr-column,
|
| 1969 |
+
.leaderboard-controls-row .gr-row,
|
| 1970 |
+
.leaderboard-controls-row .gr-box,
|
| 1971 |
+
.leaderboard-controls-row .gradio-column,
|
| 1972 |
+
.leaderboard-controls-row .gradio-row,
|
| 1973 |
+
.leaderboard-controls-row .gradio-group {
|
| 1974 |
+
background: transparent !important;
|
| 1975 |
+
border: none !important;
|
| 1976 |
+
box-shadow: none !important;
|
| 1977 |
+
padding: 0 !important;
|
| 1978 |
+
}
|
| 1979 |
+
|
| 1980 |
+
/* Remove all container backgrounds for leaderboard controls */
|
| 1981 |
+
.leaderboard-controls-row * {
|
| 1982 |
+
background-color: transparent !important;
|
| 1983 |
+
background-image: none !important;
|
| 1984 |
+
border: none !important;
|
| 1985 |
+
box-shadow: none !important;
|
| 1986 |
+
}
|
| 1987 |
+
|
| 1988 |
+
.leaderboard-controls-row .inline-radio,
|
| 1989 |
+
.leaderboard-controls-row .domain-radio {
|
| 1990 |
+
background: transparent !important;
|
| 1991 |
+
border: none !important;
|
| 1992 |
+
box-shadow: none !important;
|
| 1993 |
+
}
|
| 1994 |
+
|
| 1995 |
+
/* Inline radio styling for integrated controls */
|
| 1996 |
+
.inline-radio {
|
| 1997 |
+
background: transparent !important;
|
| 1998 |
+
border: none !important;
|
| 1999 |
+
box-shadow: none !important;
|
| 2000 |
+
padding: 0 !important;
|
| 2001 |
+
}
|
| 2002 |
+
|
| 2003 |
+
.inline-radio .wrap {
|
| 2004 |
+
display: flex !important;
|
| 2005 |
+
gap: 8px !important;
|
| 2006 |
+
flex-wrap: wrap !important;
|
| 2007 |
+
justify-content: flex-start !important;
|
| 2008 |
+
background: transparent !important;
|
| 2009 |
+
border: none !important;
|
| 2010 |
+
box-shadow: none !important;
|
| 2011 |
+
padding: 0 !important;
|
| 2012 |
+
}
|
| 2013 |
+
|
| 2014 |
+
.inline-radio label {
|
| 2015 |
+
padding: 8px 16px !important;
|
| 2016 |
+
background: rgba(245, 246, 247, 0.06) !important;
|
| 2017 |
+
border: 1px solid var(--border-subtle) !important;
|
| 2018 |
+
border-radius: 20px !important;
|
| 2019 |
+
font-size: 0.85rem !important;
|
| 2020 |
+
color: var(--text-primary) !important;
|
| 2021 |
+
transition: all 0.2s ease !important;
|
| 2022 |
+
cursor: pointer !important;
|
| 2023 |
+
}
|
| 2024 |
+
|
| 2025 |
+
.inline-radio label:hover {
|
| 2026 |
+
background: rgba(255, 210, 30, 0.12) !important;
|
| 2027 |
+
border-color: var(--accent-primary) !important;
|
| 2028 |
+
}
|
| 2029 |
+
|
| 2030 |
+
.inline-radio input[type="radio"]:checked + label,
|
| 2031 |
+
.inline-radio label[aria-checked="true"] {
|
| 2032 |
+
background: rgba(255, 210, 30, 0.2) !important;
|
| 2033 |
+
border-color: var(--accent-primary) !important;
|
| 2034 |
+
color: white !important;
|
| 2035 |
+
font-weight: 600 !important;
|
| 2036 |
+
}
|
| 2037 |
</style>
|
| 2038 |
|
| 2039 |
""")
|
| 2040 |
|
| 2041 |
level_options = list(level_details.keys())
|
| 2042 |
|
| 2043 |
+
# Main leaderboard table with dynamic title and integrated controls
|
| 2044 |
+
leaderboard_title = gr.HTML(update_leaderboard_title(default_level))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2045 |
|
| 2046 |
+
# Integrated controls within leaderboard section - stacked vertically
|
| 2047 |
+
gr.HTML("<h3 style='color: white; margin: 5px 0 5px 0; font-size: 1.1rem;'>π§ νμ€ν¬ λ 벨 μ ν</h3>")
|
| 2048 |
+
domain_filter = gr.Radio(
|
| 2049 |
+
choices=level_options,
|
| 2050 |
+
value=default_level,
|
| 2051 |
+
label="",
|
| 2052 |
+
interactive=True,
|
| 2053 |
+
container=False,
|
| 2054 |
+
elem_classes=["domain-radio", "inline-radio"]
|
| 2055 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2056 |
|
| 2057 |
+
gr.HTML("<h3 style='color: white; margin: 5px 0 0px 0; font-size: 1.1rem;'>π νν° λ° μ λ ¬</h3>")
|
| 2058 |
+
with gr.Row():
|
| 2059 |
+
with gr.Column(scale=1):
|
| 2060 |
+
gr.HTML("<span style='color: white; font-size: 0.9rem; margin-bottom: 5px; display: block;'>λͺ¨λΈ μ κ·Ό</span>")
|
| 2061 |
+
model_type_filter = gr.Radio(
|
| 2062 |
+
choices=["All", "OSS", "API"],
|
| 2063 |
+
value="All",
|
| 2064 |
+
label="",
|
| 2065 |
+
elem_classes=["domain-radio", "inline-radio"],
|
| 2066 |
+
container=False
|
| 2067 |
+
)
|
| 2068 |
+
with gr.Column(scale=1):
|
| 2069 |
+
gr.HTML("<span style='color: white; font-size: 0.9rem; margin-bottom: 5px; display: block;'>μ λ ¬ μμ</span>")
|
| 2070 |
+
sort_order = gr.Radio(
|
| 2071 |
+
choices=["Descending", "Ascending"],
|
| 2072 |
+
value="Descending",
|
| 2073 |
+
label="",
|
| 2074 |
+
elem_classes=["domain-radio", "inline-radio"],
|
| 2075 |
+
container=False
|
| 2076 |
+
)
|
| 2077 |
|
| 2078 |
leaderboard_table = gr.HTML(initial_table)
|
| 2079 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2080 |
# Radar Chart Section
|
| 2081 |
gr.HTML("""
|
| 2082 |
<div class="domain-selector-container domain-performance-container">
|
|
|
|
| 2086 |
</div>
|
| 2087 |
""")
|
| 2088 |
|
| 2089 |
+
gr.HTML("<h3 style='color: white; margin: 10px 0 0 0; font-size: 1.3rem;'>π― λΉκ΅ν λͺ¨λΈ μ ν</h3>")
|
| 2090 |
+
gr.HTML("<p style='color: #b0b0b0; margin: 0 0 10px 0; font-size: 0.9rem;'>λͺ¨λΈμ μ΅λ 5κ°κΉμ§ μ ν κ°λ₯ ν©λλ€.</p>")
|
| 2091 |
+
model_selector = gr.Dropdown(
|
| 2092 |
+
choices=initial_df['Model'].tolist()[:10],
|
| 2093 |
+
value=initial_df['Model'].tolist()[:5],
|
| 2094 |
+
multiselect=True,
|
| 2095 |
+
label="",
|
| 2096 |
+
info=None,
|
| 2097 |
+
container=False,
|
| 2098 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2099 |
|
| 2100 |
# Radar chart plot - wrapped in centered container
|
| 2101 |
gr.HTML('<div class="chart-container radar-chart-container">')
|
|
|
|
| 2111 |
|
| 2112 |
gr.HTML("</div>")
|
| 2113 |
|
| 2114 |
+
|
| 2115 |
+
# Define generate_performance_card function before using it
|
| 2116 |
+
def generate_performance_card(model_name):
|
| 2117 |
+
"""Generate HTML for the model performance card"""
|
| 2118 |
+
if not model_name:
|
| 2119 |
+
return """<div style="text-align: center; color: var(--text-secondary); padding: 40px;">
|
| 2120 |
+
Please select a model to generate its performance card
|
| 2121 |
+
</div>"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2122 |
|
| 2123 |
+
# Get model data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2124 |
df = load_leaderboard_data()
|
| 2125 |
+
model_data = df[df['Model'] == model_name]
|
|
|
|
| 2126 |
|
| 2127 |
+
if model_data.empty:
|
| 2128 |
+
return """<div style="text-align: center; color: var(--text-secondary); padding: 40px;">
|
| 2129 |
+
Model not found in the database
|
| 2130 |
+
</div>"""
|
| 2131 |
|
| 2132 |
+
row = model_data.iloc[0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2133 |
|
| 2134 |
+
# Get overall rank based on overall success
|
| 2135 |
+
df_with_success = df.copy()
|
| 2136 |
+
df_with_success['Overall Success'] = pd.to_numeric(df_with_success.get('Overall Success', pd.Series()), errors='coerce')
|
| 2137 |
+
df_with_success = df_with_success[df_with_success['Overall Success'].notna()]
|
| 2138 |
+
df_sorted = df_with_success.sort_values('Overall Success', ascending=False).reset_index(drop=True)
|
| 2139 |
+
try:
|
| 2140 |
+
rank = df_sorted[df_sorted['Model'] == model_name].index[0] + 1
|
| 2141 |
+
except:
|
| 2142 |
+
rank = 'N/A'
|
| 2143 |
|
| 2144 |
+
# Format values
|
| 2145 |
+
def format_value(val, decimals=3, prefix='', suffix=''):
|
| 2146 |
+
if pd.isna(val) or val == '':
|
| 2147 |
+
return 'N/A'
|
| 2148 |
+
return f"{prefix}{float(val):.{decimals}f}{suffix}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2149 |
|
| 2150 |
+
def format_score(value):
|
| 2151 |
+
if pd.isna(value) or value == '':
|
| 2152 |
+
return 'N/A'
|
| 2153 |
+
return f"{float(value):.3f}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2154 |
|
| 2155 |
radar_metrics = [
|
| 2156 |
("κΈ°μ΄ μνλ ₯", row.get('Execution Accuracy')),
|
|
|
|
| 2278 |
with gr.Column(elem_classes=["domain-selector-container", "model-selector-container"], elem_id="model-selector-box"):
|
| 2279 |
gr.HTML("""
|
| 2280 |
<div class="domain-header">
|
| 2281 |
+
<h2 class="domain-title" style="color: white;">λͺ¨λΈ μ ν</h2>
|
| 2282 |
<p class="domain-subtitle" style="color: white;">λΆμ μΉ΄λμ ν¬ν¨ν λͺ¨λΈμ μ ννμΈμ.</p>
|
| 2283 |
</div>
|
| 2284 |
""")
|
|
|
|
| 2310 |
</div>
|
| 2311 |
</div>
|
| 2312 |
""")
|
| 2313 |
+
|
| 2314 |
+
|
| 2315 |
+
# Level metric breakdown section
|
| 2316 |
+
gr.HTML("""
|
| 2317 |
+
<div class="domain-selector-container domain-performance-container level-metrics-wrapper">
|
| 2318 |
+
<div class="domain-header">
|
| 2319 |
+
<h2 class="domain-title" style="color: white;">λ λ²¨λ³ μμΈ μ§ν</h2>
|
| 2320 |
+
<p class="domain-subtitle" style="color: white;">κ° Ko-AgentBench λ¨κ³λ³ κ³ μ νκ° μ§νλ₯Ό ν΅ν΄ λͺ¨λΈ μ μλ₯Ό λΉκ΅νκ³ λ μμΈν μ΄ν΄λ³΄μΈμ.</p>
|
| 2321 |
+
</div>
|
| 2322 |
+
""")
|
| 2323 |
+
|
| 2324 |
+
gr.HTML("""
|
| 2325 |
+
<h2 style="color: white; text-align: center; margin: 20px 0 10px 0; font-size: 1.8rem;">π§ νμ€ν¬ λ 벨 λ° λͺ¨λΈ μ ν</h2>
|
| 2326 |
+
<p style="color: white; text-align: center; margin: 0 0 20px 0; font-size: 1rem;">λ 벨과 λͺ¨λΈ(μ΅λ 5κ°)μ μ ννμ¬ μμΈ SR(μ±κ³΅λ₯ ) κΈ°λ° μ§νλ₯Ό νμνμΈμ.</p>
|
| 2327 |
+
""")
|
| 2328 |
+
|
| 2329 |
+
with gr.Column(elem_classes=["domain-selector-container", "level-selector-container"], elem_id="level-selector-box"):
|
| 2330 |
+
level_metric_selector = gr.Dropdown(
|
| 2331 |
+
choices=level_ids,
|
| 2332 |
+
value=level_ids[0] if level_ids else None,
|
| 2333 |
+
multiselect=False,
|
| 2334 |
+
label="",
|
| 2335 |
+
info=None,
|
| 2336 |
+
container=False,
|
| 2337 |
+
elem_classes=["level-dropdown"]
|
| 2338 |
+
)
|
| 2339 |
+
level_model_selector = gr.Dropdown(
|
| 2340 |
+
choices=initial_level_model_choices,
|
| 2341 |
+
value=initial_level_model_values,
|
| 2342 |
+
multiselect=True,
|
| 2343 |
+
label="",
|
| 2344 |
+
info=None,
|
| 2345 |
+
container=False,
|
| 2346 |
+
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2347 |
+
)
|
| 2348 |
+
|
| 2349 |
+
gr.HTML('<div class="chart-container level-metric-chart-container">')
|
| 2350 |
+
level_metric_chart = gr.Plot(
|
| 2351 |
+
label="",
|
| 2352 |
+
value=initial_level_metric_chart,
|
| 2353 |
+
elem_classes=["level-metric-plot", "plot-container"]
|
| 2354 |
+
)
|
| 2355 |
+
gr.HTML("""
|
| 2356 |
+
</div>
|
| 2357 |
+
</div>
|
| 2358 |
+
""")
|
| 2359 |
+
|
| 2360 |
+
# # Heatmap section
|
| 2361 |
+
# gr.HTML("""
|
| 2362 |
+
# <div class="domain-selector-container domain-performance-container heatmap-wrapper">
|
| 2363 |
+
# <div class="domain-header">
|
| 2364 |
+
# <h2 class="domain-title" style="color: white;">μ’
ν© μ±λ₯ ννΈλ§΅</h2>
|
| 2365 |
+
# <p class="domain-subtitle" style="color: white;">κ° λͺ¨λΈμ L1~L7 Ko-AgentBench SR(μ±κ³΅λ₯ ) μ μλ₯Ό νλμ 보μΈμ.</p>
|
| 2366 |
+
# </div>
|
| 2367 |
+
# <div class="chart-container heatmap-chart-container">
|
| 2368 |
+
# """)
|
| 2369 |
+
# heatmap_chart = gr.Plot(
|
| 2370 |
+
# label="",
|
| 2371 |
+
# value=initial_heatmap,
|
| 2372 |
+
# elem_classes=["heatmap-plot", "plot-container"]
|
| 2373 |
+
# )
|
| 2374 |
+
# gr.HTML("""
|
| 2375 |
+
# </div>
|
| 2376 |
+
# </div>
|
| 2377 |
+
# """)
|
| 2378 |
+
|
| 2379 |
+
# Update functions
|
| 2380 |
+
def get_optimal_sort_order(sort_by_value):
|
| 2381 |
+
"""Return the optimal sort order for a given metric"""
|
| 2382 |
+
# Metrics where higher is better (descending)
|
| 2383 |
+
descending_metrics = ["Overall Success"] + [sr_column_map[level] for level in level_ids]
|
| 2384 |
+
|
| 2385 |
+
# Metrics where lower is better (ascending)
|
| 2386 |
+
ascending_metrics = []
|
| 2387 |
+
|
| 2388 |
+
if sort_by_value in descending_metrics:
|
| 2389 |
+
return "Descending"
|
| 2390 |
+
elif sort_by_value in ascending_metrics:
|
| 2391 |
+
return "Ascending"
|
| 2392 |
+
else:
|
| 2393 |
+
return "Descending" # Default fallback
|
| 2394 |
+
|
| 2395 |
+
|
| 2396 |
+
|
| 2397 |
+
def update_table(level_filter, model_type_filter, sort_order):
|
| 2398 |
+
title_html = update_leaderboard_title(level_filter)
|
| 2399 |
+
sort_metric = "Overall Success" if level_filter == "ALL" else sr_column_map.get(resolve_level(level_filter), "Overall Success")
|
| 2400 |
+
table_html = filter_and_sort_data(level_filter, model_type_filter, sort_metric, sort_order)
|
| 2401 |
+
return title_html, table_html
|
| 2402 |
+
|
| 2403 |
+
def update_radar_chart(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2404 |
+
# Get filtered dataframe
|
| 2405 |
+
df = load_leaderboard_data()
|
| 2406 |
+
sort_metric = "Overall Success" if domain_filter == "ALL" else sr_column_map.get(resolve_level(domain_filter), "Overall Success")
|
| 2407 |
+
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2408 |
+
|
| 2409 |
+
# Update model selector choices based on filtered data
|
| 2410 |
+
available_models_all = filtered_df['Model'].tolist()
|
| 2411 |
+
available_models = available_models_all[:15] # Top 15 from filtered results
|
| 2412 |
+
|
| 2413 |
+
# If selected models are not in available models, reset to top 5
|
| 2414 |
+
if selected_models:
|
| 2415 |
+
valid_selected = [m for m in selected_models if m in available_models]
|
| 2416 |
+
# Check if more than 5 models are selected and show alert
|
| 2417 |
+
if len(valid_selected) > 5:
|
| 2418 |
+
gr.Warning("μ΅λ 5κ° κΉμ§λ§ μ ν κ°λ₯ν©λλ€")
|
| 2419 |
+
# Remove the last selected item (6th item) instead of keeping first 5
|
| 2420 |
+
valid_selected = valid_selected[:-1]
|
| 2421 |
+
if not valid_selected:
|
| 2422 |
+
valid_selected = available_models[:5]
|
| 2423 |
+
else:
|
| 2424 |
+
valid_selected = available_models[:5]
|
| 2425 |
+
|
| 2426 |
+
# Create radar chart
|
| 2427 |
+
chart = create_domain_radar_chart(filtered_df, valid_selected)
|
| 2428 |
+
|
| 2429 |
+
# Prepare heatmap order prioritizing selected models
|
| 2430 |
+
|
| 2431 |
+
|
| 2432 |
+
# Level metric chart
|
| 2433 |
+
effective_level = selected_level if selected_level in level_ids else (level_ids[0] if level_ids else None)
|
| 2434 |
+
available_level_models = available_models_all
|
| 2435 |
+
if level_selected_models:
|
| 2436 |
+
valid_level_models = [m for m in level_selected_models if m in available_level_models][:5]
|
| 2437 |
+
if not valid_level_models:
|
| 2438 |
+
valid_level_models = available_level_models[:5]
|
| 2439 |
+
else:
|
| 2440 |
+
valid_level_models = available_level_models[:5]
|
| 2441 |
+
level_metric_fig = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2442 |
+
|
| 2443 |
+
return (
|
| 2444 |
+
gr.Dropdown(
|
| 2445 |
+
choices=available_models,
|
| 2446 |
+
value=valid_selected,
|
| 2447 |
+
multiselect=True,
|
| 2448 |
+
label="",
|
| 2449 |
+
info=None,
|
| 2450 |
+
container=False,
|
| 2451 |
+
# elem_classes=["model-dropdown"]
|
| 2452 |
+
),
|
| 2453 |
+
chart,
|
| 2454 |
+
gr.Dropdown(
|
| 2455 |
+
choices=available_level_models,
|
| 2456 |
+
value=valid_level_models,
|
| 2457 |
+
multiselect=True,
|
| 2458 |
+
label="",
|
| 2459 |
+
info=None,
|
| 2460 |
+
container=False,
|
| 2461 |
+
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2462 |
+
),
|
| 2463 |
+
level_metric_fig,
|
| 2464 |
+
)
|
| 2465 |
+
|
| 2466 |
+
def update_radar_only(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2467 |
+
# Get filtered dataframe
|
| 2468 |
+
df = load_leaderboard_data()
|
| 2469 |
+
sort_metric = "Overall Success" if domain_filter == "ALL" else sr_column_map.get(resolve_level(domain_filter), "Overall Success")
|
| 2470 |
+
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2471 |
+
|
| 2472 |
+
available_models_all = filtered_df['Model'].tolist()
|
| 2473 |
+
if selected_models:
|
| 2474 |
+
valid_selected = [m for m in selected_models if m in available_models_all]
|
| 2475 |
+
# Check if more than 5 models are selected and show alert
|
| 2476 |
+
if len(valid_selected) > 5:
|
| 2477 |
+
# JavaScript alert for exceeding 5 models
|
| 2478 |
+
gr.Warning("μ΅λ 5κ° κΉμ§λ§ μ ν κ°λ₯ν©λλ€")
|
| 2479 |
+
# Remove the last selected item (6th item) instead of keeping first 5
|
| 2480 |
+
valid_selected = valid_selected[:-1]
|
| 2481 |
+
if not valid_selected:
|
| 2482 |
+
valid_selected = available_models_all[:5]
|
| 2483 |
+
else:
|
| 2484 |
+
valid_selected = available_models_all[:5]
|
| 2485 |
+
|
| 2486 |
+
|
| 2487 |
+
|
| 2488 |
+
effective_level = selected_level if selected_level in level_ids else (level_ids[0] if level_ids else None)
|
| 2489 |
+
available_level_models = available_models_all
|
| 2490 |
+
if level_selected_models:
|
| 2491 |
+
valid_level_models = [m for m in level_selected_models if m in available_level_models][:5]
|
| 2492 |
+
if not valid_level_models:
|
| 2493 |
+
valid_level_models = available_level_models[:5]
|
| 2494 |
+
else:
|
| 2495 |
+
valid_level_models = available_level_models[:5]
|
| 2496 |
+
level_metric_fig = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2497 |
+
|
| 2498 |
+
return (
|
| 2499 |
+
gr.Dropdown(
|
| 2500 |
+
choices=available_models_all[:15],
|
| 2501 |
+
value=valid_selected,
|
| 2502 |
+
multiselect=True,
|
| 2503 |
+
label="",
|
| 2504 |
+
info=None,
|
| 2505 |
+
container=False,
|
| 2506 |
+
),
|
| 2507 |
+
create_domain_radar_chart(filtered_df, valid_selected),
|
| 2508 |
+
gr.Dropdown(
|
| 2509 |
+
choices=available_level_models,
|
| 2510 |
+
value=valid_level_models,
|
| 2511 |
+
multiselect=True,
|
| 2512 |
+
label="",
|
| 2513 |
+
info=None,
|
| 2514 |
+
container=False,
|
| 2515 |
+
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2516 |
+
),
|
| 2517 |
+
level_metric_fig,
|
| 2518 |
+
)
|
| 2519 |
+
|
| 2520 |
+
def update_level_metric_only(domain_filter, model_type_filter, sort_order, selected_models, selected_level, level_selected_models):
|
| 2521 |
+
df = load_leaderboard_data()
|
| 2522 |
+
sort_metric = "Overall Success" if domain_filter == "ALL" else sr_column_map.get(resolve_level(domain_filter), "Overall Success")
|
| 2523 |
+
filtered_df, _, _ = apply_filters(df, domain_filter, model_type_filter, sort_order, sort_metric)
|
| 2524 |
+
available_models = filtered_df['Model'].tolist()
|
| 2525 |
+
if level_selected_models:
|
| 2526 |
+
valid_level_models = [m for m in level_selected_models if m in available_models]
|
| 2527 |
+
# Check if more than 5 models are selected and show alert
|
| 2528 |
+
if len(valid_level_models) > 5:
|
| 2529 |
+
gr.Warning("μ΅λ 5κ° κΉμ§λ§ μ ν κ°λ₯ν©λλ€")
|
| 2530 |
+
# Remove the last selected item (6th item) instead of keeping first 5
|
| 2531 |
+
valid_level_models = valid_level_models[:-1]
|
| 2532 |
+
if not valid_level_models:
|
| 2533 |
+
valid_level_models = available_models[:5]
|
| 2534 |
+
else:
|
| 2535 |
+
valid_level_models = available_models[:5]
|
| 2536 |
+
effective_level = selected_level if selected_level in level_ids else (level_ids[0] if level_ids else None)
|
| 2537 |
+
level_chart = create_level_metric_chart(filtered_df, effective_level, valid_level_models) if effective_level else create_empty_level_metric_chart("Select a level to view its metrics")
|
| 2538 |
+
return (
|
| 2539 |
+
gr.Dropdown(
|
| 2540 |
+
choices=available_models,
|
| 2541 |
+
value=valid_level_models,
|
| 2542 |
+
multiselect=True,
|
| 2543 |
+
label="",
|
| 2544 |
+
info=None,
|
| 2545 |
+
container=False,
|
| 2546 |
+
elem_classes=["model-dropdown", "level-model-dropdown"]
|
| 2547 |
+
),
|
| 2548 |
+
level_chart,
|
| 2549 |
+
)
|
| 2550 |
+
|
| 2551 |
+
# Update table when filters change
|
| 2552 |
+
filter_inputs = [domain_filter, model_type_filter, sort_order]
|
| 2553 |
+
|
| 2554 |
+
for input_component in filter_inputs:
|
| 2555 |
+
input_component.change(
|
| 2556 |
+
fn=update_table,
|
| 2557 |
+
inputs=filter_inputs,
|
| 2558 |
+
outputs=[leaderboard_title, leaderboard_table]
|
| 2559 |
+
)
|
| 2560 |
+
|
| 2561 |
+
# Also update radar chart when filters change
|
| 2562 |
+
input_component.change(
|
| 2563 |
+
fn=update_radar_chart,
|
| 2564 |
+
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2565 |
+
outputs=[model_selector, radar_chart, level_model_selector, level_metric_chart]
|
| 2566 |
+
)
|
| 2567 |
+
|
| 2568 |
+
# Update radar chart when model selection changes
|
| 2569 |
+
model_selector.change(
|
| 2570 |
+
fn=update_radar_only,
|
| 2571 |
+
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2572 |
+
outputs=[model_selector, radar_chart, level_model_selector, level_metric_chart]
|
| 2573 |
+
)
|
| 2574 |
+
|
| 2575 |
+
level_metric_selector.change(
|
| 2576 |
+
fn=update_level_metric_only,
|
| 2577 |
+
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2578 |
+
outputs=[level_model_selector, level_metric_chart]
|
| 2579 |
+
)
|
| 2580 |
+
|
| 2581 |
+
level_model_selector.change(
|
| 2582 |
+
fn=update_level_metric_only,
|
| 2583 |
+
inputs=filter_inputs + [model_selector, level_metric_selector, level_model_selector],
|
| 2584 |
+
outputs=[level_model_selector, level_metric_chart]
|
| 2585 |
+
)
|
| 2586 |
+
|
| 2587 |
|
| 2588 |
# Add custom CSS for the performance card
|
| 2589 |
gr.HTML("""
|