idolezal commited on
Commit
b299ccd
β€’
1 Parent(s): e46762c

Decrease amount of updating leaderboard source data

Browse files
Files changed (2) hide show
  1. app.py +0 -3
  2. server.py +49 -36
app.py CHANGED
@@ -115,7 +115,6 @@ def get_submission_ids_and_titles():
115
 
116
  def submit_results():
117
  leaderboard_server.save_pre_submit()
118
- leaderboard_server.update_leaderboard()
119
  gr.Info('Submission successful!')
120
 
121
  with leaderboard_server.var_lock.ro:
@@ -234,8 +233,6 @@ def hide_modal():
234
 
235
 
236
  def on_application_load():
237
- leaderboard_server.update_leaderboard()
238
-
239
  with leaderboard_server.var_lock.ro:
240
  leaderboard = leaderboard_server.get_leaderboard(category=leaderboard_server.TASKS_CATEGORY_OVERALL)
241
  submission_ids_and_titles = get_submission_ids_and_titles()
 
115
 
116
  def submit_results():
117
  leaderboard_server.save_pre_submit()
 
118
  gr.Info('Submission successful!')
119
 
120
  with leaderboard_server.var_lock.ro:
 
233
 
234
 
235
  def on_application_load():
 
 
236
  with leaderboard_server.var_lock.ro:
237
  leaderboard = leaderboard_server.get_leaderboard(category=leaderboard_server.TASKS_CATEGORY_OVERALL)
238
  submission_ids_and_titles = get_submission_ids_and_titles()
server.py CHANGED
@@ -149,12 +149,6 @@ class LeaderboardServer:
149
  def __init__(self):
150
  self.SERVER_ADDRESS = REPO
151
  self.REPO_TYPE = "dataset"
152
- self.results_dataset_local_snapshot = snapshot_download(
153
- self.SERVER_ADDRESS,
154
- repo_type=self.REPO_TYPE,
155
- token=HF_TOKEN,
156
- local_dir="./",
157
- )
158
  self.TASKS_METADATA = json.load(open(TASKS_METADATA_PATH))
159
  self.TASKS_CATEGORIES = {self.TASKS_METADATA[task]["category"] for task in self.TASKS_METADATA}
160
  self.TASKS_CATEGORY_OVERALL = "Overall"
@@ -165,34 +159,40 @@ class LeaderboardServer:
165
  self.submission_id_to_file = {} # Map submission ids to file paths
166
  self.submission_id_to_model_title = {}
167
  self.submission_id_to_data = {} # Only data (results and metadata) using by leaderboard
168
- self.fetch_existing_models()
169
- self.tournament_results = self.load_tournament_results()
 
 
170
 
171
  self.pre_submit_lock = pre_submit_lock
172
  self.pre_submit = None
173
 
 
174
  self.results_dataset_integrity_check() # Check integrity of the results dataset after (re)start Hugging Face Space
175
 
176
  def update_leaderboard(self):
177
- self.results_dataset_local_snapshot = snapshot_download(
178
- self.SERVER_ADDRESS,
179
- repo_type=self.REPO_TYPE,
180
- token=HF_TOKEN,
181
- local_dir="./",
182
- )
183
- self.fetch_existing_models()
184
 
 
185
  tournament_results = self.load_tournament_results()
 
186
  with self.var_lock.rw:
187
  self.tournament_results = tournament_results
188
 
189
  def load_tournament_results(self):
190
- metadata_rank_paths = os.path.join(self.results_dataset_local_snapshot, "tournament.json")
191
- if not os.path.exists(metadata_rank_paths):
192
- return {}
193
- with open(metadata_rank_paths) as ranks_file:
194
- results = json.load(ranks_file)
195
- return results
 
196
 
197
  def _prepare_category_to_task_abbr_to_details(self):
198
  tasks_per_category = {}
@@ -224,18 +224,29 @@ class LeaderboardServer:
224
 
225
  def fetch_existing_models(self):
226
  # Models data
227
- for submission_file in glob.glob(os.path.join(self.results_dataset_local_snapshot, "data") + "/*.json"):
228
- data = json.load(open(submission_file))
229
- metadata = data.get('metadata')
230
- if metadata is None:
231
- continue
232
- submission_id = metadata["submission_id"]
233
-
234
- with self.var_lock.rw:
235
- self.submission_ids.add(submission_id)
236
- self.submission_id_to_file[submission_id] = submission_file
237
- self.submission_id_to_model_title[submission_id] = metadata["team_name"] + "/" + metadata["model_name"]
238
- self.submission_id_to_data[submission_id] = {"results": data["results"], "metadata": metadata}
 
 
 
 
 
 
 
 
 
 
 
239
 
240
  def results_dataset_integrity_check(self):
241
  """
@@ -611,6 +622,7 @@ class LeaderboardServer:
611
  self._upload_tournament_results(tournament_results)
612
 
613
  self.pre_submit = None
 
614
 
615
  def _upload_submission(self, submission_id, file):
616
  api.upload_file(
@@ -623,9 +635,10 @@ class LeaderboardServer:
623
 
624
  def _upload_tournament_results(self, tournament_results):
625
  # Temporary save tournament results
626
- tournament_results_path = os.path.join(self.results_dataset_local_snapshot, "tournament.json")
627
- with open(tournament_results_path, "w") as f:
628
- json.dump(tournament_results, f, sort_keys=True, indent=2) # readable JSON
 
629
 
630
  api.upload_file(
631
  path_or_fileobj=tournament_results_path,
 
149
  def __init__(self):
150
  self.SERVER_ADDRESS = REPO
151
  self.REPO_TYPE = "dataset"
 
 
 
 
 
 
152
  self.TASKS_METADATA = json.load(open(TASKS_METADATA_PATH))
153
  self.TASKS_CATEGORIES = {self.TASKS_METADATA[task]["category"] for task in self.TASKS_METADATA}
154
  self.TASKS_CATEGORY_OVERALL = "Overall"
 
159
  self.submission_id_to_file = {} # Map submission ids to file paths
160
  self.submission_id_to_model_title = {}
161
  self.submission_id_to_data = {} # Only data (results and metadata) using by leaderboard
162
+ self.tournament_results = None
163
+
164
+ self.results_dataset_local_snapshot_lock = ReadWriteLock()
165
+ self.results_dataset_local_snapshot = None
166
 
167
  self.pre_submit_lock = pre_submit_lock
168
  self.pre_submit = None
169
 
170
+ self.update_leaderboard()
171
  self.results_dataset_integrity_check() # Check integrity of the results dataset after (re)start Hugging Face Space
172
 
173
  def update_leaderboard(self):
174
+ with self.results_dataset_local_snapshot_lock.rw:
175
+ self.results_dataset_local_snapshot = snapshot_download(
176
+ self.SERVER_ADDRESS,
177
+ repo_type=self.REPO_TYPE,
178
+ token=HF_TOKEN,
179
+ local_dir="./",
180
+ )
181
 
182
+ self.fetch_existing_models()
183
  tournament_results = self.load_tournament_results()
184
+
185
  with self.var_lock.rw:
186
  self.tournament_results = tournament_results
187
 
188
  def load_tournament_results(self):
189
+ with self.results_dataset_local_snapshot_lock.ro:
190
+ metadata_rank_paths = os.path.join(self.results_dataset_local_snapshot, "tournament.json")
191
+ if not os.path.exists(metadata_rank_paths):
192
+ return {}
193
+ with open(metadata_rank_paths) as ranks_file:
194
+ results = json.load(ranks_file)
195
+ return results
196
 
197
  def _prepare_category_to_task_abbr_to_details(self):
198
  tasks_per_category = {}
 
224
 
225
  def fetch_existing_models(self):
226
  # Models data
227
+ submission_ids = set()
228
+ submission_id_to_file = {}
229
+ submission_id_to_model_title = {}
230
+ submission_id_to_data = {}
231
+
232
+ with self.results_dataset_local_snapshot_lock.ro:
233
+ for submission_file in glob.glob(os.path.join(self.results_dataset_local_snapshot, "data") + "/*.json"):
234
+ data = json.load(open(submission_file))
235
+ metadata = data.get('metadata')
236
+ if metadata is None:
237
+ continue
238
+ submission_id = metadata["submission_id"]
239
+
240
+ submission_ids.add(submission_id)
241
+ submission_id_to_file[submission_id] = submission_file
242
+ submission_id_to_model_title[submission_id] = metadata["team_name"] + "/" + metadata["model_name"]
243
+ submission_id_to_data[submission_id] = {"results": data["results"], "metadata": metadata}
244
+
245
+ with self.var_lock.rw:
246
+ self.submission_ids = submission_ids
247
+ self.submission_id_to_file = submission_id_to_file
248
+ self.submission_id_to_model_title = submission_id_to_model_title
249
+ self.submission_id_to_data = submission_id_to_data
250
 
251
  def results_dataset_integrity_check(self):
252
  """
 
622
  self._upload_tournament_results(tournament_results)
623
 
624
  self.pre_submit = None
625
+ self.update_leaderboard()
626
 
627
  def _upload_submission(self, submission_id, file):
628
  api.upload_file(
 
635
 
636
  def _upload_tournament_results(self, tournament_results):
637
  # Temporary save tournament results
638
+ with self.results_dataset_local_snapshot_lock.rw:
639
+ tournament_results_path = os.path.join(self.results_dataset_local_snapshot, "tournament.json")
640
+ with open(tournament_results_path, "w") as f:
641
+ json.dump(tournament_results, f, sort_keys=True, indent=2) # readable JSON
642
 
643
  api.upload_file(
644
  path_or_fileobj=tournament_results_path,