import gradio as gr import pandas as pd import plotly.express as px def plot_parameter_efficiency(df) -> gr.Plot: df = df[["Model", "Average", "# Parameters", "Multilingual"]] df = df[df["# Parameters"] != -1] fig = px.scatter( df, x="# Parameters", y="Average", color="Multilingual", hover_name="Model", hover_data={"Average": ":.1f", "# Parameters": ":.0f"}, labels={ "Average": "FilBench Score", "# Parameters": "Number of Parameters (B)", }, width=700, height=500, # Makes it square ) # Customize layout fig.update_layout( # Font sizes title_font_size=20, legend_title_font_size=16, legend_title_text="Model Type", legend_font_size=14, xaxis_title_font_size=16, yaxis_title_font_size=16, xaxis_tickfont_size=14, yaxis_tickfont_size=14, # Square aspect ratio autosize=False, # Axis limits and grid yaxis_range=[0, 100], plot_bgcolor="white", xaxis_showgrid=True, yaxis_showgrid=True, xaxis_gridcolor="lightgray", yaxis_gridcolor="lightgray", # Legend position legend=dict(yanchor="top", y=0.99, xanchor="left", x=0.01), ) # Marker size and style fig.update_traces( marker=dict(size=12, line=dict(width=1, color="DarkSlateGrey")), selector=dict(mode="markers"), ) return gr.Plot(fig, container=False) def plot_cost_efficiency(df) -> gr.Plot: MODEL_PRICES = { "gpt-4o-2024-08-06": 10, "gpt-4o-mini": 0.6, "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": 0.6, "meta-llama/Llama-4-Scout-17B-16E-Instruct": 0.3, "meta-llama/Llama-3.1-70B-Instruct": 0.28, "meta-llama/Llama-3.1-8B-Instruct": 0.03, "Qwen/Qwen2.5-72B-Instruct": 0.39, "Qwen/Qwen2.5-7B-Instruct": 0.1, "google/gemma-3-27b-it": 0.2, "google/gemma-2-27b-it": 0.3, "google/gemma-2-9b-it": 0.06, "mistralai/Ministral-8B-Instruct-2410": 0.1, "mistralai/Mixtral-8x22B-Instruct-v0.1": 1.2, "aisingapore/Llama-SEA-LION-v3-70B-IT": 0.28, "aisingapore/gemma2-9b-cpt-sea-lionv3-instruct": 0.06, "aisingapore/llama3.1-8b-cpt-sea-lionv3-instruct": 0.03, } df = df[["Model", "Average", "# Parameters", "Multilingual"]] price_df = ( pd.DataFrame([MODEL_PRICES]) .T.reset_index() .rename(columns={"index": "Model", 0: "Price-per-token"}) ) df = price_df.merge(df, on="Model", how="left") # df = df[df["# Parameters"] <= 399] fig = px.scatter( df, x="Price-per-token", y="Average", color="Multilingual", hover_name="Model", hover_data={"Price-per-token": ":.1f", "# Parameters": ":.0f"}, labels={ "Average": "FilBench Score", "Price-per-token": "Price-per-token ($/1M output tokens), log scale", }, width=700, height=500, # Makes it square log_x=True, ) # Customize layout fig.update_layout( # Font sizes title_font_size=20, legend_title_font_size=16, legend_title_text="Model Type", legend_font_size=14, xaxis_title_font_size=16, yaxis_title_font_size=16, xaxis_tickfont_size=14, yaxis_tickfont_size=14, # Square aspect ratio autosize=False, # Axis limits and grid yaxis_range=[0, 100], plot_bgcolor="white", xaxis_showgrid=True, yaxis_showgrid=True, xaxis_gridcolor="lightgray", yaxis_gridcolor="lightgray", # Legend position legend=dict(yanchor="top", y=0.99, xanchor="left", x=0.01), ) # Marker size and style fig.update_traces( marker=dict(size=12, line=dict(width=1, color="DarkSlateGrey")), selector=dict(mode="markers"), ) return gr.Plot(fig, container=False)