|
import pandas as pd |
|
import gradio as gr |
|
import os |
|
from gradio_rangeslider import RangeSlider |
|
import calendar |
|
import datetime |
|
import numpy as np |
|
from huggingface_hub import HfApi |
|
from apscheduler.schedulers.background import BackgroundScheduler |
|
|
|
from src.filter_utils import filter, filter_cols |
|
from src.process_data import merge_data |
|
import assets.text_content as tc |
|
|
|
""" |
|
CONSTANTS |
|
""" |
|
|
|
TIME = 86400 |
|
|
|
""" |
|
AUTO RESTART HF SPACE |
|
""" |
|
HF_TOKEN = os.environ.get("H4_TOKEN", None) |
|
api = HfApi() |
|
|
|
def restart_space(): |
|
api.restart_space(repo_id=tc.HF_REPO, token=HF_TOKEN) |
|
|
|
|
|
|
|
|
|
|
|
text_leaderboard = merge_data() |
|
text_leaderboard = text_leaderboard.sort_values(by=tc.CLEMSCORE, ascending=False) |
|
|
|
|
|
text_leaderboard[tc.LATENCY] = text_leaderboard[tc.LATENCY].round(1) |
|
text_leaderboard[tc.CLEMSCORE] = text_leaderboard[tc.CLEMSCORE].round(1) |
|
|
|
open_weight_df = text_leaderboard[text_leaderboard[tc.OPEN_WEIGHT] == True] |
|
if not open_weight_df.empty: |
|
|
|
params = open_weight_df[tc.PARAMS].dropna() |
|
max_parameter_size = params.max() if not params.empty else 0 |
|
|
|
|
|
short_leaderboard = filter_cols(text_leaderboard) |
|
|
|
|
|
|
|
langs = [] |
|
licenses = [] |
|
ip_prices = [] |
|
op_prices = [] |
|
latencies = [] |
|
parameters = [] |
|
contexts = [] |
|
dates = [] |
|
|
|
for i in range(len(text_leaderboard)): |
|
lang_splits = text_leaderboard.iloc[i][tc.LANGS].split(',') |
|
lang_splits = [s.strip() for s in lang_splits] |
|
langs += lang_splits |
|
license_name = text_leaderboard.iloc[i][tc.LICENSE_NAME] |
|
|
|
licenses.append(license_name) |
|
ip_prices.append(text_leaderboard.iloc[i][tc.INPUT]) |
|
op_prices.append(text_leaderboard.iloc[i][tc.OUTPUT]) |
|
latencies.append(text_leaderboard.iloc[i][tc.LATENCY]) |
|
parameters.append(text_leaderboard.iloc[i][tc.PARAMS]) |
|
contexts.append(text_leaderboard.iloc[i][tc.CONTEXT]) |
|
dates.append(text_leaderboard.iloc[i][tc.RELEASE_DATE]) |
|
|
|
|
|
langs = list(set(langs)) |
|
langs.sort() |
|
|
|
licenses = list(set(licenses)) |
|
licenses.sort() |
|
|
|
max_input_price = max(ip_prices) |
|
max_output_price = max(op_prices) |
|
max_latency = text_leaderboard[tc.LATENCY].max().round(3) |
|
|
|
min_parameters = 0 if pd.isna(min(parameters)) else min(parameters) |
|
max_parameter = max_parameter_size |
|
parameter_step = 1 |
|
|
|
min_context = min(contexts) |
|
max_context = max(contexts) |
|
context_step = 8 |
|
|
|
min_date = min(dates) |
|
max_date = max(dates) |
|
|
|
|
|
today = datetime.date.today() |
|
end_year = today.year |
|
start_year = tc.START_YEAR |
|
|
|
YEARS = list(range(int(start_year), int(end_year)+1)) |
|
YEARS = [str(y) for y in YEARS] |
|
MONTHS = list(calendar.month_name[1:]) |
|
|
|
TITLE = tc.TITLE |
|
|
|
llm_calc_app = gr.Blocks() |
|
with llm_calc_app: |
|
|
|
gr.HTML(TITLE) |
|
|
|
with gr.Row(): |
|
|
|
|
|
|
|
|
|
|
|
with gr.Column(scale=2): |
|
|
|
with gr.Row(): |
|
lang_dropdown = gr.Dropdown( |
|
choices=langs, |
|
value=[], |
|
multiselect=True, |
|
label="Languages π£οΈ" |
|
) |
|
|
|
|
|
|
|
|
|
with gr.Row(): |
|
start_year_dropdown = gr.Dropdown( |
|
choices = YEARS, |
|
value=[], |
|
label="Model Release - Year ποΈ" |
|
) |
|
start_month_dropdown = gr.Dropdown( |
|
choices = MONTHS, |
|
value=[], |
|
label="Month π" |
|
) |
|
|
|
end_year_dropdown = gr.Dropdown( |
|
choices = YEARS, |
|
value=[], |
|
label="End - Year ποΈ" |
|
) |
|
end_month_dropdown = gr.Dropdown( |
|
choices = MONTHS, |
|
value=[], |
|
label="Month π" |
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
|
input_pricing_slider = RangeSlider( |
|
minimum=0, |
|
maximum=max_input_price, |
|
value=(0, max_input_price), |
|
label="π²/1M input tokens", |
|
elem_id="double-slider-3" |
|
) |
|
|
|
output_pricing_slider = RangeSlider( |
|
minimum=0, |
|
maximum=max_output_price, |
|
value=(0, max_output_price), |
|
label="π²/1M output tokens", |
|
elem_id="double-slider-4" |
|
) |
|
|
|
|
|
with gr.Row(): |
|
license_checkbox = gr.CheckboxGroup( |
|
choices=licenses, |
|
value=licenses, |
|
label="License π‘οΈ", |
|
) |
|
|
|
|
|
|
|
|
|
with gr.Column(scale=1): |
|
|
|
|
|
with gr.Row(): |
|
parameter_slider = RangeSlider( |
|
minimum=0, |
|
maximum=max_parameter, |
|
label=f"Parameters π {int(min_parameters)}B - {int(max_parameter)}B+", |
|
elem_id="double-slider-1", |
|
step=parameter_step |
|
) |
|
|
|
|
|
|
|
|
|
with gr.Row(): |
|
context_slider = RangeSlider( |
|
minimum=0, |
|
maximum=max_context, |
|
label="Context (k) π", |
|
elem_id="double-slider-2", |
|
step=context_step |
|
) |
|
|
|
|
|
with gr.Row(): |
|
multimodal_checkbox = gr.CheckboxGroup( |
|
choices=[tc.TEXT, tc.SINGLE_IMG, tc.MULT_IMG, tc.AUDIO, tc.VIDEO], |
|
value=[], |
|
label="Modalities ππ·π§π¬", |
|
) |
|
|
|
|
|
|
|
with gr.Row(): |
|
open_weight_checkbox = gr.CheckboxGroup( |
|
choices=[tc.OPEN, tc.COMM], |
|
value=[tc.OPEN, tc.COMM], |
|
label="Model Type π πΌ", |
|
) |
|
|
|
|
|
|
|
with gr.Row(): |
|
""" |
|
Main Leaderboard Row |
|
""" |
|
|
|
leaderboard_table = gr.Dataframe( |
|
value=short_leaderboard, |
|
elem_id="text-leaderboard-table", |
|
interactive=False, |
|
visible=True, |
|
datatype=['str', 'number', 'number', 'date', 'number', 'number', 'number', 'number', 'markdown'] |
|
) |
|
|
|
dummy_leaderboard_table = gr.Dataframe( |
|
value=text_leaderboard, |
|
elem_id="dummy-leaderboard-table", |
|
interactive=False, |
|
visible=False |
|
) |
|
|
|
lang_dropdown.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
parameter_slider.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
input_pricing_slider.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
output_pricing_slider.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
multimodal_checkbox.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
open_weight_checkbox.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
context_slider.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
start_year_dropdown.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
start_month_dropdown.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
end_year_dropdown.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
end_month_dropdown.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
license_checkbox.change( |
|
filter, |
|
[dummy_leaderboard_table, lang_dropdown, parameter_slider, |
|
input_pricing_slider, output_pricing_slider, multimodal_checkbox, |
|
context_slider, open_weight_checkbox, start_year_dropdown, start_month_dropdown, end_year_dropdown, end_month_dropdown, license_checkbox], |
|
[leaderboard_table], |
|
queue=True |
|
) |
|
|
|
llm_calc_app.load() |
|
llm_calc_app.queue() |
|
|
|
|
|
scheduler = BackgroundScheduler() |
|
scheduler.add_job(restart_space, 'interval', seconds=TIME) |
|
scheduler.start() |
|
|
|
|
|
print(datetime.datetime.now()) |
|
print(f"Scheduled restart at {datetime.datetime.now() + datetime.timedelta(seconds=TIME)}") |
|
|
|
llm_calc_app.launch() |
|
|