File size: 6,744 Bytes
d946cfe a33ace4 63d7feb 1b86c14 a52b9c1 0a5eed6 63d7feb d946cfe bebead5 0a5eed6 a788ea0 d946cfe 7786c4d a52b9c1 3b02b87 f578a9f d946cfe f578a9f d946cfe f578a9f d946cfe f578a9f a33ace4 d946cfe a33ace4 a52b9c1 d946cfe f578a9f d946cfe f578a9f a52b9c1 d946cfe a52b9c1 d946cfe a52b9c1 a33ace4 a788ea0 bebead5 a52b9c1 bebead5 a52b9c1 bebead5 a33ace4 d946cfe bebead5 a33ace4 d946cfe a33ace4 bebead5 a33ace4 d946cfe a33ace4 0a5eed6 a52b9c1 0a5eed6 a33ace4 f578a9f a33ace4 f578a9f a33ace4 f578a9f 0a5eed6 a33ace4 f578a9f a33ace4 0a5eed6 a52b9c1 0a5eed6 a33ace4 7786c4d c146544 7786c4d c146544 a52b9c1 0a5eed6 a52b9c1 7786c4d d946cfe f578a9f d946cfe f578a9f d946cfe a52b9c1 a33ace4 1b86c14 0a5eed6 1b86c14 1c24a40 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
import os
import gradio as gr
import pandas as pd
# from gradio_huggingfacehub_search import HuggingfaceHubSearch
import requests
from urllib.parse import quote
leaderboard_url = os.getenv("LEADERBOARD_URL", "https://leaderboard.nexa4ai.com")
get_ranking_url = f"{leaderboard_url}/model/get-ranking-by-category"
get_models_url = f"{leaderboard_url}/model/get-models-by-category"
vote_url = f"{leaderboard_url}/model/vote"
submit_models_url = f"{leaderboard_url}/model/submit-models"
def make_clickable_model(model_id):
model_name_show = ' '.join(model_id.split('/')[1:])
link = "https://huggingface.co/" + model_id
return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{model_name_show}</a>'
def update_table(category):
retries = 3
while retries > 0:
try:
encoded_category = quote(category)
url_with_params = f"{get_ranking_url}?category={encoded_category}"
response = requests.get(url_with_params)
if response.status_code == 200:
ranking_data = response.json()["ranking"]
api_model_data = {
"Model": [make_clickable_model(item["model_id"]) for item in ranking_data],
"Votes": [item["votes"] for item in ranking_data],
"Categories": [item["categories"] for item in ranking_data] if category == "all" else [category] * len(ranking_data)
}
api_df = pd.DataFrame(api_model_data)
return api_df
else:
print(f"Failed to submit request: {response.text}")
retries -= 1
except requests.exceptions.RequestException as e:
print(f"Error occurred while making request: {e}")
retries -= 1
return pd.DataFrame()
def get_user(profile: gr.OAuthProfile | None) -> str:
if profile is None:
return ""
return profile.username
def get_vote_models(category):
if not category:
return []
url_with_params = f"{get_models_url}?category={category}"
response = requests.get(url_with_params)
if response.status_code == 200:
models_data = response.json()
return gr.CheckboxGroup(choices=models_data, label="Choose your options", interactive=True)
else:
print(f"Failed to get models: {response.text}")
return []
def submit_vote(username, category, models):
if not category or not models:
return "All fields are required!"
if not username:
return "You need to log in to submit a vote."
if username.startswith("Hello "):
username = username[6:]
data = {
"category": category,
"username": username,
"model_ids": models
}
response = requests.post(vote_url, json=data)
if response.status_code == 200:
return f"Vote '{models}' submitted successfully!"
else:
return f"Failed to vote: {response.text}"
def submit_model(category, customize_category, model_id):
if not model_id:
return "All fields are required!"
if not category or not customize_category:
return "Please choose a cateogry or customize your own category!"
selected_category = customize_category if customize_category else category
data = {
"model_id": model_id,
"categories": [selected_category]
}
response = requests.post(submit_models_url, json=data)
if response.status_code == 200:
return "Your request has been submitted successfully. We will notify you by email once processing is complete."
else:
return f"Failed to submit request: {response.text}"
def update_dropdown(customize_category, category):
if customize_category:
return "", gr.update(value="")
return category, gr.update()
theme = gr.themes.Soft()
with gr.Blocks(theme=theme) as app:
with gr.Tabs():
with gr.TabItem("Table"):
category = gr.Dropdown(
choices=["all", "Art & Design", "Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Education", "Health", "Law", "Engineering", "Coding", "Science", "Other"],
label="Select Category",
value="all"
)
initial_data = update_table("all")
table = gr.Dataframe(
headers=["Model", "Votes", "Categories"],
datatype=["markdown", "number", "str"],
value=initial_data,
col_count=(3, "fixed"),
)
app.load(lambda: update_table("all"), outputs=table)
category.change(update_table, inputs=category, outputs=table)
with gr.TabItem("Vote"):
username_text = gr.State(value="")
login_button = gr.LoginButton()
app.load(get_user, inputs=None, outputs=username_text)
category = gr.Dropdown(
choices=["Art & Design", "Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Education", "Health", "Law", "Engineering", "Coding", "Science", "Other"],
label="Select Category"
)
cbg = gr.CheckboxGroup(choices=[], label="Choose your options",interactive=True)
submit_button = gr.Button("Submit Vote")
submit_result = gr.Markdown()
category.change(get_vote_models, inputs=category, outputs=cbg)
submit_button.click(fn=submit_vote, inputs=[username_text, category, cbg], outputs=submit_result)
# with gr.TabItem("Submit Model"):
# category = gr.Dropdown(choices=["Art & Design", "Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Education", "Health", "Law", "Engineering", "Coding", "Science", "Other"], label="Select Category")
# customize_category = gr.Textbox(label="Customize category", placeholder="Can't find your category? Enter your own.")
# model_id = HuggingfaceHubSearch(label="Hub Model ID", placeholder="Search for model id on Huggingface", search_type="model")
# submit_model_button = gr.Button("Submit Model")
# submit_model_result = gr.Markdown()
# customize_category.change(fn=update_dropdown, inputs=[customize_category, category], outputs=[category])
# submit_model_button.click(fn=submit_model, inputs=[category, customize_category, model_id], outputs=submit_model_result)
app.launch(share=True) |