luke0709 commited on
Commit
d3a5002
·
1 Parent(s): 0c6f947
DATASETS.md CHANGED
@@ -87,7 +87,7 @@ hf upload DoolyKim22/Sovereign-Benchmark \
87
  ```
88
 
89
  이미지는 annotation에서 참조하는 상대 경로를 유지하여 함께 업로드합니다.
90
- `static-space/front/data/benchmark.json`은 모델별 점수 파일이며 평가 원본이 아닙니다.
91
  현재 이 작업 폴더에서 다섯 항목의 원본 위치는 확인되지 않았습니다.
92
  원본 경로를 확인한 뒤 배포 폴더를 구성하고 이미지 참조와 데이터 형식을 검증해야 합니다.
93
 
 
87
  ```
88
 
89
  이미지는 annotation에서 참조하는 상대 경로를 유지하여 함께 업로드합니다.
90
+ `static-space/benchmark.json`은 모델별 점수 파일이며 평가 원본이 아닙니다.
91
  현재 이 작업 폴더에서 다섯 항목의 원본 위치는 확인되지 않았습니다.
92
  원본 경로를 확인한 뒤 배포 폴더를 구성하고 이미지 참조와 데이터 형식을 검증해야 합니다.
93
 
front/data/benchmark.json → benchmark.json RENAMED
File without changes
front/config.mjs → config.mjs RENAMED
@@ -1,6 +1,6 @@
1
  // Public browser configuration. Never put Hugging Face tokens here.
2
  export const config = {
3
  // Relative to this file. An absolute, public HTTPS JSON URL also works.
4
- dataUrl: new URL('./data/benchmark.json', import.meta.url).href,
5
  requestTimeoutMs: 15000,
6
  };
 
1
  // Public browser configuration. Never put Hugging Face tokens here.
2
  export const config = {
3
  // Relative to this file. An absolute, public HTTPS JSON URL also works.
4
+ dataUrl: new URL('./benchmark.json', import.meta.url).href,
5
  requestTimeoutMs: 15000,
6
  };
front/data.mjs → data.mjs RENAMED
File without changes
index.html CHANGED
@@ -258,6 +258,6 @@
258
  <div class="rounded-xl bg-slate-900 text-white px-4 py-2 shadow-lg">✅ <span id="toastMsg">Done</span></div>
259
  </div>
260
 
261
- <script type="module" src="./front/leaderboard.mjs"></script>
262
  </body>
263
  </html>
 
258
  <div class="rounded-xl bg-slate-900 text-white px-4 py-2 shadow-lg">✅ <span id="toastMsg">Done</span></div>
259
  </div>
260
 
261
+ <script type="module" src="./leaderboard.mjs"></script>
262
  </body>
263
  </html>
front/leaderboard.mjs → leaderboard.mjs RENAMED
File without changes
tests/test_static_space.py CHANGED
@@ -18,10 +18,18 @@ import unittest
18
  from playwright.sync_api import sync_playwright
19
 
20
  ROOT = Path(__file__).resolve().parents[1]
21
- SNAPSHOT = json.loads((ROOT / 'front/data/benchmark.json').read_text())
22
 
23
 
24
  class QuietHandler(SimpleHTTPRequestHandler):
 
 
 
 
 
 
 
 
25
  def log_message(self, *args):
26
  pass
27
 
@@ -64,7 +72,7 @@ class StaticSpaceTests(unittest.TestCase):
64
  self.page.wait_for_selector('#dataStatus[data-state="' + state + '"]')
65
 
66
  def refresh(self, state='ready', mobile=False):
67
- with self.page.expect_response('**/front/data/benchmark.json'):
68
  self.page.locator('#refreshMobileBtn' if mobile else '#refreshBtn').click()
69
  self.page.wait_for_selector('#dataStatus[data-state="' + state + '"]')
70
 
@@ -117,19 +125,19 @@ class StaticSpaceTests(unittest.TestCase):
117
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '1')
118
 
119
  def test_initial_failure_never_invents_results_and_retry_recovers(self):
120
- self.page.route('**/front/data/benchmark.json', lambda route: route.fulfill(status=503, body='Unavailable'))
121
  self.open('error')
122
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '—')
123
  self.assertEqual(self.page.locator('button[data-fav]').count(), 0)
124
  self.assertTrue(self.page.locator('#exportCsvBtn').is_disabled())
125
- self.page.unroute('**/front/data/benchmark.json')
126
  self.refresh()
127
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), str(len(SNAPSHOT['models'])))
128
 
129
  def test_malformed_refresh_preserves_previous_results(self):
130
  self.open()
131
  before = self.page.locator('#tableBody').inner_text()
132
- self.page.route('**/front/data/benchmark.json', lambda route: route.fulfill(
133
  content_type='application/json', body='{"models":[{"provider":"Broken"}]}'))
134
  self.refresh('error')
135
  self.assertEqual(self.page.locator('#tableBody').inner_text(), before)
@@ -158,17 +166,17 @@ class StaticSpaceTests(unittest.TestCase):
158
  self.page.locator('#themeToggle').click()
159
 
160
  def test_empty_results_and_untrusted_labels(self):
161
- self.page.route('**/front/data/benchmark.json', lambda route: route.fulfill(
162
  content_type='application/json', body='{"models":[],"datasets":[]}'))
163
  self.open()
164
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '0')
165
  self.assertIn('No results have been published', self.page.locator('#tableBody').inner_text())
166
- self.page.unroute('**/front/data/benchmark.json')
167
  label = '<img src=x onerror="window.injected=true">'
168
  payload = {'datasets': [label], 'models': [{
169
  'provider': label, 'name': label, 'repo': label, 'is_multimodal': True,
170
  'scores': [{'dataset_name': label, 'score': 42, 'metric_type': 'raw'}]}]}
171
- self.page.route('**/front/data/benchmark.json', lambda route: route.fulfill(
172
  content_type='application/json', body=json.dumps(payload)))
173
  self.refresh()
174
  self.page.locator('#selectAllBtn').click()
@@ -179,7 +187,7 @@ class StaticSpaceTests(unittest.TestCase):
179
  def test_legacy_array_validation_and_request_timeout(self):
180
  self.open()
181
  result = self.page.evaluate('''async () => {
182
- const {normalizeBenchmark, loadBenchmark} = await import('/front/data.mjs');
183
  const legacy = normalizeBenchmark([{provider: 'P', name: 'M', scores: [
184
  {dataset_name: 'Additional', score: 0}]}]);
185
  let invalid = 0;
 
18
  from playwright.sync_api import sync_playwright
19
 
20
  ROOT = Path(__file__).resolve().parents[1]
21
+ SNAPSHOT = json.loads((ROOT / 'benchmark.json').read_text())
22
 
23
 
24
  class QuietHandler(SimpleHTTPRequestHandler):
25
+ def do_GET(self):
26
+ # Reproduce the live Space failure: /front/ URLs return 404 even
27
+ # though those files exist in the repository.
28
+ if self.path.startswith('/front/'):
29
+ self.send_error(404)
30
+ return
31
+ super().do_GET()
32
+
33
  def log_message(self, *args):
34
  pass
35
 
 
72
  self.page.wait_for_selector('#dataStatus[data-state="' + state + '"]')
73
 
74
  def refresh(self, state='ready', mobile=False):
75
+ with self.page.expect_response('**/benchmark.json'):
76
  self.page.locator('#refreshMobileBtn' if mobile else '#refreshBtn').click()
77
  self.page.wait_for_selector('#dataStatus[data-state="' + state + '"]')
78
 
 
125
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '1')
126
 
127
  def test_initial_failure_never_invents_results_and_retry_recovers(self):
128
+ self.page.route('**/benchmark.json', lambda route: route.fulfill(status=503, body='Unavailable'))
129
  self.open('error')
130
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '—')
131
  self.assertEqual(self.page.locator('button[data-fav]').count(), 0)
132
  self.assertTrue(self.page.locator('#exportCsvBtn').is_disabled())
133
+ self.page.unroute('**/benchmark.json')
134
  self.refresh()
135
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), str(len(SNAPSHOT['models'])))
136
 
137
  def test_malformed_refresh_preserves_previous_results(self):
138
  self.open()
139
  before = self.page.locator('#tableBody').inner_text()
140
+ self.page.route('**/benchmark.json', lambda route: route.fulfill(
141
  content_type='application/json', body='{"models":[{"provider":"Broken"}]}'))
142
  self.refresh('error')
143
  self.assertEqual(self.page.locator('#tableBody').inner_text(), before)
 
166
  self.page.locator('#themeToggle').click()
167
 
168
  def test_empty_results_and_untrusted_labels(self):
169
+ self.page.route('**/benchmark.json', lambda route: route.fulfill(
170
  content_type='application/json', body='{"models":[],"datasets":[]}'))
171
  self.open()
172
  self.assertEqual(self.page.locator('#kpiModels').inner_text(), '0')
173
  self.assertIn('No results have been published', self.page.locator('#tableBody').inner_text())
174
+ self.page.unroute('**/benchmark.json')
175
  label = '<img src=x onerror="window.injected=true">'
176
  payload = {'datasets': [label], 'models': [{
177
  'provider': label, 'name': label, 'repo': label, 'is_multimodal': True,
178
  'scores': [{'dataset_name': label, 'score': 42, 'metric_type': 'raw'}]}]}
179
+ self.page.route('**/benchmark.json', lambda route: route.fulfill(
180
  content_type='application/json', body=json.dumps(payload)))
181
  self.refresh()
182
  self.page.locator('#selectAllBtn').click()
 
187
  def test_legacy_array_validation_and_request_timeout(self):
188
  self.open()
189
  result = self.page.evaluate('''async () => {
190
+ const {normalizeBenchmark, loadBenchmark} = await import('/data.mjs');
191
  const legacy = normalizeBenchmark([{provider: 'P', name: 'M', scores: [
192
  {dataset_name: 'Additional', score: 0}]}]);
193
  let invalid = 0;
upload_space.py CHANGED
@@ -11,10 +11,10 @@ FILES = [
11
  '.gitignore',
12
  'README.md',
13
  'index.html',
14
- 'front/config.mjs',
15
- 'front/data.mjs',
16
- 'front/leaderboard.mjs',
17
- 'front/data/benchmark.json',
18
  'tests/test_static_space.py',
19
  'upload_space.py',
20
  ]
@@ -22,7 +22,7 @@ FILES = [
22
 
23
  def main():
24
  parser = argparse.ArgumentParser(description=__doc__)
25
- parser.add_argument('--repo-id', default='DoolyKim22/Benchmark_Leaderboard')
26
  parser.add_argument('--message', default='Update static benchmark leaderboard')
27
  args = parser.parse_args()
28
 
 
11
  '.gitignore',
12
  'README.md',
13
  'index.html',
14
+ 'config.mjs',
15
+ 'data.mjs',
16
+ 'leaderboard.mjs',
17
+ 'benchmark.json',
18
  'tests/test_static_space.py',
19
  'upload_space.py',
20
  ]
 
22
 
23
  def main():
24
  parser = argparse.ArgumentParser(description=__doc__)
25
+ parser.add_argument('--repo-id', default='KETI-NLP/K-Prism_Benchmark')
26
  parser.add_argument('--message', default='Update static benchmark leaderboard')
27
  args = parser.parse_args()
28