smile commited on
Commit
7e055ad
·
1 Parent(s): e7d518b

test build

Browse files
app.py CHANGED
@@ -1,14 +1,60 @@
1
- from app.ui.home import init_home
2
- from app.ui.about import init_about
 
 
 
 
3
 
4
- import gradio as gr
 
5
 
6
- home = init_home()
7
- about = init_about()
8
 
9
- demo = gr.TabbedInterface(
10
- [home, about],
11
- ["Home", "About"],
12
- css="footer {display: none} .sort-button.svelte-1bvc1p0.svelte-1bvc1p0.svelte-1bvc1p0 {display: none;}"
13
- )
14
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Request
2
+ from fastapi.templating import Jinja2Templates
3
+ from fastapi.staticfiles import StaticFiles
4
+ from fastapi.responses import HTMLResponse
5
+ import pandas as pd
6
+ from pathlib import Path
7
 
8
+ from app.backend.constant import Navigation, ModelProvider, EvaluationMetric, EmbdDtype, EmbdDim, Similarity
9
+ from app.backend.data_engine import DataEngine
10
 
11
+ app = FastAPI()
 
12
 
13
+ # Mount static files
14
+ app.mount("/static", StaticFiles(directory="app/static"), name="static")
15
+
16
+ # Templates
17
+ templates = Jinja2Templates(directory="app/templates")
18
+
19
+ # Initialize data engine
20
+ data_engine = DataEngine()
21
+
22
+ @app.get("/", response_class=HTMLResponse)
23
+ async def home(request: Request, tab: str = "text"):
24
+ # Get initial data based on tab
25
+ if tab == "multimodal":
26
+ data = data_engine.get_filtered_data(navigation="multimodal")
27
+ else:
28
+ data = data_engine.get_data()
29
+
30
+ # Convert data to list for template rendering
31
+ data_list = data.values.tolist()
32
+ columns = data.columns.tolist()
33
+
34
+ return templates.TemplateResponse("index.html", {
35
+ "request": request,
36
+ "active_tab": tab,
37
+ "data": data_list,
38
+ "columns": columns,
39
+ "navigations": [e.value for e in Navigation],
40
+ "embd_types": [e.value for e in EmbdDtype],
41
+ "embd_dims": [e.value for e in EmbdDim],
42
+ "similarities": [e.value for e in Similarity]
43
+ })
44
+
45
+ @app.post("/api/filter")
46
+ async def filter_data(filters: dict):
47
+ # Apply filters to data
48
+ data = data_engine.get_filtered_data(
49
+ navigation=filters.get('navigation'),
50
+ embd_type=filters.get('embd_type'),
51
+ embd_dims=filters.get('embd_dims'),
52
+ similarity=filters.get('similarity')
53
+ )
54
+
55
+ # Convert to list for JSON response
56
+ return data.values.tolist()
57
+
58
+
59
+ import uvicorn
60
+ uvicorn.run(app, host="0.0.0.0", port=7890)
app/backend/constant.py CHANGED
@@ -68,7 +68,8 @@ class Similarity(Enum):
68
 
69
 
70
  LEADERBOARD_MAP = {
71
- "text": [
 
72
  "law",
73
  "long-context",
74
  "finance",
@@ -78,7 +79,7 @@ LEADERBOARD_MAP = {
78
  "code",
79
  "healthcare"
80
  ],
81
- "multimodal": [
82
  "text-to-photo",
83
  "document-screenshot",
84
  "figures-and-tables",
 
68
 
69
 
70
  LEADERBOARD_MAP = {
71
+ "Text": [
72
+ "text",
73
  "law",
74
  "long-context",
75
  "finance",
 
79
  "code",
80
  "healthcare"
81
  ],
82
+ "Multimodal": [
83
  "text-to-photo",
84
  "document-screenshot",
85
  "figures-and-tables",
app/backend/data_engine.py CHANGED
@@ -7,7 +7,8 @@ from typing import List
7
  import pandas as pd
8
 
9
  from app.backend.constant import ModelProvider
10
- from utils.cache_decorator import cache_df_with_custom_key
 
11
 
12
  COLUMNS = ['model_name', 'group_name', 'leaderboard', 'dataset_name',
13
  'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity',
@@ -29,6 +30,11 @@ COLUMNS_TYPES = ["markdown", "str", 'str', 'str',
29
  'number', 'number', 'number',
30
  'number']
31
 
 
 
 
 
 
32
 
33
  class DataEngine:
34
 
@@ -36,35 +42,78 @@ class DataEngine:
36
  self.df = self.init_dataframe()
37
 
38
  @property
 
39
  def models(self):
40
  """
41
  Get models data
42
  """
43
- with open('./mock_data/models.json', 'r') as f:
44
- return json.load(f)
 
 
45
 
46
  @property
 
47
  def datasets(self):
48
  """
49
  Get tasks data
50
  """
51
- with open('./mock_data/datasets.json', 'r') as f:
52
- return json.load(f)
 
 
53
 
54
  @property
 
55
  def results(self):
56
  """
57
  Get results data
58
  """
59
- with open('./mock_data/results.json', 'r') as f:
60
- return json.load(f)
 
 
61
 
62
  def init_dataframe(self):
63
  """
64
  Initialize DataFrame
65
  """
66
- d = {"hello": [123], "world": [456]}
67
- return pd.DataFrame(d)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
  def _check_providers(self, organization: str, providers: List):
70
  if not providers:
@@ -89,10 +138,10 @@ class DataEngine:
89
 
90
  df_datasets_list = []
91
  for item in self.datasets:
92
- dataset_names = item["dataset_names"]
93
  df_dataset_row = pd.DataFrame(
94
  {
95
- "group_name": [item["group_name"] for _ in range(len(dataset_names))],
96
  "dataset_name": dataset_names,
97
  "leaderboard": [item["leaderboard"] for _ in range(len(dataset_names))]
98
  }
@@ -104,12 +153,14 @@ class DataEngine:
104
 
105
  df_model = pd.DataFrame(models_list)
106
 
107
- df = pd.merge(df_result, df_model, on="model_name", how="inner")
108
  df = pd.merge(df, df_dataset, on="dataset_name", how="inner")
109
 
110
  df["model_name"] = df.apply(lambda
111
  x: f"""<a target=\"_blank\" style=\"text-decoration: underline\" href=\"{x["reference"]}\">{x["model_name"]}</a>""",
112
  axis=1)
 
 
113
  return df[COLUMNS]
114
 
115
  def filter_df(self, df_result: pd.DataFrame, embd_dtype: str, embd_dims: List, similarity: str, max_tokens: int):
 
7
  import pandas as pd
8
 
9
  from app.backend.constant import ModelProvider
10
+ from utils.cache_decorator import cache_df_with_custom_key, cache_dict_with_custom_key
11
+ from utils.http_utils import get
12
 
13
  COLUMNS = ['model_name', 'group_name', 'leaderboard', 'dataset_name',
14
  'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity',
 
30
  'number', 'number', 'number',
31
  'number']
32
 
33
+ GIT_URL = "https://raw.githubusercontent.com/embedding-benchmark/ebr/refs/heads/main/results/"
34
+ DATASET_URL = f"{GIT_URL}datasets.json"
35
+ MODEL_URL = f"{GIT_URL}models.json"
36
+ RESULT_URL = f"{GIT_URL}results.json"
37
+
38
 
39
  class DataEngine:
40
 
 
42
  self.df = self.init_dataframe()
43
 
44
  @property
45
+ @cache_dict_with_custom_key("models")
46
  def models(self):
47
  """
48
  Get models data
49
  """
50
+ res = get(MODEL_URL)
51
+ if res.status_code == 200:
52
+ return res.json()
53
+ return {}
54
 
55
  @property
56
+ @cache_dict_with_custom_key("datasets")
57
  def datasets(self):
58
  """
59
  Get tasks data
60
  """
61
+ res = get(DATASET_URL)
62
+ if res.status_code == 200:
63
+ return res.json()
64
+ return {}
65
 
66
  @property
67
+ @cache_dict_with_custom_key("results")
68
  def results(self):
69
  """
70
  Get results data
71
  """
72
+ res = get(RESULT_URL)
73
+ if res.status_code == 200:
74
+ return res.json()
75
+ return {}
76
 
77
  def init_dataframe(self):
78
  """
79
  Initialize DataFrame
80
  """
81
+ return self.jsons_to_df()
82
+
83
+ def get_data(self):
84
+ """
85
+ Get the full dataset
86
+ """
87
+ df = self.df.copy()
88
+ # 移除指定列
89
+ columns_to_remove = ['group_name', 'leaderboard', 'dataset_name']
90
+ df = df.drop(columns=columns_to_remove)
91
+ # 按 NDCG@10 降序排序
92
+ return df.sort_values(by='ndcg_at_10', ascending=False)
93
+
94
+ def get_filtered_data(self, navigation=None, embd_type=None, embd_dims=None, similarity=None):
95
+ """
96
+ Get filtered dataset based on criteria
97
+ """
98
+ filtered_df = self.df.copy()
99
+
100
+ if navigation and navigation != "all":
101
+ filtered_df = filtered_df[filtered_df['leaderboard'] == navigation]
102
+
103
+ if embd_type and embd_type != "all":
104
+ filtered_df = filtered_df[filtered_df['embd_dtype'] == embd_type]
105
+
106
+ if similarity and similarity != "all":
107
+ filtered_df = filtered_df[filtered_df['similarity'] == similarity]
108
+
109
+ if embd_dims and isinstance(embd_dims, list) and len(embd_dims) > 0:
110
+ filtered_df = filtered_df[filtered_df['embd_dim'].isin(embd_dims)]
111
+
112
+ # 移除指定列
113
+ columns_to_remove = ['group_name', 'leaderboard', 'dataset_name']
114
+ filtered_df = filtered_df.drop(columns=columns_to_remove)
115
+ # 按 NDCG@10 降序排序
116
+ return filtered_df.sort_values(by='ndcg_at_10', ascending=False)
117
 
118
  def _check_providers(self, organization: str, providers: List):
119
  if not providers:
 
138
 
139
  df_datasets_list = []
140
  for item in self.datasets:
141
+ dataset_names = item["datasets"]
142
  df_dataset_row = pd.DataFrame(
143
  {
144
+ "group_name": [item["name"] for _ in range(len(dataset_names))],
145
  "dataset_name": dataset_names,
146
  "leaderboard": [item["leaderboard"] for _ in range(len(dataset_names))]
147
  }
 
153
 
154
  df_model = pd.DataFrame(models_list)
155
 
156
+ df = pd.merge(df_result, df_model, on=["model_name", "embd_dim", "embd_dtype"], how="inner")
157
  df = pd.merge(df, df_dataset, on="dataset_name", how="inner")
158
 
159
  df["model_name"] = df.apply(lambda
160
  x: f"""<a target=\"_blank\" style=\"text-decoration: underline\" href=\"{x["reference"]}\">{x["model_name"]}</a>""",
161
  axis=1)
162
+ if df.empty:
163
+ return pd.DataFrame(columns=COLUMNS)
164
  return df[COLUMNS]
165
 
166
  def filter_df(self, df_result: pd.DataFrame, embd_dtype: str, embd_dims: List, similarity: str, max_tokens: int):
app/static/css/style.css ADDED
@@ -0,0 +1,516 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Global styles */
2
+ body {
3
+ margin: 0;
4
+ padding: 0;
5
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
6
+ background-color: #ffffff;
7
+ color: #1C1F23;
8
+ }
9
+
10
+ /* App Container */
11
+ .app-container {
12
+ display: flex;
13
+ min-height: 100vh;
14
+ background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
15
+ }
16
+
17
+ /* Sidebar styles */
18
+ .sidebar {
19
+ width: 280px;
20
+ background: rgba(255, 255, 255, 0.95);
21
+ backdrop-filter: blur(10px);
22
+ border-right: 1px solid rgba(0, 0, 0, 0.1);
23
+ box-shadow: 2px 0 20px rgba(0, 0, 0, 0.05);
24
+ padding: 24px 0;
25
+ flex-shrink: 0;
26
+ }
27
+
28
+ .sidebar-header {
29
+ padding: 0 24px 20px;
30
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
31
+ }
32
+
33
+ .sidebar-header h2 {
34
+ margin: 0;
35
+ font-size: 20px;
36
+ font-weight: 600;
37
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
38
+ -webkit-background-clip: text;
39
+ -webkit-text-fill-color: transparent;
40
+ letter-spacing: 0.5px;
41
+ }
42
+
43
+ .sidebar-nav {
44
+ padding: 20px 0;
45
+ }
46
+
47
+ .nav-item {
48
+ margin: 8px 16px;
49
+ border-radius: 12px;
50
+ overflow: hidden;
51
+ transition: transform 0.2s ease;
52
+ }
53
+
54
+ .nav-item:hover {
55
+ transform: translateX(4px);
56
+ }
57
+
58
+ .nav-link {
59
+ display: flex;
60
+ align-items: center;
61
+ padding: 14px 16px;
62
+ color: #1C1F23;
63
+ text-decoration: none;
64
+ border-radius: 12px;
65
+ transition: all 0.3s ease;
66
+ font-weight: 500;
67
+ }
68
+
69
+ .nav-link:hover {
70
+ background: linear-gradient(120deg, rgba(33, 150, 243, 0.1), rgba(0, 188, 212, 0.1));
71
+ }
72
+
73
+ .nav-item.active .nav-link {
74
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
75
+ color: #fff;
76
+ box-shadow: 0 4px 15px rgba(33, 150, 243, 0.3);
77
+ }
78
+
79
+ .nav-icon {
80
+ margin-right: 12px;
81
+ font-size: 18px;
82
+ }
83
+
84
+ /* Main Content Wrapper */
85
+ .main-wrapper {
86
+ flex: 1;
87
+ padding: 24px;
88
+ max-width: calc(100% - 280px);
89
+ }
90
+
91
+ /* Header styles */
92
+ .header {
93
+ background: rgba(255, 255, 255, 0.95);
94
+ padding: 24px;
95
+ border-radius: 16px;
96
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
97
+ margin-bottom: 24px;
98
+ backdrop-filter: blur(10px);
99
+ border: 1px solid rgba(255, 255, 255, 0.4);
100
+ }
101
+
102
+ .header h1 {
103
+ margin: 0;
104
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
105
+ -webkit-background-clip: text;
106
+ -webkit-text-fill-color: transparent;
107
+ font-size: 28px;
108
+ text-align: center;
109
+ letter-spacing: 0.5px;
110
+ }
111
+
112
+ /* Filter section styles */
113
+ .filter-section {
114
+ background-color: #fff;
115
+ padding: 20px;
116
+ border-radius: 8px;
117
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
118
+ margin-bottom: 20px;
119
+ display: grid;
120
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
121
+ gap: 20px;
122
+ }
123
+
124
+ .filter-group {
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: 8px;
128
+ }
129
+
130
+ .filter-group label {
131
+ font-weight: 600;
132
+ color: #1C1F23;
133
+ margin-bottom: 4px;
134
+ }
135
+
136
+ .semi-select {
137
+ width: 100%;
138
+ padding: 8px 12px;
139
+ border: 1px solid #e0e0e0;
140
+ border-radius: 4px;
141
+ background-color: #fff;
142
+ font-size: 14px;
143
+ transition: border-color 0.2s;
144
+ }
145
+
146
+ .semi-select:hover {
147
+ border-color: #0077FF;
148
+ }
149
+
150
+ .semi-select:focus {
151
+ border-color: #0077FF;
152
+ outline: none;
153
+ box-shadow: 0 0 0 2px rgba(0,119,255,0.2);
154
+ }
155
+
156
+ .checkbox-group {
157
+ display: flex;
158
+ flex-wrap: wrap;
159
+ gap: 10px;
160
+ }
161
+
162
+ .semi-checkbox {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 6px;
166
+ cursor: pointer;
167
+ }
168
+
169
+ .semi-checkbox input[type="checkbox"] {
170
+ width: 16px;
171
+ height: 16px;
172
+ margin: 0;
173
+ }
174
+
175
+ .semi-checkbox span {
176
+ font-size: 14px;
177
+ }
178
+
179
+ /* Table styles */
180
+ .table-container {
181
+ background: rgba(255, 255, 255, 0.95);
182
+ padding: 24px;
183
+ border-radius: 16px;
184
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
185
+ overflow-x: auto;
186
+ backdrop-filter: blur(10px);
187
+ border: 1px solid rgba(255, 255, 255, 0.4);
188
+ }
189
+
190
+ .semi-table {
191
+ width: 100%;
192
+ border-collapse: separate;
193
+ border-spacing: 0;
194
+ font-size: 14px;
195
+ }
196
+
197
+ /* Column Header Styles */
198
+ .column-header {
199
+ position: relative;
200
+ }
201
+
202
+ .header-content {
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: space-between;
206
+ padding: 16px;
207
+ background: linear-gradient(120deg, rgba(33, 150, 243, 0.05), rgba(0, 188, 212, 0.05));
208
+ font-weight: 600;
209
+ color: #1C1F23;
210
+ white-space: nowrap;
211
+ border-bottom: 2px solid transparent;
212
+ transition: all 0.3s ease;
213
+ }
214
+
215
+ .header-content:hover {
216
+ background: linear-gradient(120deg, rgba(33, 150, 243, 0.1), rgba(0, 188, 212, 0.1));
217
+ border-bottom: 2px solid #2196F3;
218
+ }
219
+
220
+ .header-actions {
221
+ display: flex;
222
+ gap: 8px;
223
+ }
224
+
225
+ .sort-btn,
226
+ .filter-btn {
227
+ background: none;
228
+ border: none;
229
+ padding: 6px;
230
+ cursor: pointer;
231
+ color: #666;
232
+ border-radius: 8px;
233
+ transition: all 0.3s ease;
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ }
238
+
239
+ .sort-btn:hover,
240
+ .filter-btn:hover {
241
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
242
+ color: #fff;
243
+ transform: translateY(-1px);
244
+ box-shadow: 0 4px 12px rgba(33, 150, 243, 0.2);
245
+ }
246
+
247
+ /* Filter Dropdown Styles */
248
+ .filter-dropdown {
249
+ position: absolute;
250
+ top: 100%;
251
+ left: 0;
252
+ right: 0;
253
+ background: rgba(255, 255, 255, 0.98);
254
+ border: 1px solid rgba(0, 0, 0, 0.1);
255
+ border-radius: 12px;
256
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
257
+ z-index: 1000;
258
+ min-width: 240px;
259
+ backdrop-filter: blur(10px);
260
+ transform-origin: top;
261
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
262
+ }
263
+
264
+ .filter-content {
265
+ padding: 16px;
266
+ }
267
+
268
+ .filter-search {
269
+ width: 90%;
270
+ padding: 12px;
271
+ border: 1px solid rgba(0, 0, 0, 0.1);
272
+ border-radius: 8px;
273
+ margin-bottom: 12px;
274
+ font-size: 14px;
275
+ background: rgba(255, 255, 255, 0.9);
276
+ transition: all 0.3s ease;
277
+ }
278
+
279
+ .filter-search:focus {
280
+ outline: none;
281
+ border-color: #2196F3;
282
+ box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.2);
283
+ }
284
+
285
+ .filter-options {
286
+ max-height: 240px;
287
+ overflow-y: auto;
288
+ margin-bottom: 12px;
289
+ padding: 4px;
290
+ }
291
+
292
+ .filter-options::-webkit-scrollbar {
293
+ width: 8px;
294
+ }
295
+
296
+ .filter-options::-webkit-scrollbar-track {
297
+ background: rgba(0, 0, 0, 0.05);
298
+ border-radius: 4px;
299
+ }
300
+
301
+ .filter-options::-webkit-scrollbar-thumb {
302
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
303
+ border-radius: 4px;
304
+ }
305
+
306
+ .filter-option {
307
+ display: flex;
308
+ align-items: center;
309
+ padding: 10px 12px;
310
+ cursor: pointer;
311
+ border-radius: 8px;
312
+ transition: all 0.3s ease;
313
+ }
314
+
315
+ .filter-option:hover {
316
+ background: linear-gradient(120deg, rgba(33, 150, 243, 0.1), rgba(0, 188, 212, 0.1));
317
+ }
318
+
319
+ .filter-option input[type="checkbox"] {
320
+ margin-right: 12px;
321
+ width: 18px;
322
+ height: 18px;
323
+ border-radius: 4px;
324
+ border: 2px solid #2196F3;
325
+ transition: all 0.3s ease;
326
+ position: relative;
327
+ cursor: pointer;
328
+ }
329
+
330
+ .filter-option input[type="checkbox"]:checked {
331
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
332
+ border-color: transparent;
333
+ }
334
+
335
+ .filter-actions {
336
+ display: flex;
337
+ justify-content: flex-end;
338
+ gap: 12px;
339
+ padding-top: 12px;
340
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
341
+ }
342
+
343
+ .filter-actions button {
344
+ padding: 10px 16px;
345
+ border: none;
346
+ border-radius: 8px;
347
+ cursor: pointer;
348
+ font-size: 14px;
349
+ font-weight: 500;
350
+ transition: all 0.3s ease;
351
+ }
352
+
353
+ .filter-actions button:first-child {
354
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
355
+ color: #fff;
356
+ }
357
+
358
+ .filter-actions button:first-child:hover {
359
+ transform: translateY(-1px);
360
+ box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);
361
+ }
362
+
363
+ .filter-actions button:last-child {
364
+ background: rgba(0, 0, 0, 0.05);
365
+ color: #1C1F23;
366
+ }
367
+
368
+ .filter-actions button:last-child:hover {
369
+ background: rgba(0, 0, 0, 0.1);
370
+ }
371
+
372
+ /* Table Body Styles */
373
+ .semi-table td {
374
+ padding: 16px;
375
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
376
+ transition: all 0.3s ease;
377
+ }
378
+
379
+ .semi-table tbody tr {
380
+ transition: all 0.3s ease;
381
+ }
382
+
383
+ .semi-table tbody tr:hover {
384
+ background: linear-gradient(120deg, rgba(33, 150, 243, 0.05), rgba(0, 188, 212, 0.05));
385
+ transform: translateY(-1px);
386
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
387
+ }
388
+
389
+ /* Links in table */
390
+ .semi-table a {
391
+ color: #2196F3;
392
+ text-decoration: none;
393
+ transition: all 0.3s ease;
394
+ position: relative;
395
+ }
396
+
397
+ .semi-table a:hover {
398
+ color: #00BCD4;
399
+ }
400
+
401
+ .semi-table a::after {
402
+ content: '';
403
+ position: absolute;
404
+ width: 100%;
405
+ height: 2px;
406
+ bottom: -2px;
407
+ left: 0;
408
+ background: linear-gradient(120deg, #2196F3, #00BCD4);
409
+ transform: scaleX(0);
410
+ transition: transform 0.3s ease;
411
+ }
412
+
413
+ .semi-table a:hover::after {
414
+ transform: scaleX(1);
415
+ }
416
+
417
+ /* Responsive design */
418
+ @media (max-width: 1024px) {
419
+ .sidebar {
420
+ width: 240px;
421
+ }
422
+
423
+ .main-wrapper {
424
+ max-width: calc(100% - 240px);
425
+ padding: 16px;
426
+ }
427
+ }
428
+
429
+ @media (max-width: 768px) {
430
+ .app-container {
431
+ flex-direction: column;
432
+ }
433
+
434
+ .sidebar {
435
+ width: 100%;
436
+ border-right: none;
437
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
438
+ padding: 16px 0;
439
+ }
440
+
441
+ .main-wrapper {
442
+ max-width: 100%;
443
+ padding: 16px;
444
+ }
445
+
446
+ .header {
447
+ padding: 16px;
448
+ margin-bottom: 16px;
449
+ }
450
+
451
+ .header h1 {
452
+ font-size: 24px;
453
+ }
454
+
455
+ .table-container {
456
+ padding: 16px;
457
+ border-radius: 12px;
458
+ }
459
+
460
+ .header-content {
461
+ padding: 12px;
462
+ }
463
+
464
+ .semi-table td,
465
+ .semi-table th {
466
+ padding: 12px;
467
+ font-size: 13px;
468
+ }
469
+
470
+ .filter-dropdown {
471
+ position: fixed;
472
+ top: 50%;
473
+ left: 50%;
474
+ transform: translate(-50%, -50%);
475
+ width: 90%;
476
+ max-width: 320px;
477
+ margin: 0 auto;
478
+ }
479
+ }
480
+
481
+ /* Dark mode support */
482
+ @media (prefers-color-scheme: dark) {
483
+ body {
484
+ background-color: #121212;
485
+ color: #ffffff;
486
+ }
487
+
488
+ .app-container {
489
+ background: linear-gradient(135deg, #121212 0%, #1a1a1a 100%);
490
+ }
491
+
492
+ .sidebar,
493
+ .header,
494
+ .table-container {
495
+ background: rgba(255, 255, 255, 0.05);
496
+ border-color: rgba(255, 255, 255, 0.1);
497
+ }
498
+
499
+ .semi-table td {
500
+ border-color: rgba(255, 255, 255, 0.1);
501
+ }
502
+
503
+ .filter-dropdown {
504
+ background: rgba(18, 18, 18, 0.98);
505
+ }
506
+
507
+ .filter-search {
508
+ background: rgba(255, 255, 255, 0.05);
509
+ border-color: rgba(255, 255, 255, 0.1);
510
+ color: #ffffff;
511
+ }
512
+
513
+ .filter-option:hover {
514
+ background: rgba(255, 255, 255, 0.05);
515
+ }
516
+ }
app/static/js/main.js ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Global variables for sorting and filtering
2
+ let currentSortColumn = -1;
3
+ let isAscending = true;
4
+ let columnFilters = {};
5
+ let columnValues = {};
6
+
7
+ // Function to update the table based on filters
8
+ async function updateTable() {
9
+ const navigation = document.getElementById('navigation').value;
10
+ const embdType = document.getElementById('embdType').value;
11
+ const similarity = document.getElementById('similarity').value;
12
+
13
+ // Get all checked embedding dimensions
14
+ const embdDims = Array.from(document.querySelectorAll('input[name="embdDim"]:checked'))
15
+ .map(checkbox => checkbox.value);
16
+
17
+ // Prepare filter data
18
+ const filters = {
19
+ navigation: navigation,
20
+ embd_type: embdType,
21
+ embd_dims: embdDims,
22
+ similarity: similarity
23
+ };
24
+
25
+ try {
26
+ const response = await fetch('/api/filter', {
27
+ method: 'POST',
28
+ headers: {
29
+ 'Content-Type': 'application/json'
30
+ },
31
+ body: JSON.stringify(filters)
32
+ });
33
+
34
+ if (!response.ok) {
35
+ throw new Error(`HTTP error! status: ${response.status}`);
36
+ }
37
+
38
+ const data = await response.json();
39
+ updateTableContent(data);
40
+ } catch (error) {
41
+ console.error('Error updating table:', error);
42
+ alert('Failed to update table. Please try again.');
43
+ }
44
+ }
45
+
46
+ // Function to update table content
47
+ function updateTableContent(data) {
48
+ const tbody = document.querySelector('#leaderboardTable tbody');
49
+ tbody.innerHTML = '';
50
+
51
+ data.forEach(row => {
52
+ const tr = document.createElement('tr');
53
+ row.forEach(cell => {
54
+ const td = document.createElement('td');
55
+ td.innerHTML = cell; // Use innerHTML instead of textContent to handle HTML content
56
+ tr.appendChild(td);
57
+ });
58
+ tbody.appendChild(tr);
59
+ });
60
+ }
61
+
62
+ // Initialize when document is ready
63
+ document.addEventListener('DOMContentLoaded', () => {
64
+ initializeColumnValues();
65
+ document.addEventListener('click', handleClickOutside);
66
+ });
67
+
68
+ // Initialize unique values for each column
69
+ function initializeColumnValues() {
70
+ const table = document.getElementById('leaderboardTable');
71
+ const headers = Array.from(table.querySelectorAll('th'));
72
+ const rows = Array.from(table.querySelectorAll('tbody tr'));
73
+
74
+ headers.forEach((header, columnIndex) => {
75
+ const columnName = header.querySelector('span').textContent;
76
+ const values = new Set();
77
+
78
+ rows.forEach(row => {
79
+ const cell = row.cells[columnIndex];
80
+ const value = cell.textContent.trim();
81
+ if (value) values.add(value);
82
+ });
83
+
84
+ columnValues[columnName] = Array.from(values).sort();
85
+ });
86
+ }
87
+
88
+ // Handle clicking outside filter dropdowns
89
+ function handleClickOutside(event) {
90
+ const dropdowns = document.querySelectorAll('.filter-dropdown');
91
+ dropdowns.forEach(dropdown => {
92
+ const filterBtn = dropdown.parentElement.querySelector('.filter-btn');
93
+ if (!dropdown.contains(event.target) && !filterBtn.contains(event.target)) {
94
+ dropdown.style.display = 'none';
95
+ }
96
+ });
97
+ }
98
+
99
+ // Toggle filter dropdown
100
+ function toggleFilter(event, columnName) {
101
+ event.stopPropagation();
102
+ const dropdown = document.getElementById(`filter-${columnName}`);
103
+ const options = document.getElementById(`options-${columnName}`);
104
+
105
+ // Close other dropdowns
106
+ document.querySelectorAll('.filter-dropdown').forEach(d => {
107
+ if (d !== dropdown) d.style.display = 'none';
108
+ });
109
+
110
+ if (dropdown.style.display === 'none') {
111
+ dropdown.style.display = 'block';
112
+ if (!options.children.length) {
113
+ populateFilterOptions(columnName);
114
+ }
115
+ } else {
116
+ dropdown.style.display = 'none';
117
+ }
118
+ }
119
+
120
+ // Populate filter options
121
+ function populateFilterOptions(columnName) {
122
+ const options = document.getElementById(`options-${columnName}`);
123
+ options.innerHTML = '';
124
+
125
+ columnValues[columnName].forEach(value => {
126
+ const option = document.createElement('div');
127
+ option.className = 'filter-option';
128
+
129
+ const checkbox = document.createElement('input');
130
+ checkbox.type = 'checkbox';
131
+ checkbox.value = value;
132
+ checkbox.checked = columnFilters[columnName]?.includes(value) || false;
133
+
134
+ const label = document.createElement('span');
135
+ label.textContent = value;
136
+
137
+ option.appendChild(checkbox);
138
+ option.appendChild(label);
139
+ options.appendChild(option);
140
+ });
141
+ }
142
+
143
+ // Filter options based on search input
144
+ function filterOptions(columnName) {
145
+ const searchInput = document.querySelector(`#filter-${columnName} .filter-search`);
146
+ const searchTerm = searchInput.value.toLowerCase();
147
+ const options = document.getElementById(`options-${columnName}`);
148
+
149
+ Array.from(options.children).forEach(option => {
150
+ const text = option.textContent.toLowerCase();
151
+ option.style.display = text.includes(searchTerm) ? '' : 'none';
152
+ });
153
+ }
154
+
155
+ // Apply filter
156
+ function applyFilter(columnName) {
157
+ const options = document.getElementById(`options-${columnName}`);
158
+ const checkedValues = Array.from(options.querySelectorAll('input[type="checkbox"]:checked'))
159
+ .map(cb => cb.value);
160
+
161
+ columnFilters[columnName] = checkedValues;
162
+ updateTableVisibility();
163
+ document.getElementById(`filter-${columnName}`).style.display = 'none';
164
+ }
165
+
166
+ // Clear filter
167
+ function clearFilter(columnName) {
168
+ const options = document.getElementById(`options-${columnName}`);
169
+ options.querySelectorAll('input[type="checkbox"]').forEach(cb => cb.checked = false);
170
+ delete columnFilters[columnName];
171
+ updateTableVisibility();
172
+ document.getElementById(`filter-${columnName}`).style.display = 'none';
173
+ }
174
+
175
+ // Update table visibility based on filters
176
+ function updateTableVisibility() {
177
+ const table = document.getElementById('leaderboardTable');
178
+ const rows = Array.from(table.querySelectorAll('tbody tr'));
179
+ const headers = Array.from(table.querySelectorAll('th'));
180
+
181
+ rows.forEach(row => {
182
+ let visible = true;
183
+
184
+ Object.entries(columnFilters).forEach(([columnName, selectedValues]) => {
185
+ if (!selectedValues.length) return;
186
+
187
+ const columnIndex = headers.findIndex(header =>
188
+ header.querySelector('span').textContent === columnName
189
+ );
190
+
191
+ const cellValue = row.cells[columnIndex].textContent.trim();
192
+ if (!selectedValues.includes(cellValue)) {
193
+ visible = false;
194
+ }
195
+ });
196
+
197
+ row.style.display = visible ? '' : 'none';
198
+ });
199
+ }
200
+
201
+ // Sort table
202
+ function sortTable(columnIndex) {
203
+ const table = document.getElementById('leaderboardTable');
204
+ const tbody = table.querySelector('tbody');
205
+ const rows = Array.from(tbody.querySelectorAll('tr'));
206
+
207
+ // Update sort direction
208
+ if (currentSortColumn === columnIndex) {
209
+ isAscending = !isAscending;
210
+ } else {
211
+ currentSortColumn = columnIndex;
212
+ isAscending = true;
213
+ }
214
+
215
+ // Sort rows
216
+ rows.sort((a, b) => {
217
+ let aValue = a.cells[columnIndex].textContent;
218
+ let bValue = b.cells[columnIndex].textContent;
219
+
220
+ // Remove HTML tags for comparison
221
+ aValue = aValue.replace(/<[^>]*>/g, '').trim();
222
+ bValue = bValue.replace(/<[^>]*>/g, '').trim();
223
+
224
+ // Check if the values are numbers
225
+ const aNum = parseFloat(aValue);
226
+ const bNum = parseFloat(bValue);
227
+
228
+ if (!isNaN(aNum) && !isNaN(bNum)) {
229
+ return isAscending ? aNum - bNum : bNum - aNum;
230
+ }
231
+
232
+ // Sort as strings
233
+ return isAscending
234
+ ? aValue.localeCompare(bValue)
235
+ : bValue.localeCompare(aValue);
236
+ });
237
+
238
+ // Update table
239
+ tbody.innerHTML = '';
240
+ rows.forEach(row => tbody.appendChild(row));
241
+
242
+ // Update sort indicators
243
+ const headers = table.querySelectorAll('.sort-icon');
244
+ headers.forEach((icon, index) => {
245
+ icon.textContent = index === columnIndex
246
+ ? (isAscending ? '↑' : '↓')
247
+ : '↕';
248
+ });
249
+ }
250
+
251
+ // Initialize table sorting and filtering
252
+ document.addEventListener('DOMContentLoaded', () => {
253
+ // Add event listener for checkboxes
254
+ const checkboxes = document.querySelectorAll('input[name="embdDim"]');
255
+ checkboxes.forEach(checkbox => {
256
+ checkbox.addEventListener('change', updateTable);
257
+ });
258
+ });
app/templates/index.html ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>MTEB Leaderboard</title>
7
+ <!-- Semi Design CSS -->
8
+ <link rel="stylesheet" href="https://unpkg.com/@douyinfe/semi-ui/dist/css/semi.min.css">
9
+ <!-- Custom CSS -->
10
+ <link rel="stylesheet" href="{{ url_for('static', path='css/style.css') }}">
11
+ <style>
12
+ .sidebar-nav {
13
+ padding: 1rem;
14
+ }
15
+
16
+ .nav-item {
17
+ margin-bottom: 1rem;
18
+ border-radius: 8px;
19
+ overflow: hidden;
20
+ }
21
+
22
+ .nav-link {
23
+ display: flex;
24
+ align-items: center;
25
+ padding: 0.8rem 1rem;
26
+ color: #333;
27
+ text-decoration: none;
28
+ font-weight: 500;
29
+ transition: all 0.3s ease;
30
+ }
31
+
32
+ .nav-icon {
33
+ margin-right: 0.8rem;
34
+ font-size: 1.2rem;
35
+ }
36
+
37
+ .subnav {
38
+ display: none;
39
+ background: #f5f5f5;
40
+ padding: 0.5rem 0;
41
+ }
42
+
43
+ .nav-item.active .subnav {
44
+ display: block;
45
+ }
46
+
47
+ .subnav-link {
48
+ display: block;
49
+ padding: 0.5rem 1rem 0.5rem 2.8rem;
50
+ color: #666;
51
+ text-decoration: none;
52
+ font-size: 0.9rem;
53
+ transition: all 0.2s ease;
54
+ }
55
+
56
+ .subnav-link:hover {
57
+ background: #e0e0e0;
58
+ color: #333;
59
+ }
60
+
61
+ .subnav-link.active {
62
+ background: #e0e0e0;
63
+ color: #1890ff;
64
+ font-weight: 500;
65
+ }
66
+
67
+ .nav-item.active .nav-link {
68
+ background: #1890ff;
69
+ color: white;
70
+ }
71
+ </style>
72
+ </head>
73
+ <body>
74
+ <div class="app-container">
75
+ <!-- Sidebar -->
76
+ <aside class="sidebar">
77
+ <div class="sidebar-header">
78
+ <h2>Navigation</h2>
79
+ </div>
80
+ <nav class="sidebar-nav">
81
+ <div class="nav-item {% if active_tab == 'text' %}active{% endif %}">
82
+ <a href="/?tab=text" class="nav-link">
83
+ <span class="nav-icon">📝</span>
84
+ Text Leaderboard
85
+ </a>
86
+ <div class="subnav">
87
+ {% for subtype in ["text", "law", "long-context", "finance", "conversational", "tech", "multilingual", "code", "healthcare"] %}
88
+ <a href="/?tab=text&subtype={{ subtype }}" class="subnav-link {% if active_subtype == subtype %}active{% endif %}">
89
+ {{ subtype | title }}
90
+ </a>
91
+ {% endfor %}
92
+ </div>
93
+ </div>
94
+ <div class="nav-item {% if active_tab == 'multimodal' %}active{% endif %}">
95
+ <a href="/?tab=multimodal" class="nav-link">
96
+ <span class="nav-icon">🖼️</span>
97
+ Multimodal Leaderboard
98
+ </a>
99
+ <div class="subnav">
100
+ {% for subtype in ["text-to-photo", "document-screenshot", "figures-and-tables", "text-to-text"] %}
101
+ <a href="/?tab=multimodal&subtype={{ subtype }}" class="subnav-link {% if active_subtype == subtype %}active{% endif %}">
102
+ {{ subtype | title }}
103
+ </a>
104
+ {% endfor %}
105
+ </div>
106
+ </div>
107
+ </nav>
108
+ </aside>
109
+
110
+ <!-- Main Content -->
111
+ <div class="main-wrapper">
112
+ <header class="header">
113
+ <h1>Massive Text Embedding Benchmark (MTEB) Leaderboard</h1>
114
+ </header>
115
+
116
+ <main class="main-content">
117
+ <div class="table-container">
118
+ <table id="leaderboardTable" class="semi-table">
119
+ <thead>
120
+ <tr>
121
+ {% for col in columns %}
122
+ <th>
123
+ <div class="column-header">
124
+ <div class="header-content">
125
+ <span>{{ col }}</span>
126
+ <div class="header-actions">
127
+ <button class="sort-btn" onclick="sortTable({{ loop.index0 }})">
128
+ <span class="sort-icon">↕</span>
129
+ </button>
130
+ <button class="filter-btn" onclick="toggleFilter(event, '{{ col }}')">
131
+ <span class="filter-icon">⚡</span>
132
+ </button>
133
+ </div>
134
+ </div>
135
+ <div class="filter-dropdown" id="filter-{{ col }}" style="display: none;">
136
+ <div class="filter-content">
137
+ <input type="text"
138
+ class="filter-search"
139
+ placeholder="Search..."
140
+ oninput="filterOptions('{{ col }}')">
141
+ <div class="filter-options" id="options-{{ col }}">
142
+ <!-- Options will be populated by JavaScript -->
143
+ </div>
144
+ <div class="filter-actions">
145
+ <button onclick="applyFilter('{{ col }}')">Apply</button>
146
+ <button onclick="clearFilter('{{ col }}')">Clear</button>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ </th>
152
+ {% endfor %}
153
+ </tr>
154
+ </thead>
155
+ <tbody>
156
+ {% for row in data %}
157
+ <tr>
158
+ {% for cell in row %}
159
+ <td>{{ cell | safe }}</td>
160
+ {% endfor %}
161
+ </tr>
162
+ {% endfor %}
163
+ </tbody>
164
+ </table>
165
+ </div>
166
+ </main>
167
+ </div>
168
+ </div>
169
+
170
+ <!-- Semi Design JS -->
171
+ <script src="https://unpkg.com/@douyinfe/semi-ui/dist/js/semi.min.js"></script>
172
+ <!-- Custom JS -->
173
+ <script src="{{ url_for('static', path='js/main.js') }}"></script>
174
+ </body>
175
+ </html>
app/ui/component/subtabs_component.py CHANGED
@@ -31,11 +31,11 @@ class SubtabsComponent:
31
  df_result = df_result.sort_values(by=sort_col, ascending=False)
32
 
33
  items = []
34
- for leaderboard, group_names in LEADERBOARD_MAP.items():
35
- with gr.Column(visible=leaderboard.upper() == navigations.upper()) as column:
36
  with gr.Tabs():
37
  with gr.TabItem("overall"):
38
- df_leaderboard = df_result[df_result["leaderboard"] == leaderboard]
39
  gr_df = gr.Dataframe(
40
  df_leaderboard,
41
  datatype=COLUMNS_TYPES,
@@ -46,9 +46,9 @@ class SubtabsComponent:
46
 
47
  items.append(gr_df)
48
 
49
- for group_name in group_names:
50
- with gr.TabItem(group_name):
51
- df = df_leaderboard[df_leaderboard["group_name"] == group_name]
52
  gr_df = gr.Dataframe(
53
  df,
54
  datatype=COLUMNS_TYPES,
 
31
  df_result = df_result.sort_values(by=sort_col, ascending=False)
32
 
33
  items = []
34
+ for group_name,leaderboards in LEADERBOARD_MAP.items():
35
+ with gr.Column(visible=group_name.upper() == navigations.upper()) as column:
36
  with gr.Tabs():
37
  with gr.TabItem("overall"):
38
+ df_leaderboard = df_result[df_result["group_name"] == group_name]
39
  gr_df = gr.Dataframe(
40
  df_leaderboard,
41
  datatype=COLUMNS_TYPES,
 
46
 
47
  items.append(gr_df)
48
 
49
+ for leaderboard in leaderboards:
50
+ with gr.TabItem(leaderboard):
51
+ df = df_leaderboard[df_leaderboard["leaderboard"] == leaderboard]
52
  gr_df = gr.Dataframe(
53
  df,
54
  datatype=COLUMNS_TYPES,
mock_data/datasets.json DELETED
@@ -1,17 +0,0 @@
1
- [
2
- {"group_name": "text", "dataset_names": ["LegalQuAD", "MBPP", "PyTorch1024", "TAT-QA"], "leaderboard": "text"},
3
- {"group_name": "law", "dataset_names": ["LegalQuAD"], "leaderboard": "text"},
4
- {"group_name": "multilingual", "dataset_names": ["LegalQuAD"], "leaderboard": "text"},
5
- {"group_name": "german", "dataset_names": ["LegalQuAD"], "leaderboard": "text"},
6
- {"group_name": "code", "dataset_names": ["MBPP"], "leaderboard": "text"},
7
- {"group_name": "tech", "dataset_names": ["PyTorch1024", "TAT-QA"], "leaderboard": "text"},
8
- {"group_name": "long-context", "dataset_names": ["LongContextData1", "LongContextData2"], "leaderboard": "text"},
9
- {"group_name": "finance", "dataset_names": ["FinanceData1", "FinanceData2"], "leaderboard": "text"},
10
- {"group_name": "conversational", "dataset_names": ["ConversationalData1", "ConversationalData2"], "leaderboard": "text"},
11
- {"group_name": "healthcare", "dataset_names": ["HealthcareData1", "HealthcareData2"], "leaderboard": "text"},
12
- {"group_name": "multimodal", "dataset_names": ["MultimodalData1", "MultimodalData2"], "leaderboard": "multimodal"},
13
- {"group_name": "text-to-photo", "dataset_names": ["TextToPhotoData1", "TextToPhotoData2"], "leaderboard": "multimodal"},
14
- {"group_name": "document-screenshot", "dataset_names": ["DocumentScreenshotData1", "DocumentScreenshotData2"], "leaderboard": "multimodal"},
15
- {"group_name": "figures-and-tables", "dataset_names": ["FiguresAndTablesData1", "FiguresAndTablesData2"], "leaderboard": "multimodal"},
16
- {"group_name": "text-to-text", "dataset_names": ["TextToTextData1", "TextToTextData2"], "leaderboard": "multimodal"}
17
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mock_data/models.json DELETED
@@ -1,113 +0,0 @@
1
- [
2
- {"model_name":"sentence-transformers/all-MiniLM-L6-v2","embd_dtype":"float32","embd_dim":384,"num_params":22700000,"max_tokens":256,
3
- "similarity":"cosine","query_instruct":null,"corpus_instruct":null,
4
- "reference":"https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2"},
5
- {"model_name":"jinaai/jina-embeddings-v2-small-en","embd_dtype":"float32","embd_dim":512,"num_params":32700000,"max_tokens":8192,
6
- "similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://huggingface.co/jinaai/jina-embeddings-v2-small-en"},
7
-
8
- {"model_name":"text-embedding-3-small","embd_dtype":"float32","embd_dim":1536,"num_params":null,"max_tokens":8191,
9
- "similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://docs.voyageai.com/docs/embeddings"},
10
- {"model_name":"voyage-3-lite","embd_dtype":"float32","embd_dim":512,"num_params":null,"max_tokens":32000,"similarity":"cosine",
11
- "query_instruct":"Represent the query for retrieving supporting documents: ","corpus_instruct":"Represent the document for retrieval: ",
12
- "reference":"https://docs.voyageai.com/docs/embeddings"},
13
- {"model_name":"mock-model-1","embd_dtype":"float32","embd_dim":512,"num_params":5000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-1"},
14
- {"model_name":"mock-model-2","embd_dtype":"int8","embd_dim":256,"num_params":10000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-2"},
15
- {"model_name":"mock-model-3","embd_dtype":"binary","embd_dim":1024,"num_params":2000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-3"},
16
- {"model_name":"mock-model-4","embd_dtype":"float32","embd_dim":768,"num_params":3000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-4"},
17
- {"model_name":"mock-model-5","embd_dtype":"int8","embd_dim":384,"num_params":7000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-5"},
18
- {"model_name":"mock-model-6","embd_dtype":"binary","embd_dim":640,"num_params":15000000,"max_tokens":16384,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-6"},
19
- {"model_name":"mock-model-7","embd_dtype":"float32","embd_dim":512,"num_params":2500000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-7"},
20
- {"model_name":"mock-model-8","embd_dtype":"int8","embd_dim":1024,"num_params":8000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-8"},
21
- {"model_name":"mock-model-9","embd_dtype":"binary","embd_dim":128,"num_params":9000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-9"},
22
- {"model_name":"mock-model-10","embd_dtype":"float32","embd_dim":1536,"num_params":6000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-10"},
23
- {"model_name":"mock-model-11","embd_dtype":"int8","embd_dim":512,"num_params":11000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-11"},
24
- {"model_name":"mock-model-12","embd_dtype":"binary","embd_dim":256,"num_params":12000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-12"},
25
- {"model_name":"mock-model-13","embd_dtype":"float32","embd_dim":1024,"num_params":13000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-13"},
26
- {"model_name":"mock-model-14","embd_dtype":"int8","embd_dim":768,"num_params":14000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-14"},
27
- {"model_name":"mock-model-15","embd_dtype":"binary","embd_dim":384,"num_params":15000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-15"},
28
- {"model_name":"mock-model-16","embd_dtype":"float32","embd_dim":640,"num_params":16000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-16"},
29
- {"model_name":"mock-model-17","embd_dtype":"int8","embd_dim":512,"num_params":17000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-17"},
30
- {"model_name":"mock-model-18","embd_dtype":"binary","embd_dim":1024,"num_params":18000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-18"},
31
- {"model_name":"mock-model-19","embd_dtype":"float32","embd_dim":128,"num_params":19000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-19"},
32
- {"model_name":"mock-model-20","embd_dtype":"int8","embd_dim":1536,"num_params":20000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-20"},
33
- {"model_name":"mock-model-21","embd_dtype":"binary","embd_dim":512,"num_params":21000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-21"},
34
- {"model_name":"mock-model-22","embd_dtype":"float32","embd_dim":256,"num_params":22000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-22"},
35
- {"model_name":"mock-model-23","embd_dtype":"int8","embd_dim":1024,"num_params":23000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-23"},
36
- {"model_name":"mock-model-24","embd_dtype":"binary","embd_dim":768,"num_params":24000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-24"},
37
- {"model_name":"mock-model-25","embd_dtype":"float32","embd_dim":384,"num_params":25000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-25"},
38
- {"model_name":"mock-model-26","embd_dtype":"int8","embd_dim":640,"num_params":26000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-26"},
39
- {"model_name":"mock-model-27","embd_dtype":"binary","embd_dim":512,"num_params":27000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-27"},
40
- {"model_name":"mock-model-28","embd_dtype":"float32","embd_dim":1024,"num_params":28000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-28"},
41
- {"model_name":"mock-model-29","embd_dtype":"int8","embd_dim":128,"num_params":29000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-29"},
42
- {"model_name":"mock-model-30","embd_dtype":"binary","embd_dim":1536,"num_params":30000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-30"},
43
- {"model_name":"mock-model-31","embd_dtype":"float32","embd_dim":512,"num_params":31000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-31"},
44
- {"model_name":"mock-model-32","embd_dtype":"int8","embd_dim":256,"num_params":32000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-32"},
45
- {"model_name":"mock-model-33","embd_dtype":"binary","embd_dim":1024,"num_params":33000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-33"},
46
- {"model_name":"mock-model-34","embd_dtype":"float32","embd_dim":768,"num_params":34000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-34"},
47
- {"model_name":"mock-model-35","embd_dtype":"int8","embd_dim":384,"num_params":35000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-35"},
48
- {"model_name":"mock-model-36","embd_dtype":"binary","embd_dim":640,"num_params":36000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-36"},
49
- {"model_name":"mock-model-37","embd_dtype":"float32","embd_dim":512,"num_params":37000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-37"},
50
- {"model_name":"mock-model-38","embd_dtype":"int8","embd_dim":1024,"num_params":38000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-38"},
51
- {"model_name":"mock-model-39","embd_dtype":"binary","embd_dim":128,"num_params":39000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-39"},
52
- {"model_name":"mock-model-40","embd_dtype":"float32","embd_dim":1536,"num_params":40000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-40"},
53
- {"model_name":"mock-model-41","embd_dtype":"int8","embd_dim":512,"num_params":41000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-41"},
54
- {"model_name":"mock-model-42","embd_dtype":"binary","embd_dim":256,"num_params":42000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-42"},
55
- {"model_name":"mock-model-43","embd_dtype":"float32","embd_dim":1024,"num_params":43000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-43"},
56
- {"model_name":"mock-model-44","embd_dtype":"int8","embd_dim":768,"num_params":44000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-44"},
57
- {"model_name":"mock-model-45","embd_dtype":"binary","embd_dim":384,"num_params":45000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-45"},
58
- {"model_name":"mock-model-46","embd_dtype":"float32","embd_dim":640,"num_params":46000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-46"},
59
- {"model_name":"mock-model-47","embd_dtype":"int8","embd_dim":512,"num_params":47000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-47"},
60
- {"model_name":"mock-model-48","embd_dtype":"binary","embd_dim":1024,"num_params":48000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-48"},
61
- {"model_name":"mock-model-49","embd_dtype":"float32","embd_dim":128,"num_params":49000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-49"},
62
- {"model_name":"mock-model-50","embd_dtype":"int8","embd_dim":1536,"num_params":50000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-50"},
63
- {"model_name":"mock-model-51","embd_dtype":"binary","embd_dim":512,"num_params":51000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-51"},
64
- {"model_name":"mock-model-52","embd_dtype":"float32","embd_dim":256,"num_params":52000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-52"},
65
- {"model_name":"mock-model-53","embd_dtype":"int8","embd_dim":1024,"num_params":53000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-53"},
66
- {"model_name":"mock-model-54","embd_dtype":"binary","embd_dim":768,"num_params":54000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-54"},
67
- {"model_name":"mock-model-55","embd_dtype":"float32","embd_dim":384,"num_params":55000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-55"},
68
- {"model_name":"mock-model-56","embd_dtype":"int8","embd_dim":640,"num_params":56000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-56"},
69
- {"model_name":"mock-model-57","embd_dtype":"binary","embd_dim":512,"num_params":57000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-57"},
70
- {"model_name":"mock-model-58","embd_dtype":"float32","embd_dim":1024,"num_params":58000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-58"},
71
- {"model_name":"mock-model-59","embd_dtype":"int8","embd_dim":128,"num_params":59000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-59"},
72
- {"model_name":"mock-model-60","embd_dtype":"binary","embd_dim":1536,"num_params":60000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-60"},
73
- {"model_name":"mock-model-61","embd_dtype":"float32","embd_dim":512,"num_params":61000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-61"},
74
- {"model_name":"mock-model-62","embd_dtype":"int8","embd_dim":256,"num_params":62000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-62"},
75
- {"model_name":"mock-model-63","embd_dtype":"binary","embd_dim":1024,"num_params":63000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-63"},
76
- {"model_name":"mock-model-64","embd_dtype":"float32","embd_dim":768,"num_params":64000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-64"},
77
- {"model_name":"mock-model-65","embd_dtype":"int8","embd_dim":384,"num_params":65000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-65"},
78
- {"model_name":"mock-model-66","embd_dtype":"binary","embd_dim":640,"num_params":66000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-66"},
79
- {"model_name":"mock-model-67","embd_dtype":"float32","embd_dim":512,"num_params":67000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-67"},
80
- {"model_name":"mock-model-68","embd_dtype":"int8","embd_dim":1024,"num_params":68000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-68"},
81
- {"model_name":"mock-model-69","embd_dtype":"binary","embd_dim":128,"num_params":69000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-69"},
82
- {"model_name":"mock-model-70","embd_dtype":"float32","embd_dim":1536,"num_params":70000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-70"},
83
- {"model_name":"mock-model-71","embd_dtype":"int8","embd_dim":512,"num_params":71000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-71"},
84
- {"model_name":"mock-model-72","embd_dtype":"binary","embd_dim":256,"num_params":72000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-72"},
85
- {"model_name":"mock-model-73","embd_dtype":"float32","embd_dim":1024,"num_params":73000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-73"},
86
- {"model_name":"mock-model-74","embd_dtype":"int8","embd_dim":768,"num_params":74000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-74"},
87
- {"model_name":"mock-model-75","embd_dtype":"binary","embd_dim":384,"num_params":75000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-75"},
88
- {"model_name":"mock-model-76","embd_dtype":"float32","embd_dim":640,"num_params":76000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-76"},
89
- {"model_name":"mock-model-77","embd_dtype":"int8","embd_dim":512,"num_params":77000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-77"},
90
- {"model_name":"mock-model-78","embd_dtype":"binary","embd_dim":1024,"num_params":78000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-78"},
91
- {"model_name":"mock-model-79","embd_dtype":"float32","embd_dim":128,"num_params":79000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-79"},
92
- {"model_name":"mock-model-80","embd_dtype":"int8","embd_dim":1536,"num_params":80000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-80"},
93
- {"model_name":"mock-model-81","embd_dtype":"binary","embd_dim":512,"num_params":81000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-81"},
94
- {"model_name":"mock-model-82","embd_dtype":"float32","embd_dim":256,"num_params":82000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-82"},
95
- {"model_name":"mock-model-83","embd_dtype":"int8","embd_dim":1024,"num_params":83000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-83"},
96
- {"model_name":"mock-model-84","embd_dtype":"binary","embd_dim":768,"num_params":84000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-84"},
97
- {"model_name":"mock-model-85","embd_dtype":"float32","embd_dim":384,"num_params":85000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-85"},
98
- {"model_name":"mock-model-86","embd_dtype":"int8","embd_dim":640,"num_params":86000000,"max_tokens":1024,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-86"},
99
- {"model_name":"mock-model-87","embd_dtype":"binary","embd_dim":512,"num_params":87000000,"max_tokens":2048,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-87"},
100
- {"model_name":"mock-model-88","embd_dtype":"float32","embd_dim":1024,"num_params":88000000,"max_tokens":512,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-88"},
101
- {"model_name":"mock-model-89","embd_dtype":"int8","embd_dim":128,"num_params":89000000,"max_tokens":16384,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-89"},
102
- {"model_name":"mock-model-90","embd_dtype":"binary","embd_dim":1536,"num_params":90000000,"max_tokens":32000,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-90"},
103
- {"model_name":"mock-model-91","embd_dtype":"float32","embd_dim":512,"num_params":91000000,"max_tokens":256,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-91"},
104
- {"model_name":"mock-model-92","embd_dtype":"int8","embd_dim":256,"num_params":92000000,"max_tokens":8192,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-92"},
105
- {"model_name":"mock-model-93","embd_dtype":"binary","embd_dim":1024,"num_params":93000000,"max_tokens":4096,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-93"},
106
- {"model_name":"mock-model-94","embd_dtype":"float32","embd_dim":768,"num_params":94000000,"max_tokens":1024,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-94"},
107
- {"model_name":"mock-model-95","embd_dtype":"int8","embd_dim":384,"num_params":95000000,"max_tokens":2048,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-95"},
108
- {"model_name":"mock-model-96","embd_dtype":"binary","embd_dim":640,"num_params":96000000,"max_tokens":512,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-96"},
109
- {"model_name":"mock-model-97","embd_dtype":"float32","embd_dim":512,"num_params":97000000,"max_tokens":16384,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-97"},
110
- {"model_name":"mock-model-98","embd_dtype":"int8","embd_dim":1024,"num_params":98000000,"max_tokens":32000,"similarity":"dot","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-98"},
111
- {"model_name":"mock-model-99","embd_dtype":"binary","embd_dim":128,"num_params":99000000,"max_tokens":8191,"similarity":"euclidean","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-99"},
112
- {"model_name":"mock-model-100","embd_dtype":"float32","embd_dim":1536,"num_params":100000000,"max_tokens":4096,"similarity":"cosine","query_instruct":null,"corpus_instruct":null,"reference":"https://example.com/mock-model-100"}
113
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mock_data/results.json DELETED
The diff for this file is too large to render. See raw diff
 
requirements.txt CHANGED
@@ -1,3 +1,7 @@
1
  gradio==4.20.0
2
  uvicorn>=0.14.0
3
  fastapi<0.113.0
 
 
 
 
 
1
  gradio==4.20.0
2
  uvicorn>=0.14.0
3
  fastapi<0.113.0
4
+ jinja2>=3.0.0
5
+ python-multipart>=0.0.5
6
+ aiofiles>=0.8.0
7
+ pandas>=1.3.0
utils/cache_decorator.py CHANGED
@@ -32,6 +32,27 @@ def cache_df_with_custom_key(cache_key: str):
32
  return decorator
33
 
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  if __name__ == '__main__':
36
  a = time.time()
37
  time.sleep(5)
 
32
  return decorator
33
 
34
 
35
+ def cache_dict_with_custom_key(cache_key: str):
36
+ def decorator(func):
37
+ @wraps(func)
38
+ def wrapper(*args, **kwargs):
39
+ if cache_key in CACHE and CACHE[cache_key].get("expiry") - time.time() < TTL:
40
+ return CACHE[cache_key]["data"]
41
+
42
+ result: dict = func(*args, **kwargs)
43
+ if result:
44
+ d = {"expiry": time.time(), "data": result}
45
+ CACHE[cache_key] = d
46
+ return result
47
+
48
+ CACHE[cache_key]["expiry"] += TTL
49
+ return CACHE[cache_key]["data"]
50
+
51
+ return wrapper
52
+
53
+ return decorator
54
+
55
+
56
  if __name__ == '__main__':
57
  a = time.time()
58
  time.sleep(5)
utils/http_utils.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import requests
2
+
3
+
4
+ def get(url: str, params: str = None, verify: bool = False):
5
+ return requests.get(url, params, verify=verify)
6
+
7
+