Spaces:
Running
Running
import re | |
import gradio as gr | |
import pandas as pd | |
import plotly | |
from pandas.api.types import is_numeric_dtype | |
from pipeline.config import QueriesConfig, LLMBoardConfig | |
from pipeline.models import models_costs | |
README = """ | |
<br/><h2>About this project</h2> | |
<p> | |
This project analyses different models and providers from the perspective of an application developer. | |
<br/> | |
Models are asked to summarize a text in different languages and using different output formats with following prompt: | |
</p> | |
<pre> | |
<code>{}</code> | |
</pre> | |
""" | |
summary_df: pd.DataFrame = pd.read_csv("data/2024-01-25 13:30:17.207984_summary.csv") | |
time_of_day_comparison_df = pd.read_csv("data/2024-01-25 13:30:20.959750_time_of_day_comparison.csv") | |
general_plots = pd.read_csv("data/2024-01-25 12:22:00.759762_general_plot.csv") | |
with open("data/time_of_day_plot.json", "r") as f: | |
time_of_day_plot = plotly.io.from_json(f.read()) | |
model_costs_df = models_costs() | |
searched_model_name = "" | |
collapse_languages = False | |
collapse_output_method = False | |
def filter_dataframes(input: str): | |
global searched_model_name | |
input = input.lower() | |
searched_model_name = input | |
return dataframes() | |
def collapse_languages_toggle(): | |
global collapse_languages | |
if collapse_languages: | |
collapse_languages = False | |
button_text = "Collapse languages" | |
else: | |
collapse_languages = True | |
button_text = "Un-collapse languages" | |
return dataframes()[0], button_text | |
def collapse_output_method_toggle(): | |
global collapse_output_method | |
if collapse_output_method: | |
collapse_output_method = False | |
button_text = "Collapse output method" | |
else: | |
collapse_output_method = True | |
button_text = "Un-collapse output method" | |
return dataframes()[0], button_text | |
def dataframes(): | |
global collapse_languages, collapse_output_method, searched_model_name, summary_df, time_of_day_comparison_df, model_costs_df | |
summary_df_columns = summary_df.columns.to_list() | |
group_columns = LLMBoardConfig().group_columns.copy() | |
if collapse_languages: | |
summary_df_columns.remove("language") | |
group_columns.remove("language") | |
if collapse_output_method: | |
summary_df_columns.remove("template_name") | |
group_columns.remove("template_name") | |
summary_df_processed = summary_df[summary_df_columns].groupby(by=group_columns).mean().reset_index() | |
return ( | |
dataframe_style(summary_df_processed[summary_df_processed.model.str.lower().str.contains(searched_model_name)]), | |
dataframe_style( | |
time_of_day_comparison_df[time_of_day_comparison_df.model.str.lower().str.contains(searched_model_name)] | |
), | |
dataframe_style(model_costs_df[model_costs_df.Model.str.lower().str.contains(searched_model_name)]), | |
) | |
def dataframe_style(df: pd.DataFrame): | |
df = df.copy() | |
df.columns = [snake_case_to_title(column) for column in df.columns] | |
column_formats = {} | |
for column in df.columns: | |
if is_numeric_dtype(df[column]): | |
if column == "execution_time": | |
column_formats[column] = "{:.4f}" | |
else: | |
column_formats[column] = "{:.2f}" | |
df = df.style.format(column_formats, na_rep="") | |
return df | |
def snake_case_to_title(text): | |
# Convert snake_case to title-case | |
words = re.split(r"_", text) | |
title_words = [word.capitalize() for word in words] | |
return " ".join(title_words) | |
filter_textbox = gr.Textbox(label="Model name part") | |
filter_button = gr.Button("Filter dataframes by model name") | |
collapse_languages_button = gr.Button("Collapse languages") | |
collapse_output_method_button = gr.Button("Collapse output method") | |
last_textbox = 0 | |
with gr.Blocks() as demo: | |
gr.HTML("<h1>LLM Board</h1>" + README.format(QueriesConfig().base_query_template)) | |
with gr.Row(): | |
filter_textbox.render() | |
filter_button.render() | |
with gr.Tab("Basic information"): | |
for index, row in general_plots.iterrows(): | |
gr.Plot(plotly.io.from_json(row["plot_json"]), label=row["description"]) | |
gr.Markdown(str(row["comment"])) | |
with gr.Tab("Output characteristics"): | |
with gr.Row(): | |
collapse_languages_button.render() | |
collapse_output_method_button.render() | |
summary_ui = gr.DataFrame(dataframe_style(summary_df), label="Statistics") | |
with gr.Tab("Preformance by time of the day"): | |
time_of_day_comparison_ui = gr.DataFrame(time_of_day_comparison_df, label="Time of day") | |
time_of_day_plot_ui = gr.Plot(time_of_day_plot, label="Time of the day plot") | |
with gr.Tab("Costs comparison"): | |
models_costs_ui = gr.DataFrame(dataframe_style(models_costs()), label="Costs comparison") | |
filter_button.click( | |
fn=filter_dataframes, | |
inputs=filter_textbox, | |
outputs=[summary_ui, time_of_day_comparison_ui, models_costs_ui], | |
api_name="filter_dataframes", | |
) | |
filter_textbox.submit( | |
fn=filter_dataframes, | |
inputs=filter_textbox, | |
outputs=[summary_ui, time_of_day_comparison_ui, models_costs_ui], | |
api_name="filter_dataframes", | |
) | |
collapse_languages_button.click( | |
fn=collapse_languages_toggle, | |
outputs=[summary_ui, collapse_languages_button], | |
api_name="collapse_languages_toggle", | |
) | |
collapse_output_method_button.click( | |
fn=collapse_output_method_toggle, | |
outputs=[summary_ui, collapse_output_method_button], | |
api_name="collapse_output_method_toggle", | |
) | |
demo.launch() | |