Abhishek Thakur
commited on
Commit
·
53034cd
1
Parent(s):
470460b
support multiple metrics
Browse files- competitions/competitions.py +5 -5
- competitions/leaderboard.py +47 -1
- competitions/submissions.py +27 -0
competitions/competitions.py
CHANGED
|
@@ -125,7 +125,10 @@ with gr.Blocks(css=".tabitem {padding: 25px}") as demo:
|
|
| 125 |
row_count=(50, "dynamic"), overflow_row_behaviour="paginate", visible=False
|
| 126 |
)
|
| 127 |
with gr.TabItem("New Submission", id="new_submission"):
|
| 128 |
-
|
|
|
|
|
|
|
|
|
|
| 129 |
user_token = gr.Textbox(
|
| 130 |
max_lines=1, value="", label="Please enter your Hugging Face token (read only)", type="password"
|
| 131 |
)
|
|
@@ -138,10 +141,7 @@ with gr.Blocks(css=".tabitem {padding: 25px}") as demo:
|
|
| 138 |
outputs=[output_text],
|
| 139 |
)
|
| 140 |
with gr.TabItem("My Submissions", id="my_submissions"):
|
| 141 |
-
|
| 142 |
-
gr.Markdown(SUBMISSION_SELECTION_TEXT.format(competition_info.selection_limit))
|
| 143 |
-
else:
|
| 144 |
-
gr.Markdown(f"{competition_info.submission_desc}")
|
| 145 |
user_token = gr.Textbox(
|
| 146 |
max_lines=1, value="", label="Please enter your Hugging Face token (read only)", type="password"
|
| 147 |
)
|
|
|
|
| 125 |
row_count=(50, "dynamic"), overflow_row_behaviour="paginate", visible=False
|
| 126 |
)
|
| 127 |
with gr.TabItem("New Submission", id="new_submission"):
|
| 128 |
+
if competition_info.submission_desc is None:
|
| 129 |
+
gr.Markdown(SUBMISSION_TEXT.format(competition_info.submission_limit))
|
| 130 |
+
else:
|
| 131 |
+
gr.Markdown(f"{competition_info.submission_desc}")
|
| 132 |
user_token = gr.Textbox(
|
| 133 |
max_lines=1, value="", label="Please enter your Hugging Face token (read only)", type="password"
|
| 134 |
)
|
|
|
|
| 141 |
outputs=[output_text],
|
| 142 |
)
|
| 143 |
with gr.TabItem("My Submissions", id="my_submissions"):
|
| 144 |
+
gr.Markdown(SUBMISSION_SELECTION_TEXT.format(competition_info.selection_limit))
|
|
|
|
|
|
|
|
|
|
| 145 |
user_token = gr.Textbox(
|
| 146 |
max_lines=1, value="", label="Please enter your Hugging Face token (read only)", type="password"
|
| 147 |
)
|
competitions/leaderboard.py
CHANGED
|
@@ -20,6 +20,9 @@ class Leaderboard:
|
|
| 20 |
autotrain_token: str
|
| 21 |
|
| 22 |
def __post_init__(self):
|
|
|
|
|
|
|
|
|
|
| 23 |
self.private_columns = [
|
| 24 |
"rank",
|
| 25 |
"name",
|
|
@@ -34,6 +37,7 @@ class Leaderboard:
|
|
| 34 |
]
|
| 35 |
|
| 36 |
def _process_public_lb(self):
|
|
|
|
| 37 |
start_time = time.time()
|
| 38 |
submissions_folder = snapshot_download(
|
| 39 |
repo_id=self.competition_id,
|
|
@@ -56,6 +60,20 @@ class Leaderboard:
|
|
| 56 |
]
|
| 57 |
if len(submission_info["submissions"]) == 0:
|
| 58 |
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
submission_info["submissions"].sort(
|
| 60 |
key=lambda x: x["public_score"],
|
| 61 |
reverse=True if self.eval_higher_is_better else False,
|
|
@@ -74,11 +92,14 @@ class Leaderboard:
|
|
| 74 |
"submission_date": submission_info["submissions"]["date"],
|
| 75 |
"submission_time": submission_info["submissions"]["time"],
|
| 76 |
}
|
|
|
|
|
|
|
| 77 |
submissions.append(temp_info)
|
| 78 |
logger.info(f"Processed submissions in {time.time() - start_time} seconds")
|
| 79 |
return submissions
|
| 80 |
|
| 81 |
def _process_private_lb(self):
|
|
|
|
| 82 |
start_time = time.time()
|
| 83 |
submissions_folder = snapshot_download(
|
| 84 |
repo_id=self.competition_id,
|
|
@@ -97,6 +118,25 @@ class Leaderboard:
|
|
| 97 |
]
|
| 98 |
if len(submission_info["submissions"]) == 0:
|
| 99 |
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
# count the number of submissions which are selected
|
| 101 |
selected_submissions = 0
|
| 102 |
for sub in submission_info["submissions"]:
|
|
@@ -149,6 +189,8 @@ class Leaderboard:
|
|
| 149 |
"submission_date": submission_info["submissions"]["date"],
|
| 150 |
"submission_time": submission_info["submissions"]["time"],
|
| 151 |
}
|
|
|
|
|
|
|
| 152 |
submissions.append(temp_info)
|
| 153 |
logger.info(f"Processed submissions in {time.time() - start_time} seconds")
|
| 154 |
return submissions
|
|
@@ -207,6 +249,10 @@ class Leaderboard:
|
|
| 207 |
|
| 208 |
# convert datetime column to string
|
| 209 |
df["submission_datetime"] = df["submission_datetime"].dt.strftime("%Y-%m-%d %H:%M:%S")
|
| 210 |
-
|
| 211 |
columns = self.public_columns if not private else self.private_columns
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
return df[columns]
|
|
|
|
| 20 |
autotrain_token: str
|
| 21 |
|
| 22 |
def __post_init__(self):
|
| 23 |
+
self._refresh_columns()
|
| 24 |
+
|
| 25 |
+
def _refresh_columns(self):
|
| 26 |
self.private_columns = [
|
| 27 |
"rank",
|
| 28 |
"name",
|
|
|
|
| 37 |
]
|
| 38 |
|
| 39 |
def _process_public_lb(self):
|
| 40 |
+
self._refresh_columns()
|
| 41 |
start_time = time.time()
|
| 42 |
submissions_folder = snapshot_download(
|
| 43 |
repo_id=self.competition_id,
|
|
|
|
| 60 |
]
|
| 61 |
if len(submission_info["submissions"]) == 0:
|
| 62 |
continue
|
| 63 |
+
other_scores = []
|
| 64 |
+
if isinstance(submission_info["submissions"][0]["public_score"], dict):
|
| 65 |
+
# get keys of the dict
|
| 66 |
+
score_keys = list(submission_info["submissions"][0]["public_score"].keys())
|
| 67 |
+
# get the first key after sorting
|
| 68 |
+
score_key = sorted(score_keys)[0]
|
| 69 |
+
other_scores = [f"public_score_{k}" for k in score_keys if k != score_key]
|
| 70 |
+
self.public_columns.extend(other_scores)
|
| 71 |
+
for _sub in submission_info["submissions"]:
|
| 72 |
+
for skey in score_keys:
|
| 73 |
+
if skey != score_key:
|
| 74 |
+
_sub[f"public_score_{skey}"] = _sub["public_score"][skey]
|
| 75 |
+
_sub["public_score"] = _sub["public_score"][score_key]
|
| 76 |
+
|
| 77 |
submission_info["submissions"].sort(
|
| 78 |
key=lambda x: x["public_score"],
|
| 79 |
reverse=True if self.eval_higher_is_better else False,
|
|
|
|
| 92 |
"submission_date": submission_info["submissions"]["date"],
|
| 93 |
"submission_time": submission_info["submissions"]["time"],
|
| 94 |
}
|
| 95 |
+
for score in other_scores:
|
| 96 |
+
temp_info[score] = submission_info["submissions"][score]
|
| 97 |
submissions.append(temp_info)
|
| 98 |
logger.info(f"Processed submissions in {time.time() - start_time} seconds")
|
| 99 |
return submissions
|
| 100 |
|
| 101 |
def _process_private_lb(self):
|
| 102 |
+
self._refresh_columns()
|
| 103 |
start_time = time.time()
|
| 104 |
submissions_folder = snapshot_download(
|
| 105 |
repo_id=self.competition_id,
|
|
|
|
| 118 |
]
|
| 119 |
if len(submission_info["submissions"]) == 0:
|
| 120 |
continue
|
| 121 |
+
other_scores = []
|
| 122 |
+
if isinstance(submission_info["submissions"][0]["public_score"], dict):
|
| 123 |
+
# get keys of the dict
|
| 124 |
+
score_keys = list(submission_info["submissions"][0]["public_score"].keys())
|
| 125 |
+
# get the first key after sorting
|
| 126 |
+
score_key = sorted(score_keys)[0]
|
| 127 |
+
other_scores = [f"public_score_{k}" for k in score_keys if k != score_key]
|
| 128 |
+
self.public_columns.extend(other_scores)
|
| 129 |
+
for _sub in submission_info["submissions"]:
|
| 130 |
+
for skey in score_keys:
|
| 131 |
+
if skey != score_key:
|
| 132 |
+
_sub[f"public_score_{skey}"] = _sub["public_score"][skey]
|
| 133 |
+
_sub["public_score"] = _sub["public_score"][score_key]
|
| 134 |
+
|
| 135 |
+
for _sub in submission_info["submissions"]:
|
| 136 |
+
for skey in score_keys:
|
| 137 |
+
if skey != score_key:
|
| 138 |
+
_sub[f"private_score_{skey}"] = _sub["private_score"][skey]
|
| 139 |
+
_sub["private_score"] = _sub["private_score"][score_key]
|
| 140 |
# count the number of submissions which are selected
|
| 141 |
selected_submissions = 0
|
| 142 |
for sub in submission_info["submissions"]:
|
|
|
|
| 189 |
"submission_date": submission_info["submissions"]["date"],
|
| 190 |
"submission_time": submission_info["submissions"]["time"],
|
| 191 |
}
|
| 192 |
+
for score in other_scores:
|
| 193 |
+
temp_info[score] = submission_info["submissions"][score]
|
| 194 |
submissions.append(temp_info)
|
| 195 |
logger.info(f"Processed submissions in {time.time() - start_time} seconds")
|
| 196 |
return submissions
|
|
|
|
| 249 |
|
| 250 |
# convert datetime column to string
|
| 251 |
df["submission_datetime"] = df["submission_datetime"].dt.strftime("%Y-%m-%d %H:%M:%S")
|
| 252 |
+
logger.info(df)
|
| 253 |
columns = self.public_columns if not private else self.private_columns
|
| 254 |
+
logger.info(columns)
|
| 255 |
+
# send submission_datetime to the end
|
| 256 |
+
columns.remove("submission_datetime")
|
| 257 |
+
columns.append("submission_datetime")
|
| 258 |
return df[columns]
|
competitions/submissions.py
CHANGED
|
@@ -237,11 +237,38 @@ class Submissions:
|
|
| 237 |
raise NoSubmissionError("No submissions found ")
|
| 238 |
|
| 239 |
submissions_df = pd.DataFrame(user_submissions)
|
|
|
|
| 240 |
if not private:
|
| 241 |
submissions_df = submissions_df.drop(columns=["private_score"])
|
| 242 |
submissions_df = submissions_df[self.public_sub_columns]
|
| 243 |
else:
|
| 244 |
submissions_df = submissions_df[self.private_sub_columns]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 245 |
return submissions_df
|
| 246 |
|
| 247 |
def _get_user_info(self, user_token):
|
|
|
|
| 237 |
raise NoSubmissionError("No submissions found ")
|
| 238 |
|
| 239 |
submissions_df = pd.DataFrame(user_submissions)
|
| 240 |
+
logger.info(submissions_df)
|
| 241 |
if not private:
|
| 242 |
submissions_df = submissions_df.drop(columns=["private_score"])
|
| 243 |
submissions_df = submissions_df[self.public_sub_columns]
|
| 244 |
else:
|
| 245 |
submissions_df = submissions_df[self.private_sub_columns]
|
| 246 |
+
|
| 247 |
+
if not private:
|
| 248 |
+
first_submission = submissions_df.iloc[0]
|
| 249 |
+
if isinstance(first_submission["public_score"], dict):
|
| 250 |
+
# split the public score dict into columns
|
| 251 |
+
public_score_df = pd.DataFrame.from_dict(first_submission["public_score"], orient="index")
|
| 252 |
+
public_score_df = public_score_df.transpose()
|
| 253 |
+
public_score_df.columns = [f"public_score_{col}" for col in public_score_df.columns]
|
| 254 |
+
submissions_df = submissions_df.drop(columns=["public_score"])
|
| 255 |
+
submissions_df = pd.concat([submissions_df, public_score_df], axis=1)
|
| 256 |
+
else:
|
| 257 |
+
first_submission = submissions_df.iloc[0]
|
| 258 |
+
if isinstance(first_submission["private_score"], dict):
|
| 259 |
+
private_score_df = pd.DataFrame.from_dict(first_submission["private_score"], orient="index")
|
| 260 |
+
private_score_df = private_score_df.transpose()
|
| 261 |
+
private_score_df.columns = [f"private_score_{col}" for col in private_score_df.columns]
|
| 262 |
+
submissions_df = submissions_df.drop(columns=["private_score"])
|
| 263 |
+
submissions_df = pd.concat([submissions_df, private_score_df], axis=1)
|
| 264 |
+
|
| 265 |
+
if isinstance(first_submission["public_score"], dict):
|
| 266 |
+
public_score_df = pd.DataFrame.from_dict(first_submission["public_score"], orient="index")
|
| 267 |
+
public_score_df = public_score_df.transpose()
|
| 268 |
+
public_score_df.columns = [f"public_score_{col}" for col in public_score_df.columns]
|
| 269 |
+
submissions_df = submissions_df.drop(columns=["public_score"])
|
| 270 |
+
submissions_df = pd.concat([submissions_df, public_score_df], axis=1)
|
| 271 |
+
|
| 272 |
return submissions_df
|
| 273 |
|
| 274 |
def _get_user_info(self, user_token):
|