File size: 6,493 Bytes
d946cfe a33ace4 63d7feb a52b9c1 0a5eed6 63d7feb d946cfe c6092c0 d946cfe bebead5 0a5eed6 a788ea0 d946cfe f578a9f d946cfe f578a9f d946cfe f578a9f a33ace4 a6368da d946cfe a33ace4 a6368da f578a9f d946cfe f578a9f a52b9c1 d946cfe a52b9c1 d946cfe a52b9c1 a33ace4 a788ea0 bebead5 a52b9c1 bebead5 c6092c0 bebead5 a33ace4 d946cfe bebead5 a33ace4 a6368da d946cfe a33ace4 bebead5 a33ace4 d946cfe a33ace4 0a5eed6 a52b9c1 0a5eed6 a33ace4 f578a9f a33ace4 f578a9f a33ace4 f578a9f 0a5eed6 a33ace4 f578a9f a6368da a33ace4 0a5eed6 a52b9c1 0a5eed6 a33ace4 a52b9c1 0a5eed6 a52b9c1 7786c4d d946cfe f578a9f d946cfe f578a9f a6368da a52b9c1 a33ace4 a6368da 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 |
import os
import gradio as gr
import pandas as pd
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_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(category, models):
if not category or not models:
return "All fields are required!"
data = {
"category": category,
"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"),
height=600
)
app.load(lambda: update_table("all"), outputs=table)
category.change(update_table, inputs=category, outputs=table)
with gr.TabItem("Vote"):
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=[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 = gr.Textbox(label="Hub Model ID", placeholder="Submit model id")
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) |