q275343119 commited on
Commit
0d49e7c
·
1 Parent(s): 5b34d46

mod - modify menu size

Browse files
app.py CHANGED
@@ -2,7 +2,7 @@ import os
2
 
3
  import streamlit as st
4
 
5
- from st_pages import add_page_title, get_nav_from_toml
6
 
7
  from app.backend.constant import LEADERBOARD_MAP
8
  from app.backend.data_engine import DataEngine
@@ -17,11 +17,10 @@ for leaderboard, group_names in LEADERBOARD_MAP.items():
17
  with open(path, "w", encoding="utf-8") as f:
18
  f.write(data_page.replace("$group_name$", group_name)
19
  )
 
20
  # init global data engine
21
  data_engine = DataEngine()
22
- data_engine.jsons_to_df()
23
  st.session_state["data_engine"] = data_engine
24
-
25
  st.set_page_config(layout="wide")
26
 
27
  # load page tree
@@ -29,6 +28,16 @@ nav = get_nav_from_toml(
29
  "app/ui/pages_sections.toml"
30
  )
31
 
 
 
 
 
 
 
 
 
 
 
32
  pg = st.navigation(nav)
33
 
34
  add_page_title(pg)
 
2
 
3
  import streamlit as st
4
 
5
+ from st_pages import get_nav_from_toml, add_page_title
6
 
7
  from app.backend.constant import LEADERBOARD_MAP
8
  from app.backend.data_engine import DataEngine
 
17
  with open(path, "w", encoding="utf-8") as f:
18
  f.write(data_page.replace("$group_name$", group_name)
19
  )
20
+
21
  # init global data engine
22
  data_engine = DataEngine()
 
23
  st.session_state["data_engine"] = data_engine
 
24
  st.set_page_config(layout="wide")
25
 
26
  # load page tree
 
28
  "app/ui/pages_sections.toml"
29
  )
30
 
31
+ # Add custom CSS
32
+ st.markdown("""
33
+ <style>
34
+ ul[data-testid="stSidebarNavItems"] li:not(:first-child) {
35
+ text-indent: 2rem;
36
+ }
37
+ </style>
38
+ """
39
+ , unsafe_allow_html=True)
40
+
41
  pg = st.navigation(nav)
42
 
43
  add_page_title(pg)
app/backend/data_engine.py CHANGED
@@ -12,12 +12,12 @@ from utils.http_utils import get
12
  COLUMNS = ['model_name',
13
  'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity',
14
  'query_instruct', 'corpus_instruct',
15
- 'ndcg_at_10',
16
  ]
17
  COLUMNS_TYPES = ["markdown",
18
  'str', 'str', 'number', 'number', 'str',
19
  'str', 'str',
20
- 'number',
21
  ]
22
 
23
  GIT_URL = "https://raw.githubusercontent.com/embedding-benchmark/ebr/refs/heads/main/results/"
@@ -83,6 +83,8 @@ class DataEngine:
83
  df_results_list.append(df_result_row)
84
  df_result = pd.concat(df_results_list)
85
 
 
 
86
  df_datasets_list = []
87
  for item in self.datasets:
88
  dataset_names = item["datasets"]
@@ -101,12 +103,36 @@ class DataEngine:
101
  df_model = pd.DataFrame(models_list)
102
 
103
  df = pd.merge(df_result, df_dataset, on=["dataset_name"], how="inner")
104
- df = df.groupby(["model_name", "group_name"], as_index=False)["ndcg_at_10"].mean()
105
- df = pd.merge(df, df_model, on=["model_name"], how="inner")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
 
107
  if df.empty:
108
- return pd.DataFrame(columns=COLUMNS + ["group_name", "reference"])
109
- return df[COLUMNS + ["group_name", "reference"]]
110
 
111
  def filter_df(self, group_name: str):
112
  """
 
12
  COLUMNS = ['model_name',
13
  'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity',
14
  'query_instruct', 'corpus_instruct',
15
+
16
  ]
17
  COLUMNS_TYPES = ["markdown",
18
  'str', 'str', 'number', 'number', 'str',
19
  'str', 'str',
20
+
21
  ]
22
 
23
  GIT_URL = "https://raw.githubusercontent.com/embedding-benchmark/ebr/refs/heads/main/results/"
 
83
  df_results_list.append(df_result_row)
84
  df_result = pd.concat(df_results_list)
85
 
86
+ df_result = df_result[["model_name", "dataset_name", "ndcg_at_10"]]
87
+
88
  df_datasets_list = []
89
  for item in self.datasets:
90
  dataset_names = item["datasets"]
 
103
  df_model = pd.DataFrame(models_list)
104
 
105
  df = pd.merge(df_result, df_dataset, on=["dataset_name"], how="inner")
106
+ # df = pd.merge(df, df_model, on=["model_name"], how="inner")
107
+
108
+ dataset_num_map = {}
109
+ grouped_dataset_count = df.groupby(["group_name"]).agg({
110
+ "dataset_name": "nunique"
111
+ }).reset_index()
112
+
113
+ for _, row in grouped_dataset_count.iterrows():
114
+ dataset_num_map[row["group_name"]] = row["dataset_name"]
115
+
116
+ grouped_model = df.groupby(["model_name", "group_name"]).agg({
117
+ "ndcg_at_10": "mean",
118
+ }).reset_index()
119
+
120
+ pivot = grouped_model.pivot(index="model_name", columns="group_name", values=["ndcg_at_10"])
121
+
122
+ # Rename columns
123
+ pivot.columns = list(
124
+ map(lambda x: f"{x[1].capitalize()} Average ({dataset_num_map[x[1]]} datasets)" if x[
125
+ 1] != 'text' else f"Average ({dataset_num_map[x[1]]} datasets)",
126
+ pivot.columns))
127
+
128
+ pivot_dataset = df_result.pivot(index="model_name", columns="dataset_name", values="ndcg_at_10")
129
+
130
+ df = pd.merge(df_model, pivot, on="model_name")
131
+ df = pd.merge(df, pivot_dataset, on="model_name")
132
 
133
  if df.empty:
134
+ return pd.DataFrame(columns=COLUMNS + ["reference"])
135
+ return df
136
 
137
  def filter_df(self, group_name: str):
138
  """
app/backend/data_page.py ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ # @Date : 2025/2/5 16:26
3
+ # @Author : q275343119
4
+ # @File : data_page.py
5
+ # @Description:
6
+ from st_aggrid import AgGrid, JsCode, ColumnsAutoSizeMode
7
+
8
+ import streamlit as st
9
+
10
+ COLUMNS = ['model_name',
11
+ 'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity',
12
+ 'query_instruct', 'corpus_instruct', 'reference'
13
+
14
+ ]
15
+ HEADER_STYLE = {'fontSize': '18px'}
16
+ CELL_STYLE = {'fontSize': '18px'}
17
+
18
+
19
+ def render_page(group_name):
20
+ # Add theme color and grid styles
21
+ st.markdown("""
22
+ <style>
23
+ :root {
24
+ --theme-color: rgb(129, 150, 64);
25
+ --theme-color-light: rgba(129, 150, 64, 0.2);
26
+ }
27
+
28
+ /* AG Grid specific overrides */
29
+ .ag-theme-alpine {
30
+ --ag-selected-row-background-color: var(--theme-color-light) !important;
31
+ --ag-row-hover-color: var(--theme-color-light) !important;
32
+ --ag-selected-tab-color: var(--theme-color) !important;
33
+ --ag-range-selection-border-color: var(--theme-color) !important;
34
+ --ag-range-selection-background-color: var(--theme-color-light) !important;
35
+ }
36
+
37
+ .ag-row-hover {
38
+ background-color: var(--theme-color-light) !important;
39
+ }
40
+
41
+ .ag-row-selected {
42
+ background-color: var(--theme-color-light) !important;
43
+ }
44
+
45
+ .ag-row-focus {
46
+ background-color: var(--theme-color-light) !important;
47
+ }
48
+
49
+ .ag-cell-focus {
50
+ border-color: var(--theme-color) !important;
51
+ }
52
+
53
+ /* Keep existing styles */
54
+ .center-text {
55
+ text-align: center;
56
+ color: var(--theme-color);
57
+ }
58
+ .center-image {
59
+ display: block;
60
+ margin-left: auto;
61
+ margin-right: auto;
62
+ }
63
+ h2 {
64
+ color: var(--theme-color) !important;
65
+ }
66
+ .ag-header-cell {
67
+ background-color: var(--theme-color) !important;
68
+ color: white !important;
69
+ }
70
+ a {
71
+ color: var(--theme-color) !important;
72
+ }
73
+ a:hover {
74
+ color: rgba(129, 150, 64, 0.8) !important;
75
+ }
76
+ </style>
77
+ """, unsafe_allow_html=True)
78
+
79
+ # logo
80
+ # st.markdown('<img src="https://www.voyageai.com/logo.svg" class="center-image" width="200">', unsafe_allow_html=True)
81
+
82
+ # title
83
+ st.markdown('<h2 class="center-text">Embedding Benchmark For Retrieval</h2>', unsafe_allow_html=True)
84
+
85
+ data_engine = st.session_state["data_engine"]
86
+
87
+ df = data_engine.jsons_to_df()[:]
88
+ # get columns
89
+ column_list = []
90
+ avg_column = None
91
+ if group_name == "text":
92
+ avg_columns = []
93
+ for column in df.columns:
94
+
95
+ if column.startswith("Average"):
96
+ avg_columns.insert(0, column)
97
+ continue
98
+ if "Average" in column:
99
+ avg_columns.append(column)
100
+ continue
101
+ avg_column = avg_columns[0]
102
+ column_list.extend(avg_columns)
103
+ else:
104
+ for column in df.columns:
105
+
106
+ if column.startswith(group_name.capitalize() + " "):
107
+ avg_column = column
108
+ new_column = avg_column.replace(group_name.capitalize(), "").strip()
109
+ df.rename(columns={avg_column: new_column}, inplace=True)
110
+ column_list.append(new_column)
111
+ avg_column = new_column
112
+
113
+ dataset_list = []
114
+ if group_name != "text":
115
+ for dataset_dict in data_engine.datasets:
116
+ if dataset_dict["name"] == group_name:
117
+ dataset_list = dataset_dict["datasets"]
118
+ column_list.extend(dataset_list)
119
+
120
+ df = df[COLUMNS + column_list].sort_values(by=avg_column, ascending=False)
121
+
122
+ # setting column config
123
+ grid_options = {
124
+ 'columnDefs': [
125
+ {
126
+ 'headerName': 'Model Name',
127
+ 'field': 'model_name',
128
+ 'pinned': 'left',
129
+ 'sortable': False,
130
+ 'headerStyle': HEADER_STYLE,
131
+ 'cellStyle': CELL_STYLE,
132
+ 'cellRenderer': JsCode("""class CustomHTML {
133
+ init(params) {
134
+ const link = params.data.reference;
135
+ this.eGui = document.createElement('div');
136
+ this.eGui.innerHTML = link ?
137
+ `<a href="${link}" target="_blank">${params.value}</a>` :
138
+ params.value;
139
+ }
140
+
141
+ getGui() {
142
+ return this.eGui;
143
+ }
144
+ }"""),
145
+ },
146
+ {'headerName': avg_column,
147
+ 'field': avg_column,
148
+ 'headerStyle': HEADER_STYLE,
149
+ 'cellStyle': CELL_STYLE,
150
+ 'suppressSizeToFit': True},
151
+ {
152
+ 'headerName': 'Data Type',
153
+ 'field': 'embd_dtype',
154
+ 'headerStyle': HEADER_STYLE,
155
+ 'cellStyle': CELL_STYLE,
156
+ },
157
+ {
158
+ 'headerName': 'Embd Dim',
159
+ 'field': 'embd_dim',
160
+ 'headerStyle': HEADER_STYLE,
161
+ 'cellStyle': CELL_STYLE,
162
+ },
163
+ {
164
+ 'headerName': 'Model Size (# of Parameters)',
165
+ 'field': 'num_params',
166
+ 'cellDataType': 'number',
167
+ 'headerStyle': HEADER_STYLE,
168
+ 'cellStyle': CELL_STYLE,
169
+ },
170
+ {
171
+ 'headerName': 'Context Length',
172
+ 'field': 'max_tokens',
173
+ 'headerStyle': HEADER_STYLE,
174
+ 'cellStyle': CELL_STYLE,
175
+ },
176
+ {
177
+ 'headerName': 'Query Instruction',
178
+ 'field': 'query_instruct',
179
+ 'headerStyle': HEADER_STYLE,
180
+ 'cellStyle': CELL_STYLE,
181
+ 'suppressSizeToFit': True,
182
+
183
+ },
184
+ {
185
+ 'headerName': 'Corpus Instruction',
186
+ 'field': 'corpus_instruct',
187
+ 'headerStyle': HEADER_STYLE,
188
+ 'cellStyle': CELL_STYLE,
189
+ 'suppressSizeToFit': True,
190
+
191
+ },
192
+ *[{'headerName': column,
193
+ 'field': column,
194
+ 'headerStyle': HEADER_STYLE,
195
+ 'cellStyle': CELL_STYLE,
196
+ 'suppressSizeToFit': True} for column in column_list if column != avg_column]
197
+ ],
198
+ 'defaultColDef': {
199
+ 'filter': True,
200
+ 'sortable': True,
201
+ 'resizable': True
202
+ },
203
+ 'autoSizeStrategy': {
204
+ 'type': 'fitCellContents'
205
+ }
206
+ }
207
+
208
+ AgGrid(
209
+ df,
210
+ enable_enterprise_modules=False,
211
+ gridOptions=grid_options,
212
+ allow_unsafe_jscode=True,
213
+ columns_auto_size_mode=ColumnsAutoSizeMode.FIT_CONTENTS,
214
+ theme="streamlit",
215
+ )
app/ui/pages/data_page.py CHANGED
@@ -1,170 +1,3 @@
1
- from st_aggrid import AgGrid, JsCode, ColumnsAutoSizeMode
2
 
3
- import streamlit as st
4
-
5
- HEADER_STYLE = {'fontSize': '18px'}
6
- CELL_STYLE = {'fontSize': '18px'}
7
-
8
- # Add theme color and grid styles
9
- st.markdown("""
10
- <style>
11
- :root {
12
- --theme-color: rgb(129, 150, 64);
13
- --theme-color-light: rgba(129, 150, 64, 0.2);
14
- }
15
-
16
- /* AG Grid specific overrides */
17
- .ag-theme-alpine {
18
- --ag-selected-row-background-color: var(--theme-color-light) !important;
19
- --ag-row-hover-color: var(--theme-color-light) !important;
20
- --ag-selected-tab-color: var(--theme-color) !important;
21
- --ag-range-selection-border-color: var(--theme-color) !important;
22
- --ag-range-selection-background-color: var(--theme-color-light) !important;
23
- }
24
-
25
- .ag-row-hover {
26
- background-color: var(--theme-color-light) !important;
27
- }
28
-
29
- .ag-row-selected {
30
- background-color: var(--theme-color-light) !important;
31
- }
32
-
33
- .ag-row-focus {
34
- background-color: var(--theme-color-light) !important;
35
- }
36
-
37
- .ag-cell-focus {
38
- border-color: var(--theme-color) !important;
39
- }
40
-
41
- /* Keep existing styles */
42
- .center-text {
43
- text-align: center;
44
- color: var(--theme-color);
45
- }
46
- .center-image {
47
- display: block;
48
- margin-left: auto;
49
- margin-right: auto;
50
- }
51
- h2 {
52
- color: var(--theme-color) !important;
53
- }
54
- .ag-header-cell {
55
- background-color: var(--theme-color) !important;
56
- color: white !important;
57
- }
58
- a {
59
- color: var(--theme-color) !important;
60
- }
61
- a:hover {
62
- color: rgba(129, 150, 64, 0.8) !important;
63
- }
64
- </style>
65
- """, unsafe_allow_html=True)
66
-
67
- # logo
68
- # st.markdown('<img src="https://www.voyageai.com/logo.svg" class="center-image" width="200">', unsafe_allow_html=True)
69
-
70
- # title
71
- st.markdown('<h2 class="center-text">Embedding Benchmark For Retrieval</h2>', unsafe_allow_html=True)
72
-
73
- group_name = "$group_name$"
74
-
75
- data_engine = st.session_state["data_engine"]
76
-
77
- df = data_engine.jsons_to_df()[:]
78
-
79
- df = df[df["group_name"] == group_name].sort_values(by="ndcg_at_10", ascending=False)
80
-
81
- # setting column config
82
- grid_options = {
83
- 'columnDefs': [
84
- {
85
- 'headerName': 'Model Name',
86
- 'field': 'model_name',
87
- 'pinned': 'left',
88
- 'sortable': False,
89
- 'headerStyle': HEADER_STYLE,
90
- 'cellStyle': CELL_STYLE,
91
- 'cellRenderer': JsCode("""class CustomHTML {
92
- init(params) {
93
- const link = params.data.reference;
94
- this.eGui = document.createElement('div');
95
- this.eGui.innerHTML = link ?
96
- `<a href="${link}" target="_blank">${params.value}</a>` :
97
- params.value;
98
- }
99
-
100
- getGui() {
101
- return this.eGui;
102
- }
103
- }"""),
104
- },
105
- {
106
- 'headerName': 'NDCG@10',
107
- 'field': 'ndcg_at_10',
108
- 'headerStyle': HEADER_STYLE,
109
- 'cellStyle': CELL_STYLE,
110
- },
111
- {
112
- 'headerName': 'Data Type',
113
- 'field': 'embd_dtype',
114
- 'headerStyle': HEADER_STYLE,
115
- 'cellStyle': CELL_STYLE,
116
- },
117
- {
118
- 'headerName': 'Embd Dim',
119
- 'field': 'embd_dim',
120
- 'headerStyle': HEADER_STYLE,
121
- 'cellStyle': CELL_STYLE,
122
- },
123
- {
124
- 'headerName': 'Model Size (# of Parameters)',
125
- 'field': 'num_params',
126
- 'cellDataType': 'number',
127
- 'headerStyle': HEADER_STYLE,
128
- 'cellStyle': CELL_STYLE,
129
- },
130
- {
131
- 'headerName': 'Context Length',
132
- 'field': 'max_tokens',
133
- 'headerStyle': HEADER_STYLE,
134
- 'cellStyle': CELL_STYLE,
135
- },
136
- {
137
- 'headerName': 'Query Instruction',
138
- 'field': 'query_instruct',
139
- 'headerStyle': HEADER_STYLE,
140
- 'cellStyle': CELL_STYLE,
141
- 'suppressSizeToFit': True,
142
-
143
- },
144
- {
145
- 'headerName': 'Corpus Instruction',
146
- 'field': 'corpus_instruct',
147
- 'headerStyle': HEADER_STYLE,
148
- 'cellStyle': CELL_STYLE,
149
- 'suppressSizeToFit': True,
150
-
151
- },
152
- ],
153
- 'defaultColDef': {
154
- 'filter': True,
155
- 'sortable': True,
156
- 'resizable': True
157
- },
158
- 'autoSizeStrategy': {
159
- 'type': 'fitCellContents'
160
- }
161
- }
162
-
163
- ag = AgGrid(
164
- df,
165
- enable_enterprise_modules=False,
166
- gridOptions=grid_options,
167
- allow_unsafe_jscode=True,
168
- columns_auto_size_mode=ColumnsAutoSizeMode.FIT_CONTENTS,
169
- theme="streamlit",
170
- )
 
1
+ from app.backend.data_page import render_page
2
 
3
+ render_page("$group_name$")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/ui/pages_sections.toml CHANGED
@@ -1,12 +1,13 @@
1
  [[pages]]
 
2
  name = "Text Leaderboard"
3
  icon = "📚"
4
- is_section = true
5
 
6
- [[pages]]
7
- path = "app/ui/pages/text.py"
8
- name = "Overall"
9
- icon = "🏆"
10
 
11
  [[pages]]
12
  path = "app/ui/pages/law.py"
@@ -31,8 +32,4 @@ icon = "💻"
31
  [[pages]]
32
  path = "app/ui/pages/tech.py"
33
  name = "Tech"
34
- icon = "🛠️"
35
-
36
-
37
-
38
-
 
1
  [[pages]]
2
+ path = "app/ui/pages/text.py"
3
  name = "Text Leaderboard"
4
  icon = "📚"
5
+ #is_section = true
6
 
7
+ #[[pages]]
8
+ #path = "app/ui/pages/text.py"
9
+ #name = "Overall"
10
+ #icon = "🏆"
11
 
12
  [[pages]]
13
  path = "app/ui/pages/law.py"
 
32
  [[pages]]
33
  path = "app/ui/pages/tech.py"
34
  name = "Tech"
35
+ icon = "🛠️"