Spaces:
Sleeping
Sleeping
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import gradio as gr | |
| # Sample stats | |
| MODELS = { | |
| "llama" : {"passed": 14, "failed": 1, "skipped": 6, "error": 0}, | |
| "gemma3" : {"passed": 42, "failed": 6, "skipped": 12, "error": 0}, | |
| "csm" : {"passed": 0, "failed": 0, "skipped": 0, "error": 1}, | |
| } | |
| def plot_model_stats(model_name: str) -> plt.Figure: | |
| """Draws a pie chart of model's passed, failed, skipped, and error stats.""" | |
| model_stats = MODELS[model_name] | |
| # Define appropriate colors for each category | |
| colors = { | |
| 'passed': '#4CAF50', # Green | |
| 'failed': '#F44336', # Red | |
| 'skipped': '#FF9800', # Orange | |
| 'error': '#9C27B0' # Purple | |
| } | |
| # Filter out categories with 0 values for cleaner visualization | |
| filtered_stats = {k: v for k, v in model_stats.items() if v > 0} | |
| if not filtered_stats: | |
| # Handle case where all values are 0 - dark theme styling | |
| fig, ax = plt.subplots(figsize=(10, 8), facecolor='#000000') | |
| ax.set_facecolor('#000000') | |
| ax.text(0.5, 0.5, 'No test results available', | |
| horizontalalignment='center', verticalalignment='center', | |
| transform=ax.transAxes, fontsize=16, color='white') | |
| ax.set_xlim(0, 1) | |
| ax.set_ylim(0, 1) | |
| ax.axis('off') | |
| return fig | |
| # Create the pie chart with dark theme | |
| fig, ax = plt.subplots(figsize=(10, 8), facecolor='#000000') | |
| ax.set_facecolor('#000000') | |
| # Get colors for filtered categories | |
| chart_colors = [colors[category] for category in filtered_stats.keys()] | |
| # Create pie chart with custom styling for dark theme | |
| wedges, texts, autotexts = ax.pie( | |
| filtered_stats.values(), | |
| labels=filtered_stats.keys(), | |
| colors=chart_colors, | |
| autopct='%1.1f%%', | |
| startangle=90, | |
| explode=[0.08] * len(filtered_stats), # Slightly larger separation for dark theme | |
| shadow=False, # Remove shadow for cleaner dark look | |
| textprops={'fontsize': 13, 'weight': 'bold', 'color': 'white'} | |
| ) | |
| # Enhance text styling for dark theme | |
| for autotext in autotexts: | |
| autotext.set_color('white') | |
| autotext.set_weight('bold') | |
| autotext.set_fontsize(12) | |
| # Set title with white text | |
| total_tests = sum(model_stats.values()) | |
| ax.set_title(f'{model_name.upper()} Test Results\n({total_tests} total tests)', | |
| fontsize=18, weight='bold', pad=30, color='white') | |
| # Make the chart more minimalist | |
| plt.tight_layout() | |
| return fig | |
| # Custom CSS for dark theme | |
| dark_theme_css = """ | |
| /* Global dark theme */ | |
| .gradio-container { | |
| background-color: #000000 !important; | |
| color: white !important; | |
| } | |
| /* Remove borders from all components */ | |
| .gr-box, .gr-form, .gr-panel { | |
| border: none !important; | |
| background-color: #000000 !important; | |
| } | |
| /* Sidebar styling */ | |
| .sidebar { | |
| background-color: #111111 !important; | |
| border: none !important; | |
| padding: 20px !important; | |
| } | |
| /* Button styling */ | |
| .gr-button { | |
| background-color: #222222 !important; | |
| color: white !important; | |
| border: 1px solid #444444 !important; | |
| margin: 5px 0 !important; | |
| border-radius: 8px !important; | |
| transition: all 0.3s ease !important; | |
| } | |
| .gr-button:hover { | |
| background-color: #333333 !important; | |
| border-color: #666666 !important; | |
| } | |
| /* Plot container */ | |
| .plot-container { | |
| background-color: #000000 !important; | |
| border: none !important; | |
| } | |
| /* Text elements */ | |
| h1, h2, h3, p, .markdown { | |
| color: white !important; | |
| } | |
| /* Remove all borders globally */ | |
| * { | |
| border-color: transparent !important; | |
| } | |
| /* Main content area */ | |
| .main-content { | |
| background-color: #000000 !important; | |
| padding: 20px !important; | |
| } | |
| """ | |
| # Create the Gradio interface with sidebar and dark theme | |
| with gr.Blocks(title="Model Test Results Dashboard", css=dark_theme_css) as demo: | |
| with gr.Row(): | |
| # Sidebar for model selection | |
| with gr.Column(scale=1, elem_classes=["sidebar"]): | |
| gr.Markdown("# π― Models") | |
| gr.Markdown("Select a model to view test results") | |
| # Model selection buttons in sidebar | |
| model_buttons = [] | |
| for model_name in MODELS.keys(): | |
| btn = gr.Button( | |
| f"π {model_name.upper()}", | |
| variant="secondary", | |
| size="lg", | |
| elem_classes=["model-button"] | |
| ) | |
| model_buttons.append(btn) | |
| # Main content area | |
| with gr.Column(scale=4, elem_classes=["main-content"]): | |
| gr.Markdown("# π Test Results Dashboard") | |
| # Create the plot output | |
| plot_output = gr.Plot( | |
| label="", | |
| format="png", | |
| elem_classes=["plot-container"] | |
| ) | |
| # Set up click handlers for each button | |
| for i, (model_name, button) in enumerate(zip(MODELS.keys(), model_buttons)): | |
| button.click( | |
| fn=lambda name=model_name: plot_model_stats(name), | |
| outputs=plot_output | |
| ) | |
| # Initialize with the first model | |
| demo.load( | |
| fn=lambda: plot_model_stats(list(MODELS.keys())[0]), | |
| outputs=plot_output | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |