|
import gradio as gr |
|
import pandas as pd |
|
|
|
import requests |
|
|
|
def update_table(category): |
|
|
|
url = "https://leaderboard.nexa4ai.com/model/get-ranking-by-category" |
|
url_with_params = f"{url}?category={category}" |
|
|
|
print("Getting model table with URL:", url_with_params) |
|
response = requests.get(url_with_params) |
|
|
|
if response.status_code == 200: |
|
ranking_data = response.json()["ranking"] |
|
|
|
api_model_data = { |
|
"Model": [item["model_id"] for item in ranking_data], |
|
"Votes": [item["votes"] for item in ranking_data], |
|
"Categories": [category] * len(ranking_data) |
|
} |
|
api_df = pd.DataFrame(api_model_data) |
|
else: |
|
print(f"Failed to submit request: {response.text}") |
|
api_df = pd.DataFrame() |
|
return api_df |
|
|
|
def get_user(profile: gr.OAuthProfile | None) -> str: |
|
if profile is None: |
|
return "" |
|
return profile.username |
|
|
|
def get_vote_models(category): |
|
print (category) |
|
if not category: |
|
return [] |
|
|
|
url = "https://leaderboard.nexa4ai.com/model/get-models-by-category" |
|
url_with_params = f"{url}?category={category}" |
|
|
|
print("Getting models with URL:", url_with_params) |
|
response = requests.get(url_with_params) |
|
|
|
if response.status_code == 200: |
|
models_data = response.json() |
|
models.choices = models_data |
|
print(f"models_data: {models_data}") |
|
print(f"models.choices: {models.choices}") |
|
return models_data |
|
else: |
|
print(f"Failed to get models: {response.text}") |
|
return [] |
|
|
|
|
|
|
|
def submit_vote(username, category, model_ids): |
|
if not category or not model_ids: |
|
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:] |
|
|
|
url = "https://leaderboard.nexa4ai.com/model/vote" |
|
params = { |
|
"category": category, |
|
"username": username |
|
} |
|
data = { |
|
"model_ids": model_ids |
|
} |
|
|
|
print("Submitting vote with payload:", data) |
|
response = requests.post(url, params=params, json=data) |
|
|
|
if response.status_code == 200: |
|
return f"Vote '{model_ids}' submitted successfully!" |
|
else: |
|
return f"Failed to vote: {response.text}" |
|
|
|
|
|
def submit_model(category, model_id): |
|
if not category or not model_id: |
|
return "All fields are required!" |
|
|
|
url = "https://leaderboard.nexa4ai.com/" |
|
data = { |
|
"category": category, |
|
"model_id": model_id |
|
} |
|
|
|
print("Submitting model with payload:", data) |
|
response = requests.post(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}" |
|
|
|
|
|
with gr.Blocks() as app: |
|
with gr.Tabs(): |
|
with gr.TabItem("Table"): |
|
category = gr.Dropdown( |
|
choices=["all", "Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Health", "Law", "Engineering", "Other"], |
|
label="Select Category", |
|
value="all" |
|
) |
|
|
|
initial_data = update_table("all") |
|
table = gr.Dataframe( |
|
headers=["Model", "Votes", "Categories"], |
|
datatype=["str", "number", "str"], |
|
value=initial_data, |
|
col_count=(3, "fixed"), |
|
) |
|
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=["Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Health", "Law", "Engineering", "Other"], |
|
label="Select Category" |
|
) |
|
|
|
models = gr.CheckboxGroup(choices=[], label="Choose your options") |
|
submit_button = gr.Button("Submit Vote") |
|
submit_result = gr.Label() |
|
|
|
category.change(get_vote_models, inputs=[category], outputs=[models]) |
|
|
|
submit_button.click(fn=submit_vote, inputs=[username_text, category, models], outputs=submit_result) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.launch() |