Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
alozowski
commited on
Commit
·
d42f637
1
Parent(s):
efed7dc
Add logic to upvote a user model
Browse files- src/display/utils.py +12 -1
- src/submission/submit.py +23 -6
src/display/utils.py
CHANGED
|
@@ -1,14 +1,25 @@
|
|
| 1 |
from dataclasses import dataclass, make_dataclass
|
| 2 |
from enum import Enum
|
|
|
|
| 3 |
import json
|
| 4 |
import logging
|
| 5 |
from datetime import datetime
|
| 6 |
import pandas as pd
|
| 7 |
|
| 8 |
-
|
| 9 |
# Configure logging
|
| 10 |
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
# Convert ISO 8601 dates to datetime objects for comparison
|
| 13 |
def parse_iso8601_datetime(date_str):
|
| 14 |
if date_str.endswith('Z'):
|
|
|
|
| 1 |
from dataclasses import dataclass, make_dataclass
|
| 2 |
from enum import Enum
|
| 3 |
+
import requests
|
| 4 |
import json
|
| 5 |
import logging
|
| 6 |
from datetime import datetime
|
| 7 |
import pandas as pd
|
| 8 |
|
|
|
|
| 9 |
# Configure logging
|
| 10 |
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
| 11 |
|
| 12 |
+
|
| 13 |
+
def is_user_in_org(username: str, org: str) -> bool:
|
| 14 |
+
url = f"https://huggingface.co/api/users/{username}/overview"
|
| 15 |
+
response = requests.get(url)
|
| 16 |
+
if response.status_code == 200:
|
| 17 |
+
user_info = response.json()
|
| 18 |
+
return any(org_info['name'] == org for org_info in user_info.get('orgs', []))
|
| 19 |
+
else:
|
| 20 |
+
print(f"Failed to fetch user info for {username}. Status code: {response.status_code}")
|
| 21 |
+
return False
|
| 22 |
+
|
| 23 |
# Convert ISO 8601 dates to datetime objects for comparison
|
| 24 |
def parse_iso8601_datetime(date_str):
|
| 25 |
if date_str.endswith('Z'):
|
src/submission/submit.py
CHANGED
|
@@ -14,6 +14,8 @@ from src.envs import (
|
|
| 14 |
QUEUE_REPO,
|
| 15 |
RATE_LIMIT_PERIOD,
|
| 16 |
RATE_LIMIT_QUOTA,
|
|
|
|
|
|
|
| 17 |
)
|
| 18 |
from src.leaderboard.filter_models import DO_NOT_SUBMIT_MODELS
|
| 19 |
from src.submission.check_validity import (
|
|
@@ -24,9 +26,14 @@ from src.submission.check_validity import (
|
|
| 24 |
user_submission_permission,
|
| 25 |
)
|
| 26 |
|
|
|
|
|
|
|
|
|
|
| 27 |
REQUESTED_MODELS = None
|
| 28 |
USERS_TO_SUBMISSION_DATES = None
|
| 29 |
|
|
|
|
|
|
|
| 30 |
@dataclass
|
| 31 |
class ModelSizeChecker:
|
| 32 |
model: str
|
|
@@ -62,7 +69,7 @@ def add_new_eval(
|
|
| 62 |
use_chat_template: bool,
|
| 63 |
profile: gr.OAuthProfile | None
|
| 64 |
):
|
| 65 |
-
# Login
|
| 66 |
if profile is None:
|
| 67 |
return styled_error("Hub Login Required")
|
| 68 |
|
|
@@ -87,10 +94,6 @@ def add_new_eval(
|
|
| 87 |
if model_type is None or model_type == "":
|
| 88 |
return styled_error("Please select a model type.")
|
| 89 |
|
| 90 |
-
# Is user submitting own model?
|
| 91 |
-
# Check that username in the org.
|
| 92 |
-
# if org_or_user != profile.username:
|
| 93 |
-
|
| 94 |
# Is the user rate limited?
|
| 95 |
if org_or_user != "":
|
| 96 |
user_can_submit, error_msg = user_submission_permission(
|
|
@@ -196,6 +199,20 @@ def add_new_eval(
|
|
| 196 |
# Remove the local file
|
| 197 |
os.remove(out_path)
|
| 198 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
return styled_message(
|
| 200 |
"Your request has been submitted to the evaluation queue!\nPlease wait for up to an hour for the model to show in the PENDING list."
|
| 201 |
-
)
|
|
|
|
| 14 |
QUEUE_REPO,
|
| 15 |
RATE_LIMIT_PERIOD,
|
| 16 |
RATE_LIMIT_QUOTA,
|
| 17 |
+
VOTES_REPO,
|
| 18 |
+
VOTES_PATH,
|
| 19 |
)
|
| 20 |
from src.leaderboard.filter_models import DO_NOT_SUBMIT_MODELS
|
| 21 |
from src.submission.check_validity import (
|
|
|
|
| 26 |
user_submission_permission,
|
| 27 |
)
|
| 28 |
|
| 29 |
+
from src.voting.vote_system import VoteManager
|
| 30 |
+
from src.display.utils import is_user_in_org
|
| 31 |
+
|
| 32 |
REQUESTED_MODELS = None
|
| 33 |
USERS_TO_SUBMISSION_DATES = None
|
| 34 |
|
| 35 |
+
vote_manager = VoteManager(VOTES_PATH, EVAL_REQUESTS_PATH, VOTES_REPO)
|
| 36 |
+
|
| 37 |
@dataclass
|
| 38 |
class ModelSizeChecker:
|
| 39 |
model: str
|
|
|
|
| 69 |
use_chat_template: bool,
|
| 70 |
profile: gr.OAuthProfile | None
|
| 71 |
):
|
| 72 |
+
# Login required
|
| 73 |
if profile is None:
|
| 74 |
return styled_error("Hub Login Required")
|
| 75 |
|
|
|
|
| 94 |
if model_type is None or model_type == "":
|
| 95 |
return styled_error("Please select a model type.")
|
| 96 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
# Is the user rate limited?
|
| 98 |
if org_or_user != "":
|
| 99 |
user_can_submit, error_msg = user_submission_permission(
|
|
|
|
| 199 |
# Remove the local file
|
| 200 |
os.remove(out_path)
|
| 201 |
|
| 202 |
+
|
| 203 |
+
# Check if the user is submitting their own model or a model from their organization
|
| 204 |
+
if org_or_user == username or is_user_in_org(username, org_or_user):
|
| 205 |
+
# Automatically add a vote for the user's own model or their organization's model
|
| 206 |
+
vote_manager.add_vote(
|
| 207 |
+
selected_model=model,
|
| 208 |
+
pending_models_df=None,
|
| 209 |
+
profile=profile
|
| 210 |
+
)
|
| 211 |
+
print(f"Automatically added a vote for {model} submitted by {username}")
|
| 212 |
+
|
| 213 |
+
# Upload votes to the repository
|
| 214 |
+
vote_manager.upload_votes()
|
| 215 |
+
|
| 216 |
return styled_message(
|
| 217 |
"Your request has been submitted to the evaluation queue!\nPlease wait for up to an hour for the model to show in the PENDING list."
|
| 218 |
+
)
|