Abhishek Thakur
commited on
Commit
·
1873be0
1
Parent(s):
815b0dc
more refactor
Browse files- competitions/competitions.py +51 -42
- competitions/leaderboard.py +2 -1
- competitions/submissions.py +5 -5
competitions/competitions.py
CHANGED
|
@@ -1,48 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
-
from . import competition_info
|
| 4 |
from .leaderboard import Leaderboard
|
| 5 |
from .submissions import Submissions
|
|
|
|
| 6 |
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
# gr.Markdown("## Dataset")
|
| 15 |
-
# gr.Markdown(f"{config.competition_info.dataset_description}")
|
| 16 |
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
# current_date_time = datetime.now()
|
| 26 |
-
# if current_date_time >= config.competition_info.end_date:
|
| 27 |
-
# lb = utils.fetch_leaderboard(private=True)
|
| 28 |
-
# gr.Markdown(lb)
|
| 29 |
-
# else:
|
| 30 |
-
# gr.Markdown("Private Leaderboard will be available after the competition ends")
|
| 31 |
-
# with gr.Tab("New Submission"):
|
| 32 |
-
# gr.Markdown(SUBMISSION_TEXT)
|
| 33 |
-
# user_token = gr.Textbox(max_lines=1, value="hf_XXX", label="Please enter your Hugging Face token")
|
| 34 |
-
# uploaded_file = gr.File()
|
| 35 |
-
# output_text = gr.Markdown(visible=True, show_label=False)
|
| 36 |
-
# new_sub_button = gr.Button("Upload Submission")
|
| 37 |
-
# new_sub_button.click(fn=new_submission, inputs=[user_token, uploaded_file], outputs=[output_text])
|
| 38 |
|
| 39 |
-
# with gr.Tab("My Submissions"):
|
| 40 |
-
# gr.Markdown(SUBMISSION_LIMIT_TEXT)
|
| 41 |
-
# user_token = gr.Textbox(max_lines=1, value="hf_XXX", label="Please enter your Hugging Face token")
|
| 42 |
-
# output_text = gr.Markdown(visible=True, show_label=False)
|
| 43 |
-
# output_df = gr.Dataframe(visible=False)
|
| 44 |
-
# my_subs_button = gr.Button("Fetch Submissions")
|
| 45 |
-
# my_subs_button.click(fn=my_submissions, inputs=[user_token], outputs=[output_text, output_df])
|
| 46 |
|
| 47 |
with gr.Blocks() as demo:
|
| 48 |
with gr.Tabs() as tab_container:
|
|
@@ -51,11 +33,38 @@ with gr.Blocks() as demo:
|
|
| 51 |
gr.Markdown(f"{competition_info.competition_description}")
|
| 52 |
gr.Markdown("## Dataset")
|
| 53 |
gr.Markdown(f"{competition_info.dataset_description}")
|
| 54 |
-
with gr.TabItem("Public Leaderboard", id="public_leaderboard"):
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
with gr.TabItem("Private Leaderboard", id="private_leaderboard"):
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
with gr.TabItem("New Submission", id="new_submission"):
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
with gr.TabItem("My Submissions", id="my_submissions"):
|
| 61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from datetime import datetime
|
| 2 |
+
from functools import partial
|
| 3 |
+
|
| 4 |
import gradio as gr
|
| 5 |
|
| 6 |
+
from . import AUTOTRAIN_BACKEND_API, AUTOTRAIN_TOKEN, AUTOTRAIN_USERNAME, COMPETITION_ID, competition_info
|
| 7 |
from .leaderboard import Leaderboard
|
| 8 |
from .submissions import Submissions
|
| 9 |
+
from .text import SUBMISSION_LIMIT_TEXT, SUBMISSION_TEXT
|
| 10 |
|
| 11 |
|
| 12 |
+
leaderboard = Leaderboard(
|
| 13 |
+
end_date=competition_info.end_date,
|
| 14 |
+
eval_higher_is_better=competition_info.eval_higher_is_better,
|
| 15 |
+
competition_id=COMPETITION_ID,
|
| 16 |
+
autotrain_token=AUTOTRAIN_TOKEN,
|
| 17 |
+
)
|
|
|
|
|
|
|
| 18 |
|
| 19 |
+
submissions = Submissions(
|
| 20 |
+
competition_id=competition_info.competition_id,
|
| 21 |
+
submission_limit=competition_info.submission_limit,
|
| 22 |
+
end_date=competition_info.end_date,
|
| 23 |
+
autotrain_username=AUTOTRAIN_USERNAME,
|
| 24 |
+
autotrain_token=AUTOTRAIN_TOKEN,
|
| 25 |
+
autotrain_backend_api=AUTOTRAIN_BACKEND_API,
|
| 26 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
with gr.Blocks() as demo:
|
| 30 |
with gr.Tabs() as tab_container:
|
|
|
|
| 33 |
gr.Markdown(f"{competition_info.competition_description}")
|
| 34 |
gr.Markdown("## Dataset")
|
| 35 |
gr.Markdown(f"{competition_info.dataset_description}")
|
| 36 |
+
with gr.TabItem("Public Leaderboard", id="public_leaderboard") as public_leaderboard:
|
| 37 |
+
fetch_lb = gr.Button("Fetch Leaderboard")
|
| 38 |
+
output_markdown = gr.DataFrame()
|
| 39 |
+
fetch_lb_partial = partial(leaderboard.fetch, private=False)
|
| 40 |
+
fetch_lb.click(fn=fetch_lb_partial, outputs=[output_markdown])
|
| 41 |
with gr.TabItem("Private Leaderboard", id="private_leaderboard"):
|
| 42 |
+
current_date_time = datetime.now()
|
| 43 |
+
if current_date_time >= competition_info.end_date:
|
| 44 |
+
output_markdown = gr.DataFrame()
|
| 45 |
+
fetch_lb_partial = partial(leaderboard.fetch, private=True)
|
| 46 |
+
fetch_lb_partial(outputs=[output_markdown])
|
| 47 |
+
else:
|
| 48 |
+
gr.Markdown("Private Leaderboard will be available after the competition ends")
|
| 49 |
with gr.TabItem("New Submission", id="new_submission"):
|
| 50 |
+
gr.Markdown(SUBMISSION_TEXT)
|
| 51 |
+
user_token = gr.Textbox(max_lines=1, value="hf_XXX", label="Please enter your Hugging Face token")
|
| 52 |
+
uploaded_file = gr.File()
|
| 53 |
+
output_text = gr.Markdown(visible=True, show_label=False)
|
| 54 |
+
new_sub_button = gr.Button("Upload Submission")
|
| 55 |
+
new_sub_button.click(
|
| 56 |
+
fn=submissions.new_submission,
|
| 57 |
+
inputs=[user_token, uploaded_file],
|
| 58 |
+
outputs=[output_text],
|
| 59 |
+
)
|
| 60 |
with gr.TabItem("My Submissions", id="my_submissions"):
|
| 61 |
+
gr.Markdown(SUBMISSION_LIMIT_TEXT)
|
| 62 |
+
user_token = gr.Textbox(max_lines=1, value="hf_XXX", label="Please enter your Hugging Face token")
|
| 63 |
+
output_text = gr.Markdown(visible=True, show_label=False)
|
| 64 |
+
output_df = gr.DataFrame(visible=False)
|
| 65 |
+
my_subs_button = gr.Button("Fetch Submissions")
|
| 66 |
+
my_subs_button.click(
|
| 67 |
+
fn=submissions.my_submissions,
|
| 68 |
+
inputs=[user_token],
|
| 69 |
+
outputs=[output_text, output_df],
|
| 70 |
+
)
|
competitions/leaderboard.py
CHANGED
|
@@ -2,6 +2,7 @@ import glob
|
|
| 2 |
import json
|
| 3 |
import os
|
| 4 |
from dataclasses import dataclass
|
|
|
|
| 5 |
|
| 6 |
import pandas as pd
|
| 7 |
from huggingface_hub import snapshot_download
|
|
@@ -9,7 +10,7 @@ from huggingface_hub import snapshot_download
|
|
| 9 |
|
| 10 |
@dataclass
|
| 11 |
class Leaderboard:
|
| 12 |
-
end_date:
|
| 13 |
eval_higher_is_better: bool
|
| 14 |
competition_id: str
|
| 15 |
autotrain_token: str
|
|
|
|
| 2 |
import json
|
| 3 |
import os
|
| 4 |
from dataclasses import dataclass
|
| 5 |
+
from datetime import datetime
|
| 6 |
|
| 7 |
import pandas as pd
|
| 8 |
from huggingface_hub import snapshot_download
|
|
|
|
| 10 |
|
| 11 |
@dataclass
|
| 12 |
class Leaderboard:
|
| 13 |
+
end_date: datetime
|
| 14 |
eval_higher_is_better: bool
|
| 15 |
competition_id: str
|
| 16 |
autotrain_token: str
|
competitions/submissions.py
CHANGED
|
@@ -162,7 +162,7 @@ class Submissions:
|
|
| 162 |
try:
|
| 163 |
user_submissions = self._download_user_subs(user_id)
|
| 164 |
except EntryNotFoundError:
|
| 165 |
-
|
| 166 |
|
| 167 |
submissions_df = pd.DataFrame(user_submissions)
|
| 168 |
if not private:
|
|
@@ -175,10 +175,10 @@ class Submissions:
|
|
| 175 |
def _get_user_info(self, user_token):
|
| 176 |
user_info = user_authentication(token=user_token)
|
| 177 |
if "error" in user_info:
|
| 178 |
-
|
| 179 |
|
| 180 |
if user_info["emailVerified"] is False:
|
| 181 |
-
|
| 182 |
return user_info
|
| 183 |
|
| 184 |
def _create_autotrain_project(self, project_id, submission_dataset, model, dataset):
|
|
@@ -273,13 +273,13 @@ class Submissions:
|
|
| 273 |
|
| 274 |
# check if user can submit to the competition
|
| 275 |
if self._check_user_submission_limit(user_info) is False:
|
| 276 |
-
|
| 277 |
|
| 278 |
with open(uploaded_file.name, "rb") as f:
|
| 279 |
bytes_data = f.read()
|
| 280 |
# verify file is valid
|
| 281 |
if not self._verify_submission(bytes_data):
|
| 282 |
-
|
| 283 |
else:
|
| 284 |
user_id = user_info["id"]
|
| 285 |
submission_id = str(uuid.uuid4())
|
|
|
|
| 162 |
try:
|
| 163 |
user_submissions = self._download_user_subs(user_id)
|
| 164 |
except EntryNotFoundError:
|
| 165 |
+
raise NoSubmissionError("No submissions found ")
|
| 166 |
|
| 167 |
submissions_df = pd.DataFrame(user_submissions)
|
| 168 |
if not private:
|
|
|
|
| 175 |
def _get_user_info(self, user_token):
|
| 176 |
user_info = user_authentication(token=user_token)
|
| 177 |
if "error" in user_info:
|
| 178 |
+
raise AuthenticationError("Invalid token")
|
| 179 |
|
| 180 |
if user_info["emailVerified"] is False:
|
| 181 |
+
raise AuthenticationError("Please verify your email on Hugging Face Hub")
|
| 182 |
return user_info
|
| 183 |
|
| 184 |
def _create_autotrain_project(self, project_id, submission_dataset, model, dataset):
|
|
|
|
| 273 |
|
| 274 |
# check if user can submit to the competition
|
| 275 |
if self._check_user_submission_limit(user_info) is False:
|
| 276 |
+
raise SubmissionLimitError("Submission limit reached")
|
| 277 |
|
| 278 |
with open(uploaded_file.name, "rb") as f:
|
| 279 |
bytes_data = f.read()
|
| 280 |
# verify file is valid
|
| 281 |
if not self._verify_submission(bytes_data):
|
| 282 |
+
raise SubmissionError("Invalid submission file")
|
| 283 |
else:
|
| 284 |
user_id = user_info["id"]
|
| 285 |
submission_id = str(uuid.uuid4())
|