import gradio as gr from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns import pandas as pd # Sample data data = { "Model Name": ["SecModel A", "SecModel B", "SecModel C"], "Version": ["1.0", "2.1", "1.3"], "Detection Accuracy (%)": [98.5, 97.2, 96.8], "False Positive Rate (%)": [0.5, 0.7, 0.6], "Processing Time (ms)": [120, 150, 110], "Model Size (MB)": [250, 300, 275], } df = pd.DataFrame(data) # Define columns columns = [ {"name": "Model Name", "type": "text", "displayed_by_default": True}, {"name": "Version", "type": "text", "displayed_by_default": True}, {"name": "Detection Accuracy (%)", "type": "number", "displayed_by_default": True}, {"name": "False Positive Rate (%)", "type": "number", "displayed_by_default": True}, {"name": "Processing Time (ms)", "type": "number", "displayed_by_default": True}, {"name": "Model Size (MB)", "type": "number", "displayed_by_default": True}, ] # Initialize leaderboard leaderboard = Leaderboard( value=df, datatype=[col["type"] for col in columns], select_columns=SelectColumns( default_selection=[col["name"] for col in columns if col["displayed_by_default"]], label="Select Columns to Display:", ), search_columns=["Model Name", "Version"], filter_columns=[ ColumnFilter("Detection Accuracy (%)", type="slider", min=90, max=100, label="Accuracy Range"), ColumnFilter("False Positive Rate (%)", type="slider", min=0, max=5, label="False Positive Rate Range"), ColumnFilter("Processing Time (ms)", type="slider", min=0, max=200, label="Processing Time Range"), ColumnFilter("Model Size (MB)", type="slider", min=0, max=500, label="Model Size Range"), ], interactive=False, ) # Gradio interface with gr.Blocks() as demo: gr.Markdown("# Cybersecurity Models Leaderboard") leaderboard.render() demo.launch()