File size: 5,137 Bytes
116bc60
0819278
 
 
 
 
116bc60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05c75c8
0819278
116bc60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0819278
 
116bc60
 
 
 
 
 
0819278
 
 
 
 
 
 
116bc60
 
0819278
 
116bc60
0819278
 
 
 
 
 
 
116bc60
 
 
0819278
 
 
116bc60
0819278
116bc60
0819278
 
116bc60
0819278
116bc60
 
0819278
116bc60
0819278
 
 
 
116bc60
 
 
 
0819278
116bc60
0819278
 
116bc60
 
0819278
116bc60
 
 
 
 
 
0819278
 
116bc60
 
0819278
116bc60
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
import os
import gradio as gr
import pandas as pd
from gradio_huggingfacehub_search import HuggingfaceHubSearch
import requests

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 update_table(category): 
    url_with_params = f"{get_ranking_url}?category={category}"
    
    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": [item["categories"] for item in ranking_data] if category == "all" else [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):
    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, model_id):
    if not category or not model_id:
        return "All fields are required!"
    
    data = {
        "model_id": model_id,
        "categories": [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}"


theme = gr.themes.Soft()

with gr.Blocks(theme=theme) 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"
            )

            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=["Biology", "Physics", "Business", "Chemistry", "Economics", "Philosophy", "History", "Culture", "Computer Science", "Math", "Health", "Law", "Engineering", "Other"], label="Select Category")
            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()
            submit_model_button.click(fn=submit_model, inputs=[category, model_id], outputs=submit_model_result)

app.launch(share=True)