Spaces:
Running
Running
Now only executes the duels that are missing
Browse filesThe `LeaderboardServer.start_tournament()` method only executes the duels that are missing
The `LeaderboardServer.results_dataset_integrity_check()` method only removes extra duels or performs missing duels as part of inconsistency resolution
server.py
CHANGED
|
@@ -406,6 +406,7 @@ class LeaderboardServer:
|
|
| 406 |
-- pokud ne, znemožní potvrzení nových submitů a udělá zbývající zápasy
|
| 407 |
-- kontroluje soubory v adresáři "/data" a soubor "tournament.json"
|
| 408 |
- v souboru "tournament.json" není `submission_id`, které by nemělo soubor v adresáři "/data"
|
|
|
|
| 409 |
"""
|
| 410 |
|
| 411 |
while True:
|
|
@@ -447,19 +448,34 @@ class LeaderboardServer:
|
|
| 447 |
gr.Info('Running tournament...', duration=15)
|
| 448 |
|
| 449 |
with self.var_lock.rw:
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 453 |
|
| 454 |
-
for i, submission_id in enumerate(
|
| 455 |
-
self.tournament_results_integrity_solving_progress = i / len(
|
| 456 |
|
| 457 |
with self.var_lock.ro:
|
| 458 |
file = self.submission_id_to_file[submission_id]
|
| 459 |
tournament_results = self.start_tournament(submission_id, file)
|
| 460 |
with self.var_lock.rw:
|
| 461 |
self.tournament_results = tournament_results
|
| 462 |
-
self.submission_ids.add(submission_id)
|
| 463 |
|
| 464 |
self.tournament_results_integrity_solving_progress = 1
|
| 465 |
|
|
@@ -749,12 +765,14 @@ class LeaderboardServer:
|
|
| 749 |
def start_tournament(self, new_submission_id, new_model_file):
|
| 750 |
with self.var_lock.ro:
|
| 751 |
new_tournament = copy.deepcopy(self.tournament_results)
|
| 752 |
-
|
| 753 |
-
|
| 754 |
-
|
| 755 |
-
|
|
|
|
| 756 |
|
| 757 |
-
|
|
|
|
| 758 |
num_of_competitors = len(rest_of_competitors)
|
| 759 |
|
| 760 |
result_url = {}
|
|
|
|
| 406 |
-- pokud ne, znemožní potvrzení nových submitů a udělá zbývající zápasy
|
| 407 |
-- kontroluje soubory v adresáři "/data" a soubor "tournament.json"
|
| 408 |
- v souboru "tournament.json" není `submission_id`, které by nemělo soubor v adresáři "/data"
|
| 409 |
+
- negeneruje soubor "tournament.json" celý znovu, ale pouze dopočítá co chybí
|
| 410 |
"""
|
| 411 |
|
| 412 |
while True:
|
|
|
|
| 448 |
gr.Info('Running tournament...', duration=15)
|
| 449 |
|
| 450 |
with self.var_lock.rw:
|
| 451 |
+
submission_ids_for_renew_tournament = set()
|
| 452 |
+
|
| 453 |
+
submission_ids_not_known = self.tournament_results.keys() - self.submission_ids
|
| 454 |
+
submission_ids_not_in_tournament = self.submission_ids - self.tournament_results.keys()
|
| 455 |
+
|
| 456 |
+
submission_ids_for_renew_tournament |= submission_ids_not_in_tournament
|
| 457 |
+
|
| 458 |
+
for submission_id in submission_ids_not_known:
|
| 459 |
+
self.tournament_results.pop(submission_id)
|
| 460 |
+
|
| 461 |
+
for submission_id in self.submission_ids:
|
| 462 |
+
competitor_ids_not_known = self.tournament_results[submission_id].keys() - self.submission_ids
|
| 463 |
+
competitor_ids_not_in_tournament = self.submission_ids - self.tournament_results[submission_id].keys()
|
| 464 |
+
|
| 465 |
+
for competitor_id in competitor_ids_not_known:
|
| 466 |
+
self.tournament_results[submission_id].pop(competitor_id)
|
| 467 |
+
|
| 468 |
+
if competitor_ids_not_in_tournament:
|
| 469 |
+
submission_ids_for_renew_tournament.add(submission_id)
|
| 470 |
|
| 471 |
+
for i, submission_id in enumerate(submission_ids_for_renew_tournament):
|
| 472 |
+
self.tournament_results_integrity_solving_progress = i / len(submission_ids_for_renew_tournament)
|
| 473 |
|
| 474 |
with self.var_lock.ro:
|
| 475 |
file = self.submission_id_to_file[submission_id]
|
| 476 |
tournament_results = self.start_tournament(submission_id, file)
|
| 477 |
with self.var_lock.rw:
|
| 478 |
self.tournament_results = tournament_results
|
|
|
|
| 479 |
|
| 480 |
self.tournament_results_integrity_solving_progress = 1
|
| 481 |
|
|
|
|
| 765 |
def start_tournament(self, new_submission_id, new_model_file):
|
| 766 |
with self.var_lock.ro:
|
| 767 |
new_tournament = copy.deepcopy(self.tournament_results)
|
| 768 |
+
if new_submission_id not in new_tournament:
|
| 769 |
+
new_tournament[new_submission_id] = {}
|
| 770 |
+
new_tournament[new_submission_id][new_submission_id] = {
|
| 771 |
+
task: False for task in self.TASKS_METADATA.keys()
|
| 772 |
+
}
|
| 773 |
|
| 774 |
+
competitor_ids_in_tournament = new_tournament[new_submission_id].keys()
|
| 775 |
+
rest_of_competitors = list(self.submission_ids - {new_submission_id} - competitor_ids_in_tournament) # without self and without the opponents with which it has already contended
|
| 776 |
num_of_competitors = len(rest_of_competitors)
|
| 777 |
|
| 778 |
result_url = {}
|