Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 7,064 Bytes
116bc60 0819278 c865db2 0819278 116bc60 c865db2 116bc60 0819278 116bc60 0819278 c865db2 0819278 c865db2 0819278 116bc60 c865db2 0819278 116bc60 0819278 c865db2 0819278 116bc60 0819278 c865db2 0819278 c865db2 0819278 116bc60 0819278 116bc60 0819278 116bc60 c865db2 0819278 116bc60 0819278 c865db2 0819278 c865db2 0819278 116bc60 0819278 c865db2 0819278 116bc60 0819278 116bc60 0819278 c865db2 116bc60 0819278 116bc60 c865db2 0819278 116bc60 |
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 164 165 166 167 168 169 170 171 |
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"
submit_category_url = f"{leaderboard_url}/model/submit-category"
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 category or customize your own category!"
selected_category = category
if customize_category:
category_data = {
"category": customize_category
}
response = requests.post(submit_category_url, json=category_data)
if response.status_code != 200:
return f"Failed to submit category: {response.text}"
selected_category = customize_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) |